Introduction: Simple Buck LED Driver With PWM Input

Picture of Simple Buck LED Driver With PWM Input

High-power LEDs over 1W are now quite inexpensive. I'm sure many of you are incorporating LEDs as light sources in your projects.
However I realize that the finding and configuring the power supply is still not as simple as it can be; commercially available LED drivers are convenient, but often overkill or not flexible. Even my own Universal LED Driver can be overkill at times. Some projects call for a bear minimum, simple driver.

Poorman's Buck - Simple, Constant Current LED Driver

So I created the "Poorman's Buck" - simple switch-mode (buck) constant current LED driver that's built without a microcontroller or a specialized IC. All of the parts are easy to obtain, "off-the-shelf", though-hole parts.

Even though this driver is minimalistic, I added a current adjust function that doubles as a dimmer, and an input to control the output with PWM. This makes the "Poorman's Buck" perfect building block for Arduino or other microcontroller based LED projects - you can control many high-power LEDs from a microcontroller simply by sending PWM signal. With Arduino you can simply use "AnalogWrite()" to control the brightness of high-power LEDs.

Step 1: Features

Picture of Features
  • Inductor "switch mode" (buck) converter for high energy efficiency.
  • Wide supply voltage range of 5 to 20V. Great with batteries as well as AC adaptors.
  • Cycle-by-cycle, true constant current circuit
  • Configurable output current up to 1A
  • Up to 15W maximum output power. (at supply voltage 20V with five 3W LEDs connected)
  • Current control potentiometer (trims the output current down to about 9%)
  • Current control can be used as a built-in dimmer
  • Output short-circuit protection
  • PWM control input - controllable via external microcontroller including Arduino.
  • Compact design - only 1 x 1.5 x 0.5 inches (excluding the pot shaft)

Step 2: The Circuit

Picture of The Circuit
The circuit is built around a very common dual comparator IC: LM393 using buck converter topology.

The output LED current flows through R10 and R11 (current sensing resistors). The resulting voltage is proportional to the current according to the Ohms Law. This voltage is compared to the reference voltage by a comparator. As the Q3 turns on, current flows through L1, LEDs, and the current sensing resistors. Inductor does not allow current to shoot up immediately, so the current increases gradually. As the current gets higher, the voltage at the comparator's negative input pin increases as well. When it gets higher than the reference voltage, the comparator trips, which turns off Q3, which turns off current flowing into the inductor.
Now because inductor is "charged", current doesn't stop flowing immediately. Current then flows through the Schottky diode D3 to power the LEDs. This current gradually decays, and as the current decays so does the voltage across the current sense resistors. Eventually the comparator flips back again, and the cycle starts over. This method of controlling current is often called "cycle by cycle" current limiting. (This "true" current limiting also works as a buit-in short circuit protection. Shorting the output doesn't harm the circuit.)

This whole cycle above happens very quickly - as fast as 500,000 times a second. (This frequency changes depending on the supply voltage and LEDs forward drop voltage and current. Anywhere between 100k - 500kHz.)

The reference voltage is generated by an ordinary diode. Forward voltage drop of a diode is about 0.7V and stays relatively constant. Then potentiometer VR1 trims the voltage - because the output current is compared against this voltage, this in turn controls the output current. The range of the change is about 11:1 or 100% - 9%. This is pretty narrow compared to a real dimmer, however it is quite handy. Sometimes after installing the light you realize that LEDs are much brighter than expected. Then you can simply trim the current down until the brightness is just right.
You can omit the potentiometer and replace with resistors if your project doesn't call for it.

The beauty of a switch-mode controller is that it controls the output current without "burning" the excess energy. Energy from the power supply is used only as much as needed to get the required output current. Some energy is lost in the circuit due to the resistance and other factors, but not that much. A typical buck converter has efficiency of 90% or higher.
The Poorman's Buck doesn't get very hot when operating - only get warm. Unlike linear regulators, no heat sinking needed.

Buck Converter:

Configuring Output Current
The Poorman's Buck can be configured to deliver anywhere between 350mA to 1A of output current. Combination of R2's value and wether you connect R11, you can change the output current.

