Help on (non-working) LM317 constant current circuit

xl,

Check out this site, might help. LM317 Current Calculator | REUK.co.uk

Thanks...

I used a similar one to get the 3.6-3.9Ohm value I am using now.. to get 320-350mA of current though it..

Im still not clear on how to FIX this though.. (at least as to why the leds are on when connected?)

I will change 3.9K value to 3.9Ohm value (or as close as I can get/find to the value..seems to be a special order value?) :frowning:

I will lower the value on the 1K resistors to ensure full saturation/opening of the transistor gate as well..
(simple equation for calculating that one?)
All the Beta and Ibe and stuff confuses me still :frowning:

thanks.

logic in the code should be the same..no? both common anode leds? I am using internal pull-up resistors on those pins.

Internal pullup? That is only for input pinmode, it has no effect when using a pin as an output.

3.) I think your saying that the 1k resistor value between the transistor and Arduino pin is too high? lor is so I get more/full saturate of the gate, allowing the led to get full (constant) current? suggested value to use?

Yes, too high. (5V - 0.7VBE)/1k = 4.3mA. The practical maximum current from an Arduino pin is 20mA, that is about 1/16 of 320mA, so let's use roughly that. (5V - 0.7VBE)/0.02A = 215 ohms, so closest standard value is 220 ohms.

Im not following on how to measure the current.. (sorry).. and I dont have any LARGE resistors like that around (no 1-2 watt fattys) just regular old SMD and through hole resistors.. of 1/8, 1/4, 1/2 watt..etc..

Because it is a constant current regulator, you could put a much lower value resistor in there to test it. It will then drop a lot less voltage across the resistor, therefore require a smaller lower wattage resistor. If you have a 0.1 ohm resistor, 320mA will read 32mV dropped across it, and that is only about 10mW (0.32A x 0.032V = 0.01024W) so even a 1/8W resistor will work.

4.) Use a resistor when? you mean when 'testing' the LED on my PSU? I just cranked the voltage down to +3.3v.. and did a quick TAP on the leads.. to ensure it was working/is bright..

no resistor.. (I dont recall if I dialed down the AMPs or not? usually it at 1A or so)

That is a horribly, horribly bad idea. LEDs are not light bulbs. Damage can be done to them in a fraction of a second. The LED you are using is going to be more tolerant of 1A, being rated at 1/3 of that, but that depends on whether or not you limited the current.

One of my coworkers, who (no offense to him) has forgotten nearly everything he's learned through disuse, made a 6x6 matrix of LEDs scavenged from broken equipment, in order to make a cable tester. He tested each one of these tiny LEDs on a 3.6V lithium ion battery, for "just a second". Then installed them. When I heard this, I wired up a battery with a resistor, showed him it working with a good LED, then left him to retest all his LEDs.

They were all damaged. Some were just dead, the rest were dim and orangish.

As for the Red LED being on all the time, I suspect that there is some fault in the circuit. A shorted trace, a bad transistor... What happens if you disconnect only the red LED? Do any of the other LEDs light?

What is the voltage on the collectors of all the transistors when it is connected? On the bases?

With the LEDs, Arduino, and battery disconnected, put your meter on Diode Check and confirm that you have the correct diode drops in the correct direction. Confirm that the CE connection reads as an Open.

A page on how an LM317 works when wired as a current regulator:
http://theparanoidtroll.com/electronics/primers-and-tutorials/other/constant-current-sourceload-lm317/

I've not made a constant current circuit yet, so I can't be much help there, but a few comments concern me, so I want to make sure they're addressed:

xl97:
Im measuring roughly +6.72v on the OUTPUT (I removed the RGB LED and metered the plug/wires ends to get this)
sounds ok with voltage drop across the whole board/components? (but makes me worries since thats WAY over the vF of the RGB led I'm using)

This is an incredibly common misconception about LEDs. The Vf is NOT the voltage at which you want to run the LED. It's how much the voltage drops going across the LED. Just like a diode drop. (LED = Light Emitting Diode, so it's no coincidence! ;)) The voltage has to be higher than this for the LED to light at all. (Well, there is a knee, but let's pretend it's a sharp cut-off for simplicity.) There's no need to be concerned with the voltage being too high (within reason...), as long as the resistance is scaled accordingly to keep the total current through the circuit less than or equal to the operating current of the LED. (20mA for typical indicator LEDs, more for the high-power ones.)

