# How should I current limit a LED matrix?

I have an LED matrix which has a maximum peak forward current of 90mA and average forward current of 13mA per LED (dot). If I power only one LED at a time, this one LED will have a very large current consumption compared to if I power several at once. What values should I choose and where should I put them when I have VCC at 3V on each anode?

Added a simple schematic for clarity.

simulate this circuit – Schematic created using CircuitLab

A great way to solve this is to cheat like crazy.

A constant current driver or sink IC will make certain that each LED only gets exactly as much current as it needs. TI's TLC59284 (16-channel sink) or TLC5916 (8-channel sink) will work for basic needs. Take a look at the rest of their Signage/Linear products if you want features such as per-channel current tweaking or PWM dimming (up to 12 bit resolution!). And most of them will work all the way down to 3V supply.

And of course, other vendors will have their own selection of drivers, so take a look around.

• Nice- one of the problems with his setup is that with only 3V available there may not be quite enough voltage for some of those chips to work (compliance on the output rather than supply voltage). – Spehro Pefhany Dec 22 '14 at 13:28

Having specified that you will have Vcc on the anodes makes your life simple: all current control must be on the cathode leads. Period. There's no place else. Furthermore, if you use a simple current limiting resistor, you must size it to produce less than 13 mA current in a single LED, since you can't guarantee that more than one LED per row will be lit over a long period, and 13 mA is an absolute maximum.

Operating from 3 volts is probably not a great idea, since LED variations start to bite you, but we'll go with it. Then, using the average forward voltage of 2 volts and a current of 10 mA (to give a little safety margin for LEDs with a lower voltage), and assuming your cathode driver output is 0.1 volt at 10 mA, you'll want a (3 - 2 - 0.1 / .01) or 90 ohm resistor.

And that's about as good as you'll get for a simple driver.

When you drive multiple LEDs from a single channel, they will (approximately) share the current, so if all 5 LEDs in one row are turned on, each LED will (approximately) draw 2 mA. However, if one has a markedly lower Vf than the others it will hog most of the current.

I hope that's not from your schematic capture program- there are obvious shorts in that matrix.

Normally with a matrix you are going to make one row active at once and drive however many LEDs in the column that are required, or do the opposite and make one column active and drive however many rows are required.

In the first case, you need a resistor in series with each column driver, in the second case you need a resistor in series with each row driver. So, if it's an m x n matrix, you need either m or n resistors.

If you drive an m x n (row x column) matrix with equal time for each row (or column in the second case) then you'll have any LED that is 'on' energized for 1/m of the time (or 1/n in the second case). So if you want the LED to see 5mA average, it will have to have a resistor that is (Vdriver -Vf)/(m * 0.005) (or n * .. in the second case), where Vdriver is the voltage difference between the column and row drivers.

So if you have a 3 x 4 matrix, are driving it one row at a time, have 5V Vdd and your row and column drivers have 4.5V difference, and your LED forward voltage Vf is 3.0V when it sees 15mA, then your resistor value is (4.5 - 3.0)/0.015 = 100$\Omega$ and you'll need 4 of them.

The row drivers need to be able to handle 4 * 15mA = 60mA (only one on at time) and the column drivers have to be able to handle 15mA each (all of them can be on at once), and your entire matrix will require 60mA (12 LEDs at 0.005A each = 60mA).

If you put the resistors on the wrong side (column if you're driving only one column at a time or row when you're driving only one row at a time) you'll get horrible variations in brightness depending on how many LEDs are on, so don't do that.

Here's an example of a complete driver circuit driving one row at a time and using one resistor per column.

It may seem undesirable to use one resistor per column (40 in this case) but there is really no alternative. In your case both the high side and low side drivers must be low drop- the Micrel parts would be suitable, and you could use P-channel MOSFETs for the high side drivers. Your LED part is similar to the one used in this project (high side drivers used for rows).

• He specified 3 volts, and the data sheet he linked to shows a 5 x 7 matrix. – WhatRoughBeast Dec 22 '14 at 13:00
• @WhatRoughBeast True, but the equations are still correct, even if the example is closer to the schematic he provided. My intent is to show the method, not do it for him. It's impossible to come up with an exact solution without knowing the driver configuration- as the equations show its going to have to have very low voltage drop if there's only 3V available as Vf is 2.05 (or as much as 2.6V) which leaves very little for the driver and resistors. No ULN2003 or similar Darlingtons, for example. – Spehro Pefhany Dec 22 '14 at 13:09