Here are samples of a few configurations:

Output Current R2 Value Use R11?
350mA (1W LED) 10k No
700mA (3W LED) 10k Yes
1A (5W LED) 2.7k Yes

The current control pot VR1 controls the output current from about 9-100% of the set current. So if you configure the unit to deliver 1A, you can trim it down to about 90mA just by turning the pot. This can be used as a dimmer (although the dimming range is somewhat limited).

PWM Input
The basic operation of this circuit can be done with just one comparator. However the most popular comparator IC (LM393) has two comparators in it. So rather than letting one of the comparators sitting doing nothing, I added a few extra parts to make it PWM controllable. the second comparator in the circuit works as an AND gate so that the PWM input has to be open (or logic high) for the output LEDs to turn on. Usually this pin can be left open (no connection) and the Poorman's Buck will operate without PWM. But when you need that extra control, you can connect Arduino or other microcontroller and control the high-power LEDs connected to Poorman's Buck. With Arduino, control is just as easy as using "AnalogWrite()" command. Up to 6 Poorman's Buck can be controlled by one Arduino.

This PWM control works within the current level set by the current control pot. So if you lower the current, the same 10% PWM level can be darker, for example.

The source of the PWM control is not limited to microcontrollers. Anything that produce voltage between 0 - around 5V can be used to turn the output on and off. Be creative - use photo resistors, timers, logic ICs... The upper limit of PWM frequency is about 2kHz, but I think 1kHz would be the optimum.

This PWM input can also be used simply as a remote on/off switch. However the LEDs will be on when the switch is open, and off when closed - opposite of usual power switch.

Step 3: Parts, PCB and Assembly

Picture of Parts, PCB and Assembly
Assembly is very straight forward. All parts are standard, off-the shelf type.

Parts List
  • 1 or 2x 1 ohm 1W - R10, R11 (use only one to get 350mA, or 500mA (with R2=2.7k) output current)
  • 1x 10 ohm - R8
  • 2x 1k ohm - R3, R9
  • 3x 4.7k ohm - R1, R4, R7
  • 3x 10k ohm - R2, R5, R6 (change R2 to 2.7k ohm to get 1A output current)
  • 1x 10k ohm potentiometer - VR1
  • 1x 22pF/35V - ceramic capacitor C5 (optional)
  • 2x 0.1uF/35V ceramic capacitor - C2, C3 (optional)
  • 1x 2.2uF/10V electrolytic capacitor - C1
  • 1x 100uF / 35V electrolytic capacitor - C4
  • 1x 47-100uH / 1.2A - L1
  • 1x GPN (5551, 2222, 3904, etc.) - Q1
  • 1x GPP (5401, 2907, 3906, etc.) - Q2
  • 1x P-ch MOSFET (NTD2955 or IRFU9024) - Q3
  • 2x 1N4148 diode - D1, D2
  • 1x SB140 or 1N5819 Schottky diode- D3
  • 1x LM393 dual comparator - IC1
* All resistors are 1/8W or 1/4W carbon film unless otherwise noted.

Inductor L1 can be anywhere between 47 to 100 uH, rated at least at 1.2A. C1 can also be anywhere from 1 to 10 uF. C4 can be as small as 22 uF, making sure that it's rated at least at 35V DC.
Similarly, Q1 and Q2 can be almost any general purpose type transistors. Q3 can be substituted by other P-ch MOSFETs capable of minimum 2A of drain current, drain-source voltage at least 30V, and gate threshold lower than 4V (logic gate).

Solder the parts starting with the lowest profile ones, in this case, IC1. All resistors and diodes are installed vertically. Be careful with the orientation of polarized parts, such as diodes, transistors, and MOSFET.

I designed the PCB in single layer, so home etching can be done easily. Gerber files and PDF are provided.

I'm offering the fab-manufactured PCBs as well as the full kits on my website.

Step 4: Connecting LEDs

Picture of Connecting LEDs
The supply voltage has to be at least 2V or so higher than LED's total forward voltage, which is around 3.5V per white LED.

