← robot-power-dist

Circuit review & bench-test guide

robot-power-dist — Robot power distribution board

Design-stage — board not yet fabricated

Document purpose#

This document explains the robot-power-dist board at component level and turns the design evidence into a practical manual-review and bench-test plan. It is based on the generated schematic (generate_design.py is authoritative for parts, reference designators, nets, and values), the README, and the ERC report in reports/.

This board has NEVER been fabricated. Its status is: schematic generated, ERC clean (0 errors / 0 warnings), netlist membership verified (27 nets / 149 pins). There is no PCB layout, no BOM order, no assembled unit, and no first-article bench result of any kind. Every number in this guide — gate thresholds, divider taps, calibration constants, LED currents, dissipation figures — is a design target to verify on the first assembled board, not a proven result. Several MPNs still carry TBD: / TBD-confirm: prefixes and must be pinned before ordering.

1. What the board does#

The board fans a robot battery rail (VBAT, 6.4–12.6 V, 2S/3S LiPo, arriving already fused and reverse-protected from battery-power-input/) out to four independently fused output channels, behind one master high-side gate. The gate is a parallel pair of DMP4015SSS P-MOSFETs whose only turn-on path is a series chain through a normally-closed e-stop loop AND a host enable — the default state, and the state with any wire cut or host unpowered, is OFF. Each channel carries a 1206 fuse, a 20 mΩ 2512 shunt, an INA226 high-side monitor on a shared I2C bus (addresses 0x40/0x41/0x44/0x45), and a green output-live LED. All four INA226 ALERT outputs are wire-OR'd on one open-drain line (PWR_ALERT_N). The 3.3 V telemetry domain is supplied by the host over Qwiic and is fully separate from the battery power path.

It is not a certified safety device: no redundancy, no monitored contacts, no rated stop category. The no-auto-relatch rule is a fabric/host contract, not a hardware feature.

Functional block diagram#

VBAT 6.4-12.6 V                     PGATE
J1 ────────────┬──────────────────────┐
               │ R1 100k (pull OFF)   │ common gate
               │ D1 BZT52C10 clamp    v
               └────────────────> Q1 ‖ Q2  (2x DMP4015SSS, high-side)
                                      │
   PGATE ─ R2 10k ─ J2 NC e-stop      v
            loop ─ Q3 2N7002 ─ GND  VDIST ──┬─ F1 ─ R4 20m ─► J3 CH1  U1 INA226 0x40
                     ▲                      ├─ F2 ─ R5 20m ─► J4 CH2  U2 INA226 0x41
                     EN (J9.1,              ├─ F3 ─ R6 20m ─► J5 CH3  U3 INA226 0x44
                     R3 10k pull-down)      └─ F4 ─ R7 20m ─► J6 CH4  U4 INA226 0x45
                                            │
                     R15/R16/R17 ───────────┘   per channel: green LED (R8-R11 + D2-D5)
                     GATE_STATUS divider
                                             telemetry: J7 Qwiic / J8 header / J9 control
                                             SDA/SCL (R12/R13 + JP1/JP2), PWR_ALERT_N (R14)

2. Safety and scope boundaries#

3. Power-control sequence#

  1. With J1 powered but nothing else connected, R1 (100 kΩ) holds PGATE at VBAT, so V_SG = 0 and Q1/Q2 are off. VDIST is dead. R3 (10 kΩ) holds EN low, so an unpowered or unconfigured host also means OFF.
  2. The host arrives on J7/J8 (3V3 + I2C) and J9 (EN, GATE_STATUS, PWR_ALERT_N). The four INA226s power up from 3V3 and are readable at 0x40/0x41/0x44/0x45 even while the gate is off (their supply is the telemetry rail, not VDIST).
  3. Turn-on requires both: the NC e-stop loop across J2 closed (button healthy / wire link fitted) and EN driven high. Then Q3 (2N7002) conducts and the series chain PGATE → R2 (10 kΩ) → J2 loop → Q3 → GND pulls the common gate down.
  4. R1/R2 form a 100k:10k divider, so V_SG ≈ 0.909·VBAT — about 5.8 V at 6.4 V input and an unclamped 11.5 V at 12.6 V, which D1 (BZT52C10) clamps to ≤ 10 V. The FET V_GS rating is ±20 V; the clamp adds margin, it is not survival-critical.
  5. VDIST energizes and each channel conducts through its fuse and shunt to its terminal. Channel LEDs (D2–D5 via R8–R11) light. The GATE_STATUS divider (R15 39k / R16 10k, R17 100R series) reports VDIST·10/49 on J9.2 (≈ 2.57 V at 12.6 V).
  6. Opening the loop (button hit, wire cut, connector fall-off) or dropping EN breaks the pull-down chain anywhere along it; R1 recharges the gate to the source and the pair turns off. The hardware is combinational and non-latching: if the loop recloses while EN is still high, power returns. The no-auto-relatch rule (latch a GATE_STATUS drop, require a deliberate EN toggle) is a host/fabric contract that must be tested at the system level, not on this board alone.