Speaking of which....

xl97:
I dont understand this:
"Of course the output is high with no load connected. It is regulating the current, and with no current draw, the voltage reaches the maximum it is capable of supplying."

this is my first time using the LM317 chip..and trying to make a constant current circuit ever. (working my way through it) :slight_smile:

LEDs light up from current, not voltage. This is why you are using a constant-current power supply to light them. The regulator will vary the voltage to whatever degree is necessary to keep the current through the circuit at a set threshold. You cannot regulate both voltage and current -- only one of the two. The other is determined by the impedance of the circuit.

Since the LED doesn't care if the voltage is 5v or 20v, as long as the current is within its operating area, the LM317 will keep the current in check by varying the output voltage. When there's no load (open circuit), the current is at 0mA, so the LM will increase voltage (as much as it can) to try and allow more current to flow. This is why you're seeing it above 6v. It's a futile effort, since there's nothing connected and no current can flow at all, but it doesn't know that. It's just doing what it can to keep that current steady. If you short the outputs it will drop the voltage to try and limit current instead. (I don't know if this is safe to do -- LEDs are virtually a short circuit when the voltage is above Vf, but there may be real-world factors involved that differentiate between "virtually a short" and "actually a short". Gap in my knowledge, apparently.)

xl97:
Use a resistor when? you mean when 'testing' the LED on my PSU? I just cranked the voltage down to +3.3v.. and did a quick TAP on the leads.. to ensure it was working/is bright..

As poly says, don't do that. Never never never never. If the PSU has a high enough impedance you might get away with it (like some folks do when running Arduinos at 3.3v and connecting LEDs directly to the pins). Still, an ideal PSU has 0 ohms output impedance and is capable of delivering infinite current. Infinite amps at 3.3v will of course toast an LED. Reality will be somewhere in between, but unless you know the output impedance is enough to safely limit current, assume it's an ideal PSU and will turn your LED into a puff of smoke in far less time than you could possibly tap.

A personal anecdote: I got used to using LCD screens with built-in backlight LED current limiting resistors. Then I used one that put the onus on the designer to limit backlight current, forgot to verify with the data sheet, and connected it straight to 5v. I didn't even see it burn out. It just didn't light up, and never worked again. It can go that fast.

