Close
0%
0%

DIY LM317 Based Buck Converter

Made a super small Buck converter module based around LM317 that can provide a stable 5V for powering XYZ electronics.

Similar projects worth following
0 followers
Greetings everyone, and welcome back!
Here’s something useful: a DIY buck converter built using the popular LM317 adjustable linear voltage regulator.

We designed a super small module that houses a compact DPAK LM317 IC paired with a few SMD components. The end goal of this module is to power a 64×32 RGB P3 matrix panel.

The idea behind this project came from the need for a more reliable alternative to the commonly used AMS1117. After some research, we came across the LM317, which is widely used in electronic circuits. You’ll often find it inside many devices if you take them apart.

The LM317 is an adjustable linear regulator widely used to derive stable output voltages from a higher DC source. It operates by maintaining a constant 1.25V reference between its output and adjust pins, allowing the output voltage to be precisely set using a pair of external resistors.

It is a three-pin, positive-voltage regulator capable of supplying more than 1.5A over an output voltage range of 1.25V to 37V.

The device requires only two external resistors to set the output voltage and offers excellent performance, with typical line regulation of 0.01% and load regulation of 0.1%.

The LM317 is a highly versatile linear regulator that can be used in numerous applications. It can be configured as a standard voltage regulator, a constant current source for battery charging, a tracking pre-regulator circuit, or even an AC voltage regulator circuit.

It also includes built-in current limiting, thermal overload protection, and safe operating area protection, ensuring reliability even under fault conditions. Overload protection remains functional even if the adjust pin is disconnected. Typically, no capacitors are required unless the device is placed far from the input filter capacitors, in which case an input bypass capacitor is recommended. An optional output capacitor can be added to improve transient response, and bypassing the adjust pin further enhances ripple rejection.

For our circuit, we are using the DPAK (TO-252) footprint, which keeps the design compact while still handling decent power. One of the key advantages of this package is the large exposed tab (internally connected to the output), which can be soldered directly onto a wide copper area on the PCB. This effectively turns the PCB itself into a heatsink, helping dissipate the heat generated due to the voltage drop from 12V to 5V. This approach allows for a clean, space-efficient design without needing bulky external heat sinks while still maintaining good thermal performance.

Check out the Datasheet for more info.

https://www.ti.com/lit/ds/symlink/lm317.pdf

PCB DESIGN

We began the project by preparing the schematic for the buck converter board. We did this by studying the LM317 datasheet and creating a simple schematic that included the LM317 setup with two adjustable resistors connected between the adjust pin and the output pin of the LM317. To ensure stability and reduce noise, we added a 10µF SMD capacitor at the input and a 1µF capacitor at the output, which helps smooth fluctuations and improve transient response. We also added extra capacitor footprints at both the input and output in case different-value capacitors are needed later. The output voltage is configured using a resistor divider (330Ω and 1kΩ), which sets the desired voltage reliably.

After finalizing the PCB schematic, we exported the data and converted it into a PCB layout. The PCB editing process began by adding all the components to the PCB design first. We used all SMD components for this project, including 1206 package capacitors, 1206 package resistors, and a DPAK (TO-252) LM317. We prepared a small board of size 20mm x 30mm and placed all the components within this board. We added four CON1 terminals for the VIN, VOUT, and GND pins, placing them along the edges of the board outline. Two CON1 pads were placed on the right side for the input, and two CON1 pads were placed on the left side for the output.

After finishing the placement, we connected all the net lines and completed the board layout.

After finalizing the PCB design, we exported the Gerber files along with the NC drill files and shared them with NextPCB to get the samples manufactured.

NextPCB PCB SERVICE

After completing the PCB design, Gerber data for the PCB was sent to HQ NextPCB, and an order was placed for Blue Solder mask boards with a white silkscreen.

After placing the order, the PCBs were received within a week, and the PCB quality was pretty great.

In addition, I have to bring...

Read more »

LM317 Test Board.rar

x-compressed - 14.09 kB - 04/20/2026 at 13:34

Download

SCH.pdf

Adobe Portable Document Format - 196.62 kB - 04/20/2026 at 13:32

