DShot on IOMCU - it's here!

Good day @andyp1per

I wanted to thank you for this awesome development you did!

One question, where can I download a firmware image for the Cube Orange Plus? I downloaded both versions you shared in the link and they were not compatible with the Cube.

Maybe I’m missing something lol, please could you help me point in the right direction?

Much appreciated!

Hi @RonaldMeza unfortunately it won’t work with the Cubes because they (a) use an F100 and (b) use level shifters on the outputs make two-way comms impossible

Hello Andy,

This is very interesting update. May I ask, is it possible then to use bdshot configuration for the 4 quad motors connected on the FMU (as it is/was already implemented in bdshot firmware versions) and additionally have the front motor for forward flight on a VTOL configuration with dshot signal connected on a IOMCU pinout? I have a Pixhawk6x board.

With the new PR you would be able to do bdshot with all of these channels on a Pixhawk6X

@andyp1per Thanks for the quick response. I will try then and let the team know how it goes!

You need to be using this firmware - Bi-directional DShot on IOMCU - it's here!

1 Like

Hi @andyp1per ,

Thanks for the support! I did few tests on the betch to check functionality today. I used to have the dshot esc signals (4 VTOL motors) on first 4 pins of the FMU (servo9_function to servo12_function) with the official bdshot firmware. These work fine and I also have the motor rpm appearing in the status tab of mission planner.

Today I installed the V4.5.0-dev plane from the link that you shared. I checked again the VTOL motor dshot escs on first 4 pins of the FMU and they rotate fine and also get the escX_rpm for each motor as was with the official bdshot firmware…

Then I moved motor1 to pin5 of IOMCU (servo5_Function=33) and set accordingly the servo9_Function=0. The motor is able to run but I do not get any escX_rpm in thess cases. I also tried pin7 and pin8 of IOMCU.

(I have set BRD_IO_DSHOT=1 and selected in the SERVO_BLH_BDMASK the equivalent channels)

Watching your video explanation this is indeed the case. i.e. escX_rpm is not returned when setting bdshot channels on either pin5 to pin8 of the IOMCU).

Finally I tried on pins 1 to 4 to drive the dshot escs (selected in the SERVO_BLH_BDMASK the equivalent channels) however motors are not able to spin at all. What could be the reason, any idea?

EDT (pin1 to 4 tests): Are able to spin when I set all 4 servo1_Function to servo4_Function to motor1-motor4 and escX_rpm appeared too in Mission Planner. Then I tried to set 70:throttle to servo9_Function and also checked in the SERVO_BLH_BDMASK channel9 in order to be able to have the forward (plane) motor connected to dshot esc and get escX_rpm for it. However this seems that it doesn’t work (esc ‘complains’, from the motor beeps it seems that the signal is not dshot but PWM)

Bellow the list of messages from Mission Planner
06/12/2023 22:04:53 : IMU0: fast sampling enabled 2.0kHz
06/12/2023 22:04:53 : RCOut: DS300:1-4 PWM:5-8 DS300:9-12 PWM:13-16
06/12/2023 22:04:53 : IOMCU: 410 2003 411FC231
06/12/2023 22:04:53 : Pixhawk6X-bdshot 001F0023 34325102 34363336
06/12/2023 22:04:53 : ChibiOS: 3ef1657d
06/12/2023 22:04:53 : ArduPlane V4.5.0-dev (f611359c)
06/12/2023 22:04:53 : IMU0: fast sampling enabled 2.0kHz
06/12/2023 22:04:53 : RCOut: DS300:1-4 PWM:5-8 DS300:9-12 PWM:13-16
06/12/2023 22:04:53 : IOMCU: 410 2003 411FC231
06/12/2023 22:04:53 : Pixhawk6X-bdshot 001F0023 34325102 34363336
06/12/2023 22:04:53 : ChibiOS: 3ef1657d
06/12/2023 22:04:53 : ArduPlane V4.5.0-dev (f611359c)
06/12/2023 22:04:52 : IMU0: fast sampling enabled 2.0kHz
06/12/2023 22:04:52 : RCOut: DS300:1-4 PWM:5-8 DS300:9-12 PWM:13-16
06/12/2023 22:04:52 : IOMCU: 410 2003 411FC231
06/12/2023 22:04:52 : Pixhawk6X-bdshot 001F0023 34325102 34363336
06/12/2023 22:04:52 : ChibiOS: 3ef1657d
06/12/2023 22:04:52 : ArduPlane V4.5.0-dev (f611359c)
06/12/2023 22:04:51 : Internal Errors 0x3000
06/12/2023 22:04:50 : Internal Errors 0x1000
06/12/2023 22:04:50 : RCOut: DS300:1-4 PWM:5-8 DS300:9-12 PWM:13-16
06/12/2023 22:04:50 : Initialising ArduPilot
06/12/2023 22:04:50 : AHRS: DCM active
06/12/2023 22:04:50 : ArduPilot Ready
06/12/2023 22:04:50 : Airspeed 1 not initalized, cannot cal
06/12/2023 22:04:50 : Airspeed 1 init failed
06/12/2023 22:04:50 : MS4525[0]: no sensor found

