Only Dshot-1200 working on Pixhawk 6C and FETtec 30A 4-in-1

The build I’m working on uses a Holybro Pixhawk 6 Mini and a FETtec 30A 4-in-1 ESC.

This is the first time I’ve used either device.

I initially set MOT_PWM_TYPE so that Dshot600 would be used. It doesn’t work. I chose this because the wiki suggests using it.

Trying other options, I found that using PWM and Dshot1200 both do work with this equipment.

FETtec advertises that this ESC supports Dshot 300-2400. But this ESC’s firmware may have a bug.

I don’t know how ArduPilot supports Dshot on the Pixhawk 6. I’ve only used CubePilot Cubes in the past. I don’t know if the flight controller electronics might be the issue.

For this build’s mission, using PWM is probably satisfactory.

If we try using Dshot-1200 - are there potential down sides to be aware of?

In case it’s possible that ArduPilot might have an issue with other Dshot speeds on the Holybro Pixhawk 6C Mini - I thought I’d mention this so if any DEV’s are curious they could take a look at it.

Thanks!

There is a FETtec template in ArduPilot methodic configurator >= 0.9.7. It uses the superior native FETtec protocol. That template was directly provided be Torsten Zunker (@TeeZee) the CTO of FETtec.

Interesting - and thank you.

Is there any information available to learn how to use this protocol? If it requires using a serial port and the FETtec telemetry (one-wire) connection, I’d probably pass on it.

BTW - “superior” how? And who’s asserted this? Is there any data?

And to the point of my post - is there anything about ArduPilot and the Pixhawk together that create an issue using lower than Dshot-1200?

I know a lot of people say FETtec ESC’s are superior. But I can’t see this. Especially when you compare it with the features of BLHeli_32. (yes I know - that’s now defunct)

But if anyone can speak to the superior features of FETtec ESC’s - I’d like to hear about them.

Thanks!

Two comments. One of the founders of FETtec (The “F” in the name is not for “Field”) was also a developer of Dshot. There are numerous interviews around with him and his partners extolling the virtues of a protocol developed after Dshot. And one-wire is nice.

Interesting - Thank you.

My point is still: is there is a compatibility issue using ArduPilot on a Holybro Pixhawk 6C Mini that makes Dshot-1200 the only Dshot protocol that works with my FETtec ESC? (Or any other ESC?)

There’s such wide adoption of CubePilot flight controllers among ArduPilot users, I don’t have any visibility to potential issues on other flight controllers such as the Holybro product I’m using. Are they tested as thoroughly? Maybe my specific problem is simply an undocumented limitation of the FETtec ESC. But I think it would be good to know either way.

Secondly - if we choose to go ahead and use Dshot-1200 - is there a down side?

If you could please take a few minutes and share your experiences on why you think one-wire is nice, I’d really appreciate the information.

Thank you!

https://ardupilot.org/copter/docs/common-fettec-onewire.html

On FETtec:

  • the F Stands for Felix that is the one the created Dshot
  • the E is for another person that I have not yet meet
  • the T stands for Torsten @TeeZee that developed the AdruPilot FETtec device driver together with me and Peter Barker.

You already met @TeeZee on the configurator thread

The protocol is superior because of it’s simplicity, DShot uses timing between edges that need to be decoded one bit at a time using DMA and interrupts. FETtec needs a simple UART that works 8 bits at a time. You get all the data with less processor load.

And just look at the source code to see the differences in complexity.

DShot600 is the recommended one, because it the most used and tested. DShot1200 probably works fine, but you need to test it, and there are no benefits over BDshot600. Unless you are building 400g vehicles with very high dynamics.

I tested it on a couple different ESC/FC combinations and it was not stable. That was a couple Arducopter revisions ago so not sure what we have today. But realizing that most couldn’t tell the difference in flight performance between PWM and Dhsot 600 I don’t think the Dshot protocol matters much. I use Dshot600 on everything except where Dshot300 is required on IOMCU outputs.

2 Likes

OK - thanks for that.

I’d read the ArduPilot wiki about FETtec.

Maybe with what I’ve learned so far, it will make more sense when I read it again. BTW - there’s a note at the bottom of the wiki that says something about 2M baud and half duplex not being available. Both show up as options in Mission Planner.

You may recall I struggled figuring out how to run the FETtec configurator - using the info on the wiki. I got a helpful reply back from @TeeZee . It’s really something to have to make a hardware implementation of half duplex. Fortunately, it was easy enough to make a harness pig-tail that allows quick hook-up to my USB/serial adapter. I simply incorporated the required diode into the harness. Works great - except that the ESC telemetry port is tied up, and not available for implementing the FETtec protocol.

