Skip to the content
2 layers58.5 × 88 mmFugu2, the printed circuit board in 3D

Links: git | kicanvas | cadlab | docs | pdf schematics | IBOM (TODO) | firmware | additional docs & resources

Size
58.5 × 88 mm
Copper layers
2
Thickness
1.6 mm
Parts
147
Nets
80
Pads
497
Tracks, vias
988, 172
Pours
13
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
14 Apr 2024
Updated
30 Oct 2026

Overview

Fugu2 is an open-source printed circuit board by fl4p, from the fl4p/Fugu2 repository on GitHub. It is a 2-layer board of 58.5 × 88 mm with 147 parts on 80 nets, routed with 988 tracks and 172 vias.

It is built around the ESP32-S3-WROOM-1-N4, SN74LVC1G125DBVR-TP and AP3012KTR-G1, with the UCC21330BQDRQ1, SN74LVC1G17DBVR and LESD5D5.0CT1G among its other parts. Its parts include 44 resistors, 35 capacitors, 16 diodes, 9 transistors and 7 connectors. It belongs with the ESP32 boards of this library.

Main components

12

README

README.md

Bi-directional DC-DC buck or boost converter for Solar MPPT

Links: git | kicanvas | cadlab | docs | pdf schematics | IBOM (TODO) | firmware | additional docs & resources

text
TODO 3d web rendering
gate drv considerations:
- separate gate discharge diode?
- eval gate drv voltage?
- pull down for each fet? 10k pull down?
usb-c: select 12V instead of 5V


final points:
- what about the LS diodes? SMD and TO220, do power measurements.
    - ST15100S and ...
    - 2nd LS switch parallel ?
- sw push footprint
- test without TVS diodes at solar voltage divider. when does the mcu die? 
- tune dead-time


bom opts:
- Cin: C11, C22 replace with MSASH32MSB5475MPCA01 / HMK325BJ475MM-PE ?
    cheaper and specifically for SMPS
Current Hardware v2.3 rendering with USB type-C port and large terminal blocks (top & bottom)

Gallery

Small aluminium enclosure with two T130 sendust coil cores fmetalmounted on heatsink, T184 sendust core fheat
improved coil with two T184 sendust cores fheat2inside an enclosure from a RF amp fisi

Specs

  • Solar input voltage: 12 ~ 80V (higher voltage configurations possible, please create an issue if you need help with component selection)
  • Battery output voltage: 12 ~ 60V (LiFePo4 4s ~ 16s)
  • Max output current: 32 A
  • Boost operation with input and output terminals swapped
  • Efficiency Measurements
    • Vin=72 Vout=27 Iout=32A: 98.17% (measured with INA228 & Riedon SSA-100, smart-shunt)
    • Vin=71.5 Vout=27.1 Iout=29.1A: 98.12% (measured with INA228, Riedon RSN20-50, DCCT DS200ID, details)

This is inspired by Fugu MPPT. The design has been optimized with real life experience, considering signal noise and EMI issues, replaced hall sensor with shunt resistor and faster switching. See the list below for more changes.

How to build

You can place the ESP32-S3 directly on the board and use the USB pin header or the ESP-PROG header for flashing. Alternatively, you can place SMD pin headers where the ESP32-S3 footprint is and use the MCU header board. This makes it easier to replace the MCU in case it breaks. You can of course create your own header board using another MCU series such as the STM32.

  • order PCB (or make @home)
    • 1x Fugu2.kicad_pcb
    • 1x psu/buck100.kicad_pcb (for 3.3V supply)
    • 1x mcu-head/Fugu2-esp32s3-wroom-head.kicad_pcb (optional. this allows easy replacement of the ESP32S3 during development. alternatively place the ESP32(-S3) directly on the Fugu2 board)
    • you can use kikit-packer or Kikakuka to create a single PCB for the manufacturing job.
      • kikit-packer instructions: follow the install instructions in the readme. make sure you have Fugu2/ and kikit-packer/ in the same directory. then run panelize.sh (linux, mac) or panelize.bat (windows). It will generate combined.kicad_pcb which you can send to your PCB manufacturer.
  • assemble PCBs (ibom TODO)
    • you can order assembly through pcbway or jlcpcb
    • if you assemble @home
      • place solder-paste on all SMD pads
      • put SMD items first (resistors, caps, diodes, inductors and then IC)
      • heat with a hotplate (a cooking pan filled with sand works) or hot air gun
      • solder the THT components (electrolytic caps, power inductor, mosfets, pin headers, power terminal blocks)
  • mount the PCB on a heatsink (expect 20W of heat)
    • drill mounting holes
    • if mosfets are not isolated use thermal pads for isolation
    • M3 plastic screws are a cheap and easy alternative
  • enclosure
    • todo: there is no enclosure yet
  • build inductor
    • order core and copper wire. cores are available at semic or digikey. I buy wire from eBay.
    • wind the coil
  • flash firmware

