What is DShot ESC Protocol

DShot is a new communication protocol between flight controller (FC) and ESC, substitute to Oneshot and Multishot. DShot stands for Digital Shot.

The project is developed by Flyduino in collaboration with Betaflight. Many would be surprised by how fast things are moving forward: Multishot has only just been implemented and adopted by the mini quad FPV community, and now there is already a newer, better technology a few months later.

Learn about other existing ESC Protocols:

Advantage of DShot

Compared to Oneshot and Multishot, we are informed that DShot is better because:

  • No More ESC Calibration Required (no oscillator drift)
  • More Accurate ESC Signal, and more robust against electrical noise
  • Higher Resolution of 2048 Steps, compared to others of 1000 steps
  • Faster Than Oneshot
  • Safer, every signal – ESC can detect and reject corrupted data

So What is DShot, Really?

DShot is a digital protocol!

Standard PWM, Oneshot125, Oneshot42, and Multishot these are all analogue signals. They all rely on the length of the electrical pulse to determine the value being sent. Analog signals have potential issues with value accuracy because:

  1. Due to the possibly different speed of the oscillators (or clock) in ESC’s and FC, the length of the pulse might not be measured accurately, escpially when we are talking about it’s down to the level of micro seconds. This is the reason why ESC calibration is required to sync the oscillators
  2. Electrical noise (voltage spikes) can corrupt analog data – that’s why we sometimes see people suggest running higher motor update rate than PID loops helps flight performance. Because when you repeatedly sending the same value to the motor, it averages out the error and thus increasing precision

With digital protocol, there won’t be any of these problems. It’s exciting to know that ESC calibration will no longer be necessary. Because of the nature of digital signal, which is one’s and zero’s, it will also be much more resistant to electrical noise.

How Fast is DShot?

Options: DShot600, DShot300, DShot150

There are 3 speed options with DShot, the numbers are indication how much data is sent per second.

  • DShot600 – 600,000 bits/Sec
  • DShot300 – 300,000 bits/Sec
  • DShot150 – 150,000 bits/Sec

Calculate Latency

Firstly we need to know how many bits are in a data packet, then divide the speed of the protocol. A DShot data packet consists of a total of 16 bits: 11 bits for throttle value (211 = 2048 steps), 1 bit for telemetry request and 4 bit for CRC checksum (cyclic redundancy check).

For example DShot600 would have a frequency of 600,000/16 = 37500Hz = 37.5KHz, which means it will take about 26.7uS to send a single throttle value from FC to ESC.

Speed Comparison

I have done all the maths for you :) In comparison to the speed of Oneshot125, Oneshot42 and Multishot, we have the following table (assuming signal is at 100% throttle)

  • Oneshot125 – 250 uS
  • DShot150 – 106.7 uS
  • Oneshot42 – 84 uS
  • DShot300 – 53.3 uS
  • DShot600 – 26.7 uS
  • Multishot – 25 uS

esc-protocol-speed-comparison-hz

The fast transmission speed of DShot will theoretically allow up to 33KHz FC Looptime. (Not as high as 37.5KHz because there needs to be some space between values). Although DShot600 is not quite as fast as Multishot, as long as it’s faster than FC looptime then it’s plenty enough :) With all other advantages we’ve discovered so far, it still out-weights that small speed difference.

What hardware Supports DShot?

BLHeli_S ESC

Nov 2016 – Currently certain ESC’s that run BLHeli_S firmware will support DShot. Such as Cicada, Racerstar V2, Aikon SEFM, TBS 25A, Lumenier 30A, DYS XS30A, etc. However these ESC’s have speed restriction and only support up to DShot300, some can only run DShot150. According to Steffen Skaug (BLHeli Developer), future ESC’s that use EFM8BB21x chipset will be able to run DShot600.

DShot for BLHeli_S is being developed by BLHeli and Betaflight team, if you would like to know more such as known issues, full list of supported hardware etc, please check here.

Update Feb 2017 – Most ESC’s that just came out of the market would support DShot out of the box, but some older ones might require you to remove a capacitor in order to run D-shot. This capacitor is designed to filter out noise at the input, but because DShot is so high frequency it will get filtered too.

KISS ESC

KISS 24A ESC supports DShot with all 3 speed levels, available to choose from in their Chrome GUI configurator (even the highest speed – DShot600).

KISS 24A ESC’s use STM32 processors, our mini quad FC’s also use STM32 MCU‘s. Between these STM32 chips they have something called DMA controller (Direct Memory Access) that communicate directly between them. This allows faster DShot signal as it doesn’t use much additional processing resource that might cause delay.

