I'm working on the design of an LED lamp house for my film scanner. I need RGB LEDs, plus IR LEDs. I'm figuring on a 2"x2" grid of SMD LEDs. Datasheets for the ones I'm using below. The current design is based on the common cathode schematic at the bottom of this post: https://electronics.stackexchange.com/a/64623

I've got this working on a breadboard with similar thru-hole LEDs, and will be making a PCB for the final setup. However, this is a lot of resistors and they take up a lot of space. I'd like to keep the size as small as possible - not a lot bigger than the 2"x2" LED array, if I can. I'm using a Quad PNP transistor array with an isolated resistor array, which has a fairly small combined footprint. There are also bussed resistor arrays for each row of LEDs in my prototype, which obviously saves some space over using separate resistors for each LED, but the smallest I can get my board design is something like 5" wide by about 3" high. I'd like for it to be smaller - as close to the 2"x 2" LED array size as I can get, ideally.

So I'm wondering if maybe I should use some kind of LED driver IC for this instead of the setup I have now. I'm basically controlling a total of 192 LEDs. In all cases, all the LEDs of a given color will be all on, at the same intensity, or all off. When I do white, it'll be a mix of RGB. I'm using an Arduino Mega (with an external power supply for the LEDs) and am planning on using some of the PWM pins to calibrate the intensity of each color channel as needed.

Any suggestions for how to approach shrinking/simplifying this, or specific ICs I should be looking at? I've never used an LED driver, and I'm not really clear on how they work, but from what I'm seeing/reading, it seems like it'll save me a lot of space. Is it possible to use one driver chip to drive all the LEDs of one color at once, or even with a driver do I still need one resistor per color per LED?

What about alternatives to the bussed resistor arrays? Anything I can use with an even smaller footprint?


Datasheets for my LEDs:

Lite-On LTST-G683GEBW RGB SMD LED: http://www.mouser.com/ds/2/239/S_110_LTST-G683GEBW-337108.pdf

