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?

  • 1
    \$\begingroup\$ If you need less than one turn then I think you want a servo. The hobby servo's are pretty thin spec-wise when it comes to resolution. This guy,nikhiljgeorge.wordpress.com/2012/08/24/70 says an MX-28 might meet your specs. \$\endgroup\$ Commented Oct 16, 2014 at 13:08
  • \$\begingroup\$ @GeorgeHerold: Yes, that Dynamixel servo does better than my specs indeed, but at a cost of $220, it's a hard sell; hence, I'm trying to see if I can instead solve the problem by dynamically controlling an existing motor given that I do have access to a sufficiently precise encoder. \$\endgroup\$
    – boardbite
    Commented Oct 16, 2014 at 14:09
  • \$\begingroup\$ It's a bit of a throwback, but have you considered a synchro or resolver? \$\endgroup\$
    – Dave
    Commented Oct 24, 2014 at 22:02
  • 2
    \$\begingroup\$ You want a stepper then just use gears to achieve any resolution you like. Servo can work also but is more trouble to set up and stepper is just easy. If you take a DC motor and make a PID loop to control it then you have reinvented the servo. \$\endgroup\$ Commented Oct 26, 2014 at 19:31
  • 1
    \$\begingroup\$ Since you will trade speed for force and accuracy you can use a relatively tiny motor to actuate a large load slowly. At some resolution vibration from the motor or any external vibration will limit accuracy. The common solution is to just make the load heavy. Beyond that some kind of suspension to absorb vibration. Check out the mechanism in a microscope. Dealing with high forces gets you into mechanical engineering. You may have to worry about stress and strain deforming your system. Again, make it big and heavy. \$\endgroup\$ Commented Oct 28, 2014 at 12:23

5 Answers 5


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.

  • \$\begingroup\$ Thanks for addressing the various factors. As far as the last suggestion ("brushless 3 phase motor and encoder") -- can you expand on this a bit? Why is this preferable to stepper? Wouldn't using a brushless DC motor (assuming with PID loop) imply back-and-forth oscillations about the target point due to overshooting, until we finally settle on the destination? Also, note that I am using a very high bandwidth encoder (magnetic encoders from AMS). \$\endgroup\$
    – boardbite
    Commented Oct 25, 2014 at 20:32
  • 1
    \$\begingroup\$ Brushless provides wider dynamic range, stepper is limited by max.velocity because of resonance problem. The main task is PID tuning to avoid overshooting. But it's not problem of brushless motor but any system with feedback (i.e. PID). What is resolution and accuracy of magnetic encoders (I've visited ams.com but no success to find quickly a comparision list or so). \$\endgroup\$
    – TMa
    Commented Oct 25, 2014 at 21:31
  • \$\begingroup\$ Here are the encoders I'm referring to (see, e.g., AS5045 or AS5048): ams.com/eng/Products/Position-Sensors/… \$\endgroup\$
    – boardbite
    Commented Oct 26, 2014 at 5:26

