In my last article I showed how you can get RPM filtering on your AIO flight-controller with BLHELI_S. Since then I heard from couple of people that they seem to have fried the ESC’s on their NamelessRC AIO 412(T) after flashing JESC. They did everything as per tutorial - we double checked versions, magnet count and everything else we could think of.
TLDR: DO NOT USE THE RECOMMENDED HEX FOR THE NAMELESSRC NLRC AIO 412(T) when flashing JESC.
I opened an issue in the JESC repo and contacted NamelessRC on facebook. In the meantime I tried to collect some data about working setups and those who burned theirs ESC’s. Turns out that most people that were flying on 2S seem to have no issues (although some reported of high core temperature in Betaflight), but everyone on 3S or 4S had issues.
Shortly after finding this out, NamelessRC came back to me. One of their engineers investigated the claims and found out, that the issue does not occur with a different version of the JESC firmware.
The NamelessRC engineer recommends using the firmware version P-H-90 instead of P-H-15 that the ESC’s are originally flashed with.
UPDATE: After some more investigation by the JESC developer, it turns out, that the BLHELI_S version flashed from the factory has a deadtime of 120 - a deadtime that is not even available in the official BLHELI_S builds. Since BLHELI_S versions can only be tagged with two digits, it seems that the NameLessRC decided to simply tag their custom version with 15. A fatal error that is bound to break stuff when people start updating their ESC’s. So the problems will even occur when flashing the “original” BLHELI_S version, tagged with P-H-15.
To flash version version P-H-90 you have to check the checkbox for ignoring ESC layout in the JESC configurator.
CAUTION: Deadtime is derived from the characteristics of the FET’s based on its datasheet.You should not flash firmwares with different deadtimes in order to tune your quadcopter. It is the responsibility of the ESC’s manufacturer to have the proper firmware flashed.
Great - but what is the difference between those two versions?
After consulting the BLHELI_S manual I managed to shed some light on the number sequence of the firmware:
The first character can be anything from A-W and indicates the variant of the MCU. Variant in this context is reflecting how the pins are connected to the FET’s and other peripherals on the MCU.
The second character can be either H or L, H(igh) being 48Mhz and L(ow) being 24MHz, representing the clock speed of the MCU. The number on the end is the FET deadtime.
But what exactly is the deadtime and why does the issue go away with a higher deadtime?
This is a very simplified version of what an ESC does, just so I can explain what deadtime actually does.
The ESC’s job is to switch the power to the three motor wires quickly after one another in order to get the motor spinning. With each step two of the three wires are connected to ground and positive and are then quickly inverted. In the first half the magnet is attracted and in the second half the magnet is repelled. If we label our motor motor wires A, B and C one cycle would look like so:
- A+ B- (attracting)
- A- B+ (repelling)
- C- B+ (attracting)
- C+ B- (repelling)
- C+ A- (attracting)
- C- A+ (repelling)
those six steps are then repeated ad Infinitum and make the motor spin. The quicker this is done, the faster the motor spins.
The Mosfets task is to connect the motor wires to ground and positive - so basically each motor is driven by six Mosfets. Two for each wire, one connecting the wire to ground and one to positive.
During the inversion step, where we are transitioning from attracting to repelling the magnet, the Mosfets connect the same wire to plus and minus, resulting in a short circuit. To be more specific: the Mosfet currently connecting the wire to minus is not fully open yet and the one connecting the wire to plus is not fully closed:
This results in an effect called shoot-through, which is basically a short circuit. This only happens for a very brief amount of time, but results in a lot of current being drawn, heating up the Mosfet and ultimately killing it.
This is where deadtime comes into play. This is the time that the Mosfet has to wait between switching the wire to either ground or positive. Basically the wire is disconnected from positive by the first Mosfet, the second Mosfet waits deadtime amount of time and then connects the wire to ground.
Higher deadtime improves the issue of shoot-through. Ground and positive are if at all only shortened for a short time, less current is drawn and the Mosfet stays cooler.
Does it work?
As mentioned before, I did not run into this issue with my 2S setup. But I nevertheless flashed P-H-90, simply to see what happens. I could not notice any difference in flight characteristics.
Until now I have no confirmation that it indeed works with 3S and up - so should you dare to try, I would love to hear about it.
One interesting thing to note is, that at least one person reported, that their setup was working fine on 3S before upgrading to JESC. This is what I do not fully understand yet - why did the low deadtime not cause trouble on the original BLHELI_S setup?
One possibility, mentioned by the JESC developer is, that the initial firmware was indeed P-H-90 simply tagged incorrectly as P-H-15. When updating the firmware, the configurator would go for version P-H-15 resulting in the wrong firmware to be written to the ESC. Reverting to the original BLHELI_s version would then of course also result in the wrong version to be flashed.
NamelessRC told me, that this is in fact not the case. They state that P-H-15 is in fact the version they flash at the factory and we should use P-H-90 if we want to flash JESC.
Chris is a Vienna based software developer. In his spare time he enjoys reviewing tech gear, ripping quads of all sizes and making stuff.
Learn more about Chris, the gear he uses and follom him on social media: