No FAQs found.
When changing CAN-mode to UAVCAN (DroneCAN) the VESC CAN protocol will be disabled. This means that VESC Tool can’t be used to configure and monitor ESCs or other VESC devices on the CAN-bus at the same time as UAVCAN is enabled. This is especially a problem on the Maxim, Pronto and Duet controllers as they access the STM32 using the ESP32 using VESC CAN. The later firmwares will therefore switch back to VESC CAN on reboot.
Earlier firmwares will not switch back on reboot, meaning that it is possible to lock yourself out from them (Maxim, Pronto and Duet) when changing to UAVCAN. If you have locked yourself out you can either try connecting using the UART-port with an USB-to-UART adapter and 115200 baudrate or you can use USB to reflash the STM32.
So, how do I use UAVCAN on Maxim, Pronto or Duet? Unfortunately we don’t have a good solution for that now. As it is now UAVCAN is not widely used among our customers (and VESC-users in general), but if it becomes more popular we will look into improving UAVCAN-support in the firmware. Pull-requests on github are always welcome of course!
The controllers have been tested and can reach the stated values for continuous and burst for a short period without additional cooling. As the current is regulated down as the controllers heat up, the controllers protect themselves from damage due to overheating. However, in order to maintain the stated continuous current and to maximize the burst current duration additional cooling is required. Especially the continuous current that can be maintained will be significantly lower without an additional heatsink or water cooling block.
Yes. The VESC Dash16L display UI can be customized. The UI is source code is in a VESC Package that can be downloaded here:
https://github.com/vedderb/vesc_pkg/tree/main/dash16
Further documentation for LispBM scripting can be found here:
https://github.com/vedderb/bldc/blob/master/lispBM/README.md
The files in the package can be edited and adapted. Uploading the file main.lisp will load the update code.
Yes. The Dash35B display UI can be customized. The UI is source code is in a VESC Package that can be downloaded here:
https://github.com/vedderb/vesc_pkg/tree/main/dash35b
Further documentation for LispBM scripting can be found here:
https://github.com/vedderb/bldc/blob/master/lispBM/README.md
The files in the package can be edited and adapted. Uploading the file main.lisp will load the update code.
Yes, we do. Please send the details of your project and institution name to info@vesclabs.com, and our team will review your request.
Yes, we offer a discount for all customers when ordering 3+ and 10+ units which can be seen on selected products.
For order quantities over 25 units please follow the instructions on the request approval for a wholesale account page.
Once your account has been approved for wholesale, go to wholesale products which will show show the updated prices and lead times.
Yes, we do. Please contact us at info@vesclabs.com with your project requirements and specifications, and our team will assist you with tailored OEM or custom solutions.
Our partner Oliver, also known as Electricfox, offers paid consulting services for BMS and motor controller integration, setup, tuning and load testing. His website is
At the bottom of the page you can find different options to contact Oliver
Our dual motor controllers only support Field Oriented Control (FOC). Direct Current (DC) motors or trapezoidal commutation (BLDC) is not supported at the moment.
On the Maxim and Pronto controllers the motor sensors and UART share the same pins, so the UART app must be disabled when using sensors. This will affect the Hall 2 input as that is where UART TX is. In Firmware 7+ this should be done automatically, but on older firmware the UART-app must be disabled manually.
From Firmware 7.00 our controllers can be factory reset by connecting the SWCLK and Hall 2 together and booting the controller. This will restore the motor configuration, app configuration and erase all scripts. This can be useful if you have locked yourself out by e.g. setting an invalid CAN configuration or if you have a script that causes a crash or boot loop.
Note that controllers that are accessed using an VESC Express device (such as the Duet, Maxim and Maxim+) also need the ESP configuration to be restored. This can be done on the VESC Express tab in VESC Tool.
- Press “Read Default”
- Press “Write”