Kingbright APT2012SF4C-PRV IR SMD LED: http://www.mouser.com/ds/2/216/APT2012SF4C-PRV-55109.pdf

  • \$\begingroup\$ you really need to look at smarter ways to drive LEDs than just resistors. Look into constant current drivers and using higher voltage rails to have less parallel strands and more in series, to reduce overall components in general for the constant-current loops. \$\endgroup\$ – KyranF Apr 26 '15 at 23:25
  • \$\begingroup\$ Are you planning to control each color individually? Or are you planning for more fine-grained control? (p.s. The question is about LEDs and circuit design. Please don't use arduino tag if the question is not really about Arduino.) \$\endgroup\$ – Nick Alexeev Apr 26 '15 at 23:27
  • \$\begingroup\$ I see that it's RGB now.. well that may make things more awkward. The issue is, each parallel branch must have constant current driving, because if you try to drive 2 or more branches in parallel, they will not share current equally. \$\endgroup\$ – KyranF Apr 26 '15 at 23:28
  • \$\begingroup\$ Could you please give us some sort of idea of your layout? As I count it, each LED requires 6 resistors and 3 transistors, and I'm having a hard time accepting that you need 15 square inches for nine components. Or are you trying to fit all 192 channels worth of resistors and transistors into a 2x2 area? If so, why? \$\endgroup\$ – WhatRoughBeast Apr 27 '15 at 1:00
  • \$\begingroup\$ @NickAlexeev - the application is a backlight for a motion picture film scanner. All reds will be on at once, or all blue, or all green, or in some cases, all three to make white. The individual LEDs won't vary, they need to provide uniform intensity across the array, one color at a time, or IR, or White. (btw, edited the tags to remove Arduino) \$\endgroup\$ – Perry Paolantonio Apr 27 '15 at 2:15

According to the data sheet, the 3 RGB LEDs are electrically separate. This means that you can connect them in series, using a higher voltage with fewer resistors and transistors. Nick Alexeyev's answer then applies. Assuming a 36 volt power supply, and strings of 8 for green and blue, 16 for red, and 24 for IR, total is 18 channels. I would not go with Nick's suggestion of 48v/12x strings for green and blue, since there isn't enough excess voltage for the limiting resistors to operate reliably, particularly with the Vf variations given in the data sheet. I'd expect that you'd need to measure the voltage drop of each string and tailor the limit resistor values accordingly.

What I think you've missed is power. Assuming 20mA for each LED, total power is 3.6 watts each for green and blue, 2.3 watts for red, and 1.5 watts for IR. Total power is 11 watts in the LEDs. I have no idea how you're going to heatsink this. Well, I do, but it involves using a beryllium oxide substrate for your LED PC board, bonded either to a pretty hefty heat sink, or maybe a TEC cooler. You want the LEDs to run as cool as possible for better lifetime. But trying to do it with FR4 is asking for early death of your LEDs. Similarly, you would also need to calculate the dissipation in your limiting resistors, although for the values I've given I'd expect total dissipation in the 4-5 watt range, and this can be handled with forced air cooling. And with the cooling requirements indicating a certain amount of increased size, I don't think you really need to worry about minimizing the driver board size, although at 18 channels you shouldn't have much difficulty.

  • \$\begingroup\$ Maybe the overall power is not as bad as you suggest. The OP says that he will usually only be driving one color at a time. If that is the case then when going to the white mode the PWM driving duty cycle will need to be roughly a third of that it is at for a single color to maintain an equivalent brightness level of the light. \$\endgroup\$ – Michael Karas Apr 27 '15 at 9:44
  • \$\begingroup\$ The plan for cooling is to put this whole setup in an enclosure with an active cooling fan. Most of the heat generating elements of the scanner use fans and flexible ducts to move the heat away from the chassis, and internally, most of the structure is 1/2" thick aluminum. It should be reasonably cool in the machine, where the lamp is, because it's physically isolated from the PC, motors and motor drivers, which generate most of the heat. The plan is to put a cooling fan in the lamp house enclosure. My concern about size is more about fitting it in the machine - smaller would be easier. \$\endgroup\$ – Perry Paolantonio Apr 27 '15 at 12:03
  • \$\begingroup\$ By the way - the lights will not be on constantly. Each color would flash for a fraction of a second while the frame is captured, then the next light until all four exposures are done, then all LEDs are off while the film is moved to the next frame. I would imagine that constant on/off pattern would help to reduce heat somewhat over time, since they're not on continuously. \$\endgroup\$ – Perry Paolantonio Apr 27 '15 at 12:17

196 pixels is a 12 x 16 array. This is a scanner for film, so this is a fixed installation and you can use AC-DC power supplies.

The idea is simple: connect LEDs into strings in series. You need only one resistor per string. The length of a string is limited by the voltage available from a power supply. The largest forward voltage among your LEDs is 3.8V (your green led). If you want to connect 12x of these in series, they would require 45.6V. Luckily, AD-DC power supplies with 48V output are not too uncommon.

This, you will have 16 chains for each of the 4 colors, each with one resistor.
(Instead of 192 x 4 resistors.)


Since you are using SMT LEDs I would like to suggest that you should use a board design with SMT components mounted on both sides. Place all the LEDs on one side and all the other components on the other side (including resistors, drivers and transistors). This will be the way to drive the board size down toward it's minimum.

  • \$\begingroup\$ Thanks - this is kind of what I was thinking, but I was hoping that there might be another way to simplify the overall design that doesn't involve quite so many resistors. Seems like that may not be possible? \$\endgroup\$ – Perry Paolantonio Apr 27 '15 at 2:19
  • \$\begingroup\$ @PerryPaolantonio - If you choose to continue on with the combo RGB LEDs then there really is not a good way to reduce the needed resistors. As due to the common anode these LEDs are not really suited to driving in series strings as others have tried to suggest here. On the other hand the resistors are really low cost components and they do nicely distribute any power dissapation all across the board!! \$\endgroup\$ – Michael Karas Apr 27 '15 at 3:20
  • \$\begingroup\$ @MichaelKaras - Please read the data sheet. The LEDs are electrically separate. \$\endgroup\$ – WhatRoughBeast Apr 27 '15 at 4:54
  • \$\begingroup\$ @WhatRoughBeast - You are indeed correct. I had looked only at the schematic and did not comprehend the fact that the three leads wired in common were separate for each LED. This indeed makes the design a candidate for some series strings and possibly even constant current drivers. \$\endgroup\$ – Michael Karas Apr 27 '15 at 9:39
  • \$\begingroup\$ @MichaelKaras - can you elaborate on using constant current drivers? Increasing the voltage to the unit shouldn't be an issue if necessary. But my understanding was that if one of the LEDs was to fail in series, there would be a cascade effect on the remaining LEDs in the series, which would cause them to fail at an accelerated rate. Is that not the case? I had been planning on using SMT resistor arrays in the final design, so they could be moved to the back of the board to save space. \$\endgroup\$ – Perry Paolantonio Apr 27 '15 at 12:08

Maybe have a look at the popular WS2812b rgb driver? Adafruit makes an integrated driver/led package that is about 5x6mm. Ignoring thermal conditions, you could pack a 16x12 array of these into about 2.5x3 inches.

  • \$\begingroup\$ Interesting. This is worth a look. Thanks. Though - I don't need 192 RGB LEDs, just 48 (for 192 total LEDs, if you count each color channel separately. The Lite-On LEDs I'm speccing now are wired separately, but contained in one package). \$\endgroup\$ – Perry Paolantonio Apr 27 '15 at 15:10

It appears that you wish to produce a substantial amount of diffuse light with a controlled mix of color in an enclosed space. Bear in mind with each decision that any electricity you waste will go towards heat, so you should probably consider maximizing thermal performance and minimizing power wastage with each step. If the frame and mounting points really are 1/2" aluminum, a decent design likely will mean you don't need a fan, depending on ambient temperature, heat coming off the rest of the machine, etc.

I'm actually here on stack exchange to get more information to design a general purpose modular led driver system =).

