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