Depending on the power supply voltage, Poorman's Buck can drive up to 6 LEDs connected in series. With constant current LED driver, it's best to connect LEDs in series, so that all LEDs get the same exact current. The chart below shows the number of serial connected LEDs and the required power supply voltage.

Number of LEDs

Minimum Supply Voltage











You can series-parallel connect LEDs to drive more LEDs as needed. If you only have 12V power supply but want to connect 6 LEDs, make two strings of 3 LEDs in series and connect them in parallel, for example (see the schematic).

Step 5: Put It to Use!

Picture of Put It to Use!

I'm sure there are many uses for a little driver like this - under the shelf lights, tabletop lamp conversion, LED lanterns, etc.

Power supply can be one of those wall-warts laying around. Voltage between 5 to 20V can be used. Batteries can be used as well.

Step 6: Amendment!

(As of Aug. 9, 2012)

The power supply voltage range was originally quoted as 5 to 24V. However as the MOSFET can only tolerate +-20V between the source and gate, the power supply should not exceed 20V.

I will post the circuit modification to allow supply voltage above 20V soon.

Thank you hanlin_y for bringing this to my attention.


SniperSix (author)2017-10-29

Hey nice work... my psu is 24V. I have as much as 60 3W leds to my project, not all lit at the same time on 7 different circuits. Did you post the circuit modification to allow supply voltage above 20V yet?

ledartist (author)SniperSix2017-11-03

hanlin_y below posted an answer already, but here's a quick & dirty fix; you can place a 12 to 15V zener diode between the gate and source of the MOSFET - anode to source, cathode to gate. Then _important_ increase R8 value to 470 ohm or so. Please note this will add switching loss, so the MOSFET will generate more heat. But for the output current up to 1A should be fine. (not tested - proceed with caution)

kamhagh (author)2017-09-26

Thanks a lot for this circuit :O I was almost going insane figuring it out myself.

It'll be a pain or RGBW though D:

but a few questions:

Do the capacitors have to be exactly the same? also can I use LM358?

Sorry I'm a total newb

ledartist (author)kamhagh2017-09-27

Please see the chapter "Substitutions". LM358 is an op-amp, and sorry you can't substitute comparator with an op-amp in this circuit.

Christoffer KolbeB (author)2017-04-10

I need some help with the schematics. What does this sign mean?

It´s a reference to the circuit's power supply, 5 - 24v.

ChadH83 (author)2017-03-19

Can you upload the full gerber files (including Solder mask and Silk screen)?

zshaw3 (author)2016-12-04

This is great! I have been searching the internet for hours trying to find out how to build one of these. Didn't even think to check instructables. Quick question, would I be able to use this circuit to power two 10W 1A 9-12V high power LED's? Thank you for your time.

ledartist (author)zshaw32016-12-12

That should be no problem. Use the power supply voltage at least 2V higher than the LED string forward voltage.

Jean-SébastienL3 (author)2016-06-13

Nice work!

It took me some time to figure out where in the design 350mA magic number came from. I feel like this should be mentioned in the technical description. Here's where I think it's from. But I'm not certain.

The voltage drop of D1 is roughly 0.7V (you can research why, but that's just typical for that kind of diode), which means that the voltage across R2 + VR1 + R3 to reach ground is also 0.7V. D1 conducts to ground when more than 0.7V are applied by the source, but that current goes through a 4.7k resistance though, so roughly 4mA even for a 20V source).

If the VR1 potentiometer's wiper is on the least resistant setting, 0 Ohm, then you have 10k ohm of resistance before the comparator, and 11kOhm after it, which means that the comparator is sensing roughly 52% (11k / 21k) of the 0.7V, so 367mV. When it is turned the other way, it will be sensing 1k/21k * 0.7V = 33mV. (The description says the ratio is 1:11 but maybe I'm wiring it differently).

Let's assume that the comparator senses 367mV on the "-" side. Now, on the other end of the circuit, after going through the LEDs, the great majority of the current has to go through R10 (R11 is not there in the 350mA configuration). U=RI, and R is 1 Ohm. Which means that for the comparator to trip, the current has to pass over 367mA. There goes the connection between the voltage and current.

sean.thomas.pa33377 (author)2016-05-27

