BLDC waveform abnormality

brushless-dc-motor

I am designing a DIY BLDC ESC. I am able to detect the '0' crossing correctly (for the BEMF approach). It locks onto the '0' crossing (1.jpg).
Then it stays good for a couple of iterations (2.jpg). But then it slowly looses control (4.jpg) and finally looses it completely (5.jpg).
This happens a couple of times and finally it is lost as shown in 5.jpg.
Why so. Why does it not follow the commutation time properly. Please note that I am looking at '0' crossing only during the initial stages. I save the commutation time value when '0' crossing is detected and keep commutation at that saved time value only.
DO I need a dynamic '0' crossing. DO I need to keep looking for '0' crossing even after initial '0' cross detection !!!!

Reagards,
Vinod.
about to detect '0' cross
2[2].jpg detected initial '0' crossing
4[4].jpg slowly loosing it
5[5].jpg lost it

Best Answer

DO I need to keep looking for '0' crossing even after initial '0' cross detection !!!!

Yes !!!!

For one thing, the motor will speed up after the initial readings and your timing will be off. But even if you capture the zero-cross timing when the motor has reached constant rotational speed, there are still lots of reasons you need to dynamically monitor the timing. A tiny error in your initial reading (and you will always have error) will compound over time if you're running open-loop. Also, electrical and mechanical variations (mechanical vibrations, voltage/current inconsistencies, minute changes in the air resistance around the spinning motor, etc) will cause minuscule differences from rotation to rotation. All of these things will affect the timing. And those are assuming your load isn't changing. Obviously a changing load will have a huge impact on timing.

That said, it usually is possible to spin a BLDC at slow speeds in an open-loop system. But once you exceed a certain speed, it's no longer viable.