Design Principles

  • Simplicity with minimum number of components, while keeping EMI and efficiency in mind
  • Only 2-layer PCB and using mostly 0805 SMD components, so this can be made at home
  • Using TO220 switches for the buck for easy maintenance
  • Dense PCB design to reduces parasitic L and R

Compared to the original design:

  • Multiple input caps to increase life-time, efficiency and reduced EMI
  • 2 high-side switches in parallel to reduce heat and increase efficiency
  • Using ESP32 ADC to sense input voltage, INA226 for bat voltage
  • Using current sense resistor with INA226 (immunity against magnetic fields, less drift)
  • Current sense on the battery side (less noise, can detect bat reverse current)
  • Low-side current sensing because it supports up to 60V battery voltage (for 16s lifepo4 48V batteries)
  • Backflow switch on battery side (bat eFuse if sth goes wrong, can safely handle a short of the high-side switches)
  • Backflow switch powered by bootstrapping charge pump from the HS gate driver (no extra DC-DC)
  • Much higher 4 A gate drive current (previously 130mA and 1.4 A) to reduce switching losses (TI UCC21330)
  • Introducing RC snubber circuit to reduce EMI and MOSFET voltage stress
  • TVS protection circuit to protect internal power supply
  • off-board 3.3V and 12V power-supply
  • USB break-out and off-board programmer (ESP PROG Header)
  • Improved voltage and current sense PCB Design (voltage divider & filter caps close to ADC)
  • Using LM5163 for power supply. (XL7005A explodes at surge voltages ~80V. Seems vulnerable at temps >~70°C)

Power loss reduction

  • 4A gate driver UCC21330BQDRQ1 with programmable dead-time
    • fast switching (high-side)
    • optimized dead-time, reduce free-wheeling losses (low-side)
  • dense half-bridge PCB design for minimum parasitic inductance
  • short and min-area gate-drive tracks for minimum gate drive inductance
  • low-side rectifier Schottky barrier diode to reduce free-wheeling loss and reverse-recovery loss
  • cascade of input capacitors: 220nF, 1uF, 10uF, 470uF input caps to minimize capacitor ESR-loss
    • low impedance electrolytics
  • optimized coil designs
    • optimized core flux density and core power loss
    • multi-strand coil for reduced R_dc and R_ac (considering skin & proximity effect)

Inductor Quick Start Guide

The inductor should have an inductivity value that is high enough to keep the ripple current in range, a common design rule is that ripple is in the range of 0.3 ~ 0.5 of the dc current. Notice that inductivity decreases with dc bias current. The dc bias current is the average current through the coil. This means that the higher the output current of the converter, the lower the inductivity. This causes the AC indcutor ripple current to rise faster than linear with higher currents. High ripple currents cause more loss in the inductor core (hysteresis loss) and capacitors (parasitic ESR). Going beyond the safe limits can cause extremely high peak currents leading to destruction of the FETs.

The micrometals design tool is a good starting point to find suitable inductor designs with mostly toroid cores. It gives the user recommendations on core shape, core material and wire (diameter and strands).