Hi. Do you still sell the PCB for this please?? Thankyou ?

Undermentioned (author)2016-04-06

Hi man

Sorry I know this is a old post but I need to pulse a 1watt IR led at its peak forward current (1000mA) with a arduino for 5us high and 100us low.

Will this circuit work for that?


hanlin_y (author)2016-03-14

If you want to exceed 20V, there's another circuit that might work. You could use it to drive a string of high current LEDs such as 1.5A or 3A from Li-ion batteries. It lets you use a lower powered zener diode.

If the signal MOSFET turns on, the BPJ transistors' bases should receive 10V and cause TP2 to be 10V. The power MOSFET's Vgs should be -14 which is less than its rating of -20V.

If the signal MOSFET turns off, the BPJ transistors' bases should receive 24V and cause TP2 to 24V. The power MOSFET's Vgs should be 0V.

hanlin_y (author)hanlin_y2016-03-19

Another option is to replace the zener diode with a resistor to form a voltage divider. You should still be able to keep Vgs in its safe range.

stocher (author)2016-03-01

Very nice instructable, thanks for sharing! Sadly Flatcam doesn't like your gerber, I might just route a board to fit what packages I have on hand anyway.

I was wondering why the half rail reference was choosen for the PWM comparator? The output from the last comparator will flip between 0 or vcc, so you could have just a pull down resistor? Oh that would mean 2 inputs at about gnd, so noise could switch the circuit on easily.

Why is D2 needed, It prevents the comparator from sourcing the high state but lets it pull it low? You don't do the same for the comparator output powering the BJTs.

ledartist (author)stocher2016-03-10

If I remember correctly, the half rail reference and D2 are needed for the external PWM support. As PWM signal doesn't always go down to 0V (typically 0.4V from MCU), D2 was added to up the output voltage of the first comparator to about 0.6V.

R6 can be omitted if you don't use PWM input.

aminrko6 (author)2016-01-11

hey guys

is there anyone who can help me with this circuit?i need this plz help me.

in fact i am new with electronics

aminrko6 (author)2015-12-31

Hi guys.I am not very good in electronics and i realy want yo build this project but i cant.every time i tried to make it work it didnt.i assamble it in multi sim but it didnt work.would anyone help me plz.i realy need this thing.thx for your

BigbobM (author)2015-11-30

ledartist - thank you for a great Instructable! I'm actually working on this build now, but I've run into a minor snafu - I don't have the requisite 2.2uf for C2. Now, I could use 2 * 1.0uf and 2 * 0.1 uf and end up with an equivalent 2.2, or I could just use the next highest value - 4.7uf.

Is this okay to do? Should I hold off until I have a 2.2uf cap? Will it be a problem if I only have 16v rated 100uf caps and not the 35v rated?

Thanks again!

ledartist (author)BigbobM2015-12-17

C2 value is not that critical, so use 2 x 1uF or 4.7uF instead.

C4 voltage needs to be a bit higher than the power supply voltage that you are using.

BigbobM (author)ledartist2015-12-17

Great, thank you! I should be able to harvest some from something...

Looking forward to your next instructable 8)

principle made it! (author)2015-10-30

I made a bunch of them and very much enjoyed working through this. I used toroidal inductors in the image you can see 1 2a and 1 1a it was just the bits I had in the box 100mh. Also one poorman's buck with and without optional caps. In my case using the simple 555 timers for PWM the optional caps don't seem to make much difference. I'll probably go ahead and make a surface mount version put 3 on one board with the dimmers and see how that works. Again very fun project to build.

I also Include a shot of a 555 based dimming unit running at around 1.5khz that works just fine with this.

Thanks very much for sharing

george046 (author)2015-05-19