They are in the VESC Package for the Dash35B, which can be downloaded from here:
https://github.com/vedderb/vesc_pkg/tree/main/dash35b
Further documentation for LispBM scripting can be found here:
https://github.com/vedderb/bldc/blob/master/lispBM/README.md
1. Profiles and Power Modes
If you’re not using a display, profiles can be configured and switched most easily through the VESC Tool mobile application.
You can create as many profiles as you want and configure each profile independently. For each profile you can set:
- Forward speed limit
- Reverse speed limit
- Motor current scaling (acceleration)
- Brake current scaling
The current scaling is applied as a percentage of the controller’s configured motor current. For example, if the controller is configured for 200A motor current and a profile uses a 50% current scale, the controller will allow up to 100A motor current while that profile is active.
This allows you to create profiles with different acceleration characteristics, power delivery and top speeds.
A typical setup could be:
- Legal road mode: 25 km/h speed limit with reduced current scaling
- Daily riding mode: moderate speed limit and moderate current scaling
- Performance mode: full speed and 100% current scaling
When a profile is selected, the new settings are applied immediately.
2. Speed Limiting and Legal Mode
Switching between a legal mode and an unrestricted mode is very straightforward.
The simplest approach is to create separate profiles with different speed limits and current scales. Selecting a profile instantly applies the corresponding limits.
For example:
- Legal Mode: 25 km/h, reduced acceleration
- Daily Mode: moderate speed and acceleration
- Performance Mode: unrestricted speed and full acceleration
Profiles can be selected directly from the VESC Tool mobile application while connected to the scooter.
To access the profiles menu in the mobile application, simply swipe across from the real-time data screen. Once a profile has been selected, you can swipe back to return to the live telemetry page.
For a faster and more convenient method, I would recommend the VESC Dash35B display.
The Dash35B includes dedicated “+” and “-” buttons which can be used to instantly switch between drive modes without needing to open the mobile application.
The display also provides clear visual confirmation of which mode is currently active.
3. Mobile Application Connectivity
The VESC Tool mobile application can remain connected to the scooter via Bluetooth while riding.
While connected you can monitor real-time information including:
- Vehicle speed
- Battery voltage
- Battery current
- Motor current
- Power output
- Controller temperature
- Motor temperature
- Energy consumption and other telemetry data
Profile changes can also be made through the app while connected, with changes taking effect immediately.
Bluetooth connectivity is generally stable during normal riding provided the phone remains within normal Bluetooth range.
It is also worth noting that all of the profile settings and controller configuration options available in the VESC Tool mobile application are also available in the VESC Tool desktop application. The desktop version is generally preferred during initial setup, tuning and advanced configuration due to the larger screen and easier access to all settings. However, for convenience while out riding, the mobile application is recommended as it provides the same functionality over Bluetooth while allowing live monitoring and profile changes directly from your phone.
4. Display Functionality
The Dash35B display has been specifically developed to provide a better riding experience than using a phone while travelling. While the VESC Tool mobile application is excellent for monitoring data, diagnostics and changing settings, the display provides a safer and more convenient interface for everyday riding.
Benefits include:
- Always-visible speed display
- Battery information
- Active drive mode indication
- Instant drive mode switching via dedicated buttons
- No need to remove your phone while riding
- Easier operation while wearing gloves
The Dash35B currently includes the following preconfigured drive modes:
Reverse:
- Maximum speed: 10 km/h (backwards)
- Current scale: 0.4 (40% of configured current)
Neutral:
- Throttle disabled
Mode 1:
- Maximum speed: 26 km/h
- Current scale: 0.5 (50% of configured current)
Mode 2:
- Maximum speed: 46 km/h
- Current scale: 0.6 (60% of configured current)
Mode 3:
- Maximum speed: 200 km/h (This value is intentionally set much higher than the vehicle is capable of achieving, effectively removing the speed limit. The actual top speed will still be physical limitations of the vehicle)
- Current scale: 1.0 (100% of configured current)
These modes can be changed instantly using the display’s buttons.
The display profiles are currently part of the display package installed on the VESC controller. If you wish to customise them, this can be done by connecting to the VESC controller using VESC Tool and navigating to:
App Settings → LispBM Scripting
From there:
- Press Read
- Navigate to approximately line 94
- Modify the values for:
- l-current-max-scale
- l-min-speed
Press Upload to save the updated configuration to the controller
This allows the drive modes to be fully customised to suit your application.
In the next release of the Dash35B display packages, the drive modes will be configurable directly from the display itself, eliminating the need to edit the LispBM script manually.
The Maxim and Pronto controllers have the UART-pins shared with the hall sensor pins, so when using sensors the reverse and cruise control functions in the ADC app cannot be used at the same time as hall sensors or encoders. It is possible to use a simple lisp-script to simulate these functions with other pins depending on which pins you have available. The following example activates the reverse-button when the ACD2-input goes above 1V.
(app-adc-detach 2 1)
(loopwhile t {
(app-adc-override 2 (if (> (get-adc 1) 1.0) 1.0 0.0))
(sleep 0.01)
})
You can read more about those extensions here:
https://github.com/vedderb/bldc/blob/master/lispBM/README.md#app-adc-detach
https://github.com/vedderb/bldc/blob/master/lispBM/README.md#app-adc-override
You can recover the VESC Dash 16L by connecting a USB cable to the 6-pin connector as shown below:

