Skip to content Link Search Menu Expand Document
ModalAI DOCS
Store

VOXL ESC Frequently Asked Questions

Table of contents

  1. Important — Please Review
    1. Using the latest ESC firmware
    2. ESC params shipped with new ESC boards
    3. voxl-esc tools
  2. Unboxing and testing new standalone ESC
  3. Q/A
    1. Q: How do I identify the hardware and software version of my ModalAI ESC?
    2. Q: What behavior should I expect when I power on my ESC?
    3. Q: What is the behavior of the four blue on-board LEDs?
    4. Q: How do I update ESC Firmware
    5. Q: How do I troubleshoot communication with my ModalAI ESC when using a serial-to-usb adapter
    6. Q: How do I check the model of the serial-to-usb adapter I am using?
    7. Q: I am using voxl-esc-scan.py command, but it is not detecting all four ESC channels?
    8. Q: What is the easiest way to test spinning the motors to make sure my ESC and motors are working correctly?
    9. Q: What is ESC calibration and when do I need to perform it?
    10. Q: How do I locate the IDs (0-3) of each of the four ESC Channels?
    11. Q: How is spin direction of the motor determined and how do I reverse it?
    12. Q: How do I see the temperature of the ESC?
    13. Q: How can I see the current measurement of each ESC channel and total current?
    14. Q: Does M0138 Racing ESC need an external capacitor?
    15. Q: Does the Mini ESC (M0129 standard 4S version) support 4S LiHV battery?
    16. Q: I have a M0134-6 ESC (6S version), however the marking on PCB states 2-4S. Which specification is correct?
    17. Q: The voxl-esc tools don’t detect my ESC at all. What should I check?
    18. Q: My motors run rough, squeal, or get hot. What’s wrong?
    19. Q: One motor doesn’t spin (or stops in flight) while the others are fine.
    20. Q: How hot is too hot for the ESC?
    21. Q: Can I use a bench power supply instead of a battery for testing?
    22. Q: Can the ESC power my VOXL 2 / VOXL 2 Mini?
    23. Q: Can I use a third-party ESC (DShot / PWM) with VOXL 2?
  4. PX4-Related Q/A
    1. Q: I have a M0129 (or M0138) ESC and it supposed to report battery_status, however battery status is not available.
    2. Q: My drone won’t lift off / thrust ramps up slowly, but ESC telemetry looks fine.

Important — Please Review

Using the latest ESC firmware

  • It is strongly recommended to update the ESC firmware to the latest version upon receipt of a new ESC board
  • This applies to all ModalAI ESCs
  • Current ESC firmware version can be queried using voxl-esc tools command : voxl-esc-scan.py
  • The latest ESC firmware is hosted on gitlab ESC Firmware
    • Each VOXL2 SDK also includes ESC firmware releases, located in /usr/share/modalai/voxl-esc-tools/firmware, however it may not be latest depending on the version of SDK

ESC params shipped with new ESC boards

  • ModalAI ESCs standalone ship with ESC parameters used for production testing only
  • All users must ensure that correct ESC parameters are loaded to the ESC before using the ESC
  • Loading ESC parameters is done using voxl-esc tools, specifically voxl-esc-upload-params.py and voxl-esc-verify-params.py
  • New motor / propeller configurations should go through the ESC tuning process, see ESC Calibration

voxl-esc tools

  • voxl-esc python tools can be used to query information about the ESC, such as hardware version, firmware version, ESC params as well as updating ESC firmware, ESC params and running calibration and other tests
  • the latest voxl-esc tools are hosted on gitlab, see voxl-esc-tools
  • the esc params for various vehicles are also hosted on gitlab, see voxl-esc-params
  • a release of voxl-esc-tools and voxl-esc-params is also included in each VOXL2 SDK, but it may not be the latest version, depending on SDK version (/usr/share/modalai/voxl-esc-tools and /usr/share/modalai/voxl-esc-params)

