What is the minimum resolution recommended for low acceleration motion control?

Maximum Velocity can range between 2 rev/sec to 50 rev/sec. Acceleration could be as low as 0.01 rev/sec/sec. Precision is important (as the motor will need to decelerate at the right point to reach it's target position without overshooting) and the motion should appear as smooth as possible.

Motor is 12VDC with a 64:1 gearbox. Encoder will attached to either shaft or after the gear box. Motor is controlled via the Arduino PWM pin, with a pin to indicate direction.

As a rule of thumb, is higher resolution required for very slow motion?

  • 1
    \$\begingroup\$ Really need to see some requirements on this, resolution is dependent on velocity and how much velocity resolution you need. And how much is 'low acceleration'? \$\endgroup\$ – Voltage Spike Feb 12 '18 at 18:38
  • 1
    \$\begingroup\$ "Incredibly slow" and "medium-high" are not recognised engineering units (and you're on an engineering Q&A site). Use terms such as "0.2 to 100 RPM" and "resolution of 3.7°", etc. Your question is already on the way to being closed because it is so vague. \$\endgroup\$ – Transistor Feb 12 '18 at 18:43
  • \$\begingroup\$ @Transistor, please see edit. \$\endgroup\$ – M-R Feb 12 '18 at 18:44
  • \$\begingroup\$ We still know nothing about your motor and controller (DC motor, AC motor on VFD with slip compensation, servo motor, BLDC motor) whether it's unidirectional or forward / reverse, if there's a gearbox and the encoder can be put on the high-RPM shaft and what error you can tolerate on the shaft speed. \$\endgroup\$ – Transistor Feb 12 '18 at 18:53
  • \$\begingroup\$ @Transistor, hope that's enough info. :) \$\endgroup\$ – M-R Feb 12 '18 at 19:17

One bit would suffice for some applications. A simple proximity switch sensing a screw-head on a rotating shaft might be adequate in some industrial applications provided the system ran only one way.

If direction sensing is required then two bits are required. Quadrature encoders are the norm for this.

It would be a waste of time to elaborate as your question is so short of details.

  • \$\begingroup\$ Is there anything else you need to know? :) \$\endgroup\$ – M-R Feb 13 '18 at 2:11

Arduino is poor in terms of calculation, and it is not made for motor control. If you need a precise velocity, then you need a MCU or DSP with QEI - Quadrature Encoder Interface. It measures frequency and period of pulse train, then uses the information of the method which is more plausible.

For motion control you would need a fast MCU, not a legacy 8-bit MCU. An integrated FPU is welcome, but not mandatory if it has enough speed.

You better find some other platform.


You probably use the interrupt to calculate the speed from difference of counted pulses, so called frequency measuring method.

There is also a period measurement method. The error of frequency method is small at high frequencies and large at low frequencies, meanwhile the error of period measurement method is small at low frequency and large at high frequency.

Your control, is jerking at low speed because the speed measurement has a large error at encoder low frequency output (low motor speed).

  • \$\begingroup\$ I thought that may be the problem, however the motion runs smoother as the velocity increases. There's only jerkiness at the very beginning. Can you explain why this might be? Thanks \$\endgroup\$ – M-R Feb 12 '18 at 20:13
  • \$\begingroup\$ I don't actually use the speed at all. I calculate the position, based on acceleration (and velocity) and feed that into the PID loop. \$\endgroup\$ – M-R Feb 12 '18 at 20:39
  • \$\begingroup\$ Should say that the current resolution is 12cpr attached to the motor shaft, which should amount to 12*64 = 768 encoder counts/rev. \$\endgroup\$ – M-R Feb 12 '18 at 21:23
  • \$\begingroup\$ But the D-term does the differentiation, isn't it? \$\endgroup\$ – Marko Buršič Feb 13 '18 at 17:50
  • \$\begingroup\$ As in the derivative term? Yes (using the standard Arduino PID library). \$\endgroup\$ – M-R Feb 13 '18 at 18:23

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.