As stated, LEDs are current devices, not Voltage. As long as you have Vf or Vf+ and stay below Imax, you get a light. The amount of time it takes to kill a LED is proportional to the amount of current you feed it at any voltage above Vf. It is actually the heat generated by passing current (yeah, I know, bad english, but the theory is correct). The more current, the more heat. The longer you apply the current, the longer it takes to disapate the heat, and, the more damage is donr to the junction area and the bond wires. If you burn an LED at high brightness for a long time and another at half brightness (think current levels), which one do you think will die first?
I have used red LEDs with MegOhm+ series current limiters as pilot lights in 110Vac circuits (more for continuity checking than pilots, but you get the picture. Voltage isn't really the issue.

Have fun.

I have used red LEDs with MegOhm+ series current limiters as pilot lights in 110Vac circuits (more for continuity checking than pilots, but you get the picture. Voltage isn't really the issue.

Just wanted to add, you can do that only if you either have two LEDs connected anti-parallel (parallel but pointing different directions) or one LED with a regular diode connected to it in anti-parallel. That is because LEDs generally don't survive even modest current levels when put in reverse breakdown, and the reverse breakdown voltage is not very high.

ok..

Im home..

(thanks for the replies)

lets see if I have this straight...

fixes:

1.) 1k transistor >> arduino pin resistors change to: 220ohm
2.) I could NOT find a 3.9 Ohm resistor.. I did however find a 3.32 Ohm one (0805 footprint.. but should fit).. I think that gives me roughly 370mA.. which is just a smidge over their rating.. (but I have heard people over drive these.. and it will NOT be running/on for any length of time only a quick 'blink/flash' at any given time.

*noted about not doing that with my PSU.. ensure the AMP is dialed down the appropriate level the LED needs.

turning it on right now I see its (my PSU) @ +07.3Volts & 0.34A.. which I believe was the last setting I used when checking those RGB leds..

I will address those in a little bit..

moving on though.. the current/remaining issue is that the LEDS are lit when I connect the PCB??

As you guessed it.. when I connect the PCB/LED.. the RED is on.. I disconnect the RED.. green is on.. unplug green.. blue is left.

What is going on? You had made reference this behavior before about the red being on because it has the lowest vF..etc..
seems like you have handle on this error? what am I doing wrong?

lastly you want me to meter voltage on the transistor(s):
collectors
bases

I need to look at the data sheet to know what is what.. :slight_smile:
http://www.fairchildsemi.com/ds/BC/BC817.pdf

Do you want the led 'connected' to the board or off?
(or doesnt it matter for this?)

PSU settings:
+7.4v
1.00A

using the pcb (blue) pic from above....

putting red probe from meter on the battery V+ input pads/wires... (VIN)
black probe on collector:

T3- +7.4v
T2- +7.4v
T1- +7.4v

black probe on base:

B3- +6.66v
B2- +6.66v
B1- +6.66v

as far as this;"With the LEDs, Arduino, and battery disconnected, put your meter on Diode Check and confirm that you have the correct diode drops in the correct direction. Confirm that the CE connection reads as an Open."

so take the constant current board/pcb (blue one in pic above)..

disconnect battery/Arduino and LED (plain pcb)..

what setting is the DIODE CHECK? continuity?

And there is NO DIODE on the pcb.. just the pads.. that have been bridged..(little piece of metal soldered in...in the pic?)

so.. should I be going ahead and doing number 1 & 2 above? or should I not bother yet? I mean having a little (dim) led, but working in the correct manner, just means I need to adjust values on the T resistors and the LM317 resistor..
but logically, its working.. (no, I am stuck in the scenario you mentioned about the lowest vF is being turned on..etc)

thanks!

polymorph,
Or something like a 1A rectifier diode in series to clip the input to halfwave. Good point!My bad for leaving it out... (I would say "gettin' old and foggy, but I ain't gettin', I'm already there....)

xl,
With red meter lead on batt+, :
AND BLACK lead on collector's you are measuring Batt voltage, O.K. , good batt,
Black lead on Base, BAD IDEA, you are putting Bat Volts (7.4) on Arduino pins, not good for arduino.

With everything disconnected, not sure what conditions you are testing for, but Diode Check setting measures resistance of semiconductor junction, if forward bias (+lead to P side and - to N side, should read close to zero ), if reverse bias (reverse of the prior) should read SOMETHING ABOVE 1 KOhms. maybe verifies your Q's are good and installed correctly... ???

I would think one thing to test is: with everything, but the tri-LED, hooked up. meter VOLTAGE between B, G, & R pads and Anode pad (red + meter lead on anode pad and black - meter lead on R pad, then B, then G , to say one of them at a time) if the circuit is working as planned, you should see the meter jitter between 3 or 4 volts and some lower reading when the software makes that pad active and then switches it off. If that does not provide the desired results, meter VOLTAGE between the various transistor bases and ground. should get same type of volts reading only lower, If test 1 fails and test 2 works, the software works and the board is bad. if test 2 fails, software is not turning the the pins on (bad software),or your arduino (the micro controller) is fried. That is a start. from there we can proceed to narrow down what is wrong.

ok.. well Im getting ODD results..

but lets talk about 'software' (meaning my sketch/code...yes?)
if it perfectly fine with 'regular' (low powered), RGB led (common anode, only 20mA spec)..
what , software wise, could be the problem/issue when changing the led (and add hardware/constant current board)?

now, on the (more) bad news..LOL.. hopefully this will let us (you guys) figure out what is wrong?
(I'm starting to think I have the pin out wrong for the transistor or something?)

its:

3
1 2


collector
base/emitter

anyways.. the data...

when metering the the RGB voltage 'output' pads (red probe on common/anode pad..... black probe to each of the R-G-B output pads)
R: +6.77v
G: +6.77v
B: +6.77v

and I think the "G" pin was the one that was LIVE during the button press (no led)..but when metered & button pressed, the voltage dropped to around +5.9v or so..

When I had black probe on GND/Batt-.. and red prob on on the "BASE" (pin1 of the 'pyramid' pinout) of each transistor....
they metered 0.74

Im tired, calling it night.

thanks for the help so far guys..

I'll check back in, in the morning, see what anyone has to say.

thanks! :slight_smile:

Well, as I think you are starting to see, when all three LEDs are lit in parallel, the one with the lowest Vf turns on and conducts, shunting the voltage away so that it's not high enough to meet the Vf of the other LEDs which require higher voltage to turn on.

Now, I've looked at the board design and datasheet for the transistors, and it looks OK to me. The most likely reasons for this that I can see are:

  1. Your transistors are all turned on by default somehow. Check by supplying power, but not a digital input. Instead, ground the base of all three transistors. This should ensure none are turned on. If one of the LEDs is still turned on, that leads to likely problem #2:

  2. The transistors are bad. Perhaps a slip-up during testing somewhere fried them. If the LEDs all go out during test #1, but red turns back on if you short any base to Vcc (through the resistor!), then it could be that...

  3. The LED cathodes of the LED are shorted somewhere.

if forward bias (+lead to P side and - to N side, should read close to zero

No. All the DMMs I've seen with a diode check function will give you a direct readout in volts. So a forward biased silicon junction will read somewhere between 0.4V and 0.7V.

A transistor is made of a couple of PN junctions. In this case, NPN indicates that to a meter on diode check, a good NPN transistor will give you readings consistent with two diodes pointing "out" from the base. So with the red lead on the Base, you'll get about 0.6V drop with the black lead on either the Emitter or Collector lead. With the leads reversed, black on Base, etc., it should read OPEN or OL (Overload) or whatever method your meter uses to indicate out of range. Also, measured from Collector to Emitter should also read as OPEN or OL, in either direction.

But other components connected will disturb those readings, that's why I have you disconnecting the LEDs and the Arduino. The one point of contact on the Emitter will not disturb this test, because current requires a complete path to flow, and in this way the only complete path is with the meter.

I meant for you to measure those voltages with reference to Ground, aka common. So put the black lead on the Arduino ground and use the red lead to measure voltages on the transistor base and collector terminals.

Perhaps you were sent the wrong transistors, and they are wired differently. If the Base is on terminal 3, then it would just have a forward biased PN junction from there to pin 2, no matter if that is the Collector or the Emitter. I am hoping for the diode check to reveal a problem with this.

Sometimes the continuity function on a meter also serves as a diode tester. In that case, it may not read out in volts, but it should read something in the range of a few hundred or less with a forward biased PN junction, and OPEN or OL when it is reverse biased. You can test your meter on a known good silicon diode.

Oh, yeah... just so you know, a transistor is not simply two diodes stuck together. When I was first learning about transistors, I got that idea in my head and started sticking diodes together, anode to anode or cathode to cathode, and trying to get them to amplify. But it does have the structure of, for an NPN, a thin layer of P type semiconductor sandwiched between two N type semiconductors.

whew... thats alot to take in at once. :slight_smile:

lets see if I have things correct in what Im being asked to do:

@SirNickity-

first thanks for taking the time to go over the board layout and datasheet for the transistors.. (glad I'm not crazy and that it looks to be set-up/designed correctly) :slight_smile:

ok....

1.) keep batery/power to the PCB.. disconnect the Arduino signal/control lines)
*(what do you mean by GROUND the BASE onall transistors?)

meaning black probe on battery GND? and red probe on the BASE of each transistor? (or vice versa?)

** I connected RGB again.... powered it up.. same deal (RED led on)..
I take out the Arduino signal lines tot he PCB.. and each one (led) goes out.. when all Arduino lines OUT..LED is OFF.

2.) when I take RED prob, put it on Vcc (positive supply voltage).. and touch BLACK probe the BASE (pin 1) on the transistors..

  • (actually I am touching it to the RIGHT side of the resistor, and not directly tot he BASE pin of the transistors)

Each of the leds light up respectively.. (not very bright or anything.. but about the same it did before)
(Im sure changing the 1K resistor values and the 3.9k > 3.9Ohm will help on this a bit though...right?) :slight_smile:

3.) checking the RGB led with a PSU & meter doesnt seem show any signs of shorted LED?


@polymorph -

(trying to understand it all) I dont have any kind of DIODE setting? (but I could be missing it? not sure what it looks like?) I have a continuity setting?

1.) NOT POWERED
Red probe to BASE
Black probe to Emitter/Collector
Results:
755-756, (from 1),... on all 3 transistors.. at each Emitter & Collector