Unboxing and testing new standalone ESC

  • Remove the ESC from the packaging while following common ESD precautions
  • Inspect the ESC for any damage, if any damage is found, please contact us via RMA web form or the forum
  • Plug the ESC power leads into a power supply, appropriately rated for the ESC (12V is supported on all ESCs, but please confirm the spec sheet)
    • please note that aggressive spin testing using a power supply is highly discouraged due to voltage spikes from regenerative braking (see Regenerative Braking)
  • The ESC should rapidly flash 4 blue status LEDs for 1 second (bootloader mode), then firmware will start and flash the LEDs more slowly several times, after which the blue status LEDs on the ESC will be off
  • The idle current draw of a standalone ESC will be between 20-30mA at 12V input (no spinning motors, no load connected to the ESC regulated voltage outputs). If current draw in excess of 100mA is observed, it is possible that the ESC has some sort of issue.
  • Perform a simple spin test
    • solder motor leads to all four ESC motor outputs
    • if the ESC parameters for the motor / propeller are available, load the correct parameters using voxl-esc-upload-params.py script
    • perform a simple test at low power using the following voxl-esc tools command (without propellers is always best for initial tests)
      ./voxl-esc-spin.py --id 255 --power 10
      
    • stop the script after a few seconds and verify by looking at the information printed in the terminal that the RPMs of all four ESCs are close to the same (within 5-10%)
    • see sample output here
    • do not perform aggressive spin tests using a power supply, especially step tests which vary the power / rpm up and down

Q/A

Q: How do I identify the hardware and software version of my ModalAI ESC?

A:

  • The ESC board can be identified visually by comparing the images from the datasheet : ESC Docs
  • Using Software, it is easy to query the hardware and firmware version of the ESC
  • https://gitlab.com/voxl-public/voxl-sdk/utilities/voxl-esc is the location of primary tools for testing the ModalAI ESCs
  • use voxl-esc-scan.py command, which will detect the ESC and print out the hardware type (M0049, M0117, M0129, M0134, M0138, etc) and the software version and additional information
  • see sample output

Q: What behavior should I expect when I power on my ESC?

A: See below

Q: What is the behavior of the four blue on-board LEDs?

A:

  • during the first 1 second after ESC is powered on, the bootloader in each MCU (ESC channel) activates and waits for an optional firmware update. During this first 1 second, the blue LED of each ESC channel will rapidly blink (5-10hz)
  • after the 1 second has elapsed, if the bootloader will verify the stored firmware and if the ESC has valid firmware installed, the firmware will begin executing, followed by 2-3 slow flashes and a motor beep (if motors are attached and beep is enabled in ESC params)
  • if there is no valid firmware loaded on one or more ESC channels, those ESC channels will continue to rapidly blink the blue status LED (indefinitely) and will be ready to accept the firmware, which should be loaded using voxl-esc tools.
  • during normal operation or firmware udpate, when there is ongoing communication with the ESC, blue status LEDs will flash continuously. This can be used to confirm communication between the ESC and host / flight controller.

Q: How do I update ESC Firmware

A:

  • if the ESC is connected to VOXL2, make sure PX4 is not running by stopping it with systemctl stop voxl-px4 command
  • use voxl-esc tools command ./voxl-esc-upload-firmware-all.sh, which will automatically detect the ESC type and pick the correct firmware for updating
  • individual ESC channels can be updated with specific firmware using ./voxl-esc-upload-firmware.py script (see script help for details)

Q: How do I troubleshoot communication with my ModalAI ESC when using a serial-to-usb adapter

A:

  • Connect the serial-to-usb adapter to a Linux PC
  • Make sure TX of the ESC goes to RX of the USB adapter and RX of ESC goes to TX of the USB adapter
  • Make sure that you are using 3.3V I/O levels on the USB to serial adapter (although 5.0V levels should work and should not hurt the ESC, but no guarantees)
  • If your ESC configured to used 2Mbit communication rate, make sure your USB adapter supports 2Mbit. Some adapters, such as CP2102 only supports up to 1Mbit
  • (advanced) Use an oscilloscope to verify that USB adapter is transmitting data to ESC. To avoid any possibility that ESC is affecting the TX signal, disconnect the USB adapter from the ESC, run voxl-esc-scan.py command and check that TX signal is observed coming out of the USB adapter using an oscilloscope. The signal should be 3.3V level

Q: How do I check the model of the serial-to-usb adapter I am using?

A:

  • using voxl-esc tools, run ./voxl-esc-scan.py and the output should be something like:
    ...
    INFO: All COM ports:
    /dev/ttyS0 : ttyS0
    /dev/ttyUSB0 : CP2102 USB to UART Bridge Controller - CP2102 USB to UART Bridge Controller
    ...
    

Q: I am using voxl-esc-scan.py command, but it is not detecting all four ESC channels?

