How to Calibrate ESC and Enable Dshot Protocol - ArduPilot Firmware
I. Principle
What is an ESC?
ESC (Electronic Speed Controller) is an electronic device used to regulate motor speed. It receives signals from the RC transmitter or flight controller system and adjusts the motor speed accordingly. ESCs typically use different protocols to communicate with the flight controller system or RC transmitter. Common protocols include PWM (analog signal) and Dshot (digital signal).

Difference Between Digital and Analog ESC Protocols
Analog Protocol (PWM):
- Oneshot, Multishot use PWM signals to control motor speed, by adjusting the PWM duty cycle.
- == ESCs using PWM protocols require calibration to keep the flight controller and ESC clocks synchronized. ==

II. Equipment Preparation
Hardware
- Flight Controller: CoreWing F405 WING V2 / CoreWing F405 WING MINI V2 — either one is suitable for this tutorial.
- RC Transmitter: RadioMaster TX16S / RadioMaster Boxer as examples.
- Receiver: SpeedyBee ELRS Nano 2.4G as an example.
- ESC: Most ESCs on the market are suitable for this tutorial.
- Computer: Used to configure parameters via the computer ground control station.
Software
Mission Planner ground control station
III. Specific Operations
3.1 How to Check the Protocols Supported by the ESC
Check the label on the ESC, which usually indicates the supported protocol and the maximum supported transmission rate. Examples:
- FLYCOLOR 45A ESC is labeled BL-32 (BLHeli32), supporting up to Dshot1200.
- LANRC 45A ESC is labeled BLHeli_S, supporting up to Dshot600
- HOBBYWING SKYWALKER 40A has no firmware type labeled on the sticker; use PWM protocol directly.



3.2 How to Enable Dshot Protocol
Fixed Wing:
(1) Confirm the output channels that need to enable Dshot
- Confirm the ServoOutput channels that need to enable Dshot → single-motor fixed wing typically uses channel 3 as the throttle channel:

- Dual-motor fixed wing typically uses channels 3 and 4 as throttle channels:

(2) Parameter Configuration
- Enter the full parameter list → search BLH → find the following parameters;

- Modify the
SERVO_BLH_MASKparameter → click value → click Set Bitmask → check channels 3 and 4;

- Modify the
SERVO_BLH_OTYPEparameter → click value → select Dshot300;

| Parameter | Value |
|---|---|
| SERVO_BLH_MASK | 12 |
| SERVO_BLH_OTYPE | 5 |
- Verify whether the Dshot function is enabled.
Click Flight Data → click Messages tab → check whether RCOut displays DS300: 3-4

VTOL Fixed Wing:
Important
When enabling the Dshot protocol for VTOL motor output channels, you also need to enable the DSHOT protocol for the same output channels in fixed-wing mode; otherwise, it will cause abnormal phenomena such as motor stuttering, one motor stopping, or inconsistent motor speeds.
With DSHOT protocol correctly set, ESC calibration is not required, and motor speed and throttle ratio are in a linear state.
(1) Confirm the output channels that need to enable Dshot
- Modifying the
Q_M_PWM_TYPEparameter in VTOL mode only affects MOTOR; for other channels needing Dshot, follow the fixed-wing procedure above;

(2) Parameter Configuration
- Search
Q_M_PWM_TYPE→ click value → select Dshot300;

- Verify whether the Dshot function is enabled.
Click Flight Data → click Messages tab → check whether RCOut displays DS300: 5-10

Motor Test:
Important
Do not install propellers when testing motors!!
- Arm the flight controller

Important
If the flight controller refuses to arm, it is because there is no RC input. Please check whether the receiver is plugged into the flight controller and whether the RC transmitter and receiver are bound!
- Gently push the throttle, the motor will spin immediately. Push the throttle from 0% to 20% and check whether the throttle is linear.
3.3 ArduPilot Pin Mapping

Important
S1~S10 outputs support both DShot and PWM. However, within the same timer group, once Dshot is enabled on any channel, all channels in that group will have Dshot enabled. We provide a 2+2+3+3+2 grouping for convenient configuration of different aircraft types.
For example, in a single-motor fixed-wing, if S3 enables Dshot, S4 will also enable it; you cannot enable Dshot on a single channel alone.
For a dual-motor fixed-wing, set the motors on channels S3 and S4, enable Dshot, and the remaining servo channels use PWM protocol.
In a Y3 VTOL fixed-wing, set the three motors on channels S5, S6, and S7 to enable Dshot, and the remaining servo channels use PWM protocol.
3.4 ESC Calibration (Using PWM Protocol)
- Connect the flight controller to the ground control station with a USB data cable;
- Verify whether the flight controller has digital protocol enabled;
Follow the digital protocol enabling steps above to check whether the flight controller has Dshot enabled. If enabled, modify the above parameters and set their values to 0.
| Parameter | Value |
|---|---|
| SERVO_BLH_MASK | 0 |
| SERVO_BLH_OTYPE | 0 |
Important
Make sure the battery is disconnected, the receiver is bound, and the propellers are removed!
- Confirm that the RC calibration page has data and the RC has been calibrated;

Important
If the ESC has entered programming mode, refer to the ESC manual to exit
① Click Flight Data → click Actions → click Arm/Disarm → click Force Arm;

② Immediately push the throttle to maximum
③ Power the flight controller with a battery
The ESC sounds a prompt → immediately push the throttle to minimum → ESC prompt ends
== BLHeli32 / BLHeli_S ESC calibration sound: ==
== Connect the battery and wait 2 seconds → "play a piece of music" is the throttle maximum confirmation tone → wait for the music to finish playing → push the throttle to minimum and wait 1 second → "play another piece of music, be-beep-" is the throttle minimum confirmation tone → calibration complete ==
== PWM ESC calibration sound: ==
== Connect the battery and wait 2 seconds → "beep-beep-" throttle maximum confirmation tone → push the throttle to minimum and wait 1 second, N short beeps indicate the LiPo cell count → "beep-" throttle minimum confirmation tone → calibration complete ==
④ Gently push the throttle, the motor will spin immediately. Push the throttle from 0% to 20% and check whether the throttle is linear.
⑤ If the result differs from the above, disconnect the battery and return to step ② to perform the calibration again.
IV. Q&A
Technical Support QR Code
