I’d like to show you and share with you this small LED driver I’ve been working on in the last few weeks. It is based on the LM3409(HV) buck ICs from National and supports both PWM and analog dimming. It can work from 6V to 75V input voltage and drive LEDs at up to 5A. The schematic is basically the reference design plus a few small additions for dividing 5V into what the driver expects for analog dimming (useful for arduino and similar other controllers).

Here is the schematic:

The board is entirely SMD components and is about 38mm by 31mm. Unfortunately the main IC is available in 10-eMSOP package only, which isn’t the easiest to hand solder, but I have a video at the bottom that shows one way of soldering it.

The latest version of the board looks like this:

And in 3D:

The BOM is for 12 LEDs (48V input) with max 1A current:


Part Description Mouser Part # Future Electronics
R1 Current Sense Resistors - 1watt .22ohms 1% 2512 71-WSL2512R2200FEA  
R2 1/10watt 49.9Kohms 1% 0603 71-CRCW0603-49.9K-E3  
R3 1/10watt 6.98Kohms 1% 0603 71-CRCW0603-6.98K-E3  
R4 1/10watt 1.0Kohms 1% 0603 71-CRCW0603-1.0K-E3  
R5 1/10watt 16.5Kohms 1% 0603 71-CRCW0603-16.5K-E3  
R6 1/10watt 91Kohms 1% 0603 660-RK73H1JTTD9102F  
R7 1/10watt 30Kohms 1% 0603 71-CRCW0603-30K-E3  
C1 100volts 2.2uF 10% X7R 1210 80-C1210C225K1R  
C2 100volts 2.2uF 10% X7R 1210 80-C1210C225K1R  
C3 1.0uF 16V 10% 0603 810-C1608X7R1C105K  
C4 0.1uF 50volts 5% X7R 0603 80-C0603C104J5RAUTO  
C5 470pF 50volts C0G 5% 0603 810-CGA3E2C0G1H471J  
D1 Schottky (Diodes & Rectifiers) 3A 100V SMC 863-MBRS3100T3G  
L1 Power Inductors 33uH 3.42A 0.108ohms 12.5x12.5 704-DRA124-330-R  
Q1 MOSFET Power P-Chan 100V 5.6 Amp DPAK 844-IRFR9120PBF  

BOM LibreOffice
BOM Excel

For different combinations of current and LEDs there are a few things that need to be computed which you can find about in the data sheet:

For PWM dimming, R4, R6, R7 and C6 need to be left unpopulated. Also the middle two pins of the 4 pin header need to be shorted.
For analog dimming, all components are required and the outer two pairs of pins need to be shorted on the 4 pin header.

All this is under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 license and all files can be found in this archive:

Here are a few photos and video of the driver:

And this is a time-lapse of me populating a board. I’m not an expert, but I’m good enough. Flux and thin solder make life easy when you deal with SMD components!

UPDATE January 23 2012:
Well 5 months later I think I have a final version for this board and I’m quite happy with it so far. Quite a few changes have gone in.

I’ve added a 12bit i2c DAC on the board that allows for nice 4000+ step analog control. I’ve also changed the PFET to a TO-220 package and added a space for a monster heatsink. I also had to add a comparator circuit to switch off the LEDs when the control voltage is at the bottom since the LM3409HV doesn’t shut off even if the Iadj pin is grounded.

About I2C dac:
There were really only a couple of options for a DAC choice. MCP4725 and MCP4726. The two are basically the same DAC, but one has external addressing, while the other has external reference voltage. In general, either chip will work with the board, however with the MCP4725 you need to set the last address bit via the smd jumper.

Both chips use 1100 for first 4 bits + 3 additional configurable pins.
On the MCP4725, you have 4 options when you order 110000X, 110001X 110010X and 110011X where X is set to either 0 or 1 via the external smd jumper.
The MCP4726 doesn’t have external configurable pin, so there are 8 available options from Microchip. However I was able to find only the first 4.

What does all this mean?
It means that with current availability, you can put 8 drivers with MCP4725 or 4 drivers with MCP4726 on a single i2c bus.

Now if you don’t need more than 4 drivers per bus, the MCP4726 can give you one extra feature: external maximum override via potentiometer. Basically you can use the 3 pin jumper to wire a potentiometer and you’re effectively using that potentiometer to set the maximum control voltage that will go to the driver.

Since this is now i2c and not just a PWM, you can’t just digitalWrite(LEDPIN, 255); 🙂 Howerver it is not very hard to talk to the DAC. It takes 4 bytes:
1 byte – address
2 byte – commands
3 and 4 byte – registers of the 12 bits (last 4 bits are ignored)

I’ll probably have a library for it sometime in the near future.

As always, open source and all files can be found here:
BOM, Schematic and other files here