It is possible to microstep stepper motors. If you get the correct drivers, they can interpolate the steps into a large number of subdivisions. I have seen drivers that can do 256 microsteps per step. With 1.4 degrees per step a pretty standard figure, you only need ~10 microsteps per step to get 0.15 degrees per microstep. 8 microsteps would give you 0.175 degrees per step, and you can get all-in-one microstepping driver chips from Allegro that can do up to 8 microsteps per step. I used the Allegro 3977 a few years ago for a project. 16 or 32 microsteps per step would give you 0.0875 or 0.04375 degrees per step, which should be more than sufficient.

  • \$\begingroup\$ Microstepping might be the best option here if the torque requirement is low. Microsteps generally don't hold their position very well against a load, but if there's hardly any load, they're great. Much more precision with zero backlash. It's basically driving the motor with sine waves instead of squares and stopping at arbitrary points along the waveform. \$\endgroup\$
    – AaronD
    Commented Oct 16, 2014 at 3:05
  • \$\begingroup\$ If you add closed loop control on top of microstepping, it could be a decent solution. Adding a microstep or two to oppose an external torque is probably rather effective. However, if you have a fine encoder, you might as well use a DC motor. \$\endgroup\$ Commented Oct 16, 2014 at 3:08
  • \$\begingroup\$ @AaronD: But let's say there is significant load -- I'm somewhat new to stepper motors but won't the inertia make microstepping practically not-useful in terms of maintain accuracy? For example, this article talks about microstepping. \$\endgroup\$
    – boardbite
    Commented Oct 16, 2014 at 5:22
  • 1
    \$\begingroup\$ The trouble with brushed DC motors is that they have some inherent friction in the brushes that must be overcome to start moving, so even with a proper encoder, it's difficult to put the motor itself where you want it. You can use a gearbox, so that your control system can recover and become accurate again before the output moves too far, but then you have a specification for backlash. If your load is always the same direction, considering gravity, friction, inertia, etc., then the backlash may not matter. \$\endgroup\$
    – AaronD
    Commented Oct 16, 2014 at 14:34
  • 1
    \$\begingroup\$ @boardbite If you have a load, and you want to microstep I would be worried about the torsional deformation of the axle, this will introduce an error between motor step and load step. It all depends on the dimensions though. \$\endgroup\$
    – WalyKu
    Commented Oct 24, 2014 at 15:04

One way to do this might be with a gearbox. For example, if you put a 10:1 gearbox on the output of this motor, then 10 revolutions of the motor would give you 1 revolution at the output of the gearbox. That way, if you are only able to control the position of your motor to within 1 degree, the output of the gearbox will theoretically be able to be positioned within 0.1 degree.

I say theoretically, though, because gearboxes have backlash, which is a term for the play between the gear teeth. This reduces the accuracy of your output shaft. Industrial gearboxes list this backlash as a specification, which you can take into account in your design. However, most hobbyist gearboxes that I've seen do not specify the backlash, so you may have trouble finding an inexpensive gearbox with a backlash small enough for your application.

When specified, the backlash is listed as the amount of variability in the output shaft. For example, one industrial servo-rated 10:1 gearbox has an output backlash of 5 arc-minutes, or 0.083 degrees.

  • 2
    \$\begingroup\$ Gear boxes can have what is called gear backlash. This happens when the gear teeth have a short distance of not directing coupling input torque to output torque when the direction of rotation changes. This can be especially problematic when controlling the position of a servo motor in a closed loop system. \$\endgroup\$ Commented Oct 16, 2014 at 2:05
  • \$\begingroup\$ @MichaelKaras Very true. Now that I think about it, I think it will be difficult to find an inexpensive gearbox with a backlash small enough for this application. I've updated my answer. \$\endgroup\$
    – Ben Miller
    Commented Oct 16, 2014 at 2:39
  • \$\begingroup\$ You can add other forms of gearing - for example, in the mechanism the motor is driving, to reduce the effects of backlash. \$\endgroup\$
    – John U
    Commented Oct 16, 2014 at 11:44
  • \$\begingroup\$ gears like worm gears have almost zero backlash, they have a very good position-keeping torque as well. Another way to reduce backlash is to pre-bias the direction so that any further movement does indeed move the output, and never change direction after that (which would remove the bias you just gave it). @MichaelKaras \$\endgroup\$
    – KyranF
    Commented Oct 24, 2014 at 20:32
  • 1
    \$\begingroup\$ @boardbite not in the other direction, in the direction you intend to move. Backlash only affects movement when you change directions, by having a "dead zone" \$\endgroup\$
    – KyranF
    Commented Oct 25, 2014 at 21:08

Have you looked at - a mouse?
Not the animal, the point & click one. Specifically, the older style with a ball.

