The Adafruit 1429 Channel 12-bit PWM LED Driver
For all of you out there who want to control 24 channels of PWM, we salute you! We also would like you to check out this breakout board for the TLC5947 PWM driver chip. This chip can control 24 separate channels of 12-bit PWM output. Designed (and ideal) for LED control, this board is not good for driving servos. If you need to drive servos,we have a controller for that over here.
Only three "SPI" pins are required to send data (our Arduino library shows how to to use any digital microcontroller pins). Best of all, the design is completely chainable. As long as there's enough power for all the boards you can chain as many as you'd like, like a little trail of blue PCBs stretching out into the sunset. Each of the 24 output's is constant-current and open drain. You can drive multiple LEDs in series, with a V+ anode supply of up to 30V. If you want to drive something that requires a digital input, you must use a pullup resistor from the drive pin to your logic level to create the full waveform.
One resistor is used to set the current for each of the outputs, the constant current means that the LED brightness doesn't vary if the power supply dips. We use a 3.3K resistor for about 15mA but you can solder a thru-hole resistor over it if you'd like to change that value. Check the TLC5947 datasheet for details on resistor-to-current values.
We include a few extras to make this board easy to use: a durable 5V low-dropout regulator (with reverse polarity protection in case y'know, you plug it in backwards), a green power-good LED, four mounting holes and a current-set resistor. A bit of 0.1" header is also included so you can solder it on and plug into a breadboard.
To use: Power V+ with 5-30VDC, and connect ground to the common ground. Then send 3-5V logic SPI data on DIN (data in), CLK (clock) and LAT (latch). If you'd like to quickly turn off all the outputs, drop the OE pin - it's pulled high by default. Our Arduino library will get you started with blinking LEDs, install it and run the example code with the noted pin configuration.