Off-the-shelf inductors exists, however they are usually expensive (>$20), such as the CODACA CPEX4141L-500MC (optimized for dc bias / saturation current) and CPEA4141L-500MC (optimized for low loss). On LCSC you'll find Ruishen RSEQ32-470M, RSEQ3635-460M and RSEQ3635-700M. I have only tested toe CODACA cores and no experience with the LCSC parts.

Diving into inductor design can be overwhelming at first. In practice there is no perfect inductor for a specific application. Given current, voltage and temperature contraints, the designer usually optimizes for one or more goals, which always comes with trade-offs. In short:

  • chose inductivity L0 high enough (L0 is the unbiased inductivity, e.g. I=0)
  • good dc bias saturation performance (L drops with increased dc current)
  • low DC resistance of winding
  • low core losses

Winding an inductor is nothing to worry about and is actually fun. Below you'll find two design proposals, one for 12 and 24V, upto 40A and the other for 48V batteries. Before, let's have a short intro to better understand the design decisions.

A well designed inductor has a core/copper loss ratio between 50/50 and 20/80 (micrometals). Copper is easier to cool than the core. With higher DC output current the core material magnetization increases and inductivity value drops. A good design has a maximum drop of ~50% of its initial inductivity. Lower inductivity will cause higher ripple current, which will cause more loss in the core and capacitors (increased AC amplitude of magnetic field and current).

For higher DC currents chose a larger core (or materials optimized for DC saturation, which can have low availability and a higher price tag). For higher output voltage chose a higher inductivity value.

Sendust (KoolMµ) is a magnetic core material commonly used for power applications. It is affordable with high availability, has good saturation characteristics and low loss. Manufacturers offer optimized materials, tuning for price, dc bias and/or core loss. (KDM: KPH, KAM, KAH, KH)

For the coil winding choose isolated Copper wire made for electrical applictions commonly referred as W210 with typical conductivity of 58.5 MS/m. Choose diameter and number of strands so that inner diameter of the toroid core has a good usage. Prefer multiple strands for easier winding (>2mm diameter becomes unhandy to wind) and reduced ac loss (skin & proximity effects). Many strands (>10) increase complexity of winding. A diameter between 1 and 2mm appears to be good choice. More copper reduces dc resistance and leakage fringing (TODO ref). Evenly wind the wire on the core to reduce leakage fringing.

12V or 24V battery up to 40A

  • Optimized for low loss 12V and 24V batteries, up to 40A battery current @39kHz
  • Core: 2 stacked KS184-125A (or 0077438A7 from digikey)
  • Wire: Ø=1.18mm Cu (1.25mm total), W210 (Grade 2) Copper
  • Winding: 10 strands, 12 turns, need 20 meter wire in total (10x 2m)
  • Systematic name: 2s-KS184-125A-118cu-10s-12t
  • Micrometals analyzer

48V batteries up to 20A

  • Core: 1x KS184-125A
  • Wire: Ø=1.63mm Cu (AWG14), W210 (Grade 2) Copper
  • Winding: 4 strands, 20 turns
  • Systematic name: 1s-KS184-125A-163cu-4s-20t
  • Micrometals Analyzer

Mosfet Selection

In a nutshell, the LS switch should have low Rds_on, low Qrr, low Qgd (low self turn-on). The HS switch should have low Qsw. See Toshibas Product Guide on pg. 16.

Use fetlib for an extensive parametric search and ranking by power loss estimation.

High Side Mosfet (HS, cntrl)

  • exposed to switching stress
  • short switching times to lower switching losses (small Qsw) but increase potential ringing (EMI)
  • low Rds_on
  • body diode never conducts
  • picks:
    • IPP055N08NF2S (80V 5.5mΩ Qsw=13nC)
    • IPP040N08NF2S (80V,)
    • CSD19501KCS (80V 5.5mΩ Qsw=11nC)
    • IPA050N10NM5S (100V 5mΩ Qsw=16nC Qoss=67nC)
    • IPP089N15NM6 (150V Qsw=11nC)
    • IPP057N15NM6 (150V Qsw=16nC)
    • IPP050N10NF2S (100 V)