A: This can happen if one or more ESC channel has

  • corrupt firmware (firmware update interrupted or failed)
  • corrupt params (parameter update failed)
  • parameters set to different baud rate from the remaining ESC channels

Q: What is the easiest way to test spinning the motors to make sure my ESC and motors are working correctly?

A:

  • use voxl-esc-spin.py script
  • use --ramp-time parameter to avoid instantly jumping to high power / rpm command right after spin-up
  • use --power command instead of --rpm to check the open loop motor response. Rpm control can mask issues because it uses a feedback controller.
  • use plotting feature to plot the results and make sure all four look similar (within a few hundred rpm)
  • comparison of the rpm vs power command response from a known good configuration can be used to detect improperly functioning ESC / motor
  • see help in voxl-esc-spin.py script for more information

Q: What is ESC calibration and when do I need to perform it?

A:

  • The calibration of ModalAI ESCs is different from calibration of traditional ESCs, which typically use PWM signal as control input.
  • Since the data is sent to ModalAI ESC using serial protocol with error checking, there is no need to calibrate the response to PWM input signal
  • The calibration actually is designed to characterize the response of the specific motor and propeller in order to perform better RPM control
  • see https://gitlab.com/voxl-public/voxl-sdk/utilities/voxl-esc/-/blob/master/voxl-esc-tools/calibration.md for details on performing ESC calibration

Q: How do I locate the IDs (0-3) of each of the four ESC Channels?

A: The ID of the ESC channel (0, 1, 2 or 3) is marked on each corner either on one or both sides of the PCB and/or the motor output pads. When in doubt, running voxl-esc-spin.py test script for each ID can be used to confirm the ESC channel mapping. Please note that PX4 has parameters to re-map the ESC channels, however from point of view of the ESC itself and the ESC communication protocol, the true ESC ID mapping can be validated using the voxl-esc tools.

Q: How is spin direction of the motor determined and how do I reverse it?

A: The Spin direction of the motors depends on the wiring of the motor and the direction configuration in the ESC firmware. By default, all ESC params are set up to alternate directions, so if four motors are wired to the ESC in the same way, their spin directions will alternate (this simplifies production and testing). If a reversal of motors is required, it is recommended to simply switch the order of any two motor phases at the ESC solder pads.

Q: How do I see the temperature of the ESC?

A: The temperature of the ESC board is measured by each MCU on the ESC board and is continuously reported to the Flight Controller. esc_status topic on PX4 contains the ESC temperature of each ESC channel as well as voxl-esc test spin functions provide the temperature information. the M0138 ESC reports two temperature measurements taken at the two MCUs and two measurements taken by separate temperature sensors located next to mosfets.

Q: How can I see the current measurement of each ESC channel and total current?

A: The current measurement of each ESC channel is reported as part of the ESC communication protocol for those ESCs that have individual current sensing (M0049, M0117, M0134, but not M0129, M0138). The ESCs which only report total current sensing will report 0 for individual channel current and will send out a special packet (along with the standard esc telemetry packet) with the total board current and voltage information. This special packet is parsed by voxl-esc tools during testing as well as PX4 for reporting the battery status without using an APM

Q: Does M0138 Racing ESC need an external capacitor?

A: The Racing ESC (M0138) has more than 1000uF of surface mount capacitors, which is sufficient for most applications

Q: Does the Mini ESC (M0129 standard 4S version) support 4S LiHV battery?

A: Yes, the mini esc (standard 4S version) supports voltages up to at least 18V. The TVS protection diode will start clamping / conducting around 19-20V, depending on temperature, which means exceeding this voltage will result in the TVS diode overheating and burning out.

Q: I have a M0134-6 ESC (6S version), however the marking on PCB states 2-4S. Which specification is correct?

A: The M0134-6 ESC does in fact support up to 6s LiPo input voltage. The PCB markings from the 4S version have not been updated for the 6S version. There should be a -6 sticker on the ESC itself and the ESC will be detected as M0134-6 when using voxl-esc-scan.py tool to detect the ESC with software.

Q: The voxl-esc tools don’t detect my ESC at all. What should I check?

