After my field orientation control algo worked, I applied it to the quadrotor that I am building. Then, I noticed there are about 30% of chance of reverse spin in any of the hour motors. Then, things get pretty challenging, there are only about 0.7^4 of change that all motor will spin in correct direction. In real life, it is painful to start the motors.. Thus, this becomes the motivation of looking into high frequency signal injection. After pains taking a few months of learning and development, the high frequency signal injection method finally works for me. The motor now can reliably starts without backward rotation.
For anyone who might get some interests to this, the following is just a brief learning I got from this project.
Most of the outrunner brushless motors in drones' world can generally be categorized to surface mounted permanent magnet synchronize motor (SMPMSM). There are whole lot of papers out there to discuss the application of high frequency signal injection to this type of motor.
At somehow high speed, the back EMF is usually sufficient to reconstruct the rotor location by various methods, including but not limited to observer based and phase lock loop etc. At low speed or standstill, the back EMF is too low to make reliable estimation of rotor angle. This creates an issue that nothing can be used to estimate the rotor angle at low speed in normal driving condition without an external encoder. To enable the rotor angle detection, an external voltage signal is applied to the motor so by measuring the current from the motor to estimate the rotor angle. By the way, high frequency signal injection is pretty much the only existing sensorless method with reliable results at low or zero speed. From a different perspective, you need to use some energy to sense the rotor location when the rotor is in low energy status. Signal injection is kind of applying some energy to probe the rotor....
Signal can be in any forms. However, sinusoidal and pulses are most common choices in practice. After running through the math, the injected signal method can only narrow down the angle estimates to one of two possible rotor angles, which is 180 degree off each other.It is pretty interesting that picking one choice for driving the motor will cause the rotor to move to the opposite direction if drove the motor with another choice. Naturally, simply picking one choice will end up with 50% of chance of clockwise spin and 50% counter-clockwise spin.
To identify which of two possible angles is the actual rotor angle, another signal will be injected to the motor and utilize the stator inductance asymmetry to distinguish the actual rotor angle.
After knowing the rotor angle, the algo can continuously use high frequency signals to track the rotor angle to some reasonable rotor speed, then passes over to observer based method to save some energy...
As far as I tested, there is no reverse in 156 consecutive starts. It seems fairly good in resolving the reverse spin issue that I have with open loop start.
I actually saw quite a few master theses on this topic. The amount of work I did and the data collected in this project is most likely sufficient for a master thesis.... :)