Open VESC Tool and follow the steps below:
- Go to ESP Programmer
- Refresh the port until you see the ESP32 of the display
- Press Connect
- Select Dash16
- Erase LispBM
- Flash using USB
- Disconnect
Then you should be able to connect to it from the welcome and wizard page.
After connecting follow the steps below:
- Go to VESC Packages
- Update archive
- Select Dash16
- Install
Now it should be restored
You can recover the Dash 35B by connecting a USB cable to the 3-pin button connector and 5V to the 5-pin connector as shown below:

Open VESC Tool and follow the steps below:
- Go to ESP Programmer
- Refresh the port until you see the ESP32 of the display
- Press Connect
- Select VDISP 900
- Erase LispBM
- Flash using USB
- Disconnect

Then you should be able to connect to it from the welcome and wizard page.
After connecting follow the steps below:
- Go to VESC Packages
- Update archive
- Select Dash35B
- Install

Now it should be restored
If you need additional data fields that are not currently available on the display, you must update the “Dash35B ESC” script. This is where new variables or telemetry items are defined and sent to the display.
Further documentation for LispBM scripting can be found here:
https://github.com/vedderb/bldc/blob/master/lispBM/README.md
Yes, the mount can be removed by unscrewing two bolts which hold it in place.
Our Maxim and Pronto controllers have a regulator that needs an enable-signal from the MCU to stay on, even if the enable-pin on the 39-pin connector is powered. So if the firmware becomes corrupted they won’t be able to stay on long enough to flash new firmware using the SWD pins. This corruption can happen if you flash the wrong firmware file manually or remove power directly after a firmware upload has finished. Usually the blue LED will repeatedly flash then as the enable-pin only powers on the regulator briefly but it never fully boots.
⚠️ Note Firmware prior to 7.00 would sometimes not boot fast enough to enable the regulator, resulting in the device shutting down even with correct firmware. This was mostly a problem on the pronto and got fixed in firmware 7.00. So if you have a blue LED flashing and the controller not booting, start by removing all external loads on the 5V and 12V outputs and see if it boots then. If it does, upgrade the firmware to 7.00 and see if the problem persists. This should be done before trying any of this.
⚠️ Note the Maxim+ has a different regulator and will stay on while the enable-pin is powered, even if it has no firmware. So if the blue LED is flashing on your Maxim+ it is likely to be some different problem.
To fix corrupt firmware, the Maxim and Pronto can be powered from a 12V current-limited (0.5A) power supply through the 12V AUX-output while using an SWD-programmer to upload the correct firmware as shown in this image

