I need to drive 50 (standard 5mm) LEDs, controlling the brightness of each LED individually, down to only 0.25mA and up to 25mA.

I started using TI's TLC5947 to drive these LEDs. This chip, as many of these CC LED drivers, use an external resistor for current reference. Using the built-in grayscale PWM, you can get a good brightness range. To extend even more this range, I change the current reference between the max and min on the datasheet. However, this chip can only go down to 2mA (practically 1mA) before the outputs get unstable. I need to go down to 0.25mA on each LED.

For a single LED it would not be a big problem, probably I just would implement a constant current sink using an op-amp. But when you have multiple LEDs, the problem is the number of control lines required, the cost of the circuit, and the complexity to keep to a minimum the difference between each "channel" of the circuit.

I need a way to implement this without having to replicate 50x an op-amp based circuit, to keep the complexity and cost realistic.

  • \$\begingroup\$ Are you actually looking for 12-bit resolution at 250uA? That's 61nA resolution. Could you just reduce the max current to 1ma and use the lower order 10 bits of the PWM by right-shifting or dividing your brightness word? Kind of like digital zoom on an imaging chip. Of course resolution is 240nA, not 60nA. \$\endgroup\$ Dec 16, 2017 at 14:12
  • \$\begingroup\$ The real challenge is that at the minimum PWM level at 2mA on the TLC5947 the LED is still too bright. The goal is that at the minimum the LED barely can be visible. For that, a ridiculous RMS current level should be achieved. \$\endgroup\$ Dec 16, 2017 at 15:17
  • \$\begingroup\$ So you are actually looking for a 400,000:1 dynamic range (about 18 bits). Yikes. \$\endgroup\$ Dec 16, 2017 at 15:23
  • \$\begingroup\$ I guess though that in reality, he only needs +/- 1% at any brightness level. Why not use two pwm channels (or one pwm channel connected selectable pins) and have them each connected to a different current mirror. One for the range of 25ma to 1ma, and one for the range of 2ma to 0.2ma? \$\endgroup\$
    – BeB00
    Dec 16, 2017 at 16:02
  • \$\begingroup\$ "The real challenge is that at the minimum PWM level at 2mA on the TLC5947 the LED is still too bright." - the minimum PWM level is 0. What current does the LED draw when 'barely visible'? \$\endgroup\$ Dec 16, 2017 at 17:44

3 Answers 3


Who has the eye or even a light sensor that can discriminate between 2µA and 6µA?
Or between 25 an 24.99975mA

The chip current output error is spec'd at typical ±2% error up to ±7% error.

Is IADJ trimmed down to no more than 25mA?. Might try raising the Iref resistor value.

Is the tolerance and stability of the resistor good enough to hold Iref steady and accurate?

Did you follow the Layout Guidelines?

Is there noise on the Iref pin?

Is the temperate of the chip cool?

I have some drivers with 1000:1 and no one can see the difference 1 step at a time.

There should be no problem turning the LEDs off i.e. GS = 0x000.

I do not understand why anyone would need this type of dimming resolution.


Data sheet is unhelpful regarding that current-control pin. You might consider dedicating one-of-24 channels to a feedback loop...
The dedicated one-of-24 feeds an opto-coupler's LED. Its output side yields a current pulse that will have to be held, likely on a capacitor. This could be used to modify the TLC5947's current reference pin. You might be able to improve control-loop stability at the bottom-end of the current-control range.


You have badly misunderstood the functioning of the chip. What you want to do is set the constant current level to 25 mA, which is well within device's capability. Then you use the grey-scale function to PWM the LED to a lower current level.

Since the PWM function uses a 12-bit counter, your minimum current will then nominally be 25/4095, or 6 uA. I say nominally, since this implies a very narrow pulse width which may not be practical. At any rate, the range of 2 to 25 mA is trivially easy.

  • \$\begingroup\$ I understand that. I want to go lower than 6uA RMS. At that point I switch to 2mA reference and start reducing the PWM. Near the end (at low PWM duty) the IC loses capability to control the outputs. Bear in mind that during the ON time of the PWM the actual current is the reference current. Over time it sounds really very small. \$\endgroup\$ Dec 16, 2017 at 22:48
  • \$\begingroup\$ I'm afraid you're out of luck. A 2 ma, 1/4096 PWM signal will have a 31 uA RMS, so you would need at least an 80% reduction in reference current from that level. Of course, are you sure you need RMS and not mean? A 2 mA reference and 1/4096 PWM will have mean of about 488 nA. \$\endgroup\$ Dec 17, 2017 at 0:01
  • \$\begingroup\$ Sorry, I mean average not RMS. \$\endgroup\$ Dec 17, 2017 at 0:15
  • \$\begingroup\$ Right, so you can do an order of magnitude better than 6 uA with 2 mA reference current. \$\endgroup\$ Dec 17, 2017 at 0:51

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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