I've designed a PCB to connect 12 TLC5940s to an 8x8x8 RGB LED cube through 3 64-pin headers, which I will include screenshots of below. I have a separate board for controlling the anodes for multiplexing, that's working fine and I've turned off the multiplexing for testing anyways. I have a 5V 20A switch-mode power supply for the whole thing, and I'm powering the TLC5940s through an LM317 regulator set for 3.3V, due to logic level of the STM32F4 Discovery I'm using to control the whole thing. I've put a 2.61k resistor on the IREF pin of each IC to set the constant current at ~15mA.

If I turn on just a few LEDs (no more than 8) at a time everything works fine, but if I turn on many of them the TLC5940s start going crazy. If I just turn on all the outputs of one, it works fine but the rest go crazy. With dot correction set to EEPROM (which has the default data of all 3Fh) they turn off all outputs and start drawing a lot of current on the supply pins, causing them to get rather hot. I have to disconnect and reconnect the power to fix this. If I set dot correction to the DC register and fill it with max values on startup, they just flicker at random brightness as if the DC register is getting scrambled, and don't draw a huge current. A simple re-initialization fixes them in this case, no power reset required.

I've poked around on the various signals with my oscilloscope, and they all look perfect. I even checked all the SOUT pins (since I have 12 of them daisy-chained) and the data is in fact being latched in correctly. The only thing I can think of is lack of proper decoupling, but I have 0.1µF ceramic caps on all the ICs, and some bulk decoupling (a couple 100µF electrolytic caps) on the separate anode control board. Is 0.1µF possibly not sufficient for the TLC5940? Based on the datasheet it seemed like it would be. I even tried poking 10µF and 100µF electrolytic caps in there, which had no effect. Even all the power pins of the ICs look clean on the oscilloscope. I'm really at a loss here.

By the way, the oscilloscope is a Rigol DS1054Z with the 100MHz bandwidth upgrade.

Here's the PCB layout: Top Layer with Silkscreen Top Layer Bottom Layer

  • \$\begingroup\$ "10µF and 100µF electrolytic caps" Their ESR is too high for proper decoupling. \$\endgroup\$ – Ignacio Vazquez-Abrams Jan 20 '16 at 1:50
  • \$\begingroup\$ @IgnacioVazquez-Abrams Well I don't have any ceramics larger than 0.1µF at the moment. \$\endgroup\$ – Techjar Jan 20 '16 at 3:49
  • \$\begingroup\$ It would be nice to indicate which TLC5940 part number, and provide the schematic. It's very hard to follow unlabelled signals on a multilayer PCB from just these screenshots. \$\endgroup\$ – Ben Voigt Jan 20 '16 at 4:58
  • \$\begingroup\$ @BenVoigt Well, I thought it would be obvious that I'm using the NT package, seeing as that's the only one that is a through-hole component. \$\endgroup\$ – Techjar Jan 20 '16 at 5:05
  • \$\begingroup\$ I put in 4.7µF ceramic caps, and it didn't change anything. I'm thinking this isn't related to decoupling, and I know it's not a signalling issue either. What the hezmada is going on here? \$\endgroup\$ – Techjar Jan 22 '16 at 4:01

It is obvious that your power distribution needs beefing up.

Your ground plane looks OK, but I'm very (as in, "deeply, deeply") suspicious of your VCC distribution. You're using a skinny little trace with a single small via to provide VCC to each group of 4 ICs, and that just won't work. Worst case you're trying to pull about 4 amps through each trace, and that's just not in the cards. Worse, the middle segment of your distribution trace will need 8 amps.

The cleanest solution is to go to a 4-layer board, and devote one layer to VCC and one to ground, with the other 2 for signals. Assuming you don't want to do this for cost reasons, I'd recommend running a 24 ga wire from the VCC input to each IC. At a minimum, one wire for each pair (for instance, BLUE1 and BLUE2), with a jumper between adjacent ICs.

Your quick check should be a simple voltage measurement from your ground test point at upper left to the IC VCCs while under load. Any voltage droop of more than about 0.1 volts should be a red flag.

  • 1
    \$\begingroup\$ 4 amps on Vcc? These ICs sink current, not source it. Hence I'm using common anode LEDs, and as I said, the board supplying the anodes is completely separate. All the cathodes are connected to the TLC5940s. I did make sure to have a beefy ground pour since all the current will be going through there. Also, I've checked the voltage at the Vcc pins and it's not drooping at all. \$\endgroup\$ – Techjar Jan 20 '16 at 3:42
  • \$\begingroup\$ Datasheet gives maximum value of I_{CC} as 60mA (per chip) \$\endgroup\$ – Ben Voigt Jan 20 '16 at 4:46
  • \$\begingroup\$ @BenVoigt That's actually per channel, not for the whole chip. The maximum current for the whole chip depends on power dissipation. I've done the math and I'm well under the maximum dissipation rating for the chip. \$\endgroup\$ – Techjar Jan 20 '16 at 4:54
  • \$\begingroup\$ @Techjar: As you correctly noted, the LED currents do not count toward I_{CC}, and as a result I_{CC} depends more on the digital logic switching rate, and maxes at 60mA. \$\endgroup\$ – Ben Voigt Jan 20 '16 at 4:57
  • \$\begingroup\$ @BenVoigt Oh I see, you were referring to the current requirements of the chip itself, not the current of the outputs. My bad, I misread. And yes, as with any IC, the current will vary depending on what it's doing. \$\endgroup\$ – Techjar Jan 20 '16 at 5:02

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.