# Controlling individual LED strips of different kinds and lengths with a single microcontroller

I am designing a little bit of a lighting show composed of a few individual led strips which will be controlled by a microcontroller, Arduino UNO in particular. I want to control 7 individual led strips:

1. 5x RGB 5050, 60 LEDs per meter.
2. 2x UV 5050, 60 LEDS per meter.

Taking in consideration that the RGB LED strips need 3x PWM pins each, and I want to have a full control over the brightness of the UV strips too, we come up with a 5x3 + 2x1 = 17 PWM pins in total. Obviously, neither the Arduino UNO, nor even the Mega have that many PWM pins so I decided to go after a LED driver - TLC5940. It can control up to 16 channels so I'll need 2 of it(+ the option to add more strips later). Can you guide me if I have any flows in the design and maybe if there's a better solution for my situation. The current setup is something like this:

The LED strips will be of varying lengths but I'll keep them 4 meters of length maximum. So:

1. 4x RGB LED 5050, 3 meters each:

• Amperage: (1.2A/m * 3m) * 4strips = 3.6A/strip * 4strips = 14.4A
• Power: (14.4W/m * 3m) * 4strips = 43.2W/strip * 4 strips = 172.8W
2. 1x RGB LED 5050, 4 meter:

• Amperage: 1.2A/m * 4m = 4.8A
• Power: 14.4W/m * 4m = 57.6W
3. 1x UV LED 5050, 3 meter:

• Amperage: 1.2A/m * 3m = 3.6A
• Power: 14.4W/m * 3m = 43.2W
4. 1x UV LED 5050, 2 meter:

• Amperage: 1.2A/m * 2m = 2.4A
• Power: 14.4W/m * 2m = 28.8W

Totals:

• Amperage: 25.2A
• Power: 302.4W

I'm planning on powering all the strips with a single 12V power supply allowing:

• Amperage: 30A
• Power: 360W

Each pin of the LED driver will lead to a TIP120(or maybe TIP31C) transistor to control each color channel of the strips(3 transistors for each RGB strip, 1 for each UV).

I'll also need to use some additional wiring for the strips in other to get them all to the controller(1-3m) because they'll be quite spread so should I be concerned about reduced brightness?

Also, never worked with a LED driver before, can it handle the job I'm assigning it for?

Do I have to add any resistors to the transistors?

Any help and positive criticism will be appreciated.

EDIT: The question is also posted on the Arduino forum. You can find a reference to the thread HERE if you're interested.

• FYI, if you go with Arduinos, best to stick to well known Arduino running the basic and well understood Atmel processors. I tried using an ARM based Arduino and could not get good control over the communications to the 5050s (which are very picky with respect to timing). Of course, real time OS are best avoided. However there are some software solutions out there for this type of platform. Aug 3, 2017 at 16:00
• Here's the killer question: are your RGB LED strips common anode or common cathode? Give the pinouts if you're not sure, one has 1 GND pin and 3 positive supply pins for R,G and B while the other had 1 positive supply pin and 3 negative pins for R,G,B. Also forget about TIP120, this is not 1975, use a MOSFET... Aug 3, 2017 at 16:09
• @st2000 I am sticking with the built in ATmega328P. It will suffice and I'm not restricted to the size of the board anyway. Aug 3, 2017 at 16:14
• @peufeu The strips aren't currently here and I don't have a spec for them so I can't really check but I'm almost completely sure they're common anode(12V+ pin + 3 for each color channel to GND). Can you please suggest a MOSFET to use? It should handle safely the amperage of a 4M strip. Aug 3, 2017 at 16:19
• @MatsK Well, we already went over that and I decided to go with IRLB8721 as per peufeu's advice. See the answer below, it is more recent than my comment. I'm asking because like I said, I'm pretty novice to electronics and I don't want to destroy the components due to my ignorance. Aug 5, 2017 at 10:09

I'm almost completely sure they're common anode(12V+ pin + 3 for each color channel to GND).

OK. So we need to switch the GND pins (low-side switch).

TP120 VCE(sat) = 2.0 Vdc (Max) @ IC = 3.0 Adc
= 4.0 Vdc (Max) @ IC = 5.0 Adc


Well your LEDs aren't gonna light very well if the transistor eats 2-4V from their 12V supply. So we use a MOSFET.

Max current per strip is about 5A. We dont want heatsinks, so this means 0.5W max dissipated in the switch. So we should select a MOSFET with 20mOhm RdsON. If driven from 5V these should be a logic level FET.

Example. Just use DigiKey/Mouser search engine with criteria: RdsON<20mOhm, Vds 20-40V, Id>10A, Thru-Hole, Sort by price. If driven from 5V, add RdsON<20mOhm for Vgs=4.5V, otherwise it will be at 10V Vgs.

Place them in the power supply air flow for cooling.

Now, the driver... your TLC5940 outputs are current sinks, meant to drive LEDs directly. It can't drive a FET without some help.

You could connect the outputs to the FET gates and add pullups, but signals will be inverted (LEDs will light fully when PWM is at 0%).

Or you could use an extra transistor as an inverter like this guy. Seems pretty easy.

In this case since the FET is driven from +12V you don't even need a logic level FET.

• I read somewhere that the TLC driver don't enable the channel completely i.e. don't/can't lighten the LED completely to its 100%. If I invert the signal, wouldn't there be a problem with the driver not being able to shut off the LED completely? Which solution do you recommend. I'm fairly new to electronics and I'm better off not taking this decisions myself. Also, can you please explain me why is the pull-up resistor for in this case and how it inverts the signal exactly. 2. Should I drive the mosfet gate from 5V or 12V? 3. What value should I use for the pull-up resistor? Aug 4, 2017 at 7:22
• I never used TLC driver so cant be sure. You can always try cdn-shop.adafruit.com/datasheets/PCA9685.pdf instead, datasheet says it goes from 0 to 100% PWM, and it can drive logic level MOSFETs directly (see "external mosfet" in datasheet) Aug 4, 2017 at 7:47
• I am actually open to any solution that gets the job done properly, I'm not bound to a specific driver or method. What solution would you go with if you were on my place? Aug 4, 2017 at 10:57
• I'd go with an I2C driver which outputs PWM and can drive the MOSFETs directly, like PCA9685 or other, for simplicity. Also adafruit has breakout boards and example code. adafruit.com/product/815 Aug 5, 2017 at 11:02
• I was just looking into the driver and its documentation. However, I'm a little concerned about the consistency of the documentation: 1. Library reference: learn.adafruit.com/16-channel-pwm-servo-driver/…. 2. Example code: github.com/adafruit/Adafruit-PWM-Servo-Driver-Library/blob/…. The library reference says that the max frequency is 1000Hz, the example code states that it's 1600. Considering there are 2 public methods in total that need to be documented, this kinda bothers me. Aug 5, 2017 at 11:33