Pixhawk 4 holybro Arducopter 3.6.9 -> 4.0.1rc3, no control over two motors in an X8 with DSHOT

It really seems difficult to setup BLHeli and Dshot. If there are any suggestions on how to improve the wiki page or make the setup easier I would love to hear the suggestions.

I’m working on one small change which will display which servo outputs are using DShot (or OneShot) but I don’t think that will be enough to make the setup simple.

1 Like

So are you saying that there is something wrong with the setup? I think that the problem is with the ArduCopter code in this case, because controlling the motors worked really well for 3.6.9 (I could not see any problems and the copter was flying very reliably - I don’t mean the telemetry which I’ve setup only now). I had even a motor failure (one of the motor wires desoldered) and the copter maintained the flight without any problems, I’ve noticed the issue only when attempting the next takeoff.

To resume shortly: it looks as if the motors 6-8 were not controlled correctly but their telemetry is working. Is this possible? It has been suggested that these outputs are controlled by a different timer? I was browsing github for the changes after 3.6.9 and so far I could not see anything related… After installing 3.6.9 all the motors are spinning (but the telemetry still works only for 6-8).

EDIT: so are you suggesting that the first step would be to make certain that all the ESCs are running DShot at all?

Configuring Dshot For me it was fairly straightforward to follow the docs. I think the confusion comes from the different configs needed for diff hardware. For example with my PH4 mini I can only use outputs 1-6 and then 9,10. And then my CUAV cube it’s only aux 1-6

If there were some quick start guide that called out these diff types of caveats, that might assist others.

Maybe the problem is related to the firmware version (Pixhawk4, fmuv5, etc?)

However, it has been working for 3.6.9 (I haven’t setup the telemetry then but the drone was flying very reliably). You are saying interesting things about the aux outputs which can be used, maybe it should be somehow described in the docs? Maybe my setup shouldn’t be working and it was fine only by chance? Which controller can then handle 8xDSHOT ESCs?

EDIT: How about isolating the problem and writing a tester doing just one thing: driving the DSHOT outputs? Maybe it already has been done? Why 8 DSHOTs does not work for some controllers? Hardware limitations? Or not enough combinations of outputs and timers available?

In the description of Pixhawk 4 in the ArduPilot’s docs:

it is stated:

The 8 auxillary PWM outputs are in 2 groups:

PWM 1, 2, 3 and 4 in group1
PWM 5 and 6 in group2
PWM 7 and 8 in group3

Channels within the same group need to use the same output rate. If any channel in a group uses DShot then all channels in the group need to use DShot.

It says “2 groups” and then lists 3 - copy & paste from another hardware? Or it has been changed?

BTW why this page does not say directly which firmware version of AP should be used for Pixhawk4? As it has been explained in this thread, it’s “Pixhawk4”?

What do you mean by outputs? According to this description PH4 Mini has just 8 PWM outputs, so what is “9,10”?


It’s supports 11 outputs.

Perhaps your issue is related to this?

Pixhawk 4 aux outs

Probably yes… does it mean that I need to buy Pixhawk4-mini? Is the whole thing related to the BRD_PWM_COUNT parameter? But it still does not answer the question why I’ve got the working the DSHOT telemetry on outputs 7 and 8? And why I was able to fly the drone? Falling back to PWM?

These restrictions should be mentioned on the AP’s DShot support page. From what is written there I’ve deduced that any AUX outputs are good for DSHOT…

I would guess it wasn’t actually running Dshot.

The support page is not the place for that as it depends on the hardware and there are many boards supported. My suggestion is to type in a search engine “Ardupilot hwdef”. Locate your board in the list and if there is not a comprehensive setup page, which there is for the Pixhawk Mini, then open the hwdef.dat file and review the parameters. It’s obvious in most cases what the code means…

1 Like

OK, I agree that listing all the board options would be difficult, but at least there should be a remark: Not all FMU outputs can be used for DSHOT, check in the board descriptions:


Another thing to describe is what exactly BRD_PWM_COUNT means. According to the docs the maximal value is 8, but for Pixhawk 4 mini you are expected to set 11. Moreover, the parameter descriptions says: “Controls number of FMU outputs which are setup for PWM.” But it can also refer to DSHOT?

Is there no chance to get it work on Pixhawk 4? Mini seems to have some deficiencies, for example smaller power board with just a single Power Module (Pixhawk 4 has two), and soldering pads for 4 motors.

EDIT: it’s interesting to note that even the cutting edge Holybro Durandal (STM32H7) has just 5 DShot outputs according to the descriptions:


Does mean should we rather focus on UAVCAN-based ESCs?

Not 8 Dshot outputs no. As with all boards with an IO Controller those outputs don’t support it. And apparently this board only supports 6 of the 8 FMU outputs for Dshot.

There is a discrepancy between the Durandal board overview page and hwdef file. The hwdef file indicates 8 Aux outputs but it doesn’t explicitly say if all can be used for Dshot. So not sure.

Looking for a replacement, I can see that there is no DShot data for some boards, for example CUAV:


And also for Hex/ProfiCNC’s Cubes.

Do the DShot ESCs working in a PWM mode require calibration?

Most* “Dshot” ESC’s support all protocols, it’s auto detected on boot. And yes, if it’s running anything but Dshot calibratio nis advised.

*There is a post around suggesting a particular ESC will only run Dshot300 minimum.

So how to put the Racer Tattoo’s BLHeli_32 52A ESC in the calibration mode?


I can’t find any manuals, and a google search for “blheli_32 pwm calibration” is also not very helpful.

Maybe I should try running DSHOT for a higher speed?

Another idea is to fly with some ESCs running DShot and the two remaining ones running PWM. Not the best concept…

Dshot protocol is not calibrated. If they are running in PWM mode they are. Why run Dshot at all? On a big Octo I doubt you will realize any benifit.

Why DShot? You have telemetry and no need for calibration which I always didn’t like - lots of work with removing propellers, never sure if and when repeating calibration necessary, less accurate, problems at low temperatures etc.

And also better compared to UAVCAN where a single failed ESC can break down the whole bus?

But how to force DShot-based ESC into the PWM calibration mode?

You don’t need Dshot for ESC telemetry but no calibration is an advantage. Telemetry is a function of BLHeli32 not necessarily associated with the output protocol. And as I said PWM mode is Auto detected on the ESC’s and you don’t have to force anything. Set MOT_PWM_TYPE to PWM, Oneshot or Oneshot125 and calibrate with the transmitter as usual.

But how to do the PWM calibration for DShot ESCs? (with FC setup for PWM) Power up with the throttle stick at 100%?

Forget the fact they are ESC’s that support Dshot and follow this procedure for All at Once:

OK, I’ll try to fall back to PWM (in my setup) and do it, but is this documented anywhere in the BLHeli_32 docs? Or I will try to get back to my 3.6.9 setup and fly as then when it worked. I’m using the copter for 2x360 panos, so it was doing relatively short flights and all worked great. Replace FrSky telemetry with Mavlink…

It’s also very dependant on the hardware. My CUAV v5 nano can push shot on all pwm outputs. I guess it comes down to knowing what hardware you have and researching what it can do