This is a follow-up to this question: Prototyping a device with 25-100 small DC 3.0V motors, is Arduino a good fit?

I've decided based on the answer that sending the control signals through multiple TLC5947 chips, then sending the PWM signal to the motors is the best way to go. What I need to know is how to turn the PWM signals into something of the required power, since the TLC5947's won't be able to drive the motors by themselves.

I'm guessing an amplifier is what I'll need to make, but what's the best way to boost that many signals?


1 Answer 1


The accepted answer to your previous question presents several ways of developing enough drive for the vibrating motor, in its section called “Converting PWM signals into something that can drive a motor”.

One of the most direct ways is using one ULN2803 device per 8 motors, or one ULN2003 per 7 motors. In some packages these devices support up to 500 mA/channel when properly heatsinked; other packages allow less but should have no problem with the 85 mA start current and 75 mA run current of the vibration motor (1, 2).

An alternative is to substitute LED drivers with higher drive capability in place of the TLC5947. For example, the 16-channel Toshiba TC62D722 allows up to 90mA/channel. (I don't know what the availability of these parts is.) Like the TI TLC5947, the TC62D722 has per-channel PWM settings. Both parts use an external current-limit-setting resistor and the TC62D722 also has an 8-bit (256 level) output current gain control.

Note that TLC5947 channels can be paralleled. On page 7 the data sheet says multiple outputs can be tied together to increase the constant current capability. Thus you could use each TLC5947 to drive eight 90mA devices; or could use a 25mA-setting resistor and parallel 3 outputs to get 75mA. Anyhow, n TLC5947's, daisy-chained together, would drive n·24/3 = 8·n vibration motors.

If you have motors on hand, you could use a 12V power supply in series with a 166 ohm resistor (or 150 or 200 ohms for other testing) to run about 60mA through a motor and see if it starts and runs satisfactorily. If so, you might be able to use two TLC5947 channels instead of three per motor.

Drivers like ULN2003 or ULN2803 have internal clamp diodes so they can drive inductive loads without needing such diodes added on. As an LED driver, the TLC5947 doesn't include clamp diodes for high-going voltage excursions since LED's are not much of an inductive load. (The output diagram on page 8 of specs shows a diode from ground to OUT_n for OUT0 through OUT23, which would clamp negative-going voltages, but no rating is shown for the diode.) You probably would need to add one clamp diode per motor. However, it certainly is possible that you could run motor tests and find that the motor transients don't exceed the 33 volt output ratings of the TLC5947 – whenever you test it on the bench.

  • $\begingroup$ Thanks. Just FYI, the author of the accepted answer to my previous question suggested that I write this question. That said, I was obviously tired when I read that answer, because there's a massive heading that clearly explains that he's talking about providing power for the motors. $\endgroup$ Commented Apr 3, 2013 at 8:21

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.