Master-gate truth table (to be verified row by row in phase C)#

RowJ2 e-stop loopEN (J9.1)Q3Pull-down chainExpected VDIST
1closedhigh (≥ 2.5 V)oncompleteON (≈ VBAT)
2closedlow / floating (R3)offbroken at Q3OFF (≈ 0 V)
3openhighonbroken at J2OFF
4openlowoffbroken twiceOFF

Only row 1 is ON. Rows 2–4 must all measure OFF; row 2 with EN floating (host unplugged) is the R3 pull-down check and gets its own step.

4. Interfaces#

RefPins/signalsIntended use
J11 VBAT, 2 GND (5.08 mm screw terminal)Battery rail input from battery-power-input/ (fused + reverse-protected there)
J21 LOOP_A, 2 LOOP_BNC e-stop loop: wire an NC mushroom button (or chain of them) across 1–2; fit a wire link when unused. Ships OFF until closed
J3–J61 VOUT1..4, 2 GNDChannel 1–4 fused, monitored outputs (screw terminals)
J71 GND, 2 3V3, 3 SDA, 4 SCLQwiic / STEMMA QT (JST-SH); host supplies the 3.3 V telemetry rail
J81 3V3, 2 GND, 3 SDA, 4 SCL2.54 mm duplicate of J7 — note pins 1/2 are swapped relative to J7
J91 EN (in), 2 GATE_STATUS (out), 3 PWR_ALERT_N (out, open-drain), 4 GNDHost control/status header
JP1 / JP2Solder jumpers, shipped bridgedCut to remove the on-board SDA/SCL pull-ups when the host chain already provides them

There are no dedicated test points in the rev 0.1 schematic; bench access is via the terminals, headers, and component pads (PGATE at R1/R2/D1 pads, EN at R3, ST_DIV at R15/R16). Consider adding TPs at layout time.

5. Component-by-component review#

5.1 Master gate and e-stop chain#

RefPart / valueFunction and why neededIf absent/openIf shorted, wrong, or misassembled
J1Phoenix MKDS 1,5/2-5,08 class terminal (TBD:)Battery rail entry; must carry the full ~8 A budgetNo powerReversed wiring energizes VDIST through the Q1/Q2 body diodes with no gating
Q1, Q2Diodes DMP4015SSS-13, −40 V P-MOSFET, SO-8, parallel pairHigh-side master switch VBAT→VDIST; two in parallel for the ~8 A budget (R_DS(on) 7 mΩ typ / 11 mΩ max at V_GS = −10 V)One missing: full load in the other FET, roughly double dissipation; both missing: VDIST deadD–S short defeats the e-stop entirely (VDIST always live) — this is the single most safety-relevant assembly fault; swapped S/D orientation conducts backwards through the channel
Q3onsemi 2N7002LT1G, 60 V/115 mA N-MOSFET, SOT-23Low-side EN switch closing the gate pull-down chainGate can never turn on (VDIST stuck OFF)D–S short removes the EN term of the AND: loop closed alone turns power on
J2Phoenix MKDS class terminal (TBD:)NC e-stop loop interface; the loop is in series with the gate pull-down, so any break = OFFLoop open = board OFF (fail-safe direction)Solder bridge or stray strand across 1–2 permanently defeats the e-stop while looking normal
R1100 kΩ 0603 (Yageo RC0603FR-07100KL)Gate-source pull-up: defines the default-OFF state and turns the pair off when the chain breaksGate floats: FETs may drift on from leakage/dV/dt — dangerousShort = gate tied to source, permanently OFF
R210 kΩ 0603Series/divider resistor: with R1 sets V_SG = 0.909·VBAT and limits chain currentChain broken, gate never turns onShort raises V_SG toward full VBAT (12.6 V) — D1 then carries the clamp alone; verify D1 before blaming R2
R310 kΩ 0603EN pull-down: unpowered/unplugged host = OFFEN floats: gate state depends on leakage and host tri-state behavior — must be caught in reviewShort holds EN low, board can never be enabled
D1Diodes BZT52C10 10 V zener, SOD-123 (TBD: BZT52C10-7-F)Clamps V_SG ≤ ~10 V at 3S (unclamped divider gives 11.5 V at 12.6 V; FET rating ±20 V — margin, not survival)V_SG runs to 11.5 V at 12.6 V: inside rating, reduced marginShort = gate tied to source, permanently OFF; reversed = ~0.9 V forward drop gate-to-source, also effectively OFF