Low Side Switch (LS, sync)

  • Choose a mosfet with low Q_rr (how to compute qrr loss)
    • Qrr rises with increasing temperature, current and current transient
    • Qrr ringing and loss can be reduced with external Schottky diode or cascode configuration.
  • low Rds_on
  • low Qgd, Qgd/Qgs (prevent self turn-on)
  • low r_g (prevent self turn-on)
  • Picks
    • IPP040N08NF2S
    • IPP022N12NM6
    • IPP019N08NF2S
    • IPP018N10N5 (100 V)

Current through the LS Switch always flows from source to drain (4th quadrant of V-I plane), which makes the gate drive signal rather irrelevant. It is much easier to switch than the HS, ringing is generally not an issue. TI Gate Drive Fudamentals Switching happens near zero voltage, as the body diode is usually already/still conducting when switching on/off.

Choose a MOSFET that is designed for synchronous rectification. Consider switch node ringing and choose a higher voltage fet to avoid channel break-down if needed.

Higher input voltages

  • input caps
  • remove PV supply diode at board power supply
  • bigger inductivity to keep ripple current at a reasonable level
  • change mosfets HS & LS V_GS(breakdown) to 120V, 150V or 200V
  • voltage sense resistors

Water Robustness Considerations

  • Add a clear varnish coat to the PCB and components (especially the current sensor circuit, Supply DCDC converters)
  • Choose low R_filt for the anti-aliasing filter at the current sensor (INA226) inputs to avoid destruction of the chip's amplifiers.
  • If using a (almost) sealed enclosure (aluminium box), add a bag silica to compensate internal humidity. When the converter is cooling down at night it'll suck water into the enclosure. The ESP32 WROOM metallic case is not sealed. Consider placing a membrane? Sticker on its breathing hole.

Development

Schematics.pdf is regenerated on commit whenever a .kicad_sch file is staged, via a tracked git hook in .githooks/. The refreshed PDF is left unstaged — stage and commit it yourself (git add Schematics.pdf) when you want it in history. After a fresh clone, activate the hook once:

text
git config core.hooksPath .githooks

The hook needs kicad-cli on the PATH (or the default macOS KiCad app bundle). If kicad-cli is unavailable it is skipped and the commit proceeds unchanged.

Further Reads

https://www.minewing.com/

Parts