Reversed..
Black probe to BASE
Red probe to Emitter/Collector
Results:
1 (no change)... on all 3 transistors.. at each Emitter & Collector

2.) "I meant for you to measure those voltages with reference to Ground, aka common. So put the black lead on the Arduino ground and use the red lead to measure voltages on the transistor base and collector terminals."

I will do this again.. but I wanted to ask.. if ann GNDS are connected isnt that the same thing?

I have battery pack connected to Arduino.. and battery pack also connected to breadboard coming from same point/wire..

anyways.. tapping one of the GND pads on the Arduino... (Black probe)

and testing the BASE & COLLECTOR pins on each transistor:

1.) Base-
T3: 0.77v
T2: 0.77v
T1: 0.77v

when fired.. the 'active' pin drops to: 0.067v

2.) Collector-
T3: 0.03v
T2: 0.03v
T1: 0.03v

when fired.... NO CHANGE

Thanks guys...

Im hoping to finally solve this (one way or another) and but this rest today.. either order more parts.. fix whatever it is Im doing wrong.. or something. :slight_smile:

swapping out the resistors now.. :slight_smile:

I'll check back in a few after the surgery is done. :wink:

I have swapped out the resistors..

  • 3.9K to a 3.32Ohm (all I could get my hands on for the moment, until I order some true 3.6Ohm ones to get a solid 350mA)
  • 1K resistors (3) all switched to be 220ohm value

