Skip to content

Introduction

neoxic edited this page May 2, 2023 · 3 revisions

The reason for starting this project was that I never liked how BlHeli starts a motor. Some of my models are construction vehicles with limited space inside and BLDC-driven hydraulic pumps, tracks and wheels. The motors constantly transition from a complete stop to some non-zero throttle, and BlHeli is not good at it at all.

At first, I used BlHeli_S, but besides being very rough on a motor, it starts the motor in a very convoluted way. Moreover, I could never really understand its settings, what the startup/rampup power is for instance, how it works, and how it can be 150%. It makes no sense. BlHeli_S also has a weird bug that manifests itself only in bidirectional mode in reverse. Sometimes, the motor spins forward for a noticeable time before reversing back. If the direction of the motor is reversed, it's vice versa - first backward, then forward. Take a look at my issue here for details: https://github.com/bitdump/BLHeli/issues/575

Then I switched to BlHeli_32. It's a lot softer, there's no "reversing bug", but after many tests, I had a feeling that internally, it inherits a lot from BlHeli_S in terms of motor control. In particular, the convoluted motor startup when there's a clear hiccup before it goes full throttle never goes away no matter what settings I try. Some motors are better, some are worse, but it's still there. In case of a hydraulic pump, for example, this means that there is always a pronounced lag before the pump reaches a set duty cycle. And since the pump is not constantly run (unlike props in multirotors), the lag is unavoidable.

Take a look at this video that demonstrates the problem: https://www.youtube.com/watch?v=zIUSYx_Ohqo

After realizing that BlHeli's authors are not going to solve the problem anytime soon, I discovered the AM32 project. I played a lot with its settings and code, but it didn't really work with my motors for some reason, and the code is quite messy to read. Internally, AM32 does lots of things in software while I prefer to use hardware whenever possible as well as bare-metal programming for maximum efficiency. As a result, I felt inspired to write my own simple yet efficient BLDC motor control firmware.

Clone this wiki locally