147
QtyValueFootprintReferences
1110kResistor_SMD:R_0805_2012MetricR2, R3, R8, R9, R13, R14, R15, R16, R23, R45, R46
5100nF, X7R, 25VCapacitor_SMD:C_0805_2012MetricC2, C4, C6, C7, C35
5200kResistor_SMD:R_0805_2012MetricR17, R18, R21, R43, R44
5LESD5D5.0CT1GDiode_SMD:D_SOD-523D3, D4, D6, D20, D21
5SS310Diode_SMD:D_SOD-123D7, D8, D10, D11, D12
41000uF, 100VCapacitor_THT:CP_Radial_D18.0mm_P7.50mmC10, C11, C12, C34
4100nF, 25VCapacitor_SMD:C_0805_2012MetricC1, C29, C36, C37
41uF, 100V, X7SCapacitor_SMD:C_0805_2012MetricC9, C14, C16, C27
4MountingHoleMountingHole:MountingHole_3.2mm_M3_DIN965H2, H3, H4, H5
310nF, 100VCapacitor_SMD:C_0805_2012MetricC15, C20, C31
31kResistor_SMD:R_0805_2012MetricR39, R40, R51
34.7, 1%Resistor_SMD:R_0805_2012MetricR4, R6, R10
35.1k 1%Resistor_SMD:R_0402_1005MetricR35, R36, R38
3TPH1R306PL,L1Q or NTMFS5C612NLT1Gopen-pe:Infineon_PG-TDSON-8_FLQ5, Q6, Q7
3~TestPoint:TestPoint_Pad_D1.5mmbfg1, bfs1, TPHO1
210uF, 100V, X7SCapacitor_SMD:C_1210_3225Metric_Pad1.33x2.70mm_HandSolderC21, C22
210uF, 16VCapacitor_SMD:C_0805_2012MetricC19, C28
21uF, 10V, X7SCapacitor_SMD:C_0805_2012MetricC3, C30
22.2, 1%Resistor_SMD:R_0805_2012MetricR5, R7
2220Resistor_SMD:R_0805_2012MetricR48, R49
2220nF, 100V, X7SCapacitor_SMD:C_0603_1608MetricC17, C18
2691256610002open-pe:TerminalBlock_WR-TBL_2566_1x02_P10.16mmJ9, J10
27.5Resistor_SMD:R_1206_3216MetricR11, R12
2BSS123Package_TO_SOT_SMD:SOT-23Q4, Q9
2GNDTestPoint:TestPoint_Pad_D1.5mmTP3, TP3
2IPA050N10NM5Sopen-pe:TO-220-3_Horizontal_BottomHeatsink_SmallHoleQ1, Q3
2RXTestPoint:TestPoint_Pad_D1.5mmTP1, TP1
2TXTestPoint:TestPoint_Pad_D1.5mmTP2, TP2
10.0005open-pe:R_2512_6332Metric_Pad2.72x3.40mm_HandSolderR26
1100kResistor_SMD:R_0805_2012MetricR47
1100nFCapacitor_SMD:C_0805_2012MetricC26
1100pFCapacitor_SMD:C_0805_2012MetricC32
110uHInductor_SMD:L_0805_2012Metric_Pad1.15x1.40mm_HandSolderL2
111k, 1%Resistor_SMD:R_0805_2012MetricR53
11MResistor_SMD:R_0805_2012MetricR24
11uF, X7R, 25VCapacitor_SMD:C_0805_2012MetricC33
12.2nF, 200V, X7SCapacitor_SMD:C_1206_3216MetricC5
12.2nF, 200V, X7SCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC8
120kResistor_SMD:R_0805_2012MetricR1
122Resistor_SMD:R_0805_2012MetricR19
1226k, 1%Resistor_SMD:R_0805_2012MetricR42
125A 58Vopen-pe:Fuse_Blade_Mini_directSolderThinF3
13.3V PSUConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ7
133kResistor_SMD:R_0805_2012MetricR37
14.7uF, 100VCapacitor_SMD:C_1210_3225Metric_Pad1.33x2.70mm_HandSolderC13
140Aopen-pe:Fuse_Blade_ATO_directSolderThinF1
143k, 1%Resistor_SMD:R_0805_2012MetricR41
1470k, 1%Resistor_SMD:R_0805_2012MetricR52
1470uFCapacitor_THT:CP_Radial_D18.0mm_P7.50mmC12
147kResistor_SMD:R_0805_2012MetricR50
147k, 1%Resistor_SMD:R_0805_2012MetricR22
162VPackage_TO_SOT_SMD:SOT-23-3D18
17.5kResistor_SMD:R_0805_2012MetricR20
1AP3012Package_TO_SOT_SMD:SOT-23-5U5
1AS333Package_TO_SOT_SMD:SOT-353_SC-70-5U6
1BZT52C13-TPDiode_SMD:D_SOD-123DZ2
1Conn_L_SWopen-pe:SolderWire-1x01_D3.5mmJ3
1Conn_L_outopen-pe:SolderWire-1x01_D3.5mmJ6
1ESP32-S3-WROOM-1-N4open-pe:ESP32-S3-WROOM-1-noPIN15U2
1GT800N10D3open-pe:VSON-8_3.3x3.3mm_P0.65mm_NexFETQ8
1INHTestPoint:TestPoint_Pad_D1.0mmTPINH1
1INLTestPoint:TestPoint_Pad_D1.0mmTPINL1
1IPP022N12NM6open-pe:TO-220-3_Horizontal_BottomHeatsink_NoHoleQ2
1MCU headopen-pe:PinHeader_2x07_P2.54mm_Vertical_SMD_Pin1LeftJ4
1MSS1P4-M3/89ADiode_SMD:D_SOD-323D17
1MSS1P4-M3/89ADiode_SMD:D_MicroSMP_AKD1
1MountingHoleMountingHole:MountingHole_3.2mm_M3_DIN965_Pad_TopOnlyH1
1NCP18XH103F03RBResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderTH1
1QTGM027open-pe:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_HorizontalP2
1SDTestPoint:TestPoint_Pad_D1.0mmTPSD1
1SM2T3V3APCM_Diode_SMD_AKL:D_Powermite_KADZ1
1SMAJ85ADiode_SMD:D_SMAD13
1SMD1206B010TF/60 or 500mA fast, 50AFuse:Fuse_1206_3216Metric_Pad1.42x1.75mm_HandSolderF2
1SN74LVC1G125DBVRPackage_TO_SOT_SMD:SOT-23-5U7
1SN74LVC1G17DBVRPackage_TO_SOT_SMD:SOT-23-5U8
1ST15100Sopen-pe:TO-277B_ThermalViasD16
1ST40100Copen-pe:TO-220-3_Horizontal_BottomHeatsink_NoHoleD9
1SW_PushButton_Switch_SMD:SW_Push_SPST_NO_Alps_SKRKSW1
1TP_PWM_LOTestPoint:TestPoint_Pad_D1.5mmTPLO1
1UCC21330BQDRQ1Package_SO:SOIC-16_3.9x9.9mm_P1.27mmU1

