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?


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.

| improve this answer | |

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.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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