The documentation and @TeeZee reported that the serial connection for communicating to the ESC requires 2M baud. I found it works fine at 115,200 - and just about any other baud rate I tried. That left me wondering how well this device is documented and understood.

It’s nice to know that the firmware is elegant and concise. But as an implementer, not a developer, that’s not an advantage. Any advantage would stem from operational considerations - i.e. more efficient, more responsive, better telemetry. And as my missions are automated, not FPV, things like latency are less important.

Given the large number of FETtec specific parameters and parameter options, I get the impression that the DEV’s have been pretty enthusiastic about this ESC. I just wish I knew why. My best guess is the thrust has come from people with large high-power aircraft - where there aren’t ESC’s large enough and still support BLHeli_32 to get sinusoidal commutation. Or maybe it’s the FETtech implementation of FOC. But that’s just a guess.

Any idea why Dshot1200 works for me - but slower Dshot does not?

I’m guessing that there’s might be something a little different in the Holybro Pixhawk 6C Mini electronics that ArduPilot firmware doesn’t like.

I’ve never had a Dshot capable ESC not work using Dshot 600. But I’ve never used a Holybro Pixhawk 6C Mini before.

I’ve never used a FETtec ESC before either - so maybe even though their docs say Dshot 300-2400 is supported, maybe their firmware only supports Dshot 1200 and higher.

I’d be interested in hearing from @TeeZee about this.

No.I have never heard that reported before on any combination of ESC’s/FC’s.

Why are you not using the serial protocol? I didn’t read thru your other post.

By “serial” protocol - do you mean the FETtec specific protocol?

I didn’t choose this FETtec 20x20 ESC - I’m helping out a team that selected it. I think their reasons were it’s small 20x20 form factor and the praise for FETtec among the ArduPilot crowd. Frankly, a half price 20x20 SpeedyBee ESC running BLHeli_S would have worked just as well.

When I got started with this ESC, my plan was to just use Dshot-600, and BLHeli pass-through for configurating.

I had no idea that FETtec had a proprietary signal protocol, and special wiring requirements to support it.

Since the FETtec docs talk about BetaFlight passthrough (and KISS) and that the ArduPilot wiki on the BLHeli pass-through say it’s for BLHeli and other ESCs - I was really surprised that the ArduPilot BLHeli passthrough doesn’t work for their configurator.

Then when @TeeZee showed me how to hard-wire a half-duplex connection to a serial port - I began to understand why BLHeli passthrough didn’t work.

My guess is that if you implement the FETtec protocol with proper wiring and ArduPilot protocols, you could get some sort of pass-through working via ArduPilot - but that isn’t clear to me from the wiki.

Some of the things that mystified me in the wiki (or maybe in a Discuss thread) was something about the four motor leads needed to be connected in parallel. And then there’s the note about half-duplex and 2M baud not being supported - which it appears to be. The docs were a challenge for me.

Maybe if the wiki were re-written so that someone can see the connectivity options and their tradeoffs I might have gone a different route. Or maybe I just had too many assumptions in my head when I read it - and I failed to properly understand the wiki.

As I understand it now - there are three basic connectivity functions:

  1. the motor signals from the flight controller to the ESC.
  2. The telemetry signal from the ESC to the flight controller.
  3. The FETtec Configurator connection to the APP running on a PC.

From what I understand so far, if you don’t implement 2) above, then the only way to accomplish 3) is to use the hardware half-duplex wiring that @TeeZee provided for me.

If you can help clarify my thinking on any of these details, I’d really appreciate it. Thanks!

I don’t have any of these but I did help another forum poster get it working just from the documentation. It’s on here somewhere. But yes, you have to connect the TLM port on the ESC to the Rx of a UART and all the signals leads, up to 12, parallel connected from the ESC to the Tx of the UART. I don’t recall how the configurator was accessed. But surely this is the approach you would want to take I think. I would guess it’s the primary reason people use these. Well, perhaps now it’s because BLHeli_32 is a dead end street.

Can you please explain the “parallel” connection from the ESC to the UART?

Does that mean the motor signal wires from the ESC don’t go to the MAIN or AUX ports at all? That instead they go to a UART on the flight controller.

And by “parallel” does that mean simply connecting all the motor signal leads together?

I don’t recall seeing any diagrams in either the ArduPilot or FETtec documentation about this.

Most hardware vendors that target ArduPilot users include how to wire and configure ArduPilot and flight controller for their products. FETtec would benefit by doing this.

I get the feeling that the ArduPIlot firmware was just starting to support FETtec ESC’s when they started becoming popular - so there may not have been good coordination on documentation.