⚠️ Do not power the controller from an external supply or battery at the same time!
The correct firmware for your device can be found in the firmware archive
https://github.com/vedderb/vesc_fw_archive
If you have any questions about this procedure please contact us. Also, if you are uncomfortable doing any of this you can send your Pronto or Maxim back to us and we will do it free of charge.
The shutdown behavior can be configured using the shutdown-mode in the app settings. By default it is set to ALWAYS ON, which makes the controller stay on until power is removed. Changing the shutdown mode to ALWAYS OFF means that it will turn off after disconnecting the EN-pin.
For the CAN-bus to work all devices on it need to have the same baudrate and different CAN IDs. If both of those conditions are not fulfilled the CAN-bus will be unreliable and often not work at all.
By default all our devices have CAN baudrate 500 kbps. The default ID is are
- Nanolog, RMCore, WCore, Link: 2
- BMS: 3
- Display: 4
- ESC: random, but not 2, 3 or 4
Due to the random ESC ID you need to check for collisions and change ID accordingly before connecting them together on the CAN-bus
Note
Changing CAN baudrate has to be done on each device individually without having other devices connected over CAN as having different baudrates on the same bus will make communication on that bus stop working completely. VESC Tool has a function that allows changing CAN baudrate on all devices at once; it can be found at the top of the CAN Tools page. Once the update is done using this method it will be stored in the non-volatile settings on each device.
Note
All our devices remember the CAN ID and CAN baudrate across firmware updates. This allows reaching all devices on the CAN-bus on the same baudrate and ID as before even after a firmware update.
Note on motor controllers with an ESP32
Our motor controllers that have an integrated ESP32 (Maxim, Maxim+, Pronto, Duet) have the USB and wireless interfaces connected to the ESP32. When changing baudrate on the motor controller it will no longer be reachable on the CAN-bus from the ESP32. To resolve this, the VESC Express page can be used to change to the same baudrate on the ESP32 – this should make the motor controller appear on the CAN-bus again. The same is true for overlapping IDs – if the motor controller ID is changed to the same as on the ESP32, the ID of the ESP32 can be changed in the VESC Express page to a different one to make the motor controller appear on the CAN-bus again.
Most likely the BMS has entered sleep-mode. Sleep mode is entered when:
- Power is off
- Nothing is connected over USB, Bluetooth or Wifi
- Not balancing
- Not charging
- Block sleep is disabled in the settings
Notice that block sleep is enabled by default, but it will disable itself after a few hours to avoid draining the battery.
In sleep-mode it is not possible to connect to the BMS over USB, Bluetooth or Wifi. To leave sleep mode you can:
- Enable the power output by bridging EN and ENs on the comm-port
- Connect a charger
It mainly depends on what the battery cells can handle rather than the BMS. The BMS itself can take the same regen current as output current as it goes through the main power path.
Through the charging port it can only go up to the specified charge current.
Charge current, battery current, and battery regeneration current can all be individually configured using VESC Tool to suit your specific application, hardware or performance requirements.
The regeneration (or braking) current can reach the same continuous and burst current ratings as the controller. However, the actual limit depends on your BMS and, more specifically, your battery cells, which determine how much current can safely flow back into the battery.
Additionally, the values for motor current, motor brake current, battery current, and battery regeneration current can all be individually configured using VESC Tool to suit your specific application, hardware or performance requirements.
The motor controller must have a package installed called “Dash ESC”. This script sends data from the ESC on the CAN-bus to be read and presented by the VESC Dash16L or Dash 35B.
The VESC Dash 16L comes with a preinstalled UI script called “Dash16”. This script controls the on screen layout, how the existing data is presented and how the buttons operate.
The Dash35B comes with a preinstalled UI script called “Dash35B”. This script controls the on screen layout, how the existing data is presented and how the buttons operate.
You can find CAN-bus documentation here:
https://github.com/vedderb/bldc/blob/master/documentation/comm_can.md
Further documentation for LispBM scripting can be found here:
https://github.com/vedderb/bldc/blob/master/lispBM/README.md
The documentation for LispBM scripting can be found here:
https://github.com/vedderb/bldc/blob/master/lispBM/README.md
All Pronto-controllers shipped until 2026-03-15 have a hardware bug for the ABI encoder input, where the A and I signals are swapped. This can be resolved by swapping the A and I cables on the encoder. If the PCB is green it has this bug. PCBs shipped from late March and onward are black and do not have this bug – on them the ABI encoder can be connected normally.
The controller current rating is for the phase current and the input current will always be lower than the phase current. You can read about that in our article here:
However, if you are driving a low inductance motor close to full duty cycle it is possible that the input current will exceed the rating of the fuse and blow it, especially if you are using liquid cooling. In that case you have to use an external fuse and bypass the fuse on the controller with a bus bar. Unfortunately we have not found fuses in this size rated for more than 350A.