I don't know how much space you have to work with in your machine, but one thing you may wish to consider is fewer, more powerful individual leds running at a lower percentage of their total capacity, and using a more effective diffusing lens than whatever is already present, like acrylic with microbeads or a multilens setup. Because these higher power LEDs can be purchased on or mounted to MCPCBs, this will help greatly with your thermal management. LEDs become more efficient at lower average current levels, lower instantaneous voltage levels and lower thermal levels. Also running LEDs at a lower portion of their total capacity will in many cases greatly extend their lifespan (see datasheet). Being modular, they can be easier to replace. That being said, the following will also apply to a large number of weaker LEDS.

You have a large number of matching LEDs all being controlled at once, so as others have mentioned, you have the advantage of being able to use a series set up to ensure the LEDs share current. You do need a different total voltage for each string of LEDs, but you can do things to mitigate this, like if you have 60 red LEDS, 60 green LEDS and 60 blue LEDS and the reds are 2.2v each and the greens are 3.3v and the blues are 3.2v, the voltage of 60 blue in series would be more than 180v, and say I didn't want to work with more than 50V, for the blues I would have to make a parallel set of at least 4 matching strings of 15 or less LEDS in series. If I wanted to go lower, I could go to 5 strings of 12 or 6 of 10. As long as you have four or five LEDs in series and you don't exceed thermal spec they will current share fairly well. If you make a list for each of your colors of the arrangements you can make and the voltages they require, you can choose voltages that are in relatively the same ballpark. This will eliminate many resistors, especially if you go so far as to actually use the LEDs in full series strings. using high power LEDS rather than a larger number of them can aid in this, provided you are using a powerful enough diffuser. Having IR LEDS calls for one more series or series/parallel bank of them.

The next thing to consider, in order to eliminate all of those nasty resistors, is to add voltage regulation. Because you have 4 banks of LEDs, you need to produce 4 voltages unless the voltages required by each bank are very very close to one another. LEDS function most efficiently at a constant voltage and if you PWM control them, they tend to operate at the efficiency they would if they were continuously on. So it is best not to overvoltage them, even with your pre-PWM voltage. This means that the voltage your PWM driver (arduino) is switching should ideally be pre-adjusted to be exactly enough (maybe 5% more) to power the LED bank at the maximum brightness you will want it to run at OR the minimum voltage the bank turns fully ON at, whichever is greater. It would also be wise to have your arduino current control the LEDs to prevent thermal runaway. This can be accomplished by having it monitor the voltage across a 1 or .1 or .01 ohm series resistor while in the ON part of the duty cycle. The resistor will not counter thermal runaway, but you can make your arduino reduce the duty cycle of the channel if the voltage across the resistor starts to rise, indicating the LEDs are heating too much and starting thermal runaway. In this way you use the Arduino's "intelligence" to regulate the LEDs, rather than using a resistor to regulate by burning off heat. In resistor regulation circuits you often waste ~1/2 of your total power, but that's assuming you don't already have thermal concerns. In an enclosed box, producing more than twice as much heat as you need to becomes a problem even after you get rid of any thermal runaway problems, decreasing the efficiency of the LEDs, causing them to produce more heat in order to maintain the same brightness, which in turn decreases efficiency further. The better your LEDs are cooled, the less you have to worry about this, but unless you want to modify your machine with a comically large heat sink, it's best to consider thermal problems at each step of the design, and then at the end, based on the necessary thermal load, add any heat sinks or fans that might be necessary. If you follow all of my advice here and have enough high power LEDs that you don't have to run them too hard, typically just the MCPCB that these LEDS come mounted to will be adequate to cool them at considerable brightness levels. If you overvoltage them in your pre-pwm voltage, they'll heat up more as I mentioned, so avoid that.

I'd figure out what LEDs were in the existing plan, figure out what their total output would be, and then find matching color high power LEDs mounted to MCPCBs, say CREE XP-G2 or G3, or Nichia, whatever, such that at their minimum rated turn-on voltage(most efficient) they would produce that amount of light plus 200% for error(you can usually run them substantially below that voltage for further efficiency improvements. This could be surprisingly few LEDS, so if necessary I would increase the number further in order to decrease the amount of diffusion necessary. I would then use a spreadsheet and figure out what the best series/parallel bank arrangement for the LEDs would be to get their voltages within a reasonable range and or closer together if they aren't already. I would then make or purchase one variable voltage or current regulator for each of the four(or more) channels, and use the Arduino to switch that. You may wish to consider a Buckpuck or similar switching driver. Next I would turn on and adjust all four channels so they barely fully turned on, and whichever was brightest of them, adjust each of the other voltage sources up so that in the ON state, they produce an equal amount of light. Let the Arduino control the PWM drive on the LEDs running off that supply. Start by adjusting the arduino duty cycle down to find the brightness of light actually required, and have the duty cycle regulator consider that to be 100% for the purpose of the rest of my programs. If necessary, I would increase this brightness, the number of LEDs, and or the effectiveness of the diffuser as necessary to eliminate any hotspots or unwanted artifacts.


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.