ACRIS LED Controller Driver Board



ACRIS's LED controller board is a custom-designed, multipurpose device that takes a simple stream of data over a CAT5 line carrying RS-485 and drives high current LEDs according to that data. It is capable of driving up to 15 channels at 360mA each, meaning that it can sink a total of 5.4A! This page describes the functionality of the board and how to use it. I've purposely designed this board so that it can be used for all sorts of configurations, not just for ACRIS.

In particular, I want to sell this board as a kind of kit so that for those who want to design their own custom LED lights, they can focus their time and energy on their creativity.

A perfect device capable of converting serial from your computer (over USB) to RS-485 is the RS485 USB dongle I designed.

Here's what the first run of the board came out to look like:

First Board


It has a bunch of features!

Schematics and Layout

These files contain the full plans for the board. I use Kicad for schematic capture and board design. The git repository contains the latest layouts, so it might be wise to look there.

I found all the parts I need on Digikey, but it's possible to get some of them cheaper on Avnet.

Mini Version

This version uses all surface mount components and has just 5 output channels, but it's tiny (1.4x0.8 inches).


I designed the LED controller boards for the Next House Party Lighting System. These boards were functionally extremely similar; their basic job was to take RS-485 input and drive high power RGB, white, and UV LEDs accordingly. After we ordered and assembled these boards, it became clear that we were missing a variety of features; we had offloaded a lot from the board thinking that we would have an easier time using point-to-point connects in some cases. Turns out, that was a stupid decision. This board is effectively "revision 1.5" of that board; it fixes a variety of hardware bugs that we had to deal with, including lack of effective power input, lack of enough filter capacitors, tiny holes for the LED outputs, etc. It then changes some other features to make the board more useful. For example, this board doesn't use DIP switches to set the address; instead, it's programmed into the EEPROM via the bootloader.

The board has two power input connectors, one for the logic (JLGCPWR1) and one for the LED power (JLEDPWR2). Enabling jumper JP1 will connect the two power circuits so that LED power and logic power come from the same supply. Furthermore, the logic power circuit has a spot for an LM7805 to provide a stable 5V output. It's not necessary; leaving the LM7805 out and enabling jumper JP2 will connect JLGCPWR1 directly to the logic power supply (VCC).

There's a massive ground plane on the back layer. Soldering to it requires a little heat. I chose not to use thermal relief pads because a lot of the the ground pins are high-power outputs (e.g. each TLC5940 can sink up to 1.8A). I used thick traces for all other high power connections, such as the LED VCC output holes, which are just below JLEDPWR2 and all of the outputs of the TLCs.

The two RJ-45 jacks have all of their associated pins connected to one another. Therefore, you can plug signal input into either of the two jacks. This signal goes to a SN75176B, TI's version of Maxim's MAX485 RS-485 level converter. That signal then goes to the microcontroller. If you have multiple devices, you can use the other jack to forward the signal to the next device. If you don't have another device to connect, you will need to solder a 120Ω impedance-matching terminating resistor to prevent reflections on the line. I had considered carrying logic power over the same CAT5 cable, but I wanted to make all of the grounds independent.

There's a reset button on the board. Yep.

The microcontroller on the board is an ATMEGA168P. It must be programmed with the bootloader before installing it into the circuit, as I removed in-circuit programming capability when I was able to prove that doing so with some computers on the boards for the Next House Party Lighting System actually fried the TLCs, ruining the boards. On that note, I also recommend using DIP sockets for the ATMEGA and the 3 TLCs. I discuss the software a bit more in the Software section. There are four small debug LEDs on the board as well.

The ATMEGA outputs high-speed SPI to the TLC5940s along with a PWM clock and a periodic blank signal. The data sent over SPI tells the TLCs the PWM duty cycle. The TLCs have a serial data in line and a serial data out line, so it is easy to connect them in series like a big shift register. TLCs have 12-bit resolution, so one must shift 12*16*3 = 576 bits = 72 bytes into the TLCs.

The TLCs then sink current according to their maximum current as set by the resistors next to each one. A 325.5Ω resistor would yield the maximum current per each output channel, which is 120mA. The datasheet explains to calculate the resistance you want. Note that outputs are tied in groups of three. I use RGB LEDs that have a maximum current of around 350mA, so I use a 330Ω resistor to yield a grouping output of around 355mA.

Initial testing of the TLCs showed that thermally, the devices had a little trouble when running all the channels at high PWM duty cycles for a long time. I think some kind of heatsink would be useful, but I'm not sure what to design at the moment.

These boards are still under development. I haven't fully tested them yet. I would love it if people could help me out. The ACRIS git repository is constantly being updated with tweaks to the board and software.