My bi-directional dshot PR is up and working well for me: https://github.com/ArduPilot/ardupilot/pull/15636
Support for bi-directional dshot requires some careful DMA and timer rearrangement which currently I have only done for KakuteF7Mini and OmnibusF4Pro. I’m keen to expand this support to more boards and work through issues as I find them so am looking for some brave souls to alpha test for me.
The changes are at the very heart of motor control so not suitable for using on anything of any value and really not suitable to be used on anything of any size - best used on small crashable quads. If you fall into that category and would like to help please post here with what board you need a build for and I will see what I can do. Please note you need to already have configured your quad for dshot with telemetry, have BLHeli 32.7 installed on your ESCs and have configured and tuned the dynamic harmonic notch. If you don’t have these pre-requisites then there is little point in testing.
Bi-directional dshot can be enabled on flight controllers without IOMCU by setting
SERVO_BLH_BDMASK=15
For flight controllers with an IOMCU set:
SERVO_BLH_BDMASK=3840
Builds for various boards can be found here
To initially see if it’s working set
SERVO_BLH_DEBUG=2
And look for debug messages using mavproxy. The rpm should not be 65535 and the error rate should be close to zero. You will not get rpm values above zero unless you have motors connected and they are turning.
UPDATE: I have now done a decent set of test flights on a KakuteF7Mini 3" Quad with good results. Control was good. No problems observed. Safe enough for further testing now.
Boards verified in flight
- KakuteF7Mini
- OmnibusNanoV6
- Pixracer
Boards verified on bench
- OmnibusF4Pro
- Pixhawk1-1M (loses external SPI)
- MatekF405
Boards ported but not tested
- Pixhawk4 (loses dshot on Aux5/Aux6)
- OmnibusF7V2
- fmuv3 (loses external SPI)
- fmuv5 (loses dshot on Aux5/Aux6)