Preview

  • 1
    PCB ASSEMBLY
    • We begin the PCB assembly process by first adding solder paste to each component’s pads one by one using a solder paste dispensing needle. Here, we are using 63/37 SnPb solder paste.
    • We then pick and place each SMD component in its correct location.
    • The PCB is then placed on a reflow hotplate, which heats the PCB from below up to the solder paste melting temperature. As soon as the PCB reaches that temperature, the solder paste melts, and all components are secured in their positions, completing the PCB assembly process.
  • 2
    SMPS TEST

    For the initial test of our buck converter, we used a 240V AC to 12V, 5A SMPS as the power source. We connected the VIN and GND of our buck converter to the 12V output of the SMPS.

    Please note that we are working with AC here, so it is recommended to follow proper safety precautions and wear safety gear, such as gloves, while handling AC power.

    Using a multimeter, we first measured the voltage across the AC input terminals to ensure that an AC voltage was present at the input of the SMPS.

    Next, we measured the voltage across the input of the buck converter, which was around 12V.

    Finally, we measured the voltage across the output of the buck converter, which was around 5V. This confirms that our setup is functioning correctly.

  • 3
    Raspberry Pi PICO & RGB P3 Matrix DEMO

    The next test for our buck module was a practical application.

    We are working with an RGB 64×32 P3 matrix board, which requires a stable 5V, 3A supply, and this setup is driven by a Raspberry Pi Pico and is running our ported version of Conway’s Game of Life, which was perfect for the demo run.

    You can check out the article below for a complete breakdown of how to use this matrix panel.

    https://www.hackster.io/Arnov_Sharma_makes/64x32-matrix-panel-setup-with-pico-2-25a3c3

    CODE

    #include <Adafruit_Protomatter.h>
    // Pin definitions
    #define R1 2
    #define G1 3
    #define B1 4
    #define R2 5
    #define G2 8
    #define B2 9
    #define A 10
    #define B 16
    #define C 18
    #define D 20
    #define CLK 11
    #define LAT 12
    #define OE 13
    #define WIDTH 64
    #define HEIGHT 32
    uint8_t rgbPins[] = { R1, G1, B1, R2, G2, B2 };
    uint8_t addrPins[] = { A, B, C, D };
    Adafruit_Protomatter matrix(WIDTH, HEIGHT, 1, rgbPins, 4, addrPins, CLK, LAT, OE, false);
    bool grid[WIDTH][HEIGHT];
    bool newGrid[WIDTH][HEIGHT];
    void setup() {
    matrix.begin();
    randomSeed(analogRead(0));
    // Initialize grid with random values
    for(int x = 0; x < WIDTH; x++) {
    for(int y = 0; y < HEIGHT; y++) {
    grid[x][y] = random(2);
    }
    }
    }
    void loop() {
    matrix.fillScreen(0);
    // Update grid based on Game of Life rules
    for(int x = 0; x < WIDTH; x++) {
    for(int y = 0; y < HEIGHT; y++) {
    int aliveNeighbors = countAliveNeighbors(x, y);
    if(grid[x][y]) {
    // Any live cell with two or three live neighbors survives.
    if(aliveNeighbors < 2 || aliveNeighbors > 3) {
    newGrid[x][y] = false;
    } else {
    newGrid[x][y] = true;
    }
    } else {
    // Any dead cell with three live neighbors becomes a live cell.
    if(aliveNeighbors == 3) {
    newGrid[x][y] = true;
    } else {
    newGrid[x][y] = false;
    }
    }
    if(newGrid[x][y]) {
    matrix.drawPixel(x, y, matrix.color565(255, 255, 255)); // White color
    }
    }
    }
    // Copy newGrid to grid
    memcpy(grid, newGrid, sizeof(grid));
    matrix.show();
    delay(100); // Adjust the delay for speed control
    // Check if the grid is stable or empty
    if(isGridStableOrEmpty()) {
    resetGrid();
    }
    }
    int countAliveNeighbors(int x, int y) {
    int aliveNeighbors = 0;
    for(int dx = -1; dx <= 1; dx++) {
    for(int dy = -1; dy <= 1; dy++) {
    if(dx == 0 && dy == 0) continue;
    int nx = (x + dx + WIDTH) % WIDTH;
    int ny = (y + dy + HEIGHT) % HEIGHT;
    if(grid[nx][ny]) {
    aliveNeighbors++;
    }
    }
    }
    return aliveNeighbors;
    }
    bool isGridStableOrEmpty() {
    for(int x = 0; x < WIDTH; x++) {
    for(int y = 0; y < HEIGHT; y++) {
    if(grid[x][y]) {
    return false;
    }
    }
    }
    return true;
    }
    void resetGrid() {
    for(int x = 0; x < WIDTH; x++) {
    for(int y = 0; y < HEIGHT; y++) {
    grid[x][y] = random(2);
    }
    }
    }

    After flashing the Pico with the above code, we connected the matrix’s VCC and GND to the VOUT and GND of the LM317 buck converter board. We then turned on the SMPS, and the setup started functioning successfully.

View all 4 instructions

Enjoy this project?

Share

Discussions

Steve Toner wrote 04/20/2026 at 14:07 point

Not a buck converter.

Buck converters are high efficiency switching devices that conserve power.  An LM317 as used here is a low efficiency linear device that converts excess voltage to heat.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates