Electronic – Can a motor’s movement be improved to any arbitrary resolution

dc motormotorservostepper motor

For a project that I'm working on, I need motor rotation at extremely small increments — my desired resolution is about ~0.15 degrees per minimum rotation step.

Of course, most motors of reasonably cost don't offer this much precision, so I am trying to see if I can reach my goal using closed-loop movement with a low-cost motor.


Let's say I have access to output data from an encoder that can measure rotation to my required resolution (i.e., down to 0.15 degrees incremental angle).

My question then: Is it possible to interface such an encoder (its data forming a feedback loop) via a microcontroller to a motor, and get to any arbitrary desired resolution, or are there motor-mechanics based limits to achievable precision?


In terms of motor choice for this particular method:

  • Steppers: I suppose steppers are not an option since they are designed to move in certain-size steps and, even with my feedback encoder, I cannot instruct the stepper to stop in between steps.

  • Standard DC motors: Could I use my encoder data and then do a PID loop to move the motor and zone in on the target angular position each time? I suppose the settling time might be too long?

  • Servos: Could I add my own closed-loop control using my encoder either in addition to, or replacing the pot of, a cheap servo with low resolution? Thus getting it to move/step at my target improved resolution. Or are there design-specific limits to how precisely a given servo can move, which I cannot overcome?

Best Answer

You did not mention what min and max speed is required. I suppose you don't want to make any compromise in any parameter ;-)

With stepper and microstepper driver you can achieve better than 0.15 degrees resolution. But what is precision ? Probably wrong because there is motor and microstepping non-linearity and torque is low, dynamic range is low and extra problems come at very low speed.

You can arrange it as dual loop control with load encoder at outer loop. It should improve precision. Let say 13bit load encoder and 32 or 64 microstepping with 400 step motor might satisfy 0.15 precision.

Gearbox helps with torque and resolution but you also need dual loop control and no backlash if you want change direction. There is extra problem if there is a spring in gearbox. If yes then there is a force at output you need high frequency control loop. It might be even impossible to control system when you must consider this force. So expensive gearbox or back to direct drive.

You can substitute stepper with brushless 3 phase motor and encoder with or without gearbox and one or two encoders. Dynamic range and price go up. Torque ??? For high speed you need high bandwidth encoder/decoder. And it's very difficult to debug such a setup in real time as you almost cannot use breakpoints.

Generally when using encoders they must satisfy your precision needs (and not resolution only).

EDIT (as commenting is forbidden): AS5045/8 encoder: I think you need consider mainly non-linearity INL parameters in range of degrees which affects accuracy (worser than 0.15 deg). Also propagation delay in range of 100 us limits speed, 1RPS = 1/4096 = 244us per position tick.