Hey guys, I would just like to add a bit info to the post of @Owen_Williams.
Open loop control is a type of control that uses no sensors at all and exploits the hardware features of BLDC motors to control the motor position and velocity smoothly. Openloop control of this library is something what is very very similar to a stepper motor with very high mictrostepping resolution. The algorithm is controlling the direction of the electric-magnetic field of the stator and expecting that the rotor will follow, not knowing where it is really.
The same is true for the stepper motors. They just have huge number of pole pairs >100 I think.
Now the problem of this approach, since you are not measuring anything, is that you don’t know where is your rotor placed and you don’t know how much voltage should you apply, how much torque do you need. So you find some number empirically that works well and apply it all the time.
This means that the current passing through the motor pretty much constant the whole time, and not depending on the disturbances and needed effort. And therefore your motor will heat up quiet quickly.
Open-loop torque profile
This opens an additional question about the nature of current of the electrical motor. Motor torque is directly proportional to the current:
T = Ki*I
And electric current is proportional to the voltage V
you apply, the back-emf Vbemf
and the motor resistance R
.
I = (V - Vbemf)/R
Now since back-emf Vbemf
is proportional to the velocity w
you have an equation:
I = (V - Ke*w)/R
Which basically means that the motor current I
will drop as the velocity grows, but together with current the torque will drop as well:
T = Ki * (V - Ke*w) / R
So the higher the velocity the less torque the motor feels for the same voltage. This is the well known problem for stepper motors.
Open-loop vs closed-loop example
I like to think about it like stator is producing waves, like on a surface of the see. And the rotor is a ball on these waves, or maybe a surfer.
The stator waves depend on the current and for the purpose of this example lets consider that it is directly proportional to voltage (that it doesn’t depend on velocity and back-emf).
The open loop control of the BLDC motor would be something similar to this short animation.
Since you don’t know the rotor position you don’t know exact direction where to apply your voltage. So what happens is that you apply certain voltage to your stator (you fix the wave height) and your motor moves in a position to counteract the voltage (the waves) you applied. It moves to the equilibrium position, in between waves. Once when you start moving, you are moving your waves (applied volatge direction) to the right, as on the animation, and your rotor will follow the waves and always try to go back to the equilibrium position.
What you can see from this example is that this way of control is by no means optimal. Even then the rotor (ball) is completely static the waves are still there, the energy is lost, and when you are trying yo move the ball you are using just the small part of your wave to do it, just the lowest slope of your wave.
The closed loop (FOC) control could be depicted like this:
Since in the closed loop control you know exactly there your ball is you can apply the waves in the direction so that the ball is always on the highest possible slope. And you can choose what is the height of your waves you need to apply so that your ball moves with desired velocity.
You can imagine the torque that the rotor feels is proportional to the slope the ball is placed on. The famous 90 degree angle, which you can find in all the literature about FOC, means exactly this, the highest slope.
Now from these animations you can see that in the open loop, you not only use much more energy for doing the same thing but also almost never use the full potential of your waves (highest slope). Which would mean that with closed loop foc control, you will be able to achieve:
- Higher torque
- Lower currents