Noob question position accuracy

I have looked around in the forum and google it in internet, but maybe I miss the fundamentals to understand the problem or my search criteria are wrong.

What I would like to understand is the position accuracy of brushless motor in general.

When we talk of stepper motor it’s pretty easy, stepper with 200 steps/rev have an accuracy of 360/200 that is 1.8°, so each time I move the stepper of the motor it will move of 1.8 degrees (let’s forget about uStepping, backslash and so on), so If I want to have a sub degree resolution I need to use some gears to change the ratio, with 1:10 gear it will reac a 0.18° resolution.
This sounds simple to me.

Now with the odrive “setup” the motor spins to 270kv, so we are talking about many many RPM even with 1Volt, the encoder has a resolution of 8192 counts per revolution.
Assume I have no problem with torque and so on, if I attach such system to a robot arm directly with no gearing, is it correct to assume that we can move to 0.08° (ca. 360/8192) accurcy ?

If the answer is yes, increasing the encoder resoultion will always lead to a better accuracy or there is some mechanical limit in the system ?

Maybe I got it all wrong, but this dilemma is killing me.

Thanks to anyone that is willing to answer to my question, I need to clear my mind before buying this nice tool !

1 Like

Theoretically yes. You should get 360/8192 accuracy.

But, because of how the systems work, you’re really only going to get 360 / ~4096 accuracy (half resolution) because you have +/- 1 count of accuracy, at best. And that’s steady-state. Transient accuracy is less. And then there are issues with backlash and so forth inside your system. The stiffer the system, the more accurate your motor’s estimate of position is.

Thanks for the answer,

and I hope this question will be of help to others like me that are learning.

I wanted to add a clarification: Resolution ist not equivalent to accuracy. What you are probably referring to is the precision of the odrive position control.

Even though the resolution is increased by an encoder with higher CPR, accuracy might not.

Encoders are affected by systematic errors which result in nonlinear response throughout a revolution.

For example the stated accuracy of the CUI AMT10 according to the datasheet is 0.25deg which is worse than 0.08deg resolution.


BLDC motors do have a sort of step count, which is 3 commutation steps for each permanent magnet on the rotor. So for example the common configuration of 12 stator coils and 14 permanent magnets has 42 commutation steps per revolution, or 8.57° per step.

But ODrive uses a technique called field-oriented control, which measures the current flowing in the coils and applies voltage accordingly to precisely control the direction of magnetic pull, rather than just switching on one coil set at a time and waiting until the rotor pulls to it. Very good for both low speed (precise positioning) and high speed operation (compensates for the effect of current lag).

So the positioning accuracy depends on the accuracy of the encoder, and the ability of the control circuitry to supply precisely proportioned current to different coil sets. If the encoder is the more accurate of the two, then a motor with more permanent magnets will likely improve positioning accuracy.

1 Like

I see know, this is a very clear explanation.

Basically with FOC Odrive is using something like uStep of the stepper drivers, so there is a limit that can be the encoder resolution or the BLDC motor controller capability to have a high resolution FOC output.

The calibration function of Odrive is used to correctly set the FOC controller ?
Is it also use to synchronize the Encoder with the coil “position” ?
Can it be skipped if it’s done once in the factory and then saved (assuming the motor is not moved or by having a very high resolution absolute encoder) ?

1 Like