My office lights were a problematic project from the very beginning. I struggled to get the TLC5940 LED drivers to correctly light the LED strips and when I finally got that working I shoved it all in the wall and sealed it up before anything could go wrong. The problem was: the TLC5940 chips were constantly failing.
It took some time and some math to figure out that I had a power problem. The data sheet contains this gem:
Once you have calculated the power dissipation, you compare that value to another chart to determine if you are going to have a bad time. In my case, while any of the 16 channels could handle up to 120mA, all of the channels combined could not pull more than ~140mA at any given time or the chip would overheat and die. Using normal values, you could hook up 4 standard 20mA LEDs to each of the 16 outputs and remain within those bounds, but I had an LED strip with 15-20 LEDs connected to each output. Hence my graveyard of chips.
I spent some time trying to map out a set of transistors that would allow me to control the strips with the TLC5940s, but not run all of the current through them. However, before I got around to building such a circuit, someone invented the glorious WS2812 NeoPixel.
The WS2812 is an RGB LED with an embedded controller. You provide it with power and tell it the color values using a serial data protocol. It comes in strips where each LED is individually addressable–meaning each LED could be a different color from it’s neighbors. Overkill for this project? Perhaps. Regardless, they are very cool.
Wiring is a lot simpler since you can run the data line from the end of each strip into the start of the next strip. I had heard of problems with interference on the data line so I opted to use a twisted pair on the data line. One wire carries the data signal while the other is grounded. Someone good at math figured out that this would do something with magnetic fields that would help reduce interference. Due to the amount of current drawn by these strips I opted to run a power line to each segment directly rather than daisy chaining the power lines. Still, it’s much cleaner than with the TLC5940 drivers.
Here is a simple color test to make sure everything looks good before I pushed it back into the wall.
I’m currently driving the LED strips with an arduino micro and the Adafruit NeoPixel library demos. When I get around to writing some code I’ll share that along with some videos.