Pixhawk (fmuv2) - BLHeli_32 Passthrought

Good day to everyone,

I’m trying to implement the BLHeli_32 passthrough in my pixhawk (fmuv2), which is running the latest version of copter (Copter - 4.0.3), according to BLHeli_32 Pass-Through Support — Copter documentation (ardupilot.org) and i’m not being very succesful.

Following all the instructions, i have connected my ESC signal to the pin 2 in Aux Out (

  1. The 8 “MAIN” outputs of autopilots using an IOMCU (like PixHawk and Cube), cannot be used for protocols other than Normal PWM and OneShot. On these autopilots, only the additional “AUX” outputs can properly support OneShot125 and DShot protocols. If you attempt to set a “MAIN” output to DShot, then normal PWM output will occur, even though it has been set to a DShot protocol.

), have set my Servo10_Function to motor1 (33) and then followed the rest of the video. Unfortunately, passthrough didnt work. Then, i set the BLH_Mask to servo10 and the BLH_OTYPE to 4 (dshot150) and, connecting the BLHeliSuite32 to the pixhawk using a baudrate 115200, again, i was unsucceful. Then i changed the baudrate to 57600, and i could connect to the ESC and everything seemed fine (got the passthrough to work). I disconnected the ESC and the pixhawk, went to connect again to the BLHeliSuite, and for my surprise, with the 57600 baudrate i couldnt connect to the ESC. So, i tried 115600 and now everything worked again.

At this moment, i’m not able to connect to any ESC using the passthrough. I know the problem isnt from the ESC nor the setup (cables, for example), because, connecting everything to an arduino, bootloading it with the blheli interface code, the passthrough works great (way better than with the pixhawk). Can someone point to what i’m doing wrong? It surely must be some configuration i’m missing (the other topic i found similar to my issue was this one Pixhawk 4, no BLHeli passthrough? Serial output jumbled? - Hardware / Pixhawk family - ArduPilot Discourse which the problem was solved by some configuration). What am i missing?

Any help is appreciated.

Thanks

PS: I’m trying to use the passthrough to use the BLHeliSuite32 motor tab to test my motors.

EDIT: I’m using iFlight Succex 55a ESC, which came stock with version 32.7 and by using arduino i have upgraded it to 32.8.

Copter 4.0.3 is old not the latest. The current Stable version is 4.0.7. So update that before trying to advance. After doing that post your parameter file and let’s have a look. Unless it just works.

Have just updated code, and tested the pixhawk cleared, and set up params from documentation mentioned above, didnt work. Also, tried to change BLH_Mask to servo10 and changed BLH_Mask to 4 (dshot150) and still ESCs can’t be detected. As requested, you can find attached the pixhawk params used in this last test. Again, simply by changing the connections to the Arduino (ESC signal and ground), everything works fine with the arduino. It must be some param i need to change that isnt mentioned in the documentation and that im missing.

Thanks

passthrough_test.param (16.9 KB)

On which port do you have the telemetry wire connected? In your param file I can’t find Serial protocol 16 anywhere, which would be ESC telemetry.

Keep in mind that you also need to follow this part of the documentation: https://ardupilot.org/copter/docs/common-dshot-blheli32-telemetry.html

You don’t need these unless you wish to run blheli ESCs for other (non-motor) functions, they can be 0
SERVO_BLH_MASK,512
SERVO_BLH_OTYPE,4

The other params look correct, provided your ESCs will do DSHOT150, I’ve had some that seem not happy with it. You could try DSHOT300
MOT_PWM_TYPE,5

and maybe SERIAL_PASSTIMO,30 to give more time for the connection to establish.

Thanks for your reply. From my understanding, i dont need to follow those steps. Those are only if you want to run with telemetry. For now, i dont need, so i dont have the telemetry attached. Correct me if im wrong.

What is perplexing is that the Arduino runs with dshot150 and runs everything just fine. But i Will try with dshot300 and will update (will do it tomorrow).
Thanks for all the help

The Tricopter config that I would use works fine with passthrough and Motor Test in both BLHeliSuite and Mission Planner (1 motor connected to Chan 9). Outputs configured as shown and attached parameter file for reference. Pixhawk 1 and a BLHeli_32 ESC 32.7 firmware using the latest Suite 32.8. I will add that I have a BLHeli_32 4in1 that had 32.74 and now 32.8 firmware and passthrough does not work.
Note: I flashed this ESC to 32.8 and it still works so the problem with my other ESC is unrelated to the firmware version.



Tri parameters.param (16.9 KB)