1. I'd like to build your circuit, but I have very small place. Which components can I remove to get a non PWM model? My tips are: (R5, R6, C2, IC2/2, R4, D2) Am I right?
I'm planning to use a single comparator. Should I add C2 to IC1/2 (like on IC2/2) after removing the pwm "supporter" components?
2. I need to drive only one led with max 800mA so replace R11 and R10 with one R'=0,35/I ?
3. I also don't need the potentiometer, so how should I replace it with a 10K normal resistor "in the top extreme" ( the 10k resistor has just 2 legs, however the potentiometer has 3)
4. Someone suggested to put a 4,7 uF cap paralell with the led(s) in exchange for reducing L1. Is it a good idea to do it without other modifications? I'd like to do it, because smaller L value is quite cheaper with higher current ratings. In my country small 47-100uH inductor is available with 470ma rating.
Maybe I asked stupid things, sorry.
Thanks your help.

khalid.mohd.127 (author)2015-01-15

I am designing a buck converter for my USB solar power charger. My input voltage is 21 and the output is 5 V. I am looking for a PWM controller with no internal switch. Anyone knows where I can find it?

RachmatA (author)2014-12-28

can you write the pin number of lm939 on schematic? because eagle has different footprint

m.3bass (author)2014-12-26

hello every body i have a big problem with this ct. i connect all component but R1 temp. increase to burn and i can not know what happened is any one can help me i need this ct. cause my project is same with tis project

LaurenceD (author)2014-11-28

I need something like this that I can build myself. I am driving a 50W 50 LED chip at 32-34 volts. I have a boost power supply to run it off of a 12VDC battery. Please help.

chti-tophe (author)2014-11-09


i have question what is the value of resistance of the inductor L1. I try with some inductor (with value between 47 uH and 100uH) but the maximun value of current is not 350 ma ! could you help me please.


dudes (author)2014-10-19

Hi, I'm interested in buying the kits, but I can't find it on your website. Do you still offer it?

ledartist (author)dudes2014-10-19

Sorry Poorman's Buck kits are sold out and discontinued...

dudes (author)ledartist2014-10-19

Oh, OK. Well I guess I have to make one now ;)

zwatts2 (author)2014-10-19


Muy buen manual. Estoy trabajando en un Buck para cargar una batería con un panel solar, te quería hacer una pregunta. ¿Sabes por qué mi salida del buck depende mucho del voltaje de la señal PWM?, la estoy alimentando a 12V, y la entrada y la salida del buck son 35 y 12V respectivamente.

Gracias! saludos

Hiwliws (author)2014-04-30


Your project is really nice.

I'm looking for something to give me an idea of how can I make a 5 independent colors of LED dimmer according to the time of the day... I know, it's a lot and I'm a begginer.

Can someone suggest something for me to start with?

Thank you.

coloneedestek. (author)Hiwliws2014-09-24

You can use arduino, raspberry pi or beaglebone black.
It would be easiest way for a beginner like you and me.

You can use python language with raspberry or beaglebone.
Python is very easy language to learn.

RGB led will do the job for you. You can set colors for every hours.
If you want to use 5 independent led, you can do it also.

coloneedestek. (author)2014-09-24

I have a 16V power source,

a 9-12V 10W white led,

two of RGB led(r:6-8V 300mA, g:9-12V 300mA, b:9-11V 300mA).

I want to build up 4 unit of this circuit.
One for white led, three for rgb leds.(I will connect same colors in parallel connection.)
So anyone can help me with which parts do I need to change?
I actually don't understand how can I calculate the output voltage.
Please help me.

awoodmansey (author)2014-07-22


is there any modifcations that could be made to make the circuit handle a 40-50w load?


hahihula (author)2014-04-02

Hi, I tried to simulate this circuit for better understanding. But it behaves really strange. Could someone please point out where I made mistake? Thanks

sbogdan3 (author)hahihula2014-04-26

for switching you used a n channel mos. replace it with a pmos (and be careful how you connect it: source to vdc and drain to the node with the inductor terminal and the anode of the shotky )

hahihula (author)sbogdan32014-04-27

Thank you for the advice but...
I changed the mos but still it work strange. there is only 400 nano Amps on the led ...

Lankaster555 (author)2013-12-09

Hi, ledartist,

Have tried to build a prototype of your offered driver – it works fine from 18V, thank you.
But I need to run it from a 26– 27V SPSU, so I need to limit the Vgs voltage on the P-mosfet. I have tried different solution but had no luck.
1) Tried voltage divider of two 1KOhm resistors. I can not use smaller value resistors due to high voltage and power dissipation.
2) Tried connecting a 15V Zener diode between the GND and the Q2 collector.
3) Tried connecting a 15V Zener diode between the Gate and the Q2 & Q1 emitters

