My question is more related to inner working of ESC than coding. Particularly how to activate a particular protocol like DShot600 or Dshot150. Assuming a generic BLHELI ESC has all these protocols. I am using 3 different ESCs which says they are ready for different protocols. A bit of background:

I have coded my own Flight Controller and everything was great but I recently moved to BLHeli32 ESC. I coded the driver for BLHeli32 ESC and able to spin the motors using the protocol DShot600 and DShot150 but it seems despite I send data in the form of Dshot600 or DShot150, the ESC is not fully recognizing the protocol. As it even spins the motors for values less than 48. I have attached an image of the signal I am sending to ESCs. BLHELI suite settings are attached too.

enter image description here

It seems ESCs take my inputs as oneshot or multishot protocol and only look for bits (1s) and spins the motors when find enough 1s. I am concluding this because the speed is higher when it sees a number like 63 ( many 1s) than 64( just one high bit).

My understanding is and as mentioned in https://www.hobbywing.com/products/enpdf/XRotorMico60ADShot1200en.pdf "Dshot signaling is supported at any rate up to at least Dshot1200. The input signal is automatically detected by the ESC upon power up.

Which means I don't need to tell ESC the signal I am sending is DShot, based on the frequency the ESC activates a particular protocol. In my case it needs to be DShot600.

Also I assumed each ESC supports all the protocol, Dshot and multishot at the same time or so I read in different ESCs documentations ? I am using 3 different ESCs for my testing. These are:

  • Hobbywing XRotor Micro 60A 4in1 BLHeli-32 DShot1200 3-6S ESC
  • Skystars BL32-45A 55A 60A 4IN1 3-6S ESC BLheli32 DShot1200 4-in-1 ESC support Dshot1200/600 Multishot and
  • Tekko3 F3 4IN1 Mini supporting DShot600/Multishot etc

I saw some old videos of betaflight and people activate DShot600 etc but that I guess activation of drivers and has nothing to do with the ESC itself.

To summaries my questions:

  1. Do I need to send something to an ESC to use Dshot600 protocol
  2. What to send if I have to
  3. If not, why my ESCs behaving strange and not detecting type of protocol I am sending my data for.

Thanks in adv for your answer

enter image description here

  • $\begingroup$ So I know this was a while ago, but I just came across your question. I wrote some similar code to get Dshot working for a my motor test equipment. Did you get this figured out? Can you get some better shots from your oscilloscope with time data to show the exact timing of your pulses? The timing is pretty critical. I'm glad to help if you still have questions. $\endgroup$
    – QuadMcFly
    Jul 3, 2022 at 3:39
  • $\begingroup$ Also not sure if you saw this, but there is a really excellent breakdown of the Dshot implementation here: brushlesswhoop.com/dshot-and-bidirectional-dshot $\endgroup$
    – QuadMcFly
    Jul 3, 2022 at 3:44
  • $\begingroup$ Thanks QuadMcFly for your response. Yes I managed it. I had 2 problems. a. Initiation numbers were wrong. I was trying with 0 and 48 but it was any number between 0 and 48. b. I was using high frequency ( 37.5k ) but it worked on19K for me. DShot really lacks documentation and its mostly trial and error. Thanks again for your reply. $\endgroup$
    – ZAK
    Jul 4, 2022 at 4:19


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.