The 143 most common of 147 parts.

More from fl4p/Fugu2

1
  • 2 layersZ parts, the printed circuit board in 3D

    Z parts

    fl4p/Fugu2

    Links: git | kicanvas | cadlab | docs | pdf schematics | IBOM (TODO) | firmware | additional docs & resources

    14 parts24

Similar boards

  • 2 layers10.5 × 19.5 mmBuck100, the printed circuit board in 3D

    Buck100

    open-pe/buck100-LM5163

    Tiny 100vin 0.3iout buck converter with LM5163/LM5164

    14 parts
  • 2 layers168.8 × 95.8 mmNixie clock, the printed circuit board in 3D

    Nixie clock

    alx-alexpark/nixie-clock

    ИН-12 Nixie Tube Clock built with Pico W and k155id1

    75 parts8
  • 4 layers85 × 50 mmPdlc, the printed circuit board in 3D

    Pdlc

    brown-studios/pdlc

    A circuit board for driving PDLC film from 12 V DC

    127 parts7MIT
  • 6 layers160 × 100 mmETH1LCR3, the printed circuit board in 3D

    ETH1LCR3

    BehrensG/ETH1LCR3

    546 parts
  • 4 layers64 × 115 mmAmp board, the printed circuit board in 3D

    Amp board

    splogdes/Audio-Engine-A5-Input-Stage

    198 parts
  • 4 layers70 × 70 mmHUSB238A Dev Board, the printed circuit board in 3D

    HUSB238A Dev Board

    SK-Electronics-Consulting/electronics-widgets

    Small, Custom Tools for Electronics

    44 parts1
  • 6 layers69.7 × 76.7 mmAmulet controller, the printed circuit board in 3D

    Amulet controller

    EPFLXplore/XRE_LeggedRobot_HW

    PCB designs for Xplore Research's robot dog project

    414 parts348Apache-2.0
  • 4 layers48 × 44.5 mmSmol servo rpi2350-tmc6200, the printed circuit board in 3D

    Smol servo rpi2350-tmc6200

    dognotdog/smol_servo

    circuitry and software for controlling NEMA17 size brushless motors and stepper motors as servos.

    151 parts5

Questions

How big is the Fugu2 PCB?

It measures 58.5 × 88 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Fugu2 use?

147 parts, built around the ESP32-S3-WROOM-1-N4, SN74LVC1G125DBVR-TP, AP3012KTR-G1 and UCC21330BQDRQ1. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Fugu2 KiCad files?

From the fl4p/Fugu2 repository on GitHub, at the commit this page was made from: the board is Fugu2.kicad_pcb and its schematic ExtPort.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Fugu2 design in my own project?

Its repository states no licence, so its author keeps all rights: ask fl4p before reusing the design.