In all applications I had severe distortion in shape of Mosfet driver signal. As a result a got increased looses on Mosfet, it became very hot.
Is Zener diodes fast enough to switch at 285KHz frequency in my version of driver ??? Would you be so kind and post the right schematic of how to limit the Vgs voltage ???

Thanks for your help !!!

sbogdan3 (author)Lankaster5552014-02-10

Try connecting the zenner in series with the Q2&Q1 emmites and R8.

ledartist (author)sbogdan32014-02-11

Great solution! Why didn't I think of that.

anio (author)2014-02-05


Thanks for the good instructable. I have a question:

I am working on PWM controlled led strip which will be mounted on motorcycle. The brightness will corresponds to an accelerometer value.

So from a static point of view a moving object with a PWM duty cycle for example 10% will flicker. Can i use your schematic to avoid this problem?


Ploopy (author)2014-01-30


ed-999 (author)2014-01-02

I really like this project, and I think it will work for me with a few changes. My application requires 30W or 2.5A at 12V for 60 LEDs, 20 parallel strings of 3 LED each.

I believe that the 1A limit for this circuit is the wattage of R10, R11, D3, L1 and maybe a heat sink for the MOSFET. The MOSFET is rated at about 5A so it shouldn't be a problem. So that leaves the other parts in the power side to the circuit (R10, R11, L1, and D3).

By making the following changes, I think that the output current can be raised to about 3A.
change R10, R11 to about 3W each.
change the 1N5819 (1A) to 1N5820 (3A)
Change L1 47-100uH 1.2A  to a 100uH 3A

Has anyone tried to increase the output current? If so how did you do it?


kasim333_333 (author)ed-9992014-01-28

Hi ed-999,

Did you tried out the circuit with specified changes ? I wanted to proceed with 48W at 12 or 4A. Please let me know at earliest.

Thank You

MnVelocityPilot (author)ed-9992014-01-26

I'm also thinking of an application requiring about 2.5A @ 14ish volts... what kind of luck did you have? Did your modifications work?


gialla87 (author)2013-12-15


maybe someone will pass by here...

what parts of the schematic could i avoid repeating if trying to make a 3 channels version of this?


siddhanth (author)2013-12-04

Hi ledartist,
I have a small noobish question since I am new to the world of power leds(forgive me). Before this I could get away with series resistances :-P

Anyhow my doubt is.
Since this is a constant current source,my diodes forward voltage is 6.5-7volts max.@700ma If I supply the driver with like say 14volts, will the leds get burnt even when I configure the driver to only 700ma?
The problem is the source of the power is an ac(my motorbike) and the voltages fluctuate with the increase and decrease in rpm. I believe at idle,it generates 11vac and 14vac at peak rpm.

Is there a way out to this without introducing a linear regulator?

kalmara (author)2013-11-21

Hello, ledartist.
I have some questions about modifying the buck driver for my own needs.
I have access to a bunch of SMD LM393's, a bunch of FZT951 PNP BJT transistors (rated at 150MHz, 5amps continius, I think 350mA or 700mA would be very low-weight lifting for them), and a bunch of 0.3ohms 1watt SMD resistors, SR24 2amp schottky diodes and etc. I'm thinking of making my own design for the PCB with all SMD devices, except for the inductor. So the question is - by altering the voltage reference for the first comparator can I use 0.3ohm sensing resistors, or maybe 2x0.3ohm in parallel (as in your design example). The other thing is - I plan on removing the mosfet and the totem-pole driver and use the FZT951 as a power deivce. Will the transistor be *beef* enough to handle the switching, or should I add another small signal SMD to form a darlington array in front of the power switcher?

About This Instructable




Bio: I am an electronic artist living in Brooklyn, NY. I work with LEDs and microcontrollers to create beautiful objects.
More by ledartist:Joule Thief Filament LampT962A SMD Reflow Oven Fix/HackColor Organ Triple Deluxe II
Add instructable to: