I'm working on a product that requires an led to output currents varrying from 0mA to 350mA and as many possible levels in between (~1000 would be sufficient I suppose). I CANT output a PWM signal to the led because that would defeat the purpose of my product (This is important).

Does anyone know an integrated circuit that allows this level of current control? Otherwise does anyone have an idea of how I could build a circuit to do this? I have thought about Voltage Controlled Current Sources built with op amps, but I have no experience with these or know of any specific circuits.

It also must be able to run off of batteries.

The LED is going to be moving at an extremely fast rate through the air and has to maintain a solid beam of light rather than a blink. thats why i can't use PWM.

  • \$\begingroup\$ Why can't you use PWM? Even after smoothing with an RC network? \$\endgroup\$ – endolith Sep 23 '11 at 1:01
  • \$\begingroup\$ You asked another similar question: electronics.stackexchange.com/questions/19877/…. Which one do you really want answered? \$\endgroup\$ – Mike DeSimone Sep 23 '11 at 1:08
  • \$\begingroup\$ Probably doesn't want to deal with the PWM's clock or switching noise. \$\endgroup\$ – Mike DeSimone Sep 23 '11 at 1:09
  • \$\begingroup\$ The LED is going to be moving at extremely fast rates through the air and using PWM would make it be a blinking led rather than a solid stream going through the air. Unless you know of a way to smooth this? I do not have extensive experience with PWM to know if it is even possible. \$\endgroup\$ – Peter Clyde Sep 23 '11 at 1:20
  • 1
    \$\begingroup\$ It would be a really really really good idea to spell out your requirement in enough detail for us to have half a chance at answering it at the first attempt, and not dividing it over 2 questions unless they are substantially different (which they may be). You CAN make PWM so fast that it won't visually flicker in motion. Knowing if it's riding a bronco, bullet train or bullet would help. / You CAN use PWM and smooth it to DC so there is NO flicker (visual or other). / Nobody can distinguish 1000 levels of brightness by eye. Telling us why you need so many levels will help us help you. \$\endgroup\$ – Russell McMahon Sep 23 '11 at 4:52

For an "all-in-one" option, the ADB8810 looks pretty close to the kind of thing you want. If you search for "programmable current" on e.g. Analog Devices, Nat Semi, Linear Tech, TI, Maxim, etc you will probably find quite a few options like this.

Another option would be to use a DAC (or indeed a potentiometer if no uC involved) to control an opamp with transistor set up as a current source.

For ~1000 levels you would need 10 or more bits, so this would be pretty cheaply done.

Something like this circuit might do:



The transistor could be any NPN or MOSFET (with appropriate Vth) or darlington capable of sinking the necessary current (EDIT - as Wouter mentions the 2N2222 is not a good choice, something in a package rated for higher power e.g. a TO-220 package would be better)
Opamp should be rail to rail in/out if possible to make things easier.
The 1 ohm sense resistor can be changed to suit the current required. This was set up to output 1mA per 10mV in, so 3.5V produces 350mA (at the opamp input it is actually 1mA per 1mV, the resistor divider divides the DAC input by 10)

  • \$\begingroup\$ I think the 2n2222 mentioned in the diagram is a bit small for 0.35 A at a reasonable voltage. At the very least it should be cooled (Pmax = 1.2W for a case temperature of 25C, which is optimistically low). \$\endgroup\$ – Wouter van Ooijen Sep 23 '11 at 11:04
  • \$\begingroup\$ @Wouter - I agree, though the part number was not meant as a recommendation (see last paragraph of answer) The 2N2222 is just the first transistor on the list in LTSpice and the one I always use for quick examples :-) I shall try and remember to change the part number to a suitable part to save confusion in future though. \$\endgroup\$ – Oli Glaser Sep 23 '11 at 11:27

You can still use PWM to adjust the drive level. What you are really saying is that you don't want the LED to pulse. This can be achieved by low pass filtering the PWM output, then using that to drive the LED. There are lots of ways to average a PWM signal to ultimately have that average drive the LED instead of the individual pulses. Here is one simple way:

Whenever the PWM output is high, Q1 sinks about 20 mA. When low, it sinks 0. The average current at the collector of Q1 is therefore proportional to the PWM duty cycle. All this current must eventually go thru the LED since the capacitor can't conduct current long term. C1 and R2 low pass filter the individual current pulses so that the current thru the LED is the average, not the individual on/off pulses.

Let's say you are using something like a PIC 24H to make the PWM. It can run at 40 MHz instruction rate, which is also the maximum PWM clock for the regular PWM outputs (there is a special high speed PWM peripheral that can go much higher, but that's not necessary here). To get 1000 different output levels that means the PWM frequency will be 40 kHz, or 25 µs per pulse. At the half way point, the capacitor is being drained at 10 mA rate, and that will happen for 12.5 µs. (10mA)(12.5µs)/22µF = 5.7mV. That's how much the voltage on the capacitor will vary peak to peak at the worst case operating point. That divided by 180 Ω is 32 µA, which is how much the current thru the LED will vary. That's 0.16% of full scale or one part in 630, which is impossible for humans to see.

  • \$\begingroup\$ thank you so much! this was very helpful. I'm working through your explanation and for some reason I'm really confused about how you got the capacitor drain rate of 10mA. I know this is not difficult, but could you quickly explain this? \$\endgroup\$ – Peter Clyde Sep 23 '11 at 15:34
  • \$\begingroup\$ @Peter: The circuit is set up for about 20 mA at 100% PWM duty cycle. At 50%, the average current will be 10 mA. During the PWM on phase, Q1 sinks 20 mA. At half output, the LED uses 10 mA of that and 10 mA charges the capacitor. During the off phase, the LED current comes from the cap, so it is discharged by 10 mA. I did the calculation at 50% duty cycle because that causes the worst case ripple. \$\endgroup\$ – Olin Lathrop Sep 23 '11 at 17:43
  • \$\begingroup\$ @Olin What's the role of the R1 resistor in the above circuit? \$\endgroup\$ – m.Alin Sep 25 '11 at 10:02
  • 1
    \$\begingroup\$ @m.Alin: R1 controls how much current Q1 can sink when its base is driven high. Let's say the B-E drop is 700 mV. When 3.3 V is applied to the base, then 2.6 V will be at the emitter and therefore accross R1. 2.6V / 130Ohms = 20mA \$\endgroup\$ – Olin Lathrop Sep 25 '11 at 13:36

The LM8502 is a LED IC Driver that would do the job. You can control the output current amongst other things.


I'm sure there are a lot of other similar LED IC Drivers that does the same task too.

  • \$\begingroup\$ I'm slightly confused about this driver... Can you confirm that the output current is not using PWM? My led's need to have a constant linear current. \$\endgroup\$ – Peter Clyde Sep 23 '11 at 3:14

The TIL300 precision linear optocoupler has an extra photodiode for feedback. The datasheet ( http://www.ti.com/lit/ds/symlink/til300.pdf ) has an example application circuit showing how an opamp could be used with it.


protected by Dave Tweed Jun 1 '16 at 15:58

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

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