Low Speed and Low Load Use Cases: How to Design a Control Loop

This is a generic question for FOC Control. If the BLDC has very low load ( say only the motor it’s self), the BLDC is 28mm with 7 Pole Pairs. We have a 16bit encoder setup.

Let’s say we want to control it in run in a very low speed (say 2 RPM). An example would be the popular gimbal, where it could rotate very slow in a very stable matter (no obvious jitter).

If we are using only the speed loop, if the load the so low, the Iq would be very small such that it is sensitive to the cogging affects, but if we will increase Iq, the speed would be high.

I see some suggestion that it uses an outer position loop to have a position error with PID to give the speed loop a bit bias. I do not know if that’s the correct way.

Just want to know if there are popular and mature control setup on this issue?

Use angle mode and step the target position like how open loop velocity does it. It will go wonky if you keep spinning long enough due to floating point precision, and there’s currently no solution for it, but I wrote a proposal here a while back [FEATURE] An idear for shaftAngle & filter. · Issue #302 · simplefoc/Arduino-FOC · GitHub

Also it’s not a bad idea to add a check to prevent the target from getting very far ahead of the measured position, incase the motor gets stalled for whatever reason. Otherwise as soon as it can move again it will run at maximum speed until it catches up to where it thinks it should be.