I have an absolute value encoder with 14-bit resolution and want to implement a speed controller. For high speeds, the offset between the old and the new position value is large and so the accuracy of the estimation for velocity is high. If I target a low speed, then the accuracy of my estimation shrinks, since I have only a little difference between two steps of the encoder.

I see two solutions to increase the resolution. First, the time between two measurements can be increased, but then the speed controller begins to fail for very large speeds.

Trajectories for the position controller could be calculated to come up with a velocity controller.

What do you think is the best solution for speed control to achieve a large dynamic of speed and how is this done normally for industrial applications?


4 Answers 4


You have stumbled across the fundamental problem of using an encoder to measure speed: they are not great for measuring low speeds.

Why is using an encoder to measure speed an issue?

The encoder has a certain angular resolution $\theta_r$ in radians and the number of counts detected by your digital counter $N$ is reported after a certain sampling time $\Delta t$. Your angular velocity is then determined for each sample time by:

$\omega = \frac{N\times \theta_r}{\Delta t} $

The smallest number of counts that can be recorded (other than zero counts, of course) is 1 count over the sample time. This means that your angular velocity resolution $\omega_r$ is determined as follows:

$\omega_r = \frac{\theta_r}{\Delta t}$

So lets say you try to measure a speed that is 1/4 of your resolution. Your measurement device will indicate $\omega = 0$ for $3\times\Delta t$ and then your minimum speed $\omega=\omega_r$ for $1\times \Delta t$ and repeat every ten sample time steps. For a speed that is 1/10 of your resolution it will measure zero for $9\times \Delta t$ and then $\omega_r$ for $1\times \Delta t$ and so on. See the figure below for an example when the speed is 1/10 of your speed resolution:

Encoder position and velocity in normalized time

So how do you fix it?

My recommendation

Buy a different sensor. If you are operating an encoder near its speed resolution limit then you just won't be getting a very usable control signal. Look instead for a tachometer. A tachometer is a sensor that is specifically designed to measure speeds. There are many different varieties of this type of sensor available so it is hard to recommend a specific type without knowing more about your application. However, if you need electrical output for some kind of controller then I think your best bet would be a variable reluctance sensor tachometer or a hall effect sensor tachometer.


If buying a good sensor is simply not an option then, as you stated in your question, you can increase your sampling time (decrease your sampling rate) to improve your velocity resolution. The main problem with this solution is that you could increase your sampling time to the point where your system is no longer controllable, or is not controllable in a practical sense. Again, without knowing more about your application it is difficult to say what a reasonable sampling time would be. I would not suggest getting better encoder resolution because 14-bit is already very fine angular resolution.

Sources: Beckwith, Marangoni and Lienhard. Mechanical Measurements, 6th Ed.


Depends on the critically of application. Your system may have a speed limit specification, defined by encoder resolution. This specification shall comply with your operational, security and reliability requirements.

After defined this, you can count the time between two encoder signals, for determine speed.

In case of you have the control of a motor, you may determine the rotation frequency of the motor, through PWM, or in many cases, determine the power and time of operation.


You can use an IIR filter after you have taken the derivative of the encoder signal. the iir filter will smoothen the pulses and will give you a good enough velocity estimate


It will depend on your application, but I would consider a hall effect sensor with one or more magnets the "default" sensor for rotation speed.

The dynamic range is essentially infinite, since a digital timer can record short (uS) intervals all the way up to months fairly easily.

The only limitation is that you need to measure for some fraction of a rotation, like 1/4 turn if you have 4 magnets.

You can use an encoder in a similar way by counting the time between encoder steps, rather than the number of steps in a fixed interval. This may be suitable for very low speeds (<60 rpm).


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.