0
\$\begingroup\$

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?

\$\endgroup\$
5
  • 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
    Commented Feb 12, 2018 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
    Commented Feb 12, 2018 at 18:43
  • \$\begingroup\$ @Transistor, please see edit. \$\endgroup\$
    – M-R
    Commented Feb 12, 2018 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
    Commented Feb 12, 2018 at 18:53
  • \$\begingroup\$ @Transistor, hope that's enough info. :) \$\endgroup\$
    – M-R
    Commented Feb 12, 2018 at 19:17

2 Answers 2

1
\$\begingroup\$

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.

\$\endgroup\$
1
  • \$\begingroup\$ Is there anything else you need to know? :) \$\endgroup\$
    – M-R
    Commented Feb 13, 2018 at 2:11
0
\$\begingroup\$

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.

P.S.:

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).

\$\endgroup\$
7
  • \$\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
    Commented Feb 12, 2018 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
    Commented Feb 12, 2018 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
    Commented Feb 12, 2018 at 21:23
  • \$\begingroup\$ But the D-term does the differentiation, isn't it? \$\endgroup\$ Commented Feb 13, 2018 at 17:50
  • \$\begingroup\$ As in the derivative term? Yes (using the standard Arduino PID library). \$\endgroup\$
    – M-R
    Commented Feb 13, 2018 at 18:23

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.