What I don’t quite understand is that the “native” flight controller firmware that supports FETtec is KISS and BetaFlight - both are FPV oriented. How is it that the ArduPilot DEV’s got so involved?

And this Joshua Bardwell YouTube mentions a few interesting things: https://youtu.be/xbDnRMsqH34

We’ve blown three of these things in the workshop. Sounds like we’re not alone.

At the bar now but tie all the signal leads from the ESC together to a common lead and connect it to the serial port. It’s a serial protocol ,each ESC has its own address. There is a Wiki page. Google “arducopter fettec”.

1 Like

The ArduPilot FETtec device driver is hardcoded to 500000 baud so it ignores the SERIAL*_BAUD values that you configure and uses the correct value.

  • It is more efficient less processor load
  • it is AFAIK as responsive
  • the telemetry does have a checksum to improve quality
FETtec wiring BDShot wiring
GND GND
Rx servo 1
Tx servo 2
servo 3
servo 4

Less wiring (3 vs 5), less failure points. And it gets even better on octa-quads (3 vs 9)

Connections are clearly explained in the connecting section of the documentation

Not quite as many as Dshot:

FETtec parameter BDShot parameter
SERVO_FTW_MASK SERVO_BLH_MASK
SERVO_FTW_RVMASK SERVO_BLH_RVMASK
SERVO_FTW_POLES SERVO_BLH_POLES
SERIALx_PROTOCOL MOT_PWM_TYPE
SERVO_BLH_AUTO
SERVO_BLH_TEST
SERVO_BLH_TMOUT
SERVO_BLH_TRATE
SERVO_BLH_DEBUG
SERVO_BLH_OTYPE
SERVO_BLH_PORT
SERVO_BLH_3DMASK
SERVO_BLH_BDMASK

No, not really, but the DEVs (@TeeZee, @peterbarker and I) did document it nicely in the wiki and in the ArduPilot README.md

Well … now you know. A simple to configure, easy to wire, reliable (checksum) protocol.

PS: the checksum is not that good given the length of the payload, but it is better that nothing.

Thank you for such an informative response - I appreciate it.

When I first read the wiki, I had my mindset fixed on how BLHeli_32 worked. I learned that this mindset is all wrong for FETtec ESCs. But because I was unaware - I found the ArduPilot wiki really confusing.

As a suggestion, perhaps an introduction and overview might make it easier for others looking to use FETtec ESCs. As far as I know, the FETtec architecture is unique - so anyone it for the first time is likely to have a significant learning curve. I’d be happy to help draft the language if that would be helpful.

When I mentioned that BLHeli_32 had more options, I mean the operational options for the ESC itself:

My mention of 2M baud pertains to a direct serial connection to the ESC - per FETtec docs and comments in my thread from @TeeZee

Example:

I have to go back and read the wiki again - but it sounds like the FETtec configurator can’t be used when the ESC is connected to the flight controller and ArduPilot - it must be disconnected and connected to a serial port on a computer instead. I hope I’m wrong about this. But if not - that is a significant burden on the implementer and operator.

Once again - thank you for the additional information!

As of NOV23 passthru was not supported so I suppose that’s still true. That does add a hassle factor. Reminds of when I used to use a $18 FC running BF to configure ESC’s.

@TeeZee tested ArduCopter 4.5.6 passthru last week and could not get it to work.

So AFAIK in September 2024 you still need a $18 FC running BF to configure FETtec ESC’s.

The information on the wiki is still correct:
A halfduplex 2MBaud/s serial connection is required for the use with the FETtec configurator.

Cool! I still have that board. Next 4-in-1 I need I’ll try one out.

You don’t need a flight controller running beta flight to use the FETtec Configurator. @TeeZee shared an informative video of how to make a simple half-duplex wiring that allows you to use the configurator with a simple usb/serial adapter. It works great - and is super simple.

@TeeZee illustrated the wiring using a breadboard - but I made a simple wiring setup with the required diode. Since I’m not using One-Wire - its all part of the ESC connection to the copter - I used a PH connector so you could simply plug in the connection bit with the diode. If you’re using One-Wire, you’d have to disconnect the JST-SH from the ESC, and replace it with one with the necessary wiring to use the USB-serial adapter.

And it works at all the baud rates I tried. I settled on 115200.

It does appear like the published information about all this is either inaccurate, incomplete, or out of date.

I’m guessing that FETtec doesn’t anticipate many ArduPilot users. If it did, they would have included wiring instructions for One-Wire - where the four motor leads are connected together for UART. (the TX, as I recall - I can’t remember off hand)

Reference: FETTec OneWire ESC - getting the FETTec Configurator to work