Requirement For Flight Controller

Looks like only F3, F4 flight controllers can run DShot at the moment. But not every board supports it, check the Betaflight Wiki and find out.

Here is a step by step tutorial setting up DShot on Betaflight.

What else do I need to know?

  • In BLHeliSuite, there is no specific ESC config need to be changed other than flashing firmware
  • PPM_Min and PPM_Max are now disabled for DShot, as the end-points are fixed, and ESC calibration isn’t needed anymore
  • In Betaflight, min_command and max_throttle are ignored with D-Shot
  • digital_idle_percent replaces min_throttle
  • unsynced_motor_output is removed for DShot as it’s no longer needed

Edits and Updates

  • Update May 2017 – DShot1200, a faster DShot protocol will be available.

20 thoughts on “What is DShot ESC Protocol

  1. ACG

    The one think I dislike about the Hobby industry are the coining of new terms which actually have long since been around. BEC? is just a voltage regulator. OneShot? is like going from 14.4k to 56k baud. List goes on forever.

    Still, a nice website!

    Reply
  2. Narly Software

    OK guys, I’ve been working with real motor speed controllers up to thousands of Horse Power since 1981.. PWM Pulse width modulation is a method of transmitting an analog value across digital medium. PWM relies on only 1s and 0s, True and False, On and Off values. These values are then held within the time domain for interpretation. Example On 1/2 the time Off 1/2 the time translates to 50% of interpreted value.

    The issue I’ve read with these circuits is the filter capacitors which are specified to filter out frequencies above the system’s working frequencies. Moving to DShot means the working frequencies will be higher. Therefore the existing capacitors would filter the actual signal. The microprocessors on these ESCs simply need different programming to interpret the new protocol.

    This is like a mechanical engineer calling a DC armature a rotor and and a electrical engineer calling it an armature.. At some level the debate will depend on the background of who you are communicating with.

    Reply
    1. frik

      I have noticed many people in RC comunity are using wrong terms, speaking about Analog vs. Digital.

      It’s simple: If value is subject to Quantization process so it’s digital value. And pulse width of PWM generated by MCU Timer is quantized value according to PLL freq used for the timer peripheral.

      Reply
  3. Tom Talley

    PWM sends a pulse of some duration which the receiver has to attempt to measure…It is one pulse…To detect the duration of that pulse is a challenge. DShot numbers come in a string of pulses of known widths at a known time…Detecting the value being sent by DShot is just detecting the number the pulse string represents. A much easier task. While PWM is a digital signal, the duration of the pulse is an analog measurement. You are both right.

    Reply
  4. Martin Budden

    Mr Who asks: “But I still don’t understand why they have to reinvent the wheel. There are many possibilities to speak to electronic sensors/actors like SPI, I2C, UART, CAN…. So why DShot? Perhaps its easier to implement DShot in standard ESCs?”

    One of the criteria was that it would work with existing ESCs. So that rules out SPI and I2C, since the connections aren’t easily available on standard ESCs. They also require more wires – who wants to connect up a bunch of wires to their ESCs? CAN is also not really suitable, since it would require require additional tranceivers on the ESCs (there are other reasons as well). All these ideas were discussed. See here for Felix’s comment on CAN bus https://github.com/betaflight/betaflight/pull/1282#issuecomment-252484173 and see other parts of that thread for discussion about other possible implementations.

    DSHOT works with many existing ESCs, so many people can try it without buying new ESCs. And if they don’t like it they can go back to whatever they were using before.

    Note also that DSHOT is currently alpha pre-release software, with all the risks that entails.

    Reply
  5. TFM

    This is an excellent article, thank you for the information.
    Question: You mention a resolution of 2048 steps. Will this be used in reality? Doesn’t the FC still communicate 1000 steps, or does this rather mean that the PID loop can come up with throttle values that have a much higher resolution than 1000 steps, making the protocol the limiting factor?

    Reply
    1. Jan

      I think what he meant by 2048 steps is that the throttle value or resolution will have a possible value of 0-2047.

      00000000000 = 0 Minimum or no throttle
      .
      .
      11111111110= 1023 Mid throttle
      .
      .
      11111111111=2047 Maximum throttle

      Throttle here also means the amount of throttle that will fed to each motor (don’t get confused with the throttle applied to the quad together with the pitch, yaw, and roll)

      Reply
  6. Brian

    Just a question, you said that PWM (FC to ESC), Oneshot125, and OneShot42 are Analogue signals. How did you came up with this conclusion when in fact they are all digital signals. The fact that the signalling is based from logic 1 and logic 0 makes them digital even if the timing is based on the length (or time domain) of electrical pulses or other sources. Also, pulses being fed to ESCs come from the flight controller so there is absolutely no way it is in analog (unless an DAC is explicitly used). I may be wrong but this is simply different from what i know of DSP.

    Again, I maybe wrong or the term “analog” was used in a different context so please enlighten me.

    Reply
    1. Oscar Post author

      Apple flavoured water is still water, doesn’t make it apple juice :) PWM is a analogue signal that is encoded in digital form but has a varying pulse width, so indeed it does possess some properties of digital signal, but in our context (compared to DShot) it is an analog signal.
      And try to call Oneshot “DShot” LOL

      Reply
      1. MiserWho

        I have to agree with Brian. PWM is digital. It only consist of 1 and 0. An analog signal has something in between. When I got your article right the new thing about DShot is that you use some kind of protocol where you actually transfer data and don’t have to measure the time between the 1s and 0s. I like the idea to use a protocol to speak to the ESCs.

        But I still don’t understand why they have to reinvent the wheel. There are many possibilities to speak to electronic sensors/actors like SPI, I2C, UART, CAN…. So why DShot? Perhaps its easier to implement DShot in standard ESCs?

        MisterWho

      2. Linus Bui

        Wrong. PWM signals are analog. Analog or digital is not about the waveform, it is about what aspect is used to encode the data. PWM signal uses the ‘width’ of the waveform to represent values, longer the width, higher the value. true digital signal uses just binary system to represent values, no other physical characteristic of the signal matters except for on/off status. Saying PWM signal is digital is like saying Morse code is digital. They are all analog as a physical characteristic of the waveform is used to determine the value.

      3. Tim Eckel

        Sorry, PWM is digital. An analog signal would be like some RX with RSSI that supply a 0 to 3.3v output. An ADC will read the analog value and turn that into a number. While PWM is the length of being on or off, it’s strictly digital. It’s 100% wrong to say that PWM is analog, it’s 100% digital.

        The reason DShot works better is because of the checksum, not because it’s more digital than PWM or Oneshot. If DShot was just sending a digital signal without the checksum, it would have errors just like PWM or an analog signal from interference. And, it would have a higher chance of errors as those on and offs are happening quicker. This is why Oneshot42 has more problems than Oneshot125.

      4. Benik3

        As Oscar said, OneShot is analogue, because it measure the length of signal, it doesn’t interprets the low and high voltage level as digital bits!
        On the other hands, dshot doesn’t care about how the signal looks (how long it take…) but it looks only if it’s high or low and then translate it to bit’s and put together to message…

    2. Ranulf

      Interesting to read about this… I was just thinking the other day about modifying BLHeli to receive data over a soft UART which would achieve much the same result.

      Regarding Brian’s question about analogue, the ESC protocol very much is analogue.

      The signal might be communicated as a a pair of transitions between 0 and 1 as far as both CPUs are concerned, but it’s not the value that matters, it’s the time period between them and that is analogue. It is very unlikely that the ESC will receive the same value that the FC sent. Sure, you can approximately repeat the same time duration on the FC by sending the same value, but actually that duration might well not be the same due as the clock frequency of the crystal could be slightly different depending on slight changes to temperature, parasitic capacitance or even vibrations. Even the length and type of the signal wire to the ESC can affect the rise and fall rate of the ANALOGUE voltage and so change the apparent duration of the signal.

      What is almost certain, however, is that the clock speed of the receiving ESC will be slightly different to the FC, and this will lead the same period of time being interpreted differently to what the FC sent. The main challenge of any communication system is making sure that there is some way of synchronising the receiver to the sender. For instance, with RS232 communication, you sychnronise by watching out for the start bit, wait half the duration you expect a bit to last, and then sample the bits you want at the sample rate, so that you’re reading the signal at approximately the middle of the bit each time.

      This is why you will typically have a PWM value below which you consider it at minimum value and another above which you consider it maximum. If you have a transmitter that can display the values it’s sending, e.g. a Taranis, you can see the PWM values it thinks it’s sending and then look at the values CF has received (look in the recceiver tab) and they’ll be different.

      This is the problem DShot aims to solve. With digital, it’s simple: 0 is off, 2047 is maximum. There’s absolutely no ambiguity.

      Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

Are you Robot? *

I don't look at blog comments very often (maybe once or twice a week), so if you have any questions related to multirotor please post it on this forum IntoFPV.com... You're likely to get a response from me faster on there.