I am trying to build an LED matrix (64x32) of RGB LEDs using a TLC5940 current sink LED driver.

The forward voltages of the LED components for each RGB LED are:

  • R: 1.8V
  • G: 2.8V
  • B: 2.8V

The driver maintains a specified current which helps because I can supply 3.3V to all LEDs. This however means the TLC5940 has to dissipate the extra power.

Can I provide the R and GB components with 1.8V / 2.8V respectively (regulated down with a more efficient switching circuit) and still have it go to the constant current source driver? In other words, can the supply voltages to the R and GB components be different if they are being sunk into the same current source?


2 Answers 2


The TLC5940 requires a minimum headroom (anode voltage applied to LED) of about 0.7 Volts greater than the LED's Vfwd for driving 60 mA, and 1.2 Volts for 120 mA.

If the headroom is lower than this, the channel is detected as an open LED. Actually, "open" is detected at 0.4 Volts or lower headroom, but that's a minor detail.

In discussions on TI's E2E forum, it has been confirmed from time to time that individual channels (LEDs) can be sourced by differing voltages, as long as the headroom requirement is met.

Another suggested method of reducing the surplus voltage across the TLC5940 driving transistors, is to use an external resistor for each LED, calculated to reduce the maximum current (if the TLC5940 were replaced with a short circuit to ground), to a bit over 10 mA more than the intended LED drive current. That way, the excess voltage is dissipated across each resistor, rather than across the LED driver IC.

  • \$\begingroup\$ Actually TLC5940 reliably handles 4-5 volts extra voltage over LED's requirement, with no trouble at 25 milliamps, just slightly warm. Even at 50 milliamps it runs hot to touch but within safe temperature range with that much extra voltage. But if insufficient surplus voltage, the LEDs start flickering and sometimes one channel will shut down with error flag set. \$\endgroup\$ Nov 22, 2012 at 15:38
  • \$\begingroup\$ I'm curious of where did you get the 0.7 V / 1.2 V headroom values. I'm not saying they're wrong. \$\endgroup\$
    – m.Alin
    Nov 22, 2012 at 15:49
  • 2
    \$\begingroup\$ @m.Alin Figure 5 of datasheet, as suggested by Chris Glasser of TI, in this forum thread: e2e.ti.com/support/power_management/led_driverslcd_bias/f/192/t/… \$\endgroup\$ Nov 22, 2012 at 15:55
  • \$\begingroup\$ @m.Alin :-) I'm a bit of a Texas Instruments fanboy (OK, fan-older-man), as might be apparent. \$\endgroup\$ Nov 22, 2012 at 15:57

Assuming R,G and B are independent LEDs, Looks like yes to me.

You will need to supply V(Led) + some extra; if the output isn't pulled above ground by the LED to at least 0.4V, it'll think the LED has been disconnected.

I would add at least 0.6 and maybe up to 1V to avoid errrors, so I'd suggest Vred=2.5V, Vgreen=3.3V, Vblue=4V as a starting point

Your 2.8V for blue looks a little low to me, I understood green=2.6, blue=3.3 to be about right, though it depends on manufacturer and temperature. At least confirm it by measurement!

It's probably better if each driver handles a single colour, then you can check temperature for each driver and tweak the drive for best efficiency. But that might complicate the layout too much...

Of course if these are integrated RGB Leds with a common anode, you are stuck.

The best you can do then is set the voltage for Blue, and add resistors to Green and Red to drop the extra voltage at your max current, to move the dissipation out of the chip. At least that leaves you with a single voltage to provide (those are going to be high current supplies!)

That's a lot of drivers, unless you are multiplexing the anodes.

  • \$\begingroup\$ I will be doing row scanning. The drivers will change brightness of a whole row, but only a single column will have power on the high side at any given point in time. \$\endgroup\$ Nov 23, 2012 at 2:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.