Optimal arrangment of LED's: (V_s = V_d1 + V_d2 + ... + V_d8)

deSitter

New member
Joined
Jan 12, 2018
Messages
3
Hello,

I'm attempting to come up with a way of determining an optimal arrangement of LED's for a lighting array project I'm working on. The setup is as follows:

I have sixty-four LED's arranged into eight parallel strings of eight LED's each. The specified voltage drop for each LED Vd ≈ 26V ± 1V. The total voltage drop across each string is the sum of voltage drops across each LED comprising the string (Vs = Vd1 + Vd2 ... Vd8). The aim is to balance the voltage drops Vs of each of the eight strings. Hence, by knowing the individual voltage drops of each LED, is there a way to determine an optimal arrangement that minimizes the disparity in Vs1 ≈ Vs2 .... Vs8 ? With sixty-four factorial possible arrangements it's going to be impractical to brute force a solution.

My apologies if this is the wrong section for this post. Please feel free to move it if so.
 
It's not the section so much as the question. We're here to help math students. We are not a consulting service. If you would like to give it a go, maybe we can offer some pointers.
 
Hello,

I'm attempting to come up with a way of determining an optimal arrangement of LED's for a lighting array project I'm working on. The setup is as follows:

I have sixty-four LED's arranged into eight parallel strings of eight LED's each. The specified voltage drop for each LED Vd ≈ 26V ± 1V. The total voltage drop across each string is the sum of voltage drops across each LED comprising the string (Vs = Vd1 + Vd2 ... Vd8). The aim is to balance the voltage drops Vs of each of the eight strings. Hence, by knowing the individual voltage drops of each LED, is there a way to determine an optimal arrangement that minimizes the disparity in Vs1 ≈ Vs2 .... Vs8 ? With sixty-four factorial possible arrangements it's going to be impractical to brute force a solution.

My apologies if this is the wrong section for this post. Please feel free to move it if so.

I'm going to answer because you've piqued my curiosity. I guess the mods can delete this thread if they decide it's mainly engineering, and not math.

To start with my electrical engineering hat on, I'm a little confused about your diodes! 26 V seems like a huge forward voltage drop for an LED. Signal diodes have voltage drops of ~0.7 V, and I'm used to even bright LEDs having only a forward voltage drop of a few volts (like 2 or 3 V). Plus, if the forward voltage drop is 26 V and there are 8 diodes in series, then that would be a total voltage drop across each string of at least 26*8 = 208 V. So what on Earth are you powering this whole thing with? Twenty car batteries? AC mains electricity? Powering LEDs off AC would be super weird...I guess they would flicker at 60 Hz. Does your circuit include series resistors to limit the LED current appropriately, or are these built in to the lights? Please be careful with whatever it is you are doing!

Now to put my statistician hat on. We can consider the forward voltage drop of each LED to be a random variable with mean of 26 V and variance of 1 V^2 (the variance is the square of the standard deviation). For a sum of N independent random variables, their variances simply add. So the variance of the sum of the forward voltages of 8 LEDs would just be the sum of the 8 individual variances. So it would be 8 V^2. In other words, we expect the standard deviation of the sum to be sqrt(8) volts = 2*sqrt(2) V = ~2.8 V. So we'd expect the voltage drop across each series string to be 208 V ± 2.8 V. Is that level of variability acceptable?

I don't think you can conclude anything further unless you actually measure the voltage drop across each individual LED. It was unclear to me from your original post whether you plan to do that, or have already done that. Even with that information, it's a tough problem. You have 64 numbers, and you're trying to group them into sets of 8 such that the sums of all the sets are as close to each other as possible. Hmm, if I have four numbers, like 2.0, 2.5, 3.0, and 3.5, and I want two groups of two, I'd just group the smallest with the largest (2.0 + 3.5 = 5.5) and the two middle ones together (2.5 + 3.0 = 5.5). In this case it works out exactly, but I wonder if you can generalize it to the case of 64 numbers and 8 groups. It seems like you want to take your 64 measurements and order them from smallest to largest. Then you could break that sequence up into quantiles (the generic term for groups dividing an ordered set, like quartiles or percentiles, only in this case each group having 1/16 of the data rather than 1/4 or 1/100). One sixteenth of 64 = 4. So if you grouped the lowest 4 with the highest 4, that would give you your first set of 8. Then group the second-lowest set of 4 with the second highest set of 4. Etc. I can't prove that this solution minimizes the variance among the sums of 8, but it seems somewhat sensible as a thing to try.

EDIT: I tried this using Python code to generate 64 random samples drawn from a Gaussian (normal or bell-curve) distribution with mean 26 and standard deviation 1.0. I sorted this list of numbers, and created 8 sums as described above. My 8 sums were: (208.15424803417898, 208.09947434380618, 207.39265794822055, 207.87732447146061, 208.17161245725597, 207.82787222297333, 207.62939168482836, 207.24065326240887). They have a mean of 207.799 and a standard deviation of 0.329. That deviation, 0.329 V, is a LOT lower than 2.8 V. So I think my method is doing much better than grouping them randomly!
 