A: Work down this ladder — it covers nearly every case we see:

  1. Is PX4 running? The tools and PX4 can’t share the ESC UART. Run systemctl stop voxl-px4 first (the voxl-esc wrapper does this automatically; the bare python scripts do not). If the DSP gets into a bad state, systemctl disable voxl-px4, reboot, scan, then re-enable.
  2. Baud-rate mismatch. voxl-esc-scan.py auto-tries all typical baud rates — but if you passed --baud-rate explicitly, remember recent params use 2M while older ones use 250K. If scanning from a PC, note that CP2102-class USB-serial adapters max out at 1M baud and silently fail on 2M params — use an FTDI-class adapter rated for 2M.
  3. ESC answers only at 57600 baud? That is the fallback baud rate, and it means the ESC’s params are invalid — a failed or interrupted params update. Re-upload your params file (the upload tool retries across baud rates), verify, then update firmware. See the recovery guide.
  4. Stale tools. The copy in /usr/share/modalai/voxl-esc-tools matches your SDK, not necessarily the latest. Newer boards (for example M0129-6) show “unknown board” on older tools — fetch the latest tools if your board is newer than your SDK.
  5. Wiring. RX/TX swapped on a serial adapter, missing ground between adapter and ESC, or debris/shorts on the 4-pin UART connector.
  6. If tool commands time out sporadically on VOXL 2, try voxl-set-cpu-mode perf while testing.

Q: My motors run rough, squeal, or get hot. What’s wrong?

A: Usually ESC params, in this order of likelihood:

  • spinup_type should be 1 (sinusoidal spin-up). The old spin-up mode (0) is unreliable, can leave the ESC mis-synchronized with the motor phases (de-sync) — causing rough control and motor overheating — and is being retired from all shipped param files.
  • num_cycles_per_rev must be the motor’s pole pairs (often 7), not its magnet count. Wrong value = every RPM is wrong.
  • min_rpm/max_rpm must be realistic for your motor and prop (a 200 min_rpm is far too low for most motors; verify the motor actually reaches your max_rpm).
  • spinup_power around 100-120 is typical; find the minimum power that spins up reliably and add ~10%.
  • The a0/a1/a2 curve must come from an actual calibration of your motor/prop combination.
  • Low-kV motors (under roughly 800kV) need the dedicated timing settings (timing_advance, sense_advance, demag_timing) — see the low-kV tuning guide.
  • A de-sync signature in test plots: motor squeals, reported RPM jumps to a bogus high value, current stays low.

Q: One motor doesn’t spin (or stops in flight) while the others are fine.

A: Triage in this order:

  1. Check motor_kv and battery voltage in the params match reality — the spin-up procedure depends on both.
  2. Try a longer spin-up (spinup_time_ms 500 → 1000) and ~20% more spinup_power.
  3. If it spins: compare its RPM at a fixed commanded power against the other motors. A noticeably slower motor under load often has a partially shorted winding — the classic cause is motor mounting screws that are too long penetrating the windings. Verify with a milliohm meter: phase-to-phase resistance should match across identical motors within a few percent.
  4. Swap the suspect motor to a different ESC channel. If the problem follows the motor, it’s the motor; if it stays with the channel, contact support about the ESC (RMA).
  5. For intermittent in-flight stops, also inspect motor wires under zip ties, bullet-connector insulation, and anything conductive (camera flex edges) touching the ESC.

Q: How hot is too hot for the ESC?

A: Ideal is under 60-70°C; 80°C is acceptable; 90°C is worrying; 100°C+ is critical — firmware refuses to start motors above 100°C and the tools abort tests. Temperature is logged in PX4 logs and printed live by the spin tools. Notes: on most boards the sensor is inside the MCU, so the MOSFETs run hotter than the reading; on the FPV ESC (M0138) channels 0 and 3 report dedicated board sensors while channels 1 and 2 report MCU temperature (typically 5-7°C higher). Prop wash cools far better than a small bench fan; a heat spreader helps the physically small Mini ESC significantly.

Q: Can I use a bench power supply instead of a battery for testing?

A: Sometimes — but understand the limits. ESCs regeneratively brake on every high-to-low RPM transition, pushing current back at the source. A battery absorbs it; most supplies cannot sink current, so voltage spikes into the ESC’s protection (TVS) diode, which can burn out under repeated/sustained spikes. Rules of thumb:

  • Steady-state runs and slow transitions: fine, if the supply’s current rating is adequate (a 3A wall adapter is not — it sags and ruins tests).
  • Aggressive low-to-high steps: OK. Aggressive high-to-low steps and loaded step-down tests: battery only.
  • Set the brake_to_stop param to 0 and stop motors by ceasing commands, not by commanding a low RPM first. Full explanation: regenerative braking.