Have just tried with dshot300 and SERIAL_PASSTIMO set up at 30 and now i could connect to the ESC, but i’m getting the weirdest behaviour. If i try to check for ESCs while pixhawk is flashing Blue ( Disarmed, no GPS lock found), the check fails and the board goes back to flashing yellow (radio failsafe - dont have a radio connected). Now, i try to connect during this state (radio failsafe) and i succesfully connect to the ESC (weird that the BLHeliSuite32 shows me the ESC as being the #3 when it is connected to AUX pin 1 - set as motor1 and as #4 when it is connected to AUX pin 2 - set as motor2). I can write successfully to the ESC (tried by changing the LEDs). Everything seems ok. The next very weird behaviour is that when i go to the Motor tab in BLHeliSuite32, the pixhawk seems to be disconnecting the serial (goes back to radio failsafe and disconnects from Serial). I then have to go through all the steps again, connect pixhawk in BLHeliSuite32, search for ESC (which fails), search when pixhawk is in radio failsafe, which finds the ESC successfully and again, going to motor tab disconnects the pixhawk from serial (this behaviour happens both when i use the baudrate set as 57600 and as 115200).

Have just loaded your params to my pixhawk - without any change - and the only difference now is that the ESC is showing up in BLHeliSuite32 as being #2 when connected to AUX pin 9 - which you seem to have setup as being motor 1 also as i had. All the rest behaviours still happening, being that i’m not able to go to motor tab (dont seem that dshot150 and dshot300 made any difference).

Another thing you mentioned, about the upgrade of firmware to 32.8, my ESC came stock with 32.7 and yesterday i upgraded to 32.8 also (by using arduino, because with pixhawk i wasn’t being able to do - i thought the problem could be from 32.7).

Also, maybe if it helps, i’m using iFlight Succex 55a ESC.

Right, but in my case the Motor Tab is working. So it’s recognized but it doesn’t spin when using the Motor 2 slider in the Motor Tab?
As I mentioned I have ESC’s that don’t work with passthrough at all. The latest 4in1 from Aikon for example does not. I flash Betaflight to the board (it’s a Matek H743) to configure the ESC’s and then back to Ardupilot. Essentially the same thing you are doing with the Ardiuno.

No, the motor tab isnt working. The same thing happens as described in my reply to xfacta. By going to the motor tab, pixhawk disconnects itself from serial port. And is usual when you have a single ESC connected for it to show up as #2 or #3, etc (shouldnt be always #1?)?

So, i would be better off buying a cheap betaflight FC if i want to use passthrough? Why does passthrough work so well with betaflight but not with ardupilot? Is it possible to flash betaflight on pixhawk (can only find how to flash px4 ir ardupilot on betaflight FC)?

Thanks

Unknown, but one theory is there is a ton more stuff in the code path with Ardupilot. Read the thread on bi-directional Dshot and you will see some odd stuff going on having to do with timing. I realize we are not talking about BD shot here but the issues may be similar. There was an interesting dialog between an Ardu Dev and the BLHeli_32 dude. Not in that thread.

Regarding a cheap BF board for ESC programming, I have one of those. An old Naze32.

No, no BF target for Pixhawk.

So, the conclusion is that my problem is due to the fact that passthrough with ardupilot isnt that great (and it seems to vary from board to board and ESC to ESC), am i correct?

Can i control the motors from mission planner (im aware this question isnt related to this topic, which hardware), for testing purposes? Or only with an RC?

And thanks for all the help

There is Motor Test but I assume you have run that. This will run the motors but it’s just used for testing operation, order, direction and limits.

Is Motor Test’s throtle the real throtle the motor would receive in real flight? I’m asking this because using throtle at 50% I get like 10% of what i’m supposed to be getting (a 10inch prop consuming just 1.5A at 11.1V at 50% throtle is very strange - the problem seems very similar to this one, T-Motors BLHeli_32 - ArduCopter / Copter 3.5 - ArduPilot Discourse, but i have low rpm protection turned off).

It’s essentially unprocessed passthrough. Functionally it’s the same as Test Motors in BLHeliSuite but it respects configured motor order.

So, there is no reason for me to be getting 10% or even less of the supposed thrust for the same throttle that is shown in charts with the same motor and same propeller, correct? What can i have missed in this interface between mission planner/ardupilot/pixhawk/esc/motor?

image

Nothing to see there other than I don’t use Current Protection. The fact that it see’s only one ESC is similar to one of my setups using a Matek H743 and an Aikon 4in1 on 32.8. However another quad with a Kakute F7 Mini and an Ori32 4in1 on 32.8 works perfectly with the same configuration in Arducopter. Both running the latest 4.1.0-dev version. I just accept this and hope a future version of Copter will address it.

For this purpose, I only have one motor connected. Very strange then that i’m getting only 10% of the supposed thrust/current with the given throttle (from Motor test). Can i debug this in other way? Since i’m not able to run the Motor Test from BLHeliSuite32 yet…