One of the major challenges when working on my custom open source ESC was to get good startup torque and low-speed performance with sensorless motors. This challenge has been addressed in several places around the net:
- Here is one article where Team Novak explain why sensored systems are superior to sensorless systems: http://teamnovak.com/tech_info/view_article/24
- This article about electric scooters has some information about that topic too: http://www.instructables.com/id/The-New-and-Improved-Brushless-Electric-Scooter-Po/step4/Controlling-the-Outrunner-Sensorless-or-Sensored/
- The metroboard has modified motors with hall sensors: http://metro-board.com/brushless-outrunner-motor-testing/
- The marbel electric skateboard also uses hall sensors: http://howtomakeanelectricskateboard.wordpress.com/2014/06/22/marbel-kickstarter/
- Here is a video of an electric longboard with a standard sensorless hobby ESC. There are obvious startup and low-speed issues: http://www.youtube.com/watch?v=SNt70MdUh0Q
Techniques I used
In order to get a smooth and quick startup without sensors I used several tricks, namely:
- There are no hardware low-pass filters that introduce phase delay. Such filters can be avoided because the ADC samples are synchronized to the PWM timer and adjusted dynamically every time the duty cycle or switching frequency is changed.
- After a zero crossing, the area under the voltage is integrated until a threshold for commutation based on the motor parameters. This integration is robust agaist acceleration and provides good SNR since an integrator is a low-pass filter.
- There is a parameter that defines the voltage coupling between the windings when measuring the back-emf. This make a huge difference when running at low speeds with low duty cycle. This compensation has a RPM dependence though, which is something I tried to avoid where possible because the RPM estimation has a delay and thus causes problems during acceleration.
- To get better voltage samples, the switching frequency is adaptive and proportional to the duty cycle. This is because the back-EMF only can be sampled during the ON-time of the PWM cycle and low duty cycles have short ON time. Since the motor is running slowly on low duty cycles, sampling and switching does not have to be as fast to keep up with the motor which makes this less of a problem. Lower switching frequency also decreases switching losses, which is a positive side-effect.
- When the motor is un-driven, the back-emf on all phases is analysed to track the position, direction and speed of the motor. So when the motor is already spinning, the algorithm will begin in the exact state of the motor (position, duty-cycle, direction).
- I have also used some hack-ish conditions based on trial and error to improve the startup.
- Closed loop operation is used from the first commutation, since the measured values are clean enough when using these techniques.
This is a video where I demonstrate how this works on a scorpion outrunner and an electric longboard:
Some examples with plots
** Note that all the plots show the voltages samples captured by the motor controller, which are synchronized to the PWM timer. It would look different on an oscilloscope since the switching distorts the signal. **
This is what the phase voltage for a typical startup sequence looks like, where the duty cycle is set to 5%:
Even though the duty cycle is only 5%, the waveform is clean. This is because the switching frequency is low at this speed and the on-time is long enough to get good samples. The first commutation is a bit off at first since the motor is not perfectly aligned, but the second commutation already looks perfect.
Here is another example with 35% duty cycle:
And this is the measured current for the same startup:
Here the phase voltage has some commutation spikes in the beginning because the current is quite high during acceleration, but even so the commutations are even and clean.
Here is an example where the duty cycle is ramped towards 100% rapidly:
Again, because of the current, there are commutation spikes on the voltage. The voltage from my lab power supply is also dropping because of the load. Even so, the commutations are even and clean.
Here is one unusual case, for which I had to restart the motor 20 or 30 times to get it captured:
The first commutation happens to be exactly at a position where no torque is produced, which is as sub-optimal as it can get. On the current waveform, it can be seen that the current limit of 60A is applied. After 40 millisecond, the algorithm decides that nothing has happened for a too long time and adds an auto-commutation. After this, the motor is tracked right away and the commutations are nice and even. This works even though the motor was stalled with 60A for a while.
Here is one example where I start the motor, switch off power after a few commutations and then switch on power again:
It can be seen that the un-driven back-emf is tracked perfectly while the power is gone and no commutation is missed or distorted during the transitions.
The electric longboard I have been working on starts perfectly smooth without sensors (see the video above).
I have also tested this on a 700w hub motor on an electric bicycle with extremely good results. Full throttle from a complete stop is smooth and no problem at all. I don’t miss hall sensors here one bit.