Skip to content

DShot ESC Setup ​

DShot is a digital ESC protocol. It replaces PWM pulse-width throttle with digital frames: frames carry a checksum, are immune to clock drift between controller and ESC, and need no throttle range calibration.

Two DShot telemetry wiring options

▲ Two telemetry wiring options

WARNING

Enable DShot only on ESCs that explicitly support it. Setting DShot on a plain PWM ESC causes unpredictable rotation. Power up without propellers before testing.

Prerequisites ​

  • The ESC firmware is digital firmware that supports DShot.
  • Bidirectional DShot needs recent ESC firmware (RPM reported back over the signal wire). Older firmware can only use single-wire telemetry.
  • Bidirectional DShot requires an exclusive DMA channel, and not every controller output supports it.

Supported rates and channels by controller ​

M is a MAIN output and A is an AUX output; M1-M4 means MAIN 1~4, M1-A6 means MAIN1 through AUX6. The tables below are measured results on APM firmware.

Bidirectional DShot (BDShot)

ControllerRateAvailable channels
V5+150 / 300 / 600 / 1200A1-A6
V5 nano150 / 300 / 600 / 1200M1-M4
X7+150 / 300 / 600 / 1200M1-M4
Nora+150 / 300 / 600 / 1200M1-M8
X7+ Pro150 / 300 / 600 / 1200M1-M4
V6X150 / 300 / 600M1-M4, A1-A4
V6X1200A1-A4
V6X v2150 / 300 / 600M1-M4, A1-A6
V6X v21200A1-A4
7-Nano V1Not supported—
7-Nano V2150 / 300 / 600 / 1200M1-M4
X25 EVO150 / 300 / 600 / 1200M1-M8
X25 SUPER150 / 300 / 600 / 1200M1-M8
X25 MEGA150 / 300 / 600 / 1200M1-M8

One-way DShot

ControllerRateAvailable channels
V5+150 / 300M1-A6
V5+600 / 1200A1-A6
V5 nano150 / 300 / 600 / 1200M1-M6
X7+150 / 300 / 600 / 1200M1-M12
Nora+150 / 300 / 600 / 1200M1-M12
X7+ Pro150 / 300 / 600 / 1200M1-M12
V6X150 / 300 / 600M1-A6
V6X1200A1-A6
V6X v2150 / 300 / 600M1-A6
V6X v21200A1-A6
7-Nano V1150 / 300 / 600 / 1200M1-M12
7-Nano V2150 / 300 / 600 / 1200M1-M12
X25 EVO150 / 300 / 600 / 1200M1-M14
X25 SUPER150 / 300 / 600 / 1200M1-M14
X25 MEGA150 / 300 / 600 / 1200M1-M14

TIP

Bidirectional DShot is more sensitive to wire length. On large airframes or long signal runs, drop to DShot150/300 rather than chasing a higher rate.

Configuration steps ​

1. Set the parameters in the full parameter list ​

Open Mission Planner and go to Config / Tuning → Full Parameter List. Fill in the table below, then click Write Params.

ParameterTarget valueNotes
FRAME_CLASSSet per airframeFrame type; once set, the system assigns output channels automatically, or change SERVOx_FUNCTION manually
BRD_SAFETY_DEFLT1 (set 0 to disable the safety switch)Safety switch enable
BRD_IO_DSHOT0 (boards with IO can set 1)Enables DShot on the IO chip
MOT_PWM_TYPESet to the required DShot rateDShot protocol for the selected channels
SERVO_BLH_BDMASKTick the outputs to use; 15 for a quadChannels that carry DShot
SERVO_DSHOT_ESC1DShot ESC type; required for telemetry, normally 1
SERVO_DSHOT_RATE0 (set as needed)DShot pulse rate; 0 fixes 1 kHz from the loop rate, 1 follows the loop rate (a 400 Hz loop gives 400 Hz), 3 is 1.2 kHz. Do not go below 1 kHz

Note

All mask-based settings change only at the PWM group level. Which outputs share a group follows the controller grouping; mixing protocols inside a group means the change does not take effect.

Important

Once an output is configured for DShot, its SERVOx_MIN / SERVOx_MAX / SERVOx_TRIM values stop applying, because DShot does not use them. A reversible output uses 1500 as neutral and a normal output 1000; the range is always 1000–2000. No ESC calibration is needed.

Tip

Output is only present after the safety switch is pressed and the vehicle is armed.

2. Check that the output channels took effect ​

After rebooting, connect the ground station and read the RCOut: line in the boot banner of the Messages panel. It lists the protocol each channel is currently using:

The RCOut line in the Messages panel

▲ The RCOut: line shows each channel's protocol; DShot channels list their rate (e.g. DShot600)

  • DShot150/300/600/1200 means the channel has switched to digital output.
  • PWM means the channel did not switch, usually because it is on a MAIN output, or a timer group mixes protocols.

DShot commands ​

Some ESCs accept commands sent over DShot, used to control ESC LEDs, sound the motors as a buzzer, and set motor direction.

Currently supported commands:

  • DShot LED on/off
  • DShot buzzer on/off
  • Reverse motor direction (see SERVO_BLH_RVMASK)
  • Reversible DShot (also called 3D mode)

Set the parameters below first:

ParameterTarget valueNotes
SERVO_DSHOT_ESC1 (pick per ESC model)The DShot ESC type in use; required for bidirectional DShot or extended telemetry
NTF_LED_TYPESTick DShotAllows DShot commands to drive ESC LEDs
NTF_BUZZ_TYPESTick DShotAllows using the motors as a buzzer

Warning

ArduPilot currently supports only the common command set (SERVO_DSHOT_ESC = 1). Other command sets may be incompatible and behave unpredictably. Remove the propellers before confirming the ESC is type 1.

Verification ​

  1. In the ground station's Flight Data → Status page, search for esc1_rpm. RPM tracking the throttle means telemetry works (the telemetry link needs MAVLink2).
  2. In the onboard log, check the ESCn messages: RPM, voltage, current, temperature, total current.
  3. Use motor test to confirm the direction of each motor.

FAQ ​

  1. Motor does not spin?
  • Wired to a MAIN output (not supported on boards with an IO co-processor), or a timer group mixes PWM and DShot
  1. No RPM data?
  • The ESC firmware does not support bidirectional telemetry, SERVO_BLH_BDMASK is not set, or SERVO_DSHOT_ESC is still 0
  1. RPM reads too high or too low?
  • SERVO_BLH_POLES does not match the actual pole count of the motor
  1. Motor misbehaves after switching protocol?
  • Throttle was calibrated under PWM; recalibrate before returning to analog output

WARNING

After switching an output from DShot back to analog PWM, redo the throttle range calibration. Otherwise the motor may spin at high speed as soon as you arm.

IOMCU DShot limits ​

With a DShot-capable IOMCU firmware loaded, there are two restrictions:

  • The RCin pin can no longer detect a PPM signal.
  • MAIN outputs support PWM and normal DShot, and outputs in the same protocol group must use the same protocol:
OutputProtocol group
MAIN 1, 2Group 1
MAIN 3, 4Group 2
MAIN 5–8Group 3

The normal setup steps for DShot outputs still apply.