Circuit review & bench-test guide
battery-power-input — AruviX robot battery power board
Document purpose#
This document explains the battery-power-input board at component level and turns the design evidence into a practical manual-review and bench-test plan. It is based on the authoritative generator (generate_design.py), the project README, the ERC report, and the manufacturer datasheets cited in section 6.
This board has NEVER been fabricated. The design status is schematic capture only: ERC passes with 0 errors / 0 warnings (--severity-all, reports/erc.rpt) and the netlist membership was verified (23 nets / 123 pin memberships), but no PCB layout exists, no board has been ordered, and there is no first-article bench result of any kind. Every number in this document is a calculated design target to verify, not a proven result. Several MPNs are still marked TBD-confirm in the generator (fuse, 22 µF bulk capacitors, shunt) and must be resolved before ordering.
1. What the board does#
The board is the robot power foundation: a 2S or 3S hobby LiPo pack (6.4–12.6 V) enters on a screw terminal, passes a 5 A fuse, a reverse-polarity ideal-diode P-FET, a 16 V TVS clamp, and a 10 mΩ INA226 current shunt, then fans out to three outputs: a raw metered battery rail (VBAT_OUT, for motor rails / robot-power-dist) and two independent 2 A synchronous bucks — AP63205WU (5 V) and AP63203WU (3.3 V). All battery telemetry (bus voltage, current, power, programmable alert) leaves the board on I2C at address 0x40 via a Qwiic connector and an optional pin header.
It is not a BMS: there is no cell-level monitoring, balancing, charge control, or hard low-voltage cutoff on the raw rail. The buck EN dividers implement a selectable 2S/3S input-UVLO floor for the logic rails only; VBAT_OUT stays live below that floor. Host software owns low-voltage policy via the INA226.
Functional block diagram#
2S/3S LiPo (XT60 pigtail)
│
v
J1 screw terminal ──> F1 5 A fuse ──> Q1 DMP4015SSS ──> VBAT_P
1 BATT+ 2 GND (VBAT_FUSED) ideal-diode P-FET │
D on battery side ├── D1 SMBJ16A TVS
S on load side ├── C1,C2 2x22 µF + C3 100 nF
gate: R2 100k to GND ├── R6/R7(+R8,JP3) UVLO div (5 V)
D2 10 V VSG clamp └── R9/R10(+R11,JP4) UVLO div (3V3)
VBAT_P
│
v
R1 10 mΩ shunt ── U1 INA226 (IN+ = VBAT_P, IN− = VBUS = VBAT_OUT)
│ │ I2C 0x40, ALERT ── R3 10k pull-up
v └──> J5 Qwiic / J6 header (DNP), R4/R5 4.7k + JP1/JP2
VBAT_OUT
├────────────> J2 raw motor rail (LIVE below UVLO)
│
├──> U2 AP63205WU ── L1 4.7 µH ──> 5V_OUT ──> J3 (D3 green LED)
│ C5/C6 in, C9 BST, C7/C8 out, EN from R6/R7 divider
│
└──> U3 AP63203WU ── L2 3.3 µH ──> 3V3_OUT ──> J4 (D4 green LED)
C10/C11 in, C14 BST, C12/C13 out, EN from R9/R10 divider
2. Safety and scope boundaries#
2.1 LiPo pack safety — read before anything else#
Lithium-polymer packs store enough energy to start a fire, and unlike a lab supply they have no current limit: a shorted 3S hobby pack can deliver hundreds of amps until something burns or the pack vents. This board's protection (fuse, reverse FET, TVS) is unverified — treat it as absent until phase-by-phase bench results say otherwise.
- Never use a real pack for first power-up. Use a current-limited bench supply set to the pack voltage (e.g. 8.0 V / 0.2 A initially) wired to J1 in place of the battery. Only attach a real pack after phases A–D pass.
- Never charge a pack through this board. There is no charge path, balancing, or CC/CV control. Charging happens off-board on a balance charger, in a LiPo-safe bag or sand bucket, attended.
- Verify XT60 pigtail polarity before ever attaching a pack. With the pack disconnected, buzz the pigtail: XT60 female (battery side) — the contact next to the bevel/“+” mark must land on J1 pin 1 (BATT+), the square-side contact on J1 pin 2 (GND). Then, pack in hand, measure the pack connector with a DMM and confirm +6.4 to +12.6 V with red on the “+” contact before mating. A reversed pigtail is exactly the fault Q1 exists for — do not use Q1 as a substitute for checking.
- Pack condition checks: no puffing, no dented or wrinkled foil, no cell below 3.0 V (measure per-cell on the balance lead). Reject and safely dispose of damaged packs; do not "test" them on this board.
- Storage and handling: store packs at storage charge (~3.8 V/cell) in a fireproof container, away from the bench. Bring one pack to the bench at a time. Keep a class-D-capable extinguisher or a bucket of dry sand within reach; water does not stop a lithium fire.
- Work discipline with a live pack: remove rings/watches, insulate spare XT60 contacts, never leave a pack attached to the board unattended, and disconnect the pack (not just the load) when changing anything.
- 2S/3S selection matters: set JP3/JP4 for the pack you will use before power-up. Running a 3S pack against the 2S UVLO floor (5.96 V) will not hurt the electronics, but it lets the host discharge the pack far below the safe 3.0 V/cell floor — a pack-killing, potentially fire-adjacent condition on the raw rail either way, since
VBAT_OUThas no UVLO at all.
2.2 General bench boundaries#
- The 5 A fuse F1 protects the wiring, not loads or the pack. A fault below 5 A can cook a component indefinitely without blowing it.
VBAT_OUT(J2) is a direct, fused battery rail: treat it with the same respect as the pack terminals. Short it and you are shorting the pack until F1 opens.- Connect an earth-referenced oscilloscope ground only to board GND. The shunt (R1) and Q1 drops are high-side measurements — use a differential probe or the INA226 itself, never two single-ended grounds.
- Do not back-feed 5V_OUT or 3V3_OUT from external supplies while the battery input is attached; the bucks are synchronous and can behave unexpectedly with reverse energy. The AP632xx does not sink current from the output but this is not a validated bidirectional boundary.
- This is a prototype for a hobby robot platform. Passing these bench tests is not EMC, safety, or environmental certification.
3. Power-control sequence#
- With nothing attached, all nets are dead. Q1's gate is held to GND by R2 (100 kΩ), but with no battery there is no VGS and no channel.
- Battery attaches at J1 (or the current-limited bench supply masquerading as it). Current flows J1 → F1 → Q1. Q1 is oriented as an ideal diode: drain to the battery (VBAT_FUSED), source to the load (VBAT_P), gate to GND. The body diode (anode = drain, cathode = source) conducts first, lifting VBAT_P to about VBAT − 0.7 V.
- As soon as VBAT_P rises, VGS = −VBAT_P appears across gate–source (gate at 0 V via R2, source at VBAT_P). DMP4015SSS VGS(th) is −1.5 to −2.5 V, and RDS(on) is specified at −4.5 V and −10 V, so at 6.4 V minimum pack voltage the channel is fully enhanced and the diode drop collapses to I×RDS(on) (≤15 mΩ at −4.5 V drive). D2 (BZT52H-C10) clamps VSG to about 10 V so a 12.6 V 3S pack cannot approach the ±25 V VGS abs max; roughly 26 µA flows through D2/R2 at 12.6 V.
- If the battery is reversed, the body diode is reverse-biased and VGS ≥ 0 keeps the channel off: no current flows, nothing downstream sees the negative voltage. This is the entire reverse-protection story — verify Q1's orientation before trusting it (section 9, phase A).
- VBAT_P charges C1/C2/C3; D1 (SMBJ16A, 16 V standoff) sits across the rail and only conducts on surges above its 17.8 V minimum breakdown.
- VBAT_P feeds the two UVLO dividers (R6/R7 and R9/R10, pre-shunt, so their ~21 µA each is unmetered) and the shunt R1. Everything downstream of R1 — J2 and both bucks — is metered by U1.
- Each buck enables when its EN divider crosses 1.18 V (rising): 5.96 V battery threshold with JP3/JP4 open (2S), 9.00 V bridged (3S). The AP632xx runs a fixed internal 4 ms soft-start, then regulates at 1.1 MHz. Falling thresholds: 5.36 V (2S) / 8.20 V (3S).
- D3 (green, via R12 1 kΩ) lights on 5V_OUT; D4 (green, via R13 470 Ω) lights on 3V3_OUT. The AP632xx WU parts have no power-good pin — the LEDs indicate voltage presence only, not regulation accuracy.
- U1 (INA226) powers from 3V3_OUT, so telemetry is only alive once the 3.3 V buck is up — below the buck UVLO the board is unmetered even though
VBAT_OUTis live. Host software must treat missing telemetry as an alarm, not as zero current.
4. Interfaces: connectors, test points, jumpers#
The schematic defines no dedicated test points; bench probing uses the connector screw terminals and the passives named below. Adding TPs on VBAT_FUSED, VBAT_P, EN_5V, EN_3V3, SW_5V, and SW_3V3 is a recommended layout action.
| Reference | Pins/signals | Intended use |
|---|---|---|
| J1 | 1 BATT+, 2 GND (Phoenix MKDS 3, 5.08 mm) | Battery input via XT60 pigtail, 6.4–12.6 V, ≤5 A |
| J2 | 1 VBAT_OUT, 2 GND (MKDS 3) | Raw metered battery out (motor rail). Live below UVLO |
| J3 | 1 5V_OUT, 2 GND (MKDS 1,5) | 5 V / 2 A output |
| J4 | 1 3V3_OUT, 2 GND (MKDS 1,5) | 3.3 V / 2 A output |
| J5 | 1 GND, 2 3V3, 3 SDA, 4 SCL (JST-SH, Qwiic order) | I2C telemetry to host |
| J6 | 1 GND, 2 3V3, 3 SDA, 4 SCL, 5 ALERT (1x05 header, DNP) | Development telemetry + ALERT |
| Jumper | Default | Meaning |
|---|---|---|
| JP1 | bridged | SDA 4.7 kΩ pull-up (R4) in circuit; cut if host bus has pull-ups |
| JP2 | bridged | SCL 4.7 kΩ pull-up (R5) in circuit; cut if host bus has pull-ups |
| JP3 | open = 2S | Bridge for 3S: parallels R8 (18 k) into the 5 V buck UVLO divider |
| JP4 | open = 2S | Bridge for 3S: parallels R11 (18 k) into the 3.3 V buck UVLO divider |
Useful probe nodes: J1 pin 1 (BATT_P), the F1 clip on the Q1 side (VBAT_FUSED), either C1/C2/C3 pad (VBAT_P), either side of R1 (VBAT_P / VBAT_OUT — this pair is the shunt-drop measurement), J2 pin 1 (VBAT_OUT), R7/R10 top (EN_5V / EN_3V3), L1/L2 pads (SW and output nodes).
5. Component-by-component review#
5.1 Input protection chain#
| Ref. | Part / value | Function and why needed | If absent/open | If wrong value / misassembled |
|---|---|---|---|---|
| J1 | Phoenix MKDS 3/2-5,08 screw terminal | Battery input; rated well above 5 A; XT60 pigtail lands here (no stock XT60 footprint) | No power | Swapped wiring = reverse-polarity event (Q1 must save the board); loose screw at 5 A heats and drops voltage |
| F1 | 5 A fast 5×20 fuse in Keystone 3517 clips (MPN TBD: Littelfuse 0217005.MXP) | Wiring protection: opens the pack on a downstream hard short | No power (open fuse) | Slow-blow or oversized fuse lets a fault cook wiring/traces; undersized nuisance-trips at motor stall currents |
| Q1 | Diodes DMP4015SSS-13, −40 V P-FET, SO-8 (pins 1–3 S, 4 G, 5–8 D) | Reverse-polarity ideal diode: drain to battery, source to load, gate to GND. Correct polarity: body diode conducts, then channel enhances (≤15 mΩ). Reverse: blocks | No power at all (VBAT_P never rises) | Installed backwards (D/S swapped): reverse protection is gone — the body diode conducts a reversed pack into the board. Rotated 180° in the SO-8: gate lands on a drain pin, part never enhances, body-diode drop (~0.7 V, 3.5 W at 5 A) overheats it |
| D2 | Nexperia BZT52H-C10 zener, SOD-123F | Clamps Q1 VSG to ~10 V on 3S packs (VGS abs max ±25 V — clamp adds margin; the working divider is R2) | Q1 sees full −12.6 V VGS — within rating, but no transient margin | Shorted D2 ties gate to source: Q1 never enhances, runs on body diode and overheats under load. Reversed: clamps at ~0.9 V forward, same never-enhances symptom |
| R2 | 100 kΩ | Returns Q1 gate to GND so VGS = −VBAT develops; sets ~26 µA zener bias at 12.6 V | Gate floats: Q1 state undefined, may sit on body diode (hot at load) | Much lower value wastes battery (e.g. 1 k = 12.6 mA); open behaves as absent |
| D1 | Littelfuse SMBJ16A TVS, 600 W, SMB | Clamps positive surges on VBAT_P (motor regen, hot-plug inductance). 16 V standoff clears 12.6 V full-charge 3S; VBR 17.8–19.7 V; VC(max) 26 V at 23.1 A | Downstream sees unclamped transients (AP632xx VIN abs max 35 V DC gives headroom, but hot-plug ringing is unbounded) | Reversed: conducts at ~0.7 V forward — board clamps its own battery, F1 blows or D1 burns. Lower-voltage variant (e.g. SMBJ12A) conducts on a healthy 3S pack |
| C1, C2 | 22 µF 25 V X7R 1210 (MPN TBD-confirm: GRM32ER71E226KE15L) | Bulk reservoir for buck input pulses and motor-rail steps; absorbs hot-plug inductive energy with D1 | More rail bounce/ringing at hot-plug and load steps; buck input ripple worsens | 6.3/10 V-rated substitute risks failure at 12.6 V; Y5V/low-voltage parts lose most capacitance at bias |
| C3 | 100 nF 50 V X7R | High-frequency decoupling of the battery rail | Slightly worse HF noise; benign alone | Shorted = battery-rail short (F1 opens) |
5.2 Telemetry (INA226 and I2C)#
| Ref. | Part / value | Function and why needed | If absent/open | If wrong value / misassembled |
|---|---|---|---|---|
| R1 | 10 mΩ 1 % 3 W 2512 (MPN TBD-confirm: Vishay WSLP2512R0100FEA) | Current shunt: ±81.92 mV FS / 10 mΩ = ±8.19 A range; 50 mV drop and 0.25 W at the 5 A fuse rating (3 W part → healthy margin) | Board is dead downstream — R1 is in the main power path (J2 and both bucks lose power) | Wrong value silently scales every current/power reading (e.g. 100 mΩ part reads 10× and drops 0.5 V at 5 A; the pinned Bourns CSS2H-2512R-L100F is 0.1 mΩ — reads 1/100×, do not substitute). Poor solder on a 2512 at 5 A is a hot spot |
| U1 | TI INA226AIDGSR, VSSOP-10 | High-side monitor: 16-bit shunt+bus ADC, current/power engine, ALERT. IN+ = VBAT_P, IN− and VBUS = VBAT_OUT; VS = 3V3_OUT; A0 = A1 = GND → 0x40 | No telemetry; power still flows (sense pins are parallel taps) | IN+/IN− swapped: current reads negative. VBUS left on the supply side would read pre-shunt voltage (design reads post-shunt). Wrong address strap moves the device off 0x40 |
| C4 | 100 nF 16 V X7R | U1 VS decoupling (datasheet-required) | ADC noise/reset sensitivity | Shorted = 3V3 rail short |
| R3 | 10 kΩ | ALERT open-drain pull-up to 3V3_OUT | ALERT floats — host reads garbage/never sees alerts | Too small loads the pin (10 mA IOUT abs max is far away at 0.33 mA; fine) |
| R4, R5 | 4.7 kΩ | SDA/SCL pull-ups to 3V3_OUT, behind JP1/JP2 | With jumpers cut too: bus floats, no ACKs, telemetry dead | Doubled-up with host pull-ups: combined <2 k still legal at 400 kHz but check VOL margins |
| JP1, JP2 | Solder jumpers, bridged | Remove board pull-ups when host provides them | (cut) see R4/R5 | — |
| J5 | JST SM04B-SRSS-TB (Qwiic) | Host telemetry; 1 GND, 2 3V3, 3 SDA, 4 SCL — SparkFun Qwiic order | No telemetry to host | A non-Qwiic-pinned cable puts 3V3 on SDA — check before plugging a new cable |
| J6 | 1×05 header, DNP | Dev telemetry + ALERT (Qwiic cannot carry ALERT) | ALERT unusable off-board | Populate only for development |
5.3 5 V buck (AP63205WU)#
| Ref. | Part / value | Function and why needed | If absent/open | If wrong value / misassembled |
|---|---|---|---|---|
| U2 | Diodes AP63205WU-7, TSOT-23-6 | 3.8–32 V in, 5 V / 2 A synchronous buck, 1.1 MHz, 22 µA IQ, internal compensation, 4 ms soft-start, hiccup OCP (HS peak limit 2.5–3.1 A), 150 °C thermal shutdown | No 5 V rail | AP63200/01 (adjustable, 500 kHz) in the same package regulates to 0.8 V at FB — a wrong-variant board puts ~0.8 V on 5V_OUT. Rotated part shorts VIN to SW |
| C5 | 10 µF 25 V X5R 0805 | U2 input capacitor (datasheet Table 3) | Input ripple current returns through C1/C2 far away — SW ringing, possible misbehavior; never run the buck without it | Low-voltage part derates hard at 12.6 V |
| C6 | 100 nF 50 V X7R | U2 input HF decoupling | Worse input spikes/EMI | Shorted = VBAT_OUT short |
| C9 | 100 nF 50 V X7R | Bootstrap BST→SW (datasheet §13): supplies the high-side N-FET gate drive | High-side switch cannot turn on: no or erratic 5 V output | Wrong node (BST→GND) breaks switching similarly |
| L1 | Coilcraft XAL7030-472MEC, 4.7 µH, Isat 10.1 A, DCR 26 mΩ | Energy-transfer inductor (datasheet Table 3 value). ΔI_L at 12.6 V in = 5·(12.6−5)/(12.6·1.1 MHz·4.7 µH) = 0.58 A (29 % of 2 A); peak at 2 A load = 2.29 A vs 10.1 A Isat | No output (open power path) | Too-small L raises ripple/peak current; saturating inductor (undersized Isat) causes current-limit trips and heat. 10.1 A Isat is deliberately generous |
| C7, C8 | 22 µF 25 V X7R 1210 | Output capacitors, 2×22 µF per datasheet Table 3; set ripple and load-step droop with the internal compensation | Large ripple, droop, possible loop instability — the internal compensation assumes ~2×22 µF | Big deviations (e.g. one 4.7 µF) risk regulation quality; verify with load-step test |
| R6 | 46.4 kΩ 1 % | UVLO divider top, VBAT_P→EN_5V (EN abs max 35 V allows direct divider) | EN floats low through R7 → buck never starts | Wrong value shifts both thresholds (math in section 7) |
| R7 | 11.3 kΩ 1 % | UVLO divider bottom: 2S trip ON 5.96 V / OFF 5.36 V | EN pulled to VBAT_P → buck runs to its internal 3.5 V POR — defeats pack protection floor | Wrong value shifts thresholds; verify by sweep (section 9E) |
| JP3 | Solder jumper, open | Bridge for 3S: parallels R8 into the divider → ON 9.00 V / OFF 8.20 V | (open = 2S default) | Bridged with a 2S pack: buck refuses to start below 9.00 V — looks like a dead 5 V rail |
| R8 | 18 kΩ 1 % | 3S UVLO parallel resistor (behind JP3) | 3S position falls back to 2S thresholds | Wrong value shifts 3S thresholds only |
| R12 | 1 kΩ | 5 V LED resistor (~3 mA) | LED dark | Very low value wastes current |
| D3 | Kingbright APT1608SGC green 0603 | 5 V presence indicator (no PG pin on AP632xx) | No indication | Reversed = dark; indicates presence only, not accuracy |
| J3 | Phoenix MKDS 1,5 | 5 V output terminal | — | Loose screw heats at 2 A |
5.4 3.3 V buck (AP63203WU)#
| Ref. | Part / value | Function and why needed | If absent/open | If wrong value / misassembled |
|---|---|---|---|---|
| U3 | Diodes AP63203WU-7, TSOT-23-6 | Same silicon family as U2 with 3.3 V fixed output; feeds logic and U1's VS | No 3.3 V rail and no telemetry | Variant/orientation risks identical to U2 |
| C10, C11 | 10 µF 25 V X5R + 100 nF | U3 input capacitors | As C5/C6 | As C5/C6 |
| C14 | 100 nF 50 V X7R | Bootstrap BST→SW | High-side drive lost, no 3.3 V | As C9 |
| L2 | Coilcraft XAL7030-332MEC, 3.3 µH, Isat 12.3 A, DCR 19.5 mΩ | Datasheet Table 2 says 3.9 µH; 3.3 µH is the nearest stock XAL7030. ΔI_L at 12.6 V = 3.3·(12.6−3.3)/(12.6·1.1 MHz·3.3 µH) = 0.67 A (34 %, inside the 30–50 % window); peak 2.34 A vs 12.3 A Isat | No output | As L1 |
| C12, C13 | 22 µF 25 V X7R 1210 | Output capacitors (2×22 µF, Table 2) | As C7/C8 | As C7/C8 |
| R9 / R10 | 46.4 kΩ / 11.3 kΩ 1 % | UVLO divider, identical math to R6/R7 (2S: ON 5.96 V / OFF 5.36 V) | As R6/R7 — note EN pulled high defeats the floor | As R6/R7 |
| JP4 / R11 | open / 18 kΩ 1 % | 3S select: ON 9.00 V / OFF 8.20 V bridged | As JP3/R8 | As JP3/R8 |
| R13 | 470 Ω | 3.3 V LED resistor (~2.5 mA) | LED dark | — |
| D4 | Kingbright APT1608SGC green 0603 | 3.3 V presence indicator | No indication | Reversed = dark |
| J4 | Phoenix MKDS 1,5 | 3.3 V output terminal | — | Loose screw heats at 2 A |
6. Datasheet summary and design interpretation#
| Device | Key manufacturer facts (verified against the cited document) | Board-specific interpretation |
|---|---|---|
| AP63203WU / AP63205WU (DS41326 Rev. 3-2 datasheet, AP63205 product page) | VIN 3.8–32 V operating, 35 V DC abs max (40 V/400 ms); EN abs max 35 V; fsw 1.1 MHz ±6 % FSS; IQ 22 µA (PFM at light load); EN precision threshold 1.18 V rising / 1.10 V falling, pull-up 1.5 µA off → 5.5 µA on (4 µA hysteresis source); UVLO Eq.1 R5=(0.932·VON−VOFF)/4.1 µA, Eq.2 R6=1.1·R5/(VOFF−1.1+5.5 µA·R5); internal 4 ms soft-start; HS peak current limit 2.5/2.8/3.1 A min/typ/max, hiccup after 2 ms at limit, ~16 ms off; internal VIN POR 3.3–3.7 V rising; thermal shutdown +160 °C typ; VOUT accuracy ±1 % (4.95–5.05 V / 3.27–3.33 V in CCM); Tables 2/3: L = 3.9 µH (3.3 V) / 4.7 µH (5 V), CIN 10 µF, COUT 2×22 µF, CBST 100 nF; TSOT-26 θJA 89 °C/W | 12.6 V max input sits far inside 32 V. The EN divider math in section 7 uses the datasheet thresholds, not the task-pin estimate. Fixed-output parts tie FB directly to VOUT — there is no external divider to get wrong, but a wrong variant (AP63200/01) would regulate FB to 0.8 V. Hiccup behavior means an overload shows as a repeating ~16 ms burst pattern, not a latched shutdown |
| INA226 (SBOS547B datasheet, product page) | VS abs max 6 V, operating 2.7–5.5 V; IN± common-mode −0.3 to +40 V abs max (0–36 V operating); shunt FS ±81.92 mV, LSB 2.5 µV; bus 0–40.96 V FS, LSB 1.25 mV, 36 V max applied; CAL = 0.00512/(Current_LSB·R_shunt); Power LSB = 25 × Current_LSB; Current = ShuntReg×CalReg/2048; config reg 00h default 0x4127 (1 avg, 1.1 ms/1.1 ms, continuous shunt+bus); registers: 01h shunt, 02h bus, 03h power, 04h current, 05h cal, 06h mask/enable, 07h alert limit, FEh mfr ID 0x5449, FFh die ID 0x2260; A0=A1=GND → 7-bit address 0x40; ALERT open-drain, active-low default, latch/polarity via 06h bits LEN/APOL; I2C to 2.94 MHz | With the 10 mΩ shunt the natural range is ±8.19 A and Current_LSB = 0.25 mA (section 7 works the CAL value to 0x0800). VBUS is wired to the load side (VBAT_OUT), so bus readings are post-shunt — at 5 A they read 50 mV below the pack. VS comes from 3V3_OUT: telemetry dies below buck UVLO while the raw rail stays live |
| DMP4015SSS (datasheet DS35416 Rev. 12-2, product page) | −40 V VDS, ±25 V VGS abs max; VGS(th) −1.5/−2/−2.5 V min/typ/max; RDS(on) 7 typ/11 max mΩ at −10 V, 9/15 mΩ at −4.5 V; body diode VSD −0.7 typ/−1.0 max V at −1 A; ID −8.8 to −10.1 A at 25 °C (2 oz Cu); SO-8 pins 1–3 source, 4 gate, 5–8 drain; θJA 70 °C/W (2 oz + vias) | At 6.4 V minimum pack the −6.4 V drive lands between the two RDS(on) test points → expect ≤15 mΩ, i.e. ≤75 mV drop and ≤0.38 W at the 5 A fuse limit. D2 clamps VSG well below the ±25 V rating. Note the README/generator quote ±20 V for VGS max — the datasheet says ±25 V; either way 10 V clamped is safe |
| SMBJ16A (SMBJ series datasheet, product page) | 600 W 10/1000 µs unidirectional TVS; VR (standoff) 16 V; VBR 17.8–19.7 V at 1 mA; VC max 26.0 V at IPP 23.1 A; SMB (DO-214AA) | Standoff clears 12.6 V full-charge 3S with margin; leakage is negligible in normal operation. Worst-case 26 V clamp is inside the AP632xx 35 V DC abs max and the INA226 40 V common-mode abs max — unlike the sister PD board, there is no clamp-vs-abs-max gap here, but this is a calculated claim, not a surge-tested one |
| BZT52H-C10 (BZT52H series datasheet) | SOD-123F zener, C10 = 10 V nominal (±5 % class), Ptot 375–830 mW mounting-dependent, IF max 250 mA, VF ≤0.9 V at 10 mA; pin 1 = cathode (marking bar) | Dissipation is microwatts (~26 µA bias). Cathode must face Q1's source (VBAT_P); a reversed part forward-conducts and pins VSG near 0.9 V — Q1 never enhances |
| XAL7030 inductors (Coilcraft Doc 863) | 472: 4.7 µH, Isat 10.1 A, DCR 26 mΩ; 332: 3.3 µH, Isat 12.3 A, DCR 19.5 mΩ; shielded composite | Saturation margins are >4× the calculated 2.3 A peaks; DCR loss ≤0.1 W at 2 A |
Check the latest datasheet revision and exact orderable suffix before procurement; the Diodes and Littelfuse links above resolve from a browser but reject some automated fetchers.
7. Expected values before bench testing#
All values are calculated from generate_design.py values and the cited datasheets. None has ever been measured on this design.
7.1 DC operating points#
| Quantity | Design target / calculated range | What to measure |
|---|---|---|
| Input range | 6.4–12.6 V (2S–3S) | J1 with bench supply |
| Q1 drop, enhanced | ≤15 mΩ → ≤30 mV at 2 A, ≤75 mV at 5 A | VBAT_FUSED→VBAT_P differential |
| Q1 drop, body diode only (fault indicator) | ~0.5–1.0 V | Same nodes — this reading means Q1 is not enhancing |
| Shunt drop | 10 mV/A: 20 mV at 2 A, 50 mV at 5 A | Across R1 (differential/DMM) |
| 5V_OUT | 4.95–5.05 V (±1 %, CCM) | J3, calibrated DMM |
| 3V3_OUT | 3.27–3.33 V | J4 |
| Buck IQ contribution | ~22 µA each, no load, PFM | Input current at no load (expect total idle well under 1 mA incl. dividers and INA226's 330 µA) |
| LED currents | D3 ≈ 3 mA, D4 ≈ 2.5 mA | Implied in idle current |
7.2 UVLO thresholds — the math to verify on the bench#
Datasheet model (DS41326 Fig. 22 / Eq. 1–2, EN rising 1.18 V / falling 1.10 V, pull-up 1.5 µA off → 5.5 µA on), equivalent form:
V_ON = (1.18 / (Rtop ∥ Rbot) − 1.5 µA) · Rtop
V_OFF = (1.10 / (Rtop ∥ Rbot) − 5.5 µA) · Rtop
2S (JP3/JP4 open): Rtop = 46.4 k, Rbot = 11.3 k, Rtop∥Rbot = 9.087 k
- V_ON = (129.9 µA − 1.5 µA) × 46.4 k = 5.96 V rising
- V_OFF = (121.1 µA − 5.5 µA) × 46.4 k = 5.36 V falling
3S (JP3/JP4 bridged): Rbot' = 11.3 k ∥ 18 k = 6.942 k, Rtop∥Rbot' = 6.039 k
- V_ON = (195.4 µA − 1.5 µA) × 46.4 k = 9.00 V rising
- V_OFF = (182.2 µA − 5.5 µA) × 46.4 k = 8.20 V falling
Tolerance note: 1 % resistors plus the 1.15–1.23 V EN threshold spread give roughly ±4 % on these numbers — expect ~5.7–6.2 V (2S ON) and ~8.6–9.4 V (3S ON). Log the exact values per board.
7.3 Buck ripple and dynamics#
| Quantity | Target | Basis |
|---|---|---|
| Inductor ripple ΔI_L (12.6 V in) | 0.58 A (5 V), 0.67 A (3.3 V) | DS41326 Eq. 7 |
| Output ripple, calculated core | ~3–4 mV pk-pk (ΔI_L/(8·fsw·C) with one 22 µF of effective derated C) | First-principles; C derating unknown until layout/parts final |
| Output ripple, accept/investigate | < 20 mV pk-pk accept; > 50 mV investigate | Engineering margin over the calculation; datasheet Fig. 16 shows clean ripple at 20 mV/div |
| Switching frequency | 1.1 MHz ±6 % jitter (FSS) in CCM; bursty PFM at light load | EC table |
| Soft-start | ~4 ms VOUT ramp after EN | EC table |
| Load-step deviation (0.2→2 A) | Record baseline; expect recovery within ~hundreds of µs (no datasheet number) | Fig. 17 qualitative |
| Overload behavior | Peak limit 2.5–3.1 A, then hiccup: ~2 ms at limit, ~16 ms off, repeat | §6 OCP |
7.4 INA226 configuration and calibration — worked register math#
Shunt R1 = 10 mΩ. Maximum expected current: 8.19 A (full shunt scale; the fuse limits to 5 A continuous).
Current_LSB = 8.19 A / 2^15 = 0.25 mA/bit (Eq. 2, rounded value)
CAL = 0.00512 / (Current_LSB × R_shunt)
= 0.00512 / (0.25e-3 × 0.010)
= 2048 = 0x0800 (Eq. 1)
Power_LSB = 25 × Current_LSB = 6.25 mW/bit
Register program for bring-up (7-bit address 0x40; write = pointer byte then two data bytes MSB first):
| Step | Register | Write | Meaning |
|---|---|---|---|
| 1 | 0x00 Config | 0x8000 then read back 0x4127 | Software reset; confirm default (1 avg, 1.1 ms shunt and bus CT, continuous shunt+bus) |
| 2 | 0x05 Calibration | 0x0800 | CAL = 2048 per the math above |
| 3 | 0x00 Config (optional) | 0x4527 | AVG = 16 for quieter bench readings (still continuous mode) |
| 4 | 0x06 Mask/Enable (optional) | 0x1000 | BUL: alert when bus voltage drops below the limit |
| 5 | 0x07 Alert limit (optional) | 0x1540 | 6.8 V / 1.25 mV = 5440 → 2S low-voltage alert example |
Identity sanity checks before trusting data: register 0xFE reads 0x5449 ("TI"), 0xFF reads 0x2260. Until CAL is written, current (0x04) and power (0x03) read zero by design — bus and shunt registers work uncalibrated.
Worked example to cross-check on the bench (2.00 A load, 11.1 V pack):
Shunt reg 0x01: 20 mV / 2.5 µV = 8000 = 0x1F40 (sign bit clear)
Bus reg 0x02: 11.08 V / 1.25 mV ≈ 8864 ≈ 0x22A0 (reads post-shunt: pack − 20 mV)
Current 0x04: 8000 × 2048 / 2048 = 8000 → 8000 × 0.25 mA = 2.000 A
Power 0x03: 8000 × 8864 / 20000 = 3546 → 3546 × 6.25 mW ≈ 22.2 W
Handy identity for this CAL choice: CAL = 2048 makes the current register numerically equal the shunt-voltage register, so current[A] = shunt_reg × 0.25 mA — any divergence between the two registers indicates a readback or math bug, not the analog front end. Cross-check current against a series DMM (expect agreement within ~1 % + offset; shunt tolerance 1 % dominates).
8. Manual schematic and assembly review checklist#
Schematic/layout review (before ordering):
- Confirm Q1 net assignment matches the ideal-diode orientation: pins 5–8 (drain) on VBAT_FUSED, pins 1–3 (source) on VBAT_P, pin 4 (gate) to D2/R2. The generator's SO-8 pin table must match the datasheet (1–3 S, 4 G, 5–8 D — verified against DS35416).
- Confirm D1 cathode (pin 1, marking bar) lands on VBAT_P, anode on GND.
- Confirm D2 cathode on VBAT_P (Q1 source), anode on Q1_GATE.
- Confirm INA226 IN+ on VBAT_P, IN− and VBUS on VBAT_OUT, A0 = A1 = GND.
- Confirm J5 pin order is Qwiic (GND, 3V3, SDA, SCL) against the JST-SH footprint pin 1 marker.
- Layout (when it exists): J1→F1→Q1→R1→J2 path sized for 5 A; kelvin connections from R1 pads to the INA226 inputs; buck hot loops (CIN–VIN–SW–GND) minimized; C5/C10 tight to U2/U3 VIN pins.
- Resolve TBD-confirm MPNs (F1 fuse, C1/C2/C7/C8/C12/C13 22 µF, R1 shunt) before BOM release.
Assembly inspection (per board, before any power):
- U2 is AP63205WU-7 and U3 is AP63203WU-7 — same package, different marking; a swap puts 5 V on the 3.3 V terminal. Verify markings under magnification.
- Q1 pin-1 dot orientation; D1/D2/D3/D4 polarity (diode cathode bars, LED cathode marks).
- R1 is the 10 mΩ 2512 (metal-strip parts often marked R010); verify it is not a 0.1 mΩ or 100 mΩ lookalike.
- JP1/JP2 bridged, JP3/JP4 as intended for the first pack (open = 2S).
- Fuse clips seated, correct 5 A fast fuse installed.
- Solder quality on the 2512 shunt, the 1210 capacitors, and both TSOT-26 parts; no bridges on the 0.5 mm-pitch VSSOP-10 (U1).
9. Ordered bench-test procedure#
Stop at the first abnormal result. Record everything in the section 11 template. Phases A–F use a current-limited bench supply on J1, never a battery. A real pack appears only in phase G.
A. Unpowered inspection, resistance, and FET-orientation checks#
- Complete the section 8 assembly checklist under magnification.
- DMM resistance, both polarities: J1+ to GND, VBAT_P to GND, VBAT_OUT to GND, 5V_OUT to GND, 3V3_OUT to GND. Expect no hard shorts (capacitor charging ramps are normal; the UVLO dividers read ~57.7 k from VBAT_P to GND through each divider, ~29 k combined with both, in parallel with whatever the DMM sees of the buck inputs).
- Q1 orientation verification (DMM diode mode, fuse installed):
- Red lead on J1 pin 1 (battery side → Q1 drain), black on VBAT_P (Q1 source): expect a body-diode reading of roughly 0.4–0.7 V (spec VSD 0.7 typ / 1.0 max at 1 A; DMM test currents read lower).
- Reversed leads (red on VBAT_P, black on J1 pin 1): expect OL / no conduction (channel off, body diode reverse-biased).
- Gate to GND: ~100 kΩ (R2).
- If both directions conduct or the forward direction reads near 0 Ω: suspect a shorted or backwards Q1 — do not power. If the battery→load direction reads OL: Q1 is backwards (body diode pointing at the battery); a board built this way has no reverse protection and additionally never powers up normally. A shorted D2 mimics a "never enhances" Q1 later — it cannot be caught in this static test, but shows up in step B4.
- Verify JP3/JP4 state matches the intended pack (open = 2S for first bring-up).
- I2C bus: SDA and SCL each read ~4.7 k to 3V3_OUT (JP1/JP2 bridged), no shorts to GND.
B. First power-up — current-limited supply masquerading as the battery#
- Bench supply: 8.0 V, current limit 0.2 A, output off. Wire to J1 observing polarity. No loads on J2/J3/J4. DMM on 5V_OUT.
- Enable the supply. Expect: input current settles well under 10 mA; both green LEDs light; no part warms.
- Measure: 5V_OUT 4.95–5.05 V, 3V3_OUT 3.27–3.33 V, VBAT_P ≈ supply minus a few mV, VBAT_OUT ≈ VBAT_P (µA-level shunt drop).
- Q1 enhancement check: measure J1+ → VBAT_P differential. Expect ≤ a few mV at this current. A reading near 0.5–0.7 V means Q1 is running on its body diode (gate circuit fault: R2 open, D2 shorted or reversed, or gate landed on the wrong pin) — stop and fix before any load testing, or Q1 will burn at amp-level currents.
- Scope SW_5V (L1 input pad): expect clean 1.1 MHz-region switching or PFM bursts at this light load; no continuous ringing after edges.
- Reverse-input tolerance check (supply, not pack): disable output, swap J1 wiring, set limit 0.5 A, enable briefly. Expect ~0 mA input current and 0 V on VBAT_P/5V/3V3. Restore correct wiring. (This proves the reverse-protection story at low energy; never perform this experiment with a battery.)
C. Telemetry bring-up (INA226)#
- Connect the I2C host (3.3 V logic) to J5. Scan the bus: the device must ACK at 0x40 only.
- Read 0xFE = 0x5449 and 0xFF = 0x2260; read 0x00 = 0x4127 after reset.
- Write CAL = 0x0800 to 0x05 (section 7.4). Read back.
- No-load sanity: bus register ≈ supply voltage (LSB 1.25 mV); shunt and current registers near zero (idle draw is below ~2 LSB of current).
- Apply a known load on J2 (e.g. power resistor drawing ~1 A, supply limit raised to 1.5 A). Verify shunt reg ≈ current reg numerically (CAL = 2048 identity), current ≈ series-DMM reading within ~1–2 %, bus ≈ VBAT_OUT, power ≈ bus × current.
- Alert check: write 0x06 = 0x1000 (BUL), 0x07 = 0x1540 (6.8 V). Lower the supply to 6.5 V: ALERT (J6 pin 5, populate J6 or probe R3) must go low; raise to 8 V: releases (transparent mode). Restore 0x06 = 0x0000.
D. Buck load, ripple, and efficiency#
Supply at 8.0 V (later repeat key points at 6.4, 7.4, 11.1, 12.6 V), limit 3 A. Electronic load on J3, then J4. Short, thick leads; sense at the terminal.
- Load sweep (line/load regulation): at each input voltage, step the 5 V load through 0 / 0.1 / 0.5 / 1.0 / 1.5 / 2.0 A. Record J3 voltage (target: within 4.95–5.05 V in CCM plus small load regulation — record the actual curve; datasheet Fig. 6 shows ~1 % droop 0→2 A), input current, and U2/L1 temperature. Repeat for the 3.3 V rail at J4 (3.27–3.33 V window).
- Output ripple (probe technique matters): 20 MHz bandwidth limit, tip-and-barrel (probe ground spring on the output-capacitor pad — no ground clip lead, which adds tens of mV of pickup at 1.1 MHz). Measure at C7/C8 (and C12/C13) at 2 A, 12.6 V in. Target < 20 mV pk-pk; calculated core value is only ~3–4 mV, so a 50+ mV reading means probe pickup, capacitor derating, or layout trouble — investigate before accepting.
- Load step: 0.2 A → 2 A → 0.2 A steps (load slew ~1 A/µs), capture VOUT deviation and recovery on each rail. No datasheet limit exists; record the baseline (expect recovery within hundreds of µs, deviation well under ±150 mV). Watch for ringing that suggests marginal COUT.
- Both rails loaded simultaneously (2 A + 2 A, input ≥7 V, limit raised accordingly): re-verify regulation and thermals. Total input power at 12.6 V should be roughly (10 W + 6.6 W)/η with η per datasheet Fig. 4 (~90 % region) — log efficiency.
- Overload/hiccup: slowly raise one rail's load past 2 A. Expect cycle-by-cycle limiting somewhere in 2.5–3.1 A peak, then hiccup (repeating ~16 ms off bursts) on a hard short. Confirm recovery when the short is removed and that the other rail rides through (they share VBAT_OUT — record any coupling). Keep shorts brief on a hot board.
- Thermal soak: 60 min at 2 A + 2 A, 12.6 V in, worst intended ambient. Log U2, U3, L1, L2, R1, Q1, F1 temperatures. TSOT-26 θJA is 89 °C/W — at roughly 0.5–0.7 W loss each buck may run 45–60 °C above ambient; investigate anything trending past ~110 °C junction estimate.
E. UVLO threshold verification — both jumper positions#
Do this with the bench supply (no pack) and light loads (~0.1 A per rail) so the thresholds aren't masked by droop.
- 2S position (JP3/JP4 open):
- Sweep down slowly (≤0.1 V/s) from 8.0 V. Record where each rail drops out: expect 5.36 V falling (window ~5.1–5.6 V with tolerances). Note both rails independently — R6/R7 and R9/R10 are separate dividers and may differ slightly.
- Sweep up from 4.5 V. Record turn-on: expect 5.96 V rising (~5.7–6.2 V). Confirm hysteresis ≈ 0.6 V and that startup is clean (single 4 ms soft-start ramp, no chatter near threshold).
- 3S position (bridge JP3 and JP4 with solder):
- Sweep down from 11.0 V: rails drop at 8.20 V falling (~7.9–8.5 V).
- Sweep up from 7.0 V: rails start at 9.00 V rising (~8.6–9.4 V).
- Verify
VBAT_OUT(J2) tracks the supply throughout — the raw rail must NOT turn off at UVLO; only 5 V/3.3 V do.
- Restore the jumpers to the configuration matching the first real pack and re-verify once.
- Note for the record: below UVLO the INA226 loses its 3.3 V supply — confirm the host sees the bus NACK (0x40 disappears) rather than a zero-current reading. This is the "unmetered live motor rail" state the README warns about.
F. Input transient and DC robustness (still supply-fed)#
- Hot-plug emulation: with 30–50 cm of typical silicone battery wire between supply and J1, snap the connection at 12.6 V and capture VBAT_P with single-shot trigger. Ring peak must stay below ~17 V (D1 breakdown floor); if D1 conducts on every plug, add bulk or revisit the clamp choice.
- DC line sweep 6.4 → 12.6 V at 1 A + 1 A load: no dropouts, no LED flicker, monotonic INA226 bus readings.
- Fuse path check: measure the total drop J1+ → J2+ at 5 A briefly (fuse + Q1 + shunt + copper). Expect on the order of 100–200 mV; the fuse element itself contributes tens of mV and warms — normal.
G. First real pack — only after A–F pass#
- Pre-checks: pack per-cell voltages ≥3.6 V, no damage; pigtail polarity re-verified with DMM against J1 markings; JP3/JP4 match the pack; correct fuse installed; fire container at hand.
- Attach the pack with no loads. Expect exactly the phase-B quiescent behavior. Verify INA226 bus reading matches the pack voltage.
- Repeat one load point per rail (1 A) and one J2 load point, watching temperatures. Keep the first pack session under 10 minutes, attended.
- Endurance and integration (motor rails,
robot-power-dist, host low-voltage policy exercising ALERT) belong to the platform test plan, not this guide.
10. Troubleshooting map#
| Symptom | First measurements | Likely areas |
|---|---|---|
| Nothing powers, input current ~0 | F1 continuity; J1+ vs VBAT_FUSED; body-diode check across Q1 | Blown/missing fuse, Q1 installed backwards (blocks forever), broken J1 crimp/screw |
| VBAT_P sits ~0.5–0.7 V below input, Q1 hot at load | VGS at Q1 (gate pin 4 to VBAT_P) | Q1 not enhancing: R2 open, D2 shorted/reversed, gate mis-landed |
| Both rails dead, VBAT_OUT dead, VBAT_P fine | Voltage across R1 | Open/cracked shunt or bad 2512 solder — R1 is in the main path |
| One buck dead, other fine | EN pin voltage vs 1.18 V; BST cap; SW activity | UVLO divider values/JP state, C9/C14 bootstrap open, wrong/damaged U2/U3 |
| Rail present but wrong voltage (≈0.8 V or swapped 5/3.3) | Part marking on U2/U3 | Wrong variant populated (AP63200/01 regulates FB to 0.8 V; U2/U3 swap crosses 5 V and 3.3 V) |
| Rail starts then cycles every ~16 ms | Load current, SW envelope | Hiccup OCP: overload, saturating substitute inductor, or output short |
| Rails drop out at the wrong input voltage | EN divider node voltages; JP3/JP4 | Wrong Rbot/JP state (2S vs 3S mix-up), datasheet-tolerance stack |
| Excess ripple/noise on outputs | Probe technique first (ground spring, 20 MHz BW); then COUT | Ground-clip pickup, derated/wrong output caps, layout hot loop |
| No I2C ACK at 0x40 | 3V3_OUT present? Pull-ups to 3.3 V? A0/A1 solder | INA226 unpowered (below UVLO!), JP1/JP2 cut with no host pull-ups, address strap fault, VSSOP bridge |
| Current reading wrong by a fixed factor | CAL register; R1 marking | CAL ≠ 0x0800, wrong shunt value (100 mΩ or 0.1 mΩ lookalike) |
| Current reads negative | Shunt reg sign bit | IN+/IN− swapped at U1 or shunt kelvin nets crossed |
| Bus voltage reads low under load | Compare bus reg vs VBAT_P | Normal: VBUS is post-shunt (−10 mV/A); only investigate beyond that |
| ALERT never asserts | R3 present? 0x06 contents | Mask/Enable not configured, latch mode confusion (read 0x06 to clear), J6 not populated |
| Pack drains while board "off" | Idle input current | There is no off switch: dividers (~42 µA) + INA226 + LEDs always draw; store with pack disconnected |
11. Bench record template#
| Field | Record |
|---|---|
| Board revision / serial | |
| Assembly variant, JP1–JP4 state, DNP audit | |
| Shunt MPN and measured value; fuse MPN | |
| Bench supply / e-load / DMM / scope IDs and cal dates | |
| Phase A resistance + Q1 diode-check results | |
| First power-up (8 V / 0.2 A) rail voltages, idle current | |
| Q1 enhanced drop at 1 A / 5 A | |
| INA226: ID regs, CAL readback, 1 A cross-check vs DMM | |
| Regulation sweeps (per rail, per VIN) | |
| Ripple pk-pk at 2 A (technique noted) | |
| Load-step captures (file paths) | |
| Overload/hiccup observations | |
| UVLO measured: 2S ON/OFF, 3S ON/OFF, per rail | |
| VBAT_OUT-live-below-UVLO confirmed? | |
| 60-min thermal soak temperatures | |
| Hot-plug ring peak | |
| First-pack session notes | |
| Deviations, photos, raw-file paths | |
| Reviewer / date / disposition |
12. Review conclusion#
The architecture is a clean series protection chain (fuse → reverse FET → TVS/bulk → shunt) feeding one raw and two regulated rails, with the telemetry deliberately placed so the INA226 meters the entire robot. Its strongest design decisions are the electrically-correct ideal-diode orientation (drain-to-battery — a documented deviation from the original task pin, and the right call), datasheet-table buck components rather than guessed ones, and per-rail UVLO dividers with an explicit 2S/3S select.
The principal risks, in order: (1) nothing here has ever been built — no layout, no first article, so every number above is a target; (2) the board is not a BMS and the raw VBAT_OUT rail is live below UVLO and unmetered when the 3.3 V rail is down — host policy is a hard dependency for pack safety; (3) assembly-sensitive single points: Q1 orientation (reverse protection silently absent if backwards), the U2/U3 variant swap, and the 10 mΩ shunt value; (4) TBD-confirm MPNs (fuse, bulk 22 µF, shunt) must be locked before ordering; (5) hot-plug transient behavior and dual-rail overload coupling are analytically fine but only bench captures will close them. Follow the phase order in section 9 — in particular, the first thing this board ever meets must be a current-limited bench supply, not a LiPo pack.