Power boards
battery-power-input — AruviX robot battery power board
Main-line board (not a PMOD module). This is the robot-power foundation named (Phase B): a 2S/3S hobby LiPo comes in, gets fused, reverse-protected, clamped, and metered, then feeds a raw motor rail plus independent 5 V and 3.3 V buck rails. All battery telemetry leaves the board on I2C (Qwiic + pin header).
Circuit review & bench-test guide →
Components#
Every placed component, with the reason it is on the board. Extracted directly from the schematic, so this cannot drift from the design.
| Ref | Value | What it does on this board | Part number | Footprint |
|---|---|---|---|---|
C1 |
22uF 25V X7R | Battery-rail bulk reservoir | not selected Murata |
C_1210_3225Metric |
C2 |
22uF 25V X7R | Battery-rail bulk reservoir | not selected Murata |
C_1210_3225Metric |
C3 |
100nF 50V X7R | Battery-rail high-frequency decoupling | GRM188R71H104KA93DMurata |
C_0603_1608Metric |
C4 |
100nF 16V X7R | U1 VS decoupling | GRM188R71C104KA01DMurata |
C_0603_1608Metric |
C5 |
10uF 25V X5R | U2 input capacitor | GRM21BR61E106KA73LMurata |
C_0805_2012Metric |
C6 |
100nF 50V X7R | U2 input high-frequency decoupling | GRM188R71H104KA93DMurata |
C_0603_1608Metric |
C7 |
22uF 25V X7R | U2 output capacitor | not selected Murata |
C_1210_3225Metric |
C8 |
22uF 25V X7R | U2 output capacitor | not selected Murata |
C_1210_3225Metric |
C9 |
100nF 50V X7R | Bootstrap capacitor (datasheet section 13) | GRM188R71H104KA93DMurata |
C_0603_1608Metric |
C10 |
10uF 25V X5R | U3 input capacitor | GRM21BR61E106KA73LMurata |
C_0805_2012Metric |
C11 |
100nF 50V X7R | U3 input high-frequency decoupling | GRM188R71H104KA93DMurata |
C_0603_1608Metric |
C12 |
22uF 25V X7R | U3 output capacitor | not selected Murata |
C_1210_3225Metric |
C13 |
22uF 25V X7R | U3 output capacitor | not selected Murata |
C_1210_3225Metric |
C14 |
100nF 50V X7R | Bootstrap capacitor (datasheet section 13) | GRM188R71H104KA93DMurata |
C_0603_1608Metric |
D1 |
SMBJ16A | 16 V standoff unidirectional TVS across the protected rail (pin 1 = cathode = VBAT_P) | SMBJ16ALittelfuse |
D_SMB |
D2 |
BZT52H-C10 | 10 V gate-source clamp for Q1 (cathode to source) | BZT52H-C10,115Nexperia |
D_SOD-123F |
D3 |
5V GREEN | 5 V rail indicator (AP632xx has no PG pin) | APT1608SGCKingbright |
LED_0603_1608Metric |
D4 |
3V3 GREEN | 3.3 V rail indicator (AP632xx has no PG pin) | APT1608SGCKingbright |
LED_0603_1608Metric |
F1 |
5A FAST 5x20 | Main battery fuse in 5x20 clip holder (2x Keystone 3517 clips) | not selected Littelfuse + Keystone |
Fuseholder_Clip-5x20mm_Keystone_3517_Inline_P23.11x6.76mm_D1.70mm_Horizontal |
J1 |
BATT IN 2S/3S LIPO | Battery input: 1 BATT+ (6.4-12.6 V), 2 GND. XT60 pigtail lands here. | MKDS 3/2-5,08 (1711022)Phoenix Contact |
TerminalBlock_Phoenix_MKDS-3-2-5.08_1x02_P5.08mm_Horizontal |
J2 |
VBAT OUT (MOTOR RAIL) | Metered raw battery out: 1 VBAT_OUT, 2 GND. Live below buck UVLO. | MKDS 3/2-5,08 (1711022)Phoenix Contact |
TerminalBlock_Phoenix_MKDS-3-2-5.08_1x02_P5.08mm_Horizontal |
J3 |
5V OUT | 5 V / 2 A output: 1 5V_OUT, 2 GND | MKDS 1,5/2-5,08 (1715022)Phoenix Contact |
TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal |
J4 |
3V3 OUT | 3.3 V / 2 A output: 1 3V3_OUT, 2 GND | MKDS 1,5/2-5,08 (1715022)Phoenix Contact |
TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal |
J5 |
QWIIC I2C OUT | Qwiic/STEMMA QT telemetry out: 1 GND, 2 3V3, 3 SDA, 4 SCL | SM04B-SRSS-TB(LF)(SN)JST Datasheet ↗ |
JST_SH_SM04B-SRSS-TB_1x04-1MP_P1.00mm_Horizontal |
J6 |
TELEMETRY HEADER DNP | Optional telemetry header: 1 GND, 2 3V3, 3 SDA, 4 SCL, 5 ALERT | not selected generic |
PinHeader_1x05_P2.54mm_Vertical |
JP1 |
SDA PULL-UP | Cut to remove the SDA pull-up when the host bus already has them | — | SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mm |
JP2 |
SCL PULL-UP | Cut to remove the SCL pull-up when the host bus already has them | — | SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mm |
JP3 |
3S UVLO 9V | Bridge for 3S packs: parallels R8 into the divider, trip ON 9.00 V / OFF 8.20 V | — | SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm |
JP4 |
3S UVLO 9V | Bridge for 3S packs: parallels R11 into the divider, trip ON 9.00 V / OFF 8.20 V | — | SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm |
L1 |
4.7uH XAL7030 | 4.7 uH 10.1 A Isat shielded power inductor | XAL7030-472MECCoilcraft Datasheet ↗ |
L_Coilcraft_XAL7030-472 |
L2 |
3.3uH XAL7030 | 3.3 uH 12.3 A Isat shielded power inductor | XAL7030-332MECCoilcraft Datasheet ↗ |
L_Coilcraft_XAL7030-332 |
Q1 |
DMP4015SSS-13 | Reverse-polarity ideal-diode P-FET: drain to battery, source to load, gate to GND | DMP4015SSS-13Diodes Incorporated Datasheet ↗ |
SO-8_3.9x4.9mm_P1.27mm |
R1 |
10mR 1% 3W | INA226 current shunt, 2512 3 W metal strip | not selected Vishay |
R_2512_6332Metric |
R2 |
100k | Q1 gate pull-down: enhances the FET on correct polarity | RC0603FR-07100KLYageo Datasheet ↗ |
R_0603_1608Metric |
R3 |
10k | INA226 ALERT open-drain pull-up | RC0603FR-0710KLYageo Datasheet ↗ |
R_0603_1608Metric |
R4 |
4.7k | I2C SDA pull-up | RC0603FR-074K7LYageo Datasheet ↗ |
R_0603_1608Metric |
R5 |
4.7k | I2C SCL pull-up | RC0603FR-074K7LYageo Datasheet ↗ |
R_0603_1608Metric |
R6 |
46.4k 1% | UVLO divider top (R5 in datasheet Fig.22) | RC0603FR-0746K4LYageo Datasheet ↗ |
R_0603_1608Metric |
R7 |
11.3k 1% | UVLO divider bottom: 2S trip ON 5.96 V / OFF 5.36 V | RC0603FR-0711K3LYageo Datasheet ↗ |
R_0603_1608Metric |
R8 |
18k 1% | 3S UVLO parallel resistor (behind JP3) | RC0603FR-0718KLYageo Datasheet ↗ |
R_0603_1608Metric |
R9 |
46.4k 1% | UVLO divider top (R5 in datasheet Fig.22) | RC0603FR-0746K4LYageo Datasheet ↗ |
R_0603_1608Metric |
R10 |
11.3k 1% | UVLO divider bottom: 2S trip ON 5.96 V / OFF 5.36 V | RC0603FR-0711K3LYageo Datasheet ↗ |
R_0603_1608Metric |
R11 |
18k 1% | 3S UVLO parallel resistor (behind JP4) | RC0603FR-0718KLYageo Datasheet ↗ |
R_0603_1608Metric |
R12 |
1k | 5 V power-good LED resistor (~3 mA) | RC0603FR-071KLYageo Datasheet ↗ |
R_0603_1608Metric |
R13 |
470R | 3.3 V power-good LED resistor (~2.5 mA) | RC0603FR-07470RLYageo Datasheet ↗ |
R_0603_1608Metric |
U1 |
INA226 | 36 V high-side current/power monitor, I2C, alert | INA226AIDGSRTexas Instruments Datasheet ↗ |
TSSOP-10_3x3mm_P0.5mm |
U2 |
AP63205WU-7 | 3.8-32 V in, 5 V / 2 A synchronous buck | AP63205WU-7Diodes Incorporated Datasheet ↗ |
TSOT-23-6 |
U3 |
AP63203WU-7 | 3.8-32 V in, 3.3 V / 2 A synchronous buck | AP63203WU-7Diodes Incorporated Datasheet ↗ |
TSOT-23-6 |
Signals#
Net labels used in the schematic, which are also the names the HDL top level should use.
3V3_OUT 5V_OUT BATT_P BST_3V3 BST_5V EN3_3S EN5_3S EN_3V3 EN_5V GND I2C_ALERT LED3_A LED5_A Q1_GATE SCL SCL_PU SDA SDA_PU SW_3V3 SW_5V VBAT_FUSED VBAT_OUT VBAT_P
Production status#
| Schematic ERC | 0 violations |
|---|---|
| PCB layout | not started |
| DRC | not run |
| Fab package | not exported |
| Fabricated | no — design stage only |
Source: boards/battery-power-input
Main-line board (not a PMOD module). This is the robot-power foundation named in ../actuator-modules/README.md (Phase B): a 2S/3S hobby LiPo comes in, gets fused, reverse-protected, clamped, and metered, then feeds a raw motor rail plus independent 5 V and 3.3 V buck rails. All battery telemetry leaves the board on I2C (Qwiic + pin header).
Status: schematic capture complete — ERC 0 errors / 0 warnings (--severity-all), netlist-membership verified (23 nets / 123 pin memberships exact). PCB layout not started.
Regenerate and verify:
python3 generate_design.py
/Applications/KiCad/KiCad.app/Contents/MacOS/kicad-cli sch erc \
--severity-all --format report --output reports/erc.rpt battery-power-input.kicad_sch
Requirements#
- Input: 2S/3S hobby LiPo, 6.4–12.6 V, up to the 5 A fuse rating.
- Protection: fuse, reverse polarity, surge clamp. Not cell-level protection (see safety boundary).
- Telemetry: bus voltage + current of the entire downstream load on I2C, with a programmable alert line.
- Outputs: raw metered battery rail (motor rails /
robot-power-dist), 5 V / 2 A, 3.3 V / 2 A, each on its own screw terminal with GND. - Input-UVLO on the logic rails, selectable for 2S or 3S floor.
Architecture (power chain)#
J1 (screw terminal) -> F1 5A 5x20 fuse -> Q1 DMP4015SSS ideal-diode P-FET -> VBAT_P
VBAT_P: D1 SMBJ16A TVS, 2x22uF + 100nF bulk, UVLO dividers
VBAT_P -> R1 10 mOhm shunt (INA226) -> VBAT_OUT
VBAT_OUT -> J2 raw motor rail
VBAT_OUT -> U2 AP63205WU -> 5V_OUT (J3)
VBAT_OUT -> U3 AP63203WU -> 3V3_OUT (J4)
Input connector#
Phoenix MKDS 3/2-5,08 screw terminal (stock KiCad footprint TerminalBlock_Phoenix_MKDS-3-2-5.08). XT60 has no stock footprint; use an XT60 pigtail into the terminal, or add a custom XT60 footprint in a later rev (open decision).
Reverse-polarity ideal diode — documented deviation#
The task spec pinned "source toward battery". That orientation does not block: with the battery reversed, the P-FET body diode (anode = drain, cathode = source) would be forward-biased from the load node into the reversed pack. Implemented the electrically correct orientation instead:
- Drain to battery (VBAT_FUSED), source to load (VBAT_P), gate to GND via R2 100k.
- Correct polarity: body diode (D→S) conducts first, then V_GS = −V_BAT enhances the channel (DMP4015SSS V_GS(th) max −1 V, R_DS(on) spec at −4.5 V/−10 V — fully enhanced at 6.4 V minimum pack voltage).
- Reversed: body diode is reverse-biased and V_GS ≥ 0 keeps the channel off.
- D2 BZT52H-C10 clamps V_SG to 10 V for 3S packs (V_GS abs max ±20 V; the clamp adds margin, ~26 µA through R2 at 12.6 V). Same Q1 + clamp + 100k part set as
../usb-c-pd-trigger/(datasheet-verified there), different orientation for the ideal-diode role.
Surge clamp and bulk#
- D1 SMBJ16A unidirectional TVS (Device:D_TVS symbol per project convention; the schematic notes pin 1 = cathode = VBAT_P for layout). 16 V standoff clears the 12.6 V full-charge 3S voltage; breakdown 17.8–19.7 V.
- C1/C2 2×22 µF 25 V X7R 1210 (MPN TBD-confirm: Murata GRM32ER71E226KE15L) plus C3 100 nF.
Telemetry — INA226 high-side on the main feed#
Everything downstream of the protection (motor rail and both bucks) flows through the shunt, so the INA226 meters the whole robot.
- Shunt R1: 10 mΩ 1 % 3 W 2512 (MPN TBD-confirm: Vishay WSLP2512R0100FEA — verified 10 mΩ/3 W/2512. Note: the Bourns CSS2H-2512R-L100F suggested in the task pin is a 0.1 mΩ part, not 10 mΩ; do not substitute it).
- Range math: INA226 full-scale shunt input ±81.92 mV (TI SBOS547B §5/§7); 81.92 mV / 10 mΩ = 8.19 A range, current LSB 8.19 A/2^15 ≈ 0.25 mA. At the 5 A fuse rating the shunt drops 50 mV and dissipates I²R = 25 × 0.01 = 0.25 W in a 3 W part.
- IN+ to the supply side, IN− and VBUS to the load side (
VBAT_OUT), per the datasheet pin table. VS = 3V3_OUT (2.7–5.5 V rated), 100 nF bypass. - A0 = A1 = GND → I2C address 0x40.
- ALERT (open-drain) → R3 10k pull-up to 3V3_OUT → net
I2C_ALERT→ J6. - I2C out on both J5 Qwiic JST-SH (stock SM04B-SRSS-TB footprint, pin order 1 GND, 2 3V3, 3 SDA, 4 SCL — SparkFun Qwiic standard) and J6 pin header. Deviation: J6 is 1x05, not the pinned 1x04, so the ALERT line has a pin (GND/3V3/SDA/SCL/ALERT); Qwiic cannot carry ALERT.
- R4/R5 4.7k bus pull-ups to 3V3_OUT behind the standard bridged solder jumpers JP1 (SDA) / JP2 (SCL), nets
SDA_PU/SCL_PU— cut when the host bus already has pull-ups.
Bucks — AP63205WU (5 V) and AP63203WU (3.3 V), fed from VBAT_OUT#
Two independent Diodes TSOT-23-6 synchronous bucks, 2 A each, fed from the post-INA226 net so their current is metered. Values from the Diodes AP63200/01/03/05 datasheet DS41326 Rev. 3-2 (fetched 2026-07-14):
| Item | 5 V (U2, AP63205WU-7) | 3.3 V (U3, AP63203WU-7) | Source |
|---|---|---|---|
| f_SW | 1.1 MHz | 1.1 MHz | DS41326 EC table |
| L | 4.7 µH — Coilcraft XAL7030-472MEC (Isat 10.1 A) | 3.3 µH — XAL7030-332MEC (Isat 12.3 A) | Tables 3/2 + Coilcraft Doc 863 |
| CIN | 10 µF (GRM21BR61E106KA73L) + 100 nF | same | Tables 3/2, §11 |
| COUT | 2×22 µF | 2×22 µF | Tables 3/2, §12 |
| CBST | 100 nF BST→SW | same | §13 |
| FB | tied to VOUT (fixed-output version) | same | §9 |
| Ripple ΔI_L at 12.6 V in | 5·(12.6−5)/(12.6·1.1M·4.7µ) = 0.58 A (29 %) | 3.3·(12.6−3.3)/(12.6·1.1M·3.3µ) = 0.67 A (34 %) | Eq. 7 |
Deviations, with reasons:
- The task pin estimated L ≈ 6.8–10 µH; the datasheet's own tables for these 1.1 MHz fixed parts say 4.7 µH (5 V) and 3.9 µH (3.3 V) (6.8–10 µH is the 500 kHz AP63200/01 row). Datasheet values used.
- 3.9 µH has no stock Coilcraft XAL7030 footprint; nearest stock value 3.3 µH keeps ΔI_L at 34 % of 2 A, inside the datasheet's 30–50 % window.
- No power-good pin exists on the WU (TSOT-23-6) parts — verified against the pin table (FB/EN/VIN/GND/SW/BST only) — so each rail gets a green LED (D3 5V_OUT via R12 1k ≈ 3 mA; D4 3V3_OUT via R13 470R ≈ 2.5 mA).
Input-UVLO via the EN dividers#
Each buck has its own divider from VBAT_P to EN (EN abs max 35 V, so a direct divider is fine). Design per DS41326 §3 "Enable", Figure 22 and Eq. 1/Eq. 2: EN threshold 1.18 V rising / 1.10 V falling (the task pin said 1.14 V — the datasheet EC table says otherwise; datasheet used), EN pull-up current 1.5 µA disabled → 5.5 µA enabled.
Model (equivalent to Eq. 1/Eq. 2): V_ON = (1.18/(Rtop∥Rbot) − 1.5 µA)·Rtop, V_OFF = (1.10/(Rtop∥Rbot) − 5.5 µA)·Rtop.
| Position | Rtop | Rbot | Trip ON (rising) | Trip OFF (falling) |
|---|---|---|---|---|
| 2S (JP3/JP4 open, default) | 46.4k | 11.3k | 5.96 V | 5.36 V |
| 3S (JP3/JP4 bridged) | 46.4k | 11.3k ∥ 18k = 6.94k | 9.00 V | 8.20 V |
Check against Eq. 1: R5 = (0.932·5.96 − 5.36)/4.1 µA = 47.5k ≈ 46.4k ✓; Eq. 2: R6 = 1.1·46.4k/(5.36 − 1.1 + 5.5 µA·46.4k) = 11.3k ✓.
Notes:
- The dividers hang off VBAT_P (pre-shunt), so their ~21 µA each is unmetered — negligible against the 0.25 mA current LSB.
- VBAT_OUT (motor rail) stays live below UVLO. Only the 5 V/3.3 V rails shut down; the FPGA fabric owns any motor-rail low-voltage policy.
- Set JP3/JP4 before first power-up with a 3S pack, else the logic rails run a 2S floor (harmless to the electronics, bad for the pack).
Fuse#
F1 5×20 fast fuse in clip holder, stock footprint Fuse:Fuseholder_Clip-5x20mm_Keystone_3517_Inline (2× Keystone 3517 clips per position). Fuse MPN TBD: Littelfuse 0217005.MXP (5 A fast) or equivalent. The fuse protects the wiring, not the loads.
Safety boundary — THIS BOARD IS NOT A BMS#
- No cell-level protection: no per-cell monitoring, balancing, over-charge, or over-discharge cutoff. Hobby packs with balance chargers are assumed.
- Low-voltage cutoff is a host/fabric responsibility using INA226 bus readings and the ALERT limit register. This board only implements the buck input-UVLO floors above, and the raw VBAT_OUT rail ignores even those.
- Reverse protection covers a miswired pack at J1; it does not protect against shorted outputs beyond F1.
- Prototype: bench validation (reverse input, short, thermal, UVLO trips, telemetry accuracy) required before the NOT-RELEASED line clears.
Datasheets used (application values, fetched 2026-07-14)#
- Diodes AP63200/AP63201/AP63203/AP63205, DS41326 Rev. 3-2 — <https://www.diodes.com/datasheet/download/AP63200-AP63201-AP63203-AP63205.pdf> (EN thresholds/currents, Eq. 1/2 UVLO, Tables 2/3 L/CIN/COUT/CBST, fixed-FB connection, no-PG pinout, EN abs max 35 V).
- TI INA226, SBOS547B — <https://www.ti.com/lit/ds/symlink/ina226.pdf> (±81.92 mV full scale, VS 2.7–5.5 V, VBUS 0–36 V, pinout, 0x40 addressing, open-drain ALERT, 100 nF bypass).
- Coilcraft XAL7030, Doc 863 — <https://www.coilcraft.com/getmedia/0d05a05e-d55d-4a0c-911d-46bd73686633/xal7030.pdf> (472: 4.7 µH/Isat 10.1 A/DCR 26 mΩ; 332: 3.3 µH/Isat 12.3 A/DCR 19.5 mΩ; MEC = tin-silver, 7-inch reel).
- Vishay WSLP2512R0100FEA (10 mΩ 1 % 3 W 2512) — distributor-verified (TME/Future/Vishay doc 30122).
- DMP4015SSS — <https://www.diodes.com/datasheet/download/DMP4015SSS.pdf> (same custom symbol block as
../usb-c-pd-trigger/, verified there).
Open decisions#
- XT60 input: no stock KiCad footprint. Rev 0.1 uses the MKDS 3 screw terminal + XT60 pigtail; a custom XT60-PW footprint is a candidate for the layout phase.
- Exact fuse MPN (5 A fast 5×20) and the TBD-confirm MPNs above (22 µF 1210, shunt) need distributor confirmation at order time.
- Whether
robot-power-distwants a second INA226 address (A0 strap) here or does its own per-channel metering (current plan: per-channel there). - E-stop integration (actuator catalog #12) is scoped to
robot-power-dist.
Release checklist#
- [x] ERC 0 errors / 0 warnings with
--severity-all(reports/erc.rpt) - [x] Netlist-membership check: 23 nets / 123 pin memberships exact
- [ ] PCB layout + DRC (high-current paths: J1→F1→Q1→R1→J2 sized for 5 A)
- [ ] Bench validation per safety-boundary section
- [ ] BOM export with confirmed MPNs