0
\$\begingroup\$

I would like achieve a precise static RPM (+/-.1% error) on a small, low-cost permanent magnet brushed DC motor (e.g. Mabuchi FA-130). The motor/gear assembly will be rotated at different orientations relative to gravity, but there will otherwise be no variable forces on the shaft/output. From experimentation with a constant-voltage power supply applied to a similar motor, I measure +/-1% error (7750 +/-80 RPM) under static conditions. Therefore, I believe closed-loop control will be necessary to achieve the desired precision.

In order to implement closed loop control at a low cost, I was planning on making an incremental optical encoder via a slotted disc and IR 'photointerrupter' (e.g. OPB610). Assume the disc has 10 slots and is fitted on the motor shaft spinning at 6000 RPM, so 1k pulses/sec. Also assume I am using a modern 16+ MHz microcontroller which controls the motor via PWM.

1) What specs/equations should I consider when determining what the resulting motor control precision will be? How to determine the delay in updating the motor speed, as well as the resolution of speed control?

2) Is there a 'better' (and still low-cost) way to achieve closed-loop feedback than the optical encoder method described (e.g. magnetic encoder)?

\$\endgroup\$
1
\$\begingroup\$

I have used small Mabuchi motors that way and achieved results close to what you need using a velocity sensor which is crude compared to your slotted wheel.

Start testing by controlling the motor with a PWM train that you can manually adjust up and down. Record the PWM duty cycle which gets you close to 6000 RPMs, this will be a starting power level. Then, bump the PWM power level up by one bit, and down by one bit, and record the resulting RPM change. Based on the values you record you should be able to predict how much power to add or remove from your center power level every 1/10th rotation when the velocity is too high or too low.

At that speed it will be necessary to time the interval between slots with a hardware timer available on most microcontrollers. You won't be able to measure the velocity error of 1/10th rotation with sufficient precision using software. A 1 microsecond error in measurement will chew up your error budget.

As alluded to in the comments, if you have a very dynamic load you may want improve on the basic closed loop system to adapt to changing loads. In my project I found that the center power level was not the same for all motors. So I incorporated an integrating function such that if the sum of the errors over time was not 0 then I would adjust my center power level to try to bring the + and - errors closer into balance.

\$\endgroup\$
  • \$\begingroup\$ It might work good on a balanced and constant load, otherwise the control won't know when there is a change of load due to weight or balance. \$\endgroup\$ – Marcelo Espinoza Vargas Jun 7 '17 at 23:30
0
\$\begingroup\$

1) If you want to achieve a +/-.1% accurate RPM, you need to verify that the number of pulses observed over a given period does not deviate by the expected number of pulses by more than +/-.1%. The minimum number of expected pulses to enforce this is 1/.001 = 1000 pulses, which would require the observed pulses to be exactly 1000 as well (e.g. if you measured 1001 pulses, how would know whether you were off by .1% or .15%?).

If you are receiving 1k pulses/sec, then it will require 1 second to collect enough pulses to make the decision of whether you need to apply positive/negative feedback via PWM. However, this will only guarantee an 'average' of 100Hz over the sampling duration, and brings up the additional specification of 'frequency jitter' which was not mentioned in the original question. One cannot guarantee an instantaneous frequency, as this would require calculating the slope of two infinitesimally-close samples. Therefore, '+/-.1%' accuracy of an RPM/frequency must be accompanied by the averaging duration. In this case, let's impose the frequency averaging duration as ten shaft revolutions, or 10*60s/6000RPM = 100ms. This is 10x less than the 1s sampling duration determined above, so you would need to increase the slots/revolution and/or increase the shaft speed of the optical encoder (e.g. via gear step-up) appropriately.


I will need to update this answer with the control-side considerations (PWM resolution, clock jitter), as well as the adjustment method (i.e. how to react when observed counts/period not as expected).

\$\endgroup\$

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.