5.2 Gate status divider#

RefValueFunctionIf omitted or wrong
R1539 kΩ 0603GATE_STATUS divider top from VDIST; 39k/10k gives tap = VDIST·10/49 (2.57 V at 12.6 V). Fit 18 kΩ for 2S-only systems, 100 kΩ for 24 V per axa-012Open: GATE_STATUS reads 0 even when ON (host will believe the gate failed); wrong value (e.g. the spec's original 100k) never reaches logic-high
R1610 kΩ 0603Divider bottomOpen: tap floats to VDIST — up to 12.6 V into a 3.3 V host pin, limited only by R15+R17 (~250 µA); short: tap always 0
R17100 Ω 0603Series protection on the board-driven GATE_STATUS lineOpen: no status; short: only removes the (small) protection

5.3 Distribution channels (×4 — CH1/CH2/CH3/CH4)#

RefsPart / valueFunctionIf omitted or wrong
F1–F42 A 1206 SMD fuse (TBD: Littelfuse 0467002.NR)Per-channel overcurrent protection; rating is load-specific (2 A default; 3 A small motors; up to 5 A drive motors — above 4.1 A the INA226 saturates before the fuse acts)Open/blown: channel dead, LED dark, INA226 bus voltage reads ~0; oversized: wiring becomes the fuse
R4–R720 mΩ 1% 1 W 2512 (TBD-confirm: Vishay WSL2512R0200FEA18)Current shunt: 81.92 mV/20 mΩ = 4.096 A full scale; 0.34 W at full scale (1 W part)Open: channel dead; wrong value scales every current reading proportionally (a 10 mΩ part reads half); poor Kelvin routing at layout adds gain error
U1–U4TI INA226AIDGSR, TSSOP-10Per-channel high-side current/bus-voltage/power monitor, I2C. U1=0x40 (A1=GND, A0=GND), U2=0x41 (A1=GND, A0=3V3), U3=0x44 (A1=3V3, A0=GND), U4=0x45 (A1=3V3, A0=3V3)Missing: address NACKs, no telemetry (power path still works); swapped A0/A1 straps: device answers at the wrong address — channel attribution silently wrong; VS wired to VDIST instead of 3V3 destroys it (abs max 6 V)
C1–C4100 nF 16 V X7R 0603 (Murata GRM188R71C104KA01D)Per-INA226 VS decouplingNoisy conversions, possible I2C flakiness
R8–R114.7 kΩ 0603Channel LED resistor, ≈ 2.2 mA at 12.6 VLED dark (no functional impact); too small overdrives the LED
D2–D5Kingbright APT1608SGC green 0603 LEDOutput-live indicator per channel — indicates voltage, not current capabilityDark channel that actually works (check terminal voltage before trusting the LED); reversed = dark
J3–J6Phoenix MKDS class terminal (TBD:)Channel outputs (1 VOUTn, 2 GND)Loose screw = heat at load; miswired polarity damages the load

5.4 Telemetry and host interface#

RefsPart / valueFunctionIf omitted or wrong
J7JST SM04B-SRSS-TB QwiicHost 3V3 + I2C entry, Qwiic pin order (GND, 3V3, SDA, SCL)No telemetry rail: monitors dead, EN pull-down still guarantees OFF
J81×4 2.54 mm header (TBD:)Duplicate telemetry (3V3, GND, SDA, SCL — note different order than J7)Miswiring J8 per the J7 order swaps 3V3/GND on the host — review carefully
J91×4 2.54 mm header (TBD:)EN in / GATE_STATUS out / PWR_ALERT_N out / GNDThe only control path; a swapped harness can drive 3.3 V into GATE_STATUS's divider (survivable) or ground EN (stuck OFF)
R12, R134.7 kΩ 0603Shared SDA/SCL pull-ups behind JP1/JP2No pull-ups anywhere on the chain: bus dead (SDA/SCL stuck low or floating); doubled-up with host pull-ups: still usually fine, check V_OL margins
JP1, JP2Solder jumpers, shipped bridgedCut to remove R12/R13 when the host provides pull-upsCut with no host pull-ups = dead bus
R1410 kΩ 0603Single pull-up for the wire-OR'd open-drain PWR_ALERT_NLine floats: host reads noise/phantom alerts; short to 3V3 would fight the INA226 open-drain drivers (they sink; abs max is exceeded only above 6 V, but the alert becomes unreadable)
C51 µF 10 V X7R 0603 (Murata GRM188R71A105KA61D)Telemetry-rail bulk decoupling at the Qwiic entryMore 3V3 sag/bounce during simultaneous conversions

6. Datasheet summary and design interpretation#

DeviceKey manufacturer facts used hereBoard-specific interpretation
INA226 (product page, datasheet PDF)Supply 2.7–5.5 V (6 V abs max); shunt input ±81.92 mV full scale, 2.5 µV/LSB; bus input 0–36 V, 1.25 mV/LSB; common-mode 0–36 V independent of supply; gain error ≤ 0.1%, offset ≤ ±10 µV; 16 strap-selectable I2C addresses; ALERT is open-drain; CAL = 0.00512/(Current_LSB·R_shunt); default config 0x4127 (1.1 ms conversions, shunt+bus continuous); Manufacturer ID reg 0xFE = 0x5449, Die ID 0xFF = 0x2260VS from 3V3 while sensing a 12.6 V rail is exactly the intended split (36 V CM). 20 mΩ gives 4.096 A full scale; ±10 µV offset = ±0.5 mA floor. Only GND/VS strap codes used → 0x40/0x41/0x44/0x45. ID registers give a strap-independent presence check
DMP4015SSS (datasheet, product page)−40 V V_DS, ±20 V V_GS, −9.1 A rated, R_DS(on) 7 mΩ typ / 11 mΩ max at V_GS = −10 V, ≤ 15 mΩ at −4.5 V, SO-8 (pins 1–3 S, 4 G, 5–8 D)At 2S minimum (6.4 V) drive is only ≈ −5.8 V, so budget with the −4.5 V spec (≤ 15 mΩ). Parallel parts don't share statically; the positive R_DS tempco self-balances — hence the ~5 A per-FET comfort zone, ~8 A combined. Even 4 A/4 A at the 11 mΩ corner ≈ 0.18 W per FET
2N7002LT1G (product page, datasheet PDF)60 V V_DS, ±20 V V_GS, 115 mA continuous, V_GS(th) max 2.5 V at 250 µA, SOT-23Chain current is well under 1 mA — trivial for the part. The 2.5 V max threshold means EN must be driven with genuine 3.3 V CMOS levels; a marginal 2.5 V-ish high is a turn-on-uncertainty to check on the bench
BZT52C10 (product page, datasheet PDF)10 V nominal (≈ 9.4–10.6 V window) at 5 mA test current, ~410 mW, SOD-123The clamp operates at only ~0.1–0.2 mA, well below the 5 mA test point, so the actual clamped V_SG will sit somewhat below the datasheet V_Z — measure it, expect roughly 9–10 V at 12.6 V input
WSL2512 shunt (datasheet)20 mΩ ±1%, 1 W, low-TCR metal strip, 2512±1% is the floor of system current accuracy (bigger than INA226 gain error). 0.34 W at 4.1 A full scale — fine, but a 5 A-fused channel reaches 0.5 W: watch temperature
Littelfuse 467 series (series page)1206-form fast-acting SMD fuse family; per-rating I²t and voltage rating in the series datasheetMPN still TBD: — the original spec's 0466 NANO2 body does not fit the pinned 1206 land, hence 0467. Verify voltage rating ≥ 12.6 V and I²t against the intended load's inrush before pinning
Kingbright APT1608SGC (datasheet)Green 0603, V_F ≈ 2.2 V, 20 mA max4.7 kΩ gives ≈ 2.2 mA at 12.6 V (≈ 0.9 mA at 6.4 V — dim but visible); indicator only

Check the latest datasheet revision and exact orderable suffix before procurement; all TBD: MPNs must be pinned first.

INA226 calibration math for the 20 mΩ shunt (per channel)#

7. Expected values before bench testing#

All values are calculated targets from an unfabricated schematic.

QuantityDesign targetWhat to measure
VDIST OFF leakage≈ 0 V, µA-levelVDIST with loop open or EN low
V_SG (gate drive), 6.4 V in≈ 5.8 V (0.909·VBAT, below clamp)VBAT-to-PGATE, DMM across R1/D1 pads
V_SG at 12.6 V inclamped ≈ 9–10 V (unclamped would be 11.5 V)Same; confirms D1 acts
Chain current when ON~0.1–0.3 mA total (R1 + zener paths)Series µA-meter in J2 loop
VBAT→VDIST drop, 4 A≤ ~25 mV (two FETs sharing, ≤11 mΩ max each)DMM across Q1/Q2 pair at load
Per-FET dissipation, 8 A total≈ 0.18 W each at the 11 mΩ cornerThermal camera / thermocouple soak
GATE_STATUS tap at 12.6 V2.57 V (VDIST·10/49); 1.31 V at 6.4 VJ9.2 vs DMM on VDIST
INA226 presenceACK at 0x40, 0x41, 0x44, 0x45; reg 0xFE = 0x5449, 0xFF = 0x2260I2C scan + register reads
Current readback, 1.000 A known loadregister 0x1F40 (= 1.000 A), within ~1–2% of DMMPer channel, CAL = 0x0800
Bus voltage readbackmatches DMM on VOUTn within ~0.1% + LSBRegister 0x02 vs DMM
Channel LED current≈ 2.2 mA at 12.6 VVisual + optional series measurement
Shunt dissipation at 4.096 A0.336 W (1 W part)Shunt temperature at sustained load
PWR_ALERT_N idlehigh (3.3 V via R14)J9.3
I2C pull-up4.7 kΩ to 3V3 each line (JP1/JP2 bridged)Ohmmeter, unpowered
Turn-off on loop breakgate discharge... release via R1×C_iss(2 FETs): expect tens–hundreds of µs to start, load-dependent VDIST decayScope on PGATE and VDIST while opening J2

8. Manual schematic and assembly review checklist#

9. Ordered bench-test procedure#

Stop at the first abnormal result. Record serial number, fitted MPNs, equipment IDs, ambient, and operator. Use a current-limited bench supply (≤ 500 mA limit) until phase D.

A. Unpowered inspection and resistance tests#

  1. Complete the section 8 checklist under magnification.
  2. Measure VBAT-to-GND and VDIST-to-GND resistance in both polarities; investigate any hard short.
  3. Verify J2 loop wiring: with the link/button fitted, J2.1–J2.2 reads ~0 Ω; with the button pressed, open.
  4. Ohm the fuses: each F1–F4 end-to-end near 0 Ω; VDIST-to-VOUTn total should read fuse + 20 mΩ ≈ near 0 Ω on a 2-wire DMM.
  5. Confirm SDA and SCL each read ≈ 4.7 kΩ to 3V3 (JP1/JP2 bridged), and PWR_ALERT_N ≈ 10 kΩ to 3V3.

B. Telemetry domain only (no VBAT)#

  1. Connect the host 3V3/I2C via J7 (or a USB-I2C adapter). Do not connect VBAT yet.
  2. Measure 3V3 current draw (four INA226s: low single-digit mA expected).
  3. I2C scan: exactly 0x40, 0x41, 0x44, 0x45 must ACK. Any other address, or a missing one, means a strap or solder fault — fix before proceeding.
  4. From each device read Manufacturer ID (0xFE = 0x5449) and Die ID (0xFF = 0x2260).
  5. Write CAL = 0x0800 and config 0x4127 to each; read back. Bus and shunt registers should read ≈ 0 (no VBAT yet).

C. Master-gate truth table and e-stop behavior (current-limited supply)#

  1. Bench supply on J1: 12.0 V, 200 mA limit. No loads on J3–J6. Loop link fitted, EN floating.
  2. Row 2 (EN floating): VDIST must be ≈ 0 V (R3 holds EN low). Record any leakage.
  3. Row 2 (EN driven low): tie EN to GND — VDIST still OFF.
  4. Row 1: drive EN to 3.3 V. VDIST must jump to ≈ VBAT; all four channel LEDs light; GATE_STATUS reads ≈ VBAT·10/49 (2.45 V at 12.0 V). Measure V_SG: ≈ 9–10 V (clamped). Repeat at 6.4 V input: VDIST follows, V_SG ≈ 5.8 V unclamped, GATE_STATUS ≈ 1.31 V.
  5. Row 3: with EN still high, open the loop (press the e-stop / pull the link). VDIST must fall to ≈ 0. Scope PGATE and VDIST during the break and record the turn-off waveform.
  6. Row 4: EN low and loop open — OFF.
  7. Relatch check (design-intent confirmation): with EN held high, re-close the loop. Hardware will re-energize VDIST — this is the documented combinational behavior, not a fault. Confirm it, then verify the host/fabric supervisor (when present) latches the GATE_STATUS drop and refuses to re-enable without a deliberate EN toggle.
  8. Repeat step 5 while GATE_STATUS is being sampled by the host: the drop must be visible fast enough for the supervisor contract (record latency).
  9. Only after every row matches, raise the supply current limit for phase D.

D. Per-channel checks and calibration (known loads)#

  1. One channel at a time: attach a known resistive load (e.g. 12 Ω/25 W for ~1 A at 12 V) to J3, with a DMM in series (or a calibrated shunt).
  2. Gate ON: confirm VOUT1 ≈ VDIST minus microvolt-level shunt/fuse drops, LED lit.
  3. Read U1 bus voltage, shunt voltage, current (with CAL = 0x0800), and power registers. Targets: current within ~1–2% of the DMM; bus within ~0.1%; power ≈ V×I with 3.125 mW LSB.
  4. Compute the per-channel correction factor (DMM/register) and record it — this is the shunt-tolerance calibration named in the README.
  5. Repeat for J4/U2, J5/U3, J6/U4. Confirm each reading appears at the expected address (load one channel at a time and check the other three read ≈ 0 A — this catches strap/attribution swaps).
  6. Step one channel toward full scale (up to ~4 A briefly): confirm the reading saturates near 0x7FFF-equivalent (4.096 A) without damage and the fuse holds. Watch shunt temperature.
  7. Load two channels simultaneously and verify the VBAT→VDIST drop and Q1/Q2 temperatures against the section 7 targets. A gross temperature imbalance between Q1 and Q2 means one FET is not conducting (solder or orientation).

E. Wire-OR ALERT test#

  1. Idle state: PWR_ALERT_N (J9.3) reads 3.3 V with no alerts configured.
  2. On U2 (0x41) only, configure Shunt-Over-Voltage alert: Mask/Enable register 0x06 = 0x8001 (SOL bit 15 + latch enable LEN bit 0) and Alert Limit register 0x07 = 0x0640 (1600 × 2.5 µV = 4 mV = 0.2 A threshold).
  3. Apply a small ~0.3–0.5 A load to channel 2. PWR_ALERT_N must fall low.
  4. Attribution: read Mask/Enable from all four devices. Only U2 must show AFF (Alert Function Flag, bit 4) set; the read clears the latched alert and the shared line must return high (remove the load first, or it re-asserts).
  5. Repeat with the same load on channel 3 while U2's alert is still armed: the line must stay high (proves the alert is channel-specific and the wire-OR is not shorted between channels).
  6. Arm two channels and load both: line low; both AFF flags set; line releases only after both are cleared/unloaded — confirms true open-drain wire-OR behavior on the single R14 pull-up.

F. Fuse and abuse tests (destructive, last)#

  1. On one sacrificial channel with a spare fuse fitted, apply a supply- limited overload well above the fuse rating (e.g. 6–8 A from a supply into a 2 A fuse) and confirm the fuse opens, the channel dies, the LED goes dark, and the other channels are undisturbed. Note the INA226 will have saturated at 4.1 A during the event.
  2. Verify post-blow: bus voltage register for that channel reads ≈ 0, no damage to the shunt or INA226 inputs.
  3. Only after everything above: repeat selected phase C/D checks from the real battery-power-input/ chain instead of the bench supply.

G. Release-only tests#

System-level supervisor (no-auto-relatch fabric contract), vibration on the screw terminals, thermal soak at full budget in the enclosure, and the layout-dependent items (Kelvin shunt routing verification, copper heating) can only be assessed after a PCB layout exists — none does today.

10. Troubleshooting map#

SymptomFirst measurementsLikely areas
VDIST never turns onEN at Q3 gate, J2 continuity, PGATE voltageR3/EN drive, loop wiring, Q3 orientation, R2 open, D1 shorted/reversed, R1 short
VDIST on with EN low or loop openPGATE, Q3 D–S, J2 solderQ1/Q2 D–S short (critical), Q3 shorted, bridge across J2
VDIST on but sags at loadVBAT→VDIST drop, Q1 vs Q2 temperatureOne FET not conducting (solder/orientation), undersized supply
V_SG ≈ 11.5 V at 12.6 V inD1 polarity/presenceD1 missing, reversed, or wrong part
One channel dead, LED darkFuse continuity, VOUTnBlown/open F, open shunt, terminal wiring
LED dark but channel poweredLED polarity, R8–R11Reversed D2–D5, open resistor
I2C scan missing an addressA0/A1 straps, VS pin, SDA/SCL solderStrap error, unpowered VS, TSSOP solder fault
Two channels report each other's currentAddress map vs physical channelSwapped A0/A1 straps — fix attribution before trusting telemetry
Current reading off by a fixed ratioShunt value, CAL registerWrong shunt fitted, CAL ≠ 0x0800, missing per-channel correction
PWR_ALERT_N stuck lowRead AFF on all four; unpowered resistance to GNDLatched alert never cleared, INA226 damaged, solder short
PWR_ALERT_N never assertsR14 presence, Mask/Enable readbackAlert not armed (0x06), limit (0x07) too high, open ALERT pin joint
GATE_STATUS wrong scaleR15/R16 values, VDIST100k fitted instead of 39k (spec deviation trap), R16 open
Bus deadSDA/SCL to 3V3 resistanceJP1/JP2 cut with no host pull-ups, 3V3 absent

11. Bench record template#

FieldRecord
Board revision / serial
Fitted MPNs for all former TBD: parts (fuses, shunts, D1, terminals)
Fuse ratings fitted per channel and intended loads
Bench supply / DMM / scope / load, calibration dates
Ambient, airflow
Section 8 checklist result
Phase A resistance results
I2C scan result (addresses seen) and ID register reads
Truth-table rows 1–4 results, both 6.4 V and 12.6 V
V_SG measured (clamped and unclamped points)
Loop-break turn-off capture reference
Relatch behavior confirmation + supervisor latency
Per-channel calibration factors (DMM/register), CAL used
Cross-attribution check result
ALERT wire-OR test results (assert, attribute, release)
Load/thermal soak results (drop, Q1/Q2/shunt temperatures)
Fuse-blow test result
Deviations, photos, raw-file paths
Reviewer / date / disposition

12. Review conclusion#

The architecture is coherent and deliberately conservative: a default-OFF high-side gate whose only turn-on path is a series AND of an NC e-stop loop and a host enable, four channels that each carry their own fuse, shunt, and monitor, and a telemetry domain that cannot back-feed the power path. The design honestly documents its two sharpest edges — the combinational (non-latching) gate, whose no-auto-relatch guarantee lives in the host fabric, and the unmatched static current sharing of the parallel FET pair.

The principal risks are exactly what an unfabricated board implies: nothing has ever been measured. The highest-value first-article checks are the truth table (especially proving VDIST cannot energize with the loop open — a Q1/Q2 drain-source short or a J2 solder bridge silently deletes the e-stop), the D1 clamp at 3S voltage, INA226 address attribution, the CAL = 0x0800 current readback against a DMM, and the wire-OR ALERT attribution flow. Before any of that, the TBD: MPNs must be pinned, a PCB layout produced (wide VBAT/VDIST copper, Kelvin-ish shunt routing), and the resulting board built and inspected. Until then, treat every number in this guide as a target, and never as evidence.