The ball lies against a rolling bar, which holds a big wheel. The wheel has slots around the outer edge, and and optical setup detects (counts) the holes as the pass by.

For your setup, the "ball" would become a small electric motor. As mentioned by others, this setup suffers from "backlash": this is overcome, to some extent, by having the optical encoding setup on the final wheel, which could have a Really Big Diameter (giving you the resolution you want).

Problems? Depending on the size & weight of this setup, you may have replaced "backlash" with "inertia"... cut the power to the motor, a big heavy wheel may take some time to stop. It may even overshoot the target- meaning you have to reverse the motor, and go back some distance.
This is a Damped Oscillator. The tighter your resolution requirements, the more likely the system detects a position error, causing constant "corrections".


The requirements are:

  • positioning precision of 0.15 degrees
  • significant load
  • readily available/cheap

A few things to consider:

  • You should get the position information from as near as possible to the load, as to compensate the torsional deformation and other imperfections.
  • A low rpm, high pole BLDC or similar motor would be the suggested alternative if you don't go for a stepper.
  • Encoder resolution is important too.
  • You will need closed-loop control in any case.

Let's look at the possibilities:

Get a really good motor/system

If you calculate the time you spend on (maybe not functioning) workarounds, it is maybe wiser to try to find funds for an appropriate system. Maybe it won't even be that expensive.

Mechanical gearbox

As Ben Miller mentioned, gearboxes could do the trick. The things I would suggest is using a high ratio gearbox that is of high quality. Look at the prices/datasheets, maybe you find something.


It's very high precision process so why not look at watchmaking. Look at this figure from Wikipedia: ressort spiral. If you wind a spring like this on some point of the axle, you can adjust the position precisely by doing small movements of the other end of the spring. This would be a supplementary tool, for load compensation and fine-tuning. You will still need a stepper(or something else) for the initial positioning, I guess. It would probably be best suited for processes where you don't need dynamic position changes. There are of course problems with it but maybe you can make something out of it.

Actuator/small motor + Lever

If you have space you could use a very long stiff rod to create a higher \$dx/d\phi\$. That means that you get very small angle changes for (comparatively) large (almost linear) movements of the end of the rod. So you practically need to add this long rod onto the axle, and attach a small motor to its end. The bending of the rod will probably be significant, but I think a control loop can help. You practically build it on the relation: \$\phi=\arcsin(x/r)\$(for small x). You could decouple the lever when doing large angle changes.

Lever solution

  • \$\begingroup\$ Can you expand a bit more on the idea of the rod? I'm unable to picture where you are placing the rod to create the higher dx/dϕ. \$\endgroup\$
    – boardbite
    Commented Oct 25, 2014 at 20:52
  • \$\begingroup\$ Picture two circles of the different diameters. You now have only the small circle, but if you add the rod you get the larger circle. To get the same angle on both circles along the circumference, you will need to cross paths of different lengths. So using the bigger circle you get a desired ratio between path length and angle. \$\endgroup\$
    – WalyKu
    Commented Oct 26, 2014 at 1:05
  • \$\begingroup\$ I think this could be a really nice solution since you are able to get the disk's angular rotation to synchronize with the motor. But I'm still unable to understand where you are putting this rod! Can you draw a very rough sketch to show what you mean? Are you suggesting using two disks with a rod connecting them? For some reason, I thought direct-drive (i.e., directly putting the axle of the main large disk on the motor shaft) was the only option in this case. \$\endgroup\$
    – boardbite
    Commented Oct 26, 2014 at 5:20
  • \$\begingroup\$ I can only access it from mobile until tommorow so I'll add a drawing then. \$\endgroup\$
    – WalyKu
    Commented Oct 26, 2014 at 8:22
  • \$\begingroup\$ Sure thing; just hoping for a crude sketch so I can understand the geometry of the components in your suggestion. \$\endgroup\$
    – boardbite
    Commented Oct 28, 2014 at 3:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.