this will just give me a super BRIGHT, non-functioning board now.. :slight_smile:
(as it still is "ON" when powered up)

thanks.

When in continuity check on your meter, what does the display say when the leads are not connected to anything, and not touching each other? Is that a blinking "1"? If so, it should be indicating out-of-range, aka Open. In that case, the transistors sound OK.

So when you disconnect the Arduino pins from the base resistors, the LEDs go out? That sounds like the Arduino is the culprit.

With the Arduino powered up but with the LED driver board disconnected, what voltage do you measure on the Arduino pins that are driving the transistors? They should be at 0V or very close to it when the LEDs are supposed to be OFF, and go up to or close to 5V when a given LED is supposed to be ON.

As for Ground or Common, unless we are measuring very tiny voltages at high current, you can use the same ground point to measure all those voltages from.

A voltage is measured from a reference point, and we use a circuit Common which we usually call Ground.

From the numbers you gave, it sounds like your meter's Continuity setting also works as a Diode Check. Most meters are built that way, now.

2.) when I take RED prob, put it on Vcc (positive supply voltage).. and touch BLACK probe the BASE (pin 1) on the transistors..

  • (actually I am touching it to the RIGHT side of the resistor, and not directly tot he BASE pin of the transistors)

Each of the leds light up respectively.. (not very bright or anything.. but about the same it did before)
(Im sure changing the 1K resistor values and the 3.9k > 3.9Ohm will help on this a bit though...right?) smiley

Do you mean the black and red probes of your voltmeter? What kind of meter do you have? A typical DMM (digital multimeter) has a resistance of 10M ohm (10 million ohms) and shouldn't cause more than a glimmer of light in the LED, just because that minuscule uA (millionths) of current is being amplified about 100 times by the transistor. Is that what you are seeing? If so, that should mean the transistors are working.

So... with the Arduino disconnected from the LED driver, the LEDs are not lit, correct? If you connect your meter from V+ to the base resistor, that LED lights very dimly, correct?

Ah... with a 220 ohm resistor in place of the 1k, I suggest you also put a 10k (or anything up to about 100k, whatever you have on hand) from the Base to the Emitter/ground.

If I'm reading what you are saying correctly, you have the Arduino switching the wrong way round. Pulling down to light up. Complicated by the fact that tiny bits of leakage current in the transistor may be amplified to light up the LEDs.

I missed that before. You were driving low current 20mA RGB LED before, now with the driver transistors acting as inverters, your code must send a "0" to turn them off, and a "1" to turn them on.