Q: Can the ESC power my VOXL 2 / VOXL 2 Mini?

A: Depends on the board:

ESCPowers VOXL 2 / Mini?
VOXL Mini ESC (M0129 family)Yes — built-in regulator; -63 variant outputs 3.8V (VOXL 2 Mini), -65 outputs 5.0V (VOXL 2). 4S-rated boards vs 6S per variant.
VOXL FPV ESC (M0138)Yes — includes a VOXL 2 power regulator, no separate power module needed.
VOXL 4-in-1 ESC M0134-6 (6S)No — its aux 5V regulator is only 0.5A; VOXL 2 needs 5V at 5A+. Use a power module.

Tip for identifying Mini ESC variants: a bare “M0129” label almost always means M0129-3 (4S). The 6S versions carry a small -63 or -65 sticker on the white 4-pin connector.

Q: Can I use a third-party ESC (DShot / PWM) with VOXL 2?

A: Short version: VOXL 2 cannot generate DShot signals, and DShot ESC support is not on the roadmap. The VOXL 2 IO board (M0065) has hardware capable of it, but the feature is unsupported. OneShot125 does work through the VOXL 2 IO board, but requires rebuilding voxl-px4 with a one-line output-scale change. Conventional 1000-2000µs PWM ESCs work through the VOXL 2 IO board — see the VOXL 2 IO user guide. If you want ESC telemetry (RPM, voltage, current, temperature per channel), use ModalAI ESCs — that path is not supported for third-party ESCs. Conversely, ModalAI ESCs can accept PWM input from a third-party flight controller on the aux pads (M0049/M0117/M0129/M0134, not M0138) — see the Mini ESC datasheet. PWM maps to % power (not RPM), 1000-2000µs; use 950µs to keep motors stopped, operate at 1050µs and above, and note that spin-direction reversal via PWM is not supported and any valid UART packet disables PWM input until reboot.

Q: I have a M0129 (or M0138) ESC and it supposed to report battery_status, however battery status is not available.

A: If px4 is running and px4-listener battery_status outputs “never published”, this most likely means that px4 driver voxl_esc could not detect the ESC and the driver is not running. In order to fix this,

  • confirm that the ESC is actually powered on and UART cable is plugged into VOXL2 / VOXL2 mini
  • run voxl-esc scan, which will stop px4 and use voxl-esc python tools to try to find the ESC
  • if the ESC is detected by the scan, note the baud rate that was used to detect the ESC and make sure that px4 param VOXL_ESC_BAUD is set to the same value ( typically 250000 (250K) or 2000000 (2M) )
    • it is recommended to use higher baud rate, such as 921600, 1000000 or 2000000 in order to avoid ESC communication drops. The ESC baud rate can be changed in the ESC params. 2M baud rate is used in most latest ESC params.
  • also confirm that VOXL_ESC_PUB_BST px4 param is set to 1 (enabled). This tells the voxl_esc driver to actually publish the battery status message
  • set the BAT1_SOURCE px4 param to 0 (Power Module). This is required for the voxl_esc driver to publish battery_status; setting BAT1_SOURCE to 2 (ESCs) will prevent the message from being published
  • restart PX4 after updating the param(s) and use px4-listener battery_status to check the battery status again
  • if the voxl-esc scan command fails to find the ESC, double check all electrical connections between the VOXL and ESC, check for activity of blue status LEDs on the ESC during power on (see other Q/A)
  • note that ESCs which do not measure total battery current will not report the battery status to PX4

    Q: My drone won’t lift off / thrust ramps up slowly, but ESC telemetry looks fine.

    A: If the logs show the ESC tracking commanded RPM well, the ESC is doing its job and the issue is almost always PX4 configuration:

  • VOXL_ESC_RPM_MIN / VOXL_ESC_RPM_MAX must match the ESC params’ min/max RPM. PX4’s params don’t override the ESC (the ESC caps commands) — but a mismatch silently mis-scales PX4’s 0-100% thrust calculation.
  • SYS_VEHICLE_RESP slew-rate-limits motor response — check it isn’t set unusually low.
  • THR_MDL_FAC should be close to 1 (typically 0.7-0.8) for RPM-controlled ESCs.
  • Check CA_ROTORx_AZ signs — a flipped thrust axis makes PX4 think a motor pushes the wrong way. For deep PX4 tuning questions beyond the ESC interface, the PX4 support channels are the right venue.