EDT2: Something else (apart from forward motor test that I was not able to run using dshot esc yet). When I test the VTOL motors (which they spin and report escX_rpm in Mission Planner) I realise that after a motor test for instance test motorA the escX_rpm doesn’t return to zero even though the motor is not running anymore. It freezes to a non zero value. Perhaps it keeps the last rpm value just before the motor stops?

I have done a couple of further bug fixes and put up a v4 at the same link - please try and see if it fixes anything for you.

1 Like

Thank you @andyp1per. I tried V5 plane firmware.

I set all 4 servo1_Function to servo4_Function to VTOL motor1-motor4 and escX_rpm appears in Mission Planner when I perform motor tests. And yes now the escX_rpm value goes to zero when the motor test stops! So it seems to work fine.

I also tried the plane forward motor with a bdshot esc in servo9_Function=70 (i.e in FMU pin1). I played around with some ‘BLH’ variables and was possible to work when I set SERVO_BLH_MASK=256 (i.e. checked channel9). I tested the motor in manual mode and was able to both spin and get ESCx_rpm too. So it seems that everything it works fine!

Now I only have a practical issue, which might be easy to be solved in a next firmware update? The number of motor rotor poles of the VTOL motors (28) are different from the ones of the forward flight motor (14). However as far as I am aware there is only one SERVO_BLH_POLES variable which applies to all motors right? So I will not get true esc_rpm for either the forward motor or the VTOL motors depending of what I will set on the SERVO_BLH_POLES variable (14 or 28). Could it be that there is an extra variable for the forward motor(s) poles?

In any case thanks a lot Andy for your efforts and solutions! Really appreciated, (I have read many of your valuable posts in the forum)

The way that you can currently solve this is through scripting there is a scaling function on the ESC telemetry which allows you to set scaling for different ESCs. Motor configurations can be almost infinitely complex so its difficult to see how we could provide a reasonable configuration solution for this.

2 Likes

Thanks again Andy, I understand. Regarding scripting, do you refer to Lua scripting or another way? Do you have any link at hand regarding scripting in general? I am not familiar but I want to try!

Something else, I used SERVO_BLH_RVMASK to reverse VTOL motors in the latest official firmware. With the 4.5dev firmware V4 in the link (the one that you shared and I use now for testing) I tried and it seems that this functionality isn’t working. I had to reverse esc/motor wires to set the correct rotations.

Via LUA

For SERVO_BLH_RVMASK which motor were you trying to reverse? Are you saying it doesn’t work on IMOMUC or is broken on AUX?

Morning Andy.

I noticed that on 4.4.3 with my Durandal FC that there are no dshot output on the main servo outs.

Is dshot still only available on the Aux servos on 4.4.3?

image
image

Durandal should work, but only with dshot - which firmware are you using?

I am using 4.4.3 at the moment

Only works in master

Yup. Downloaded master

image

Not sure if this helps but in addition to the info as per Mission Planner.

BLheli32 suite also only picks up the motors when they are connect to servo 9 to 12

BLheli passthrough is not supported on IOMCU

4.4.3 is not master - should be 4.5