Last edited:
Thank you for your replay j-astron. You have given me some good food for thought.

To answer some of your questions, the LED's are COB's (circuit on board), BXRC-35E1000-D-7. Essentially just a 36 dies wired in series on the same board, hence the large forward voltage. Power comes from a single Mean Well HLG-320H-C1400B constant current driver, which should supply max 175mA per string. Using a driver for each string would be a lot easier but also a lot more expensive, so I've instead built a current mirror to try prevent any current imbalances and thermal runaway. Ideally though, I had hoped to also test each COB under operating conditions to determine its forward voltage @175mA, and then balance them by hand as best I could.

When first thinking about the problem I had come up with what might be a workable, albeit brute force solution. But I had hoped there might be an easier, more mathematically rigorousness way of determining the optimal combination; hence this post. I wrote a simple C++ program to iterate through all combinations 64C8, sum the voltages of that combination, see how far it varies from the mean voltage for all 64 samples, and then save the combination if it is the closest to the mean so far found. Then I planed on removing the voltages of the most optimal result from the sample, and let it run again for 56C8, and then again for the next string and the next...until none were left. 6,312,179,764 combinations is a fair few to test but at least it's doable. Hopefully this would produce a combination across all eight strings that was within tolerances. But it's certainly does not satisfy my itch for rigor. I was hoping there may be some way of plugging all voltages into a 8x8 matrix and working some math magic to parse all combinations and minimize the deviation in the summed voltage down each column. Or maybe something involving the derivative of the standard deviation with respect to ... and find where it is at a minimum. My education in math leaves a lot to be desired.;)

Hmm, your grouping method is very interesting and I'll think more on it tonight. I'll also set to work on building a list of forward voltages tomorrow and then plug them into my program and see what answers it gives. Thank you again for your help, I'll report back on what I find.
 
Here are the voltages taken at Ta = 25C after 10mins of on-time:

24.62/*00*/, 24.81/*01*/, 24.62/*02*/, 24.84/*03*/, 24.51/*04*/, 24.67/*05*/, 24.53/*06*/, 24.91/*07*/,
24.66/*08*/, 24.67/*09*/, 24.66/*10*/, 24.81/*11*/, 24.80/*12*/, 24.70/*13*/, 24.90/*14*/, 24.84/*15*/,
24.51/*16*/, 24.51/*17*/, 24.58/*18*/, 24.50/*19*/, 24.49/*20*/, 24.86/*21*/, 24.62/*22*/, 24.52/*23*/,
24.64/*24*/, 24.84/*25*/, 24.82/*26*/, 24.90/*27*/, 24.61/*28*/, 24.68/*29*/, 24.62/*30*/, 24.91/*31*/,
24.69/*32*/, 24.85/*33*/, 24.79/*34*/, 24.57/*35*/, 24.72/*36*/, 24.68/*37*/, 24.91/*38*/, 24.52/*39*/,
24.52/*40*/, 24.55/*41*/, 24.50/*42*/, 24.82/*43*/, 24.52/*44*/, 24.85/*45*/, 24.77/*46*/, 24.50/*47*/,
24.48/*48*/, 24.51/*49*/, 24.74/*50*/, 24.49/*51*/, 24.49/*52*/, 24.59/*53*/, 24.81/*54*/, 24.91/*55*/,
24.91/*56*/, 24.57/*57*/, 24.69/*58*/, 24.84/*59*/, 24.49/*60*/, 24.60/*61*/, 24.68/*62*/, 24.88/*63*/

And the results of the simulation:

S1 = {1, 11, 14, 18, 20, 51, 52, 63} Vs1 = 197.45 V
S2 = {8, 23, 27, 28, 36, 50, 54, 60} Vs2 = 197.45 V
S3 = {0, 2, 3, 13, 15, 34, 39, 40} Vs3 = 197.45 V
S4 = {4, 21, 25, 29, 37, 44, 46, 53} Vs4 = 197.45 V
S5 = {5, 6, 7, 19, 26, 42, 59, 62} Vs5 = 197.45 V
S6 = {10, 12, 22, 31, 35, 38, 47, 48} Vs6 = 197.45 V
S7 = {9, 16, 17, 41, 43, 55, 56, 57} Vs7 = 197.45 V
S8 = {24, 30, 32, 33, 45, 49, 58, 61} Vs8 = 197.45 V

The greatest difference from the mean is well below any uncertainty in the measurements - something on the order of 5 x 10-5, which is likely more from rounding errors of floats, so I'm pretty happy with the result. I'll likely go with this arrangement for now, and do a more thorough test with my oscilloscope (much better precision and bandwidth than the power supply used for this testing) under normal operating conditions.
 
Top