Could you post your code? Don't forget to use the Code tags. Click "Preview", then look for the button labeled with a "#".

polymorph:
When in continuity check on your meter, what does the display say when the leads are not connected to anything, and not touching each other? Is that a blinking "1"? If so, it should be indicating out-of-range, aka Open. In that case, the transistors sound OK.

So when you disconnect the Arduino pins from the base resistors, the LEDs go out? That sounds like the Arduino is the culprit.

With the Arduino powered up but with the LED driver board disconnected, what voltage do you measure on the Arduino pins that are driving the transistors? They should be at 0V or very close to it when the LEDs are supposed to be OFF, and go up to or close to 5V when a given LED is supposed to be ON.

1.) When in 'continuity' mode..
it is a static '1'.. when not touching anything..

2.) When metering the Arduino pins/leads..
I was getting close to +5v.. (not +0v)... and when 'pressing the button'... it would only drop a little bit.. (not down to +0v, only around +4.8xv)

So I opened up the IDE.. and looked to see if I had inadvertantly made the pins HIGH..

I 'did'!!

so I corrected it:

//set-up main barrel led(s)/pins
pinMode(ledR, OUTPUT);
//digitalWrite(ledR, HIGH); //no float
pinMode(ledB, OUTPUT);
//digitalWrite(ledB, HIGH); //no float
pinMode(ledG, OUTPUT);
//digitalWrite(ledG, HIGH); //no float

by commenting out those lines..

then I tried to the original, low powered RGB led (common anode).. and as soon as I powered it up.. all channels in the RGB were on!!! (an odd mix of 'white')

so I removed that.. and plugged in the high powered RGB led (through the constant current board)..

and the leds were "NOT" on this time???..

I tried out the sketch.. and they didnt turn off? (however Im fairly certain that is because the sketch (which initially had them all HIGH on initialization).. turn then HIGH for off)

so now Im a bit confused... about the behavior between the two RGB leds? and the code?

isnt LOW = "ON" for common anode RGB LEDS?

Im mixed up somewhere? lol

for a sanity check..

I checked Radioshack part number to see WHY these two 'common anode' leds behave differently/opposite.

only difference is one is high powered/needs a constant current driver..... and the other was driven directly from Arduino pins

I went back to the sketch.. and reversed my logic:
added a new boolean variable called: commnoAnode

and then for all my digitalWrite() lines.. I did a quick conditional check;

if(commonAnode){
     digitalWrite(currentFireColor, HIGH); 
}else{              
     digitalWrite(currentFireColor, LOW);
}

and NOW the high powered LED sems to work FINE.. and how it should (using the constant current board).. its bright too..

but now.. when I go back to the accent RGB led from RadioShack...

I plug it in.. all leds are ON..
I change to commonAnode = false;
(just to check)
same thing.. all leds are ON.....

HOWEVER... as soon as I press the button (for each color).. they turn off, and then behave normally.. (when commonAnode = false;)

(like they are not initialized correctly or something?)..then one 'used' they work?

IMHO... these two RGB leds should be interchangeable?.. right?

either plug in directly the small/accent RGB led directly..
or replace with t he pins/lines from the constant current board?

So right now..

Im left with a WORKING board.. using the high powered LED.. (YEAH!.. thanks!)..

but I am can not get the small RGB led to work? (and Im confused as to why?)

editL

*DOH!..

I totally missed your other post! :astonished:

"I missed that before. You were driving low current 20mA RGB LED before, now with the driver transistors acting as inverters, your code must send a "0" to turn them off, and a "1" to turn them on."

ok.. this make total sense now! and is the behavior I am getting..

thanks! :slight_smile:

I will change 3.9K value to 3.9Ohm value

That resistor is also looking to small in terms of its power rating.
You're running 320ma through a 3.9ohm resistor, so it's dissipating IIR = 0.4W, so it should be at least a 1/2W resistor.
An 0805 resistor is usually 1/8W, and a 1206 is usually 1/4W.
(Yes, it's really annoying that the 317 CC supply needs a power resistor, instead of having all that power dissipated by the regulator. Grr. Assorted Stepper Motor Drivers are similarly annoying.)