
Phase1-module
udaravima/Lab_Bench
A modular, rack-style DC power supply: up to 8 hot-pluggable 600 W buck modules on a shared DC input bus, coordinated by a central manager over CAN.

A modular, rack-style DC power supply: up to 8 hot-pluggable 600 W buck modules on a shared DC input bus, coordinated by a central manager over CAN.
Phase2-module is an open-source printed circuit board by udaravima, from the udaravima/Lab_Bench repository on GitHub, published under the GPL-3.0 licence. It is a 4-layer board of 130 × 90 mm with 180 parts on 116 nets, routed with 2,154 tracks and 524 vias.
It is built around the DAC80502DRXT, INA240A3D and LM5143RHAR, with the LMR36015AQRNXRQ1, LM5069MM-2 and OPA2333HD among its other parts. Its parts include 69 capacitors, 55 resistors, 14 transistors, 9 ICs and 6 diodes. It belongs with the power boards of this library.
A modular, rack-style DC power supply: up to 8 hot-pluggable 600 W buck modules on a shared DC input bus, coordinated by a central manager over CAN. Each channel is a self-contained analog CV/CC supply with bench-grade precision, usable for lab work, bulk DC power, and battery charging.
| Parameter | Value |
|---|---|
| Input bus | 24–30 V DC nominal (12 V tolerated, output ceiling drops with it) |
| Channels | 1–8, hot-pluggable, slot-addressed |
| Per-channel output | 0 … (V_in − 2 V), 0–30 A, 600 W envelope (first limit binds) |
| Regulation | Analog CV/CC (diode-OR min-selector), firmware never in the loop |
| Setpoint resolution | ~0.5 mV / ≤0.8 mA (16-bit DAC, per-module calibration) |
| Readback | 20-bit INA228, ±0.05 % class |
| Comms | CAN 2.0B @ 500 kbit/s, heartbeat-supervised |
| Scaling | Channels parallel into droop-share groups (firmware feature) |
| Grounding | All outputs share input ground — parallel OK, no series stacking |
| Global limits | Manager-enforced total power budget + hardwired E-stop line |
| Doc | Contents |
|---|---|
| docs/01-system-architecture.md | Topology, backplane, grounding, power budget |
| docs/02-module-design.md | 600 W module: power stage, CV/CC loop, sensing, MCU |
| docs/03-can-protocol.md | Bus parameters, ID map, payloads, fault semantics |
| docs/04-protection-matrix.md | Every fault: detection, response, latching, recovery |
| docs/05-build-plan.md | Phased build with exit criteria (150 W proto → 8-ch rack) |
| docs/06-phase1-circuit-design.md | Worked component values for the 150 W prototype |
| docs/07-module-firmware.md | STM32G431 firmware architecture, pin map, bring-up |
| docs/08-phase2-circuit-design.md | Worked component values for the 600 W module (LM5143 + LM5069) |
| docs/09-phase3-circuit-design.md | Backplane + ESP32-S3 manager design (slots, E-stop chain, bus metering, UI) |
| docs/10-manager-firmware.md | Manager firmware architecture (host-tested core + ESP-IDF shell) |
| docs/11-build-guide.md | How to build one: ordering, assembly, firmware, first power-up |
| docs/12-phase1-bench-tests.md | Phase-1 bench test procedure against the exit criteria (+ results template) |
| hardware/SOURCING.md | LCSC-first part sourcing, prices, order-early list |
| HANDOVER.md | Session handover: state, decisions, gotchas, next steps |
| hardware/phase1-module/tools/README.md | Schematic/PCB generation + verification pipeline |
| hardware/phase1-module/lib/PARTS-TO-DOWNLOAD.md | Exact orderables, package corrections, verified pricing |
docs/ Design docs 01..10, build guide 11, bench tests 12
test-results/ Bench results (template + one file per board run)
hardware/common/ Shared generators, checkers, bom.py + lcsc_parts.py
hardware/phase1-module/ KiCad 7 project (schematics hand-owned; board generated + routed)
tools/ Generators + mechanical checkers (see README)
lib/ Vetted symbol + footprint libraries (shared by phase 2)
hardware/phase2-module/ KiCad 7 project — GENERATED (600 W module, docs/08)
hardware/phase3-backplane/ KiCad 7 project — GENERATED (8-slot backplane, docs/09)
hardware/phase3-manager/ KiCad 7 project — GENERATED (ESP32-S3 manager, docs/09)
firmware/
common/labbench_can.h CAN codec, shared module <-> manager
module/core/ Portable control core (host-tested)
module/ STM32G431 bare-metal firmware (Makefile+arm-gcc)
manager/core/ Portable manager core (host-tested)
manager/idf/ ESP-IDF shell (needs IDF >= 5.1; unproven on silicon)
tests/ Host unit tests — `cd firmware/tests && make test`
tools/lbcan.py Bench helper: build cansend frames, decode candumpNothing has run on silicon yet; the first board to be built is the Phase-1
module. v0.1.0 was released from master on 2026-09-29.
| Area | State |
|---|---|
| Design docs | Complete: 01–10, plus the build guide (11) and Phase-1 bench test procedure (12) |
| Phase-1 module (150 W) | 100 × 80 mm, routed, 0 unconnected, 0 DRC errors, fab zip and CPL committed. OVP_TRIP routed to the MCU (PB4) for the firmware 0.2 OVP latch. L2 moved to a 5 × 5 mm land (2026-10-06). Next: order and run docs/12. The older 120 × 80 layout on branch phase1-120x80 has wrong L1/U7 lands: do not order it |
| Phase-2 module (600 W) | 130 × 90 mm, routed, 0 unconnected, 0 DRC errors, fab zip and CPL committed; pre-order review closed (HANDOVER); L2 moved to a 5 × 5 mm land (2026-10-06) |
| Phase-3 backplane | 330 × 100 mm, fab-ready; gated on the XT60 polarity buzz-out (MECHANICAL.md) |
| Phase-3 manager | 100 × 80 mm, routed, 0 unconnected, 0 DRC errors; L2 moved to a 5 × 5 mm land (2026-10-05) |
| Module firmware | v0.2 builds (~7 KB, bare-metal STM32G431) with the OCP backup and OVP latch; control core host-tested |
| Manager firmware | v0.2 builds on ESP-IDF 5.3.2; manager, SCPI and UI cores host-tested |
| BOM / sourcing | LCSC numbers in the schematics and per-board BOM and CPL files (hardware/common/bom.py); no CHECK: rows left (closed 2026-10-06); INA228 stock is thin (5 at LCSC); generic R/C parts not yet numbered |
| CI | GitHub Actions: host tests, module and manager firmware builds on every PR |
Complete Phase-1 build (parts, five PCBs, stencil, shipping) ≈ US$100–125.
HANDOVER.md has the detailed resume points. Work lands on the
development branch through pull requests; master receives batched merges.
GPL-3.0 (see LICENSE).
| Qty | Value | Footprint | References |
|---|---|---|---|
| 21 | 100n | Capacitor_SMD:C_0603_1608Metric | C3, C5, C27, C28, C33, C34, C35, C39, C41, C43, C52, C62, C68, C69, C70, C71 +5 |
| 14 | 10u/50V X7S | Capacitor_SMD:C_1210_3225Metric | C6, C7, C8, C9, C10, C11, C12, C13, C38, C40, C45, C46, C47, C48 |
| 9 | 100K | Resistor_SMD:R_0603_1608Metric | R16, R18, R19, R20, R22, R23, R38, R52, R75 |
| 8 | CSD18540Q5B | labbench:PowerFET_SON5x6_GDS | Q1, Q2, Q3, Q4, Q10, Q11, Q12, Q13 |
| 5 | 2N7002 | Package_TO_SOT_SMD:SOT-23 | Q5, Q6, Q7, Q8, Q9 |
| 4 | 10K 1% | Resistor_SMD:R_0603_1608Metric | R47, R61, R67, R68 |
| 4 | 1u | Capacitor_SMD:C_0603_1608Metric | C21, C30, C42, C53 |
| 4 | 220u/35V hybrid | Capacitor_SMD:CP_Elec_10x10.5 | C15, C16, C36, C37 |
| 4 | 7m5 1W | Resistor_SMD:R_1206_3216Metric | R36, R37, R42, R57 |
| 4 | BAT54W | Package_TO_SOT_SMD:SOT-323_SC-70 | D1, D2, D3, D4 |
| 4 | M3 | MountingHole:MountingHole_3.2mm_M3 | H1, H2, H3, H4 |
| 3 | 10K | Resistor_SMD:R_0603_1608Metric | R43, R64, R65 |
| 3 | 1n | Capacitor_SMD:C_0603_1608Metric | C31, C32, C44 |
| 3 | Fiducial | Fiducial:Fiducial_1mm_Mask2mm | FID1, FID2, FID3 |
| 2 | 10K 0.1% | Resistor_SMD:R_0603_1608Metric | R3, R6 |
| 2 | 10K B3950 | Resistor_SMD:R_0603_1608Metric | RT1, RT2 |
| 2 | 18p | Capacitor_SMD:C_0603_1608Metric | C66, C67 |
| 2 | 1K | Resistor_SMD:R_0603_1608Metric | R31, R66 |
| 2 | 1m0 3W Kelvin | Resistor_SMD:R_2512_6332Metric | R30, R34 |
| 2 | 2.2u | Capacitor_SMD:C_0603_1608Metric | C22, C23 |
| 2 | 22u/16V | Capacitor_SMD:C_1210_3225Metric | C54, C55 |
| 2 | 4.7K | Resistor_SMD:R_0603_1608Metric | R62, R63 |
| 2 | 4.7u/50V | Capacitor_SMD:C_1210_3225Metric | C50, C51 |
| 2 | 47n | Capacitor_SMD:C_0603_1608Metric | C18, C20 |
| 2 | 5.6K | Resistor_SMD:R_0603_1608Metric | R5, R8 |
| 2 | 6.8u MWSA1707S/XAL1510 | labbench:L_1707_XAL1510 | L1, L3 |
| 2 | DNP | Capacitor_SMD:C_0603_1608Metric | C49, C58 |
| 2 | DNP snub | Resistor_SMD:R_0603_1608Metric | R40, R41 |
| 1 | 1.0K 0.1% | Resistor_SMD:R_0603_1608Metric | R2 |
| 1 | 10.0K 0.1% | Resistor_SMD:R_0603_1608Metric | R33 |
| 1 | 100K 1% | Resistor_SMD:R_0603_1608Metric | R50 |
| 1 | 10n | Capacitor_SMD:C_0603_1608Metric | C1 |
| 1 | 10u/16V | Capacitor_SMD:C_1210_3225Metric | C56 |
| 1 | 110K 0.1% | Resistor_SMD:R_0603_1608Metric | R32 |
| 1 | 12.1K 1% | Resistor_SMD:R_0603_1608Metric | R72 |
| 1 | 15.0K 1% | Resistor_SMD:R_0603_1608Metric | R74 |
| 1 | 150n | Capacitor_SMD:C_0603_1608Metric | C4 |
| 1 | 15K | Resistor_SMD:R_0603_1608Metric | R7 |
| 1 | 1N4148W | Diode_SMD:D_SOD-323 | D6 |
| 1 | 1m5 3W Kelvin | Resistor_SMD:R_2512_6332Metric | R70 |
| 1 | 1u VDDA | Capacitor_SMD:C_0603_1608Metric | C65 |
| 1 | 2.2K | Resistor_SMD:R_0603_1608Metric | R24 |
| 1 | 2.2n | Capacitor_SMD:C_0603_1608Metric | C25 |
| 1 | 20.0K 0.1% | Resistor_SMD:R_0603_1608Metric | R46 |
| 1 | 200K 1% | Resistor_SMD:R_0603_1608Metric | R60 |
| 1 | 215K 0.1% | Resistor_SMD:R_0603_1608Metric | R45 |
| 1 | 22n | Capacitor_SMD:C_0603_1608Metric | C2 |
| 1 | 22u/10V | Capacitor_SMD:C_1210_3225Metric | C57 |
| 1 | 24.9K 1% | Resistor_SMD:R_0603_1608Metric | R51 |
| 1 | 267K 1% | Resistor_SMD:R_0603_1608Metric | R35 |
| 1 | 27n | Capacitor_SMD:C_0603_1608Metric | C24 |
| 1 | 33K | Resistor_SMD:R_0603_1608Metric | R4 |
| 1 | 33u/1.2A | Inductor_SMD:L_Changjiang_FNR5040S | L2 |
| 1 | 35A blade | Fuse:Fuse_Blade_ATO_directSolder | F1 |
| 1 | 4.7 | Resistor_SMD:R_0603_1608Metric | R29 |
| 1 | 4.7K 0.5W preload | Resistor_SMD:R_2512_6332Metric | R27 |
| 1 | 4.7u | Capacitor_SMD:C_0603_1608Metric | C64 |
| 1 | 4.87K 1% | Resistor_SMD:R_0603_1608Metric | R73 |
| 1 | 46.4K 0.1% | Resistor_SMD:R_0603_1608Metric | R1 |
| 1 | 47.5K 1% | Resistor_SMD:R_0603_1608Metric | R71 |
| 1 | 470n | Capacitor_SMD:C_0603_1608Metric | C19 |
| 1 | 470u/50V | Capacitor_THT:CP_Radial_D10.0mm_P5.00mm | C14 |
| 1 | 47K | Resistor_SMD:R_0603_1608Metric | R44 |
| 1 | 63.4K 1% | Resistor_SMD:R_0603_1608Metric | R26 |
| 1 | 8MHz | Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm | Y1 |
| 1 | AGND-PGND tie | NetTie:NetTie-2_SMD_Pad0.5mm | NT1 |
| 1 | CSD19536KTT | Package_TO_SOT_SMD:TO-263-2 | Q14 |
| 1 | DAC80502DRXT | labbench:DAC80502_DRX_WSON-10 | U1 |
| 1 | DNP 0R | Resistor_SMD:R_0603_1608Metric | R39 |
| 1 | FAN | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J6 |
| 1 | INA228 | Package_SO:VSSOP-10_3x3mm_P0.5mm | U5 |
| 1 | INA240A3 | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U4 |
| 1 | LM5069MM-2 | Package_SO:VSSOP-10_3x3mm_P0.5mm | U12 |
| 1 | LM5143RHAR | labbench:LM5143_RHA0040P | U3 |
| 1 | LMR36015AQRNXRQ1 | labbench:LMR36015_RNX_VQFN-HR-12 | U8 |
| 1 | LTC7004 | Package_SO:MSOP-10-1EP_3x3mm_P0.5mm_EP1.68x1.88mm | U6 |
| 1 | NCP1117-3.3 | Package_TO_SOT_SMD:SOT-223-3_TabPin2 | U9 |
| 1 | OPA2333 | Package_SO:VSSOP-8_3.0x3.0mm_P0.65mm | U2 |
| 1 | SLOT SIGNALS | Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical | J5 |
| 1 | SMBJ33A | Diode_SMD:D_SMB | D5 |
The 170 most common of 180 parts.
It measures 130 × 90 mm and has 4 copper layers, 1.6 mm thick.
180 parts, built around the DAC80502DRXT, INA240A3D, LM5143RHAR and LMR36015AQRNXRQ1. 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.
From the udaravima/Lab_Bench repository on GitHub, at the commit this page was made from: the board is hardware/phase2-module/phase2-module.kicad_pcb and its schematic hardware/phase1-module/aux-rails.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository publishes it under the GPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

udaravima/Lab_Bench
A modular, rack-style DC power supply: up to 8 hot-pluggable 600 W buck modules on a shared DC input bus, coordinated by a central manager over CAN.

udaravima/Lab_Bench
A modular, rack-style DC power supply: up to 8 hot-pluggable 600 W buck modules on a shared DC input bus, coordinated by a central manager over CAN.

udaravima/Lab_Bench
A modular, rack-style DC power supply: up to 8 hot-pluggable 600 W buck modules on a shared DC input bus, coordinated by a central manager over CAN.


Tim4769/Microver
Swiss Rover Challenge rover project with final electronics, mechanical handoff files, PCB validation firmware, and shared project assets.


AxelMcKenna/AFX-1000
RMX-1000-inspired effects processor for macOS, AU and VST3, built on a shared C++20 engine. Standalone Daisy Seed 3 hardware with two main PCBs and a custom housing is in development.


HyFiVeUser/HyFiVe
For this use case we developed a very flexible autonomous measuring system, which can be deployed on fishing gear to collect data in an affordable and scalable way.

