← Design notebook

BUILT BY AUTONOMOUS SYSTEMS · WORK IN PROGRESS

The fuse board (D60, task B5)

One JLCPCB board that takes the place of the eleven inline MINI holders and the Blue Sea shunt on the power plate in P3: twelve MINI 58V fuse holders, the 1 mOhm shunt and the INA228 that reads it, the - star point and the frame bond. Everything here is generated: hardware/fuse-board/design.py (parts, nets, placement), generate.py (the KiCad 10 schematic and PCB), build.sh (checks, fabrication files, pictures), analysis.py (the numbers below), and cad/body_fuse_board.py (the board as the body sees it). Written 2026-10-27; prices read that day. Revised the same day for D65 (two DeWalt DCB609 packs in series: a 10S bus, 30-41 V, no charge port) and D66 (the turret on its own fused branch of the bus; one TRACO TEP 150-4812WI, 12 V 12.5 A isolated, feeds the J501 and the 12 V rail in place of both DDR converters).

The board, top

Board 88 x 76 mm, 2 layers, 2 oz (70 um) copper, 1.6 mm FR-4, lead-free HASL, green
Where robot x 34..122, y -14..62 on the power plate's top face (z 138.2); the board at z 148.2..149.8 on 10 mm printed standoffs; fuse tops at z 174.2
Holders 12 x Littelfuse MINI FL1 178.6764.0001 (58 V DC, 22 A continuous, fuses to 30 A): ten on the + bus (two of them spares), two on the 12 V rail
Shunt Bourns CSS2H-3920R-1L00F, 1 mOhm 1 %, 8 W, on the high side between the MRBF and the + bus
Monitor INA228 (U1, TSSOP-10) on the board, or the Adafruit 5832 wired to three pads (TP1-TP3); I2C on a JST GH 4-pin
Studs M6 for the 80 A input; M4 for every branch, the 12 V input, the star point and the frame bond
Checks KiCad DRC clean against JLCPCB's 2 oz rules, schematic parity 0, ERC 0 (hardware/fuse-board/reports/)
Price JLCPCB $40.60 for 5 boards (instant price from the uploaded zip); one board built for $154.48 in parts and packs
Mass 132 g with its screws, nuts and standoffs (45 g the bare board with its holders)

1. What changed from the brief, and why

The shunt is on the + side, not in the pack's - lead. The brief put the 1 mOhm shunt where the Blue Sea shunt is today (W5, W6, W9: between the XT90's - and the main switch's IN-). The INA228's inputs may not go more than 0.3 V below its own ground (TI SLYS021A, absolute maximum, both pins). Its ground is the MCU's, the switched - bus. With the shunt in the pack's - lead before the low-side switch, turning the switch off lets the - bus float up toward the + bus (the loads pull it there) while the INA228's inputs stay at the pack's -: its input clamps then carry the robot's load current round the open switch, which destroys the INA228 and leaves the switch bypassed through a 22 AWG sense lead. On the + side the INA228's inputs sit 0 to 41 V above its ground whether the switch is on or off, which is the INA228's own high-side application (TI's figure 8-2). (Under D65 the packs charge on DeWalt's chargers, off the robot; the regeneration that flows back into them reads with the opposite sign.) The low-side fix, an isolated INA228 (I2C isolator and a 1 W isolated supply), was the alternative: more parts for the same result.

This applies to P0 as wired today: the Adafruit INA228 across the Blue Sea shunt in the - lead, grounded on the MCU, sees exactly this when the switch goes off. Before bring-up step 4 either move the Blue Sea shunt into the + lead (MRBF load stud to the + bus bar's tap 1), or leave the INA228's VIN+/VIN- unconnected until the board arrives.

Littelfuse MINI FL1 holders, not Keystone 3568. Keystone rates the 3568 at 20 A at 500 V AC with no DC rating (Keystone catalogs M55, 2006, and M60, 2013, page 40; TME lists 20 A; some distributors list 30 A without a source; Keystone's own drawing, rev C 2019, states none), so it does not carry the VESC branches' 30 A fuses. The 3570 is not a MINI holder (a 6.3 x 32 mm fuse clip; LCSC lists no specification). The Littelfuse MINI FL1 (178.6764.0001) is rated 58 V DC, 22 A continuous, for MINI fuses up to 30 A (Littelfuse's product page, read 2026-10-27; its 2016 datasheet says 125 V, LCSC's text 32 V). It is the only PCB MINI holder found with a DC rating at the bus voltage, so D55's "32 V holder on the battery bus" ends with it; the "58 V FUSES ONLY" silk stays at every holder because a standard 32 V MINI fuse may still fit it (check on arrival whether one seats). The holder's 22 A continuous sets a rule for the wheels: the VESCs' battery current limit at 20 A (VESC Tool, "Battery Current Max"; the motor current limit can stay higher, the battery current at low speed is a fraction of it). The 30 A fuses stay (the fuse's own derating puts its continuous load at 22-24 A at 40-60 C).

The turret's feed (D66): 7.5 A, not 10 A, through the stop relay's pole B. The turret takes about 40 W and bursts to about 140 W: 4.7 A at 30 V, 3.4 A at 41 V. The stop relay is the Omron G2RL-2 (DPDT): rated 8 A at 30 V DC resistive and 8 A carry at 70 C (5 A at 85 C). Its maximum switching capacity curve for the 2-pole type (Omron's datasheet, engineering data) holds 8 A to about 39 V and falls steeply above: read off the curve, about 6 A at 41 V and about 1 A at 55 V, for resistive loads. The turret's 3.4 A at 41 V is inside it, with no margin to spare, and Omron gives no DC endurance above 30 V. A 10 A fuse would let the contact carry past its 8 A rating in an overload; the 7.5 A MINI 58V keeps it under (Littelfuse derates a 7.5 A fuse to 6.0 A at 40 C: the 4.7 A burst is inside that). The relay opens with the turret's safety loop (pole A) at the same instant, which stops the flywheels, so the current it breaks is mostly the reComputer's idle draw. Two things to measure at the P2 bring-up (B12/B15): the inrush when the relay closes onto the turret's input capacitance (the 7.5 A fuse's I2t is 68 A2s; if it blows or the contact pits, the turret needs its own soft start, or pole B's job goes to a DC-rated relay or a high-side MOSFET driven from the coil line), and the contact after a hundred stops.

88 x 76, not 120 x 42. A holder and its stud need about 27 mm in line (the 14.2 mm holder, its output run, a 7 mm stud and the lug's edge) and 10 mm across (the M4 lugs side by side). Twelve in one row is 120 mm long and 27 mm deep, which leaves 15 mm of the 42 for the + bus feeding them and nothing for the M6 input, the shunt, the INA228, the 12 V input or the star and frame studs; two rows back to back with the bus between them need about 66 mm of depth. The board takes the whole free area of the plate (x 34..122, y -14..62). It sits 36 mm tall over the plate (10 mm standoffs, the holder and the fuse), 6 mm more than the brief's 30: the deck's underside is at z 213.5, 39 mm above the fuses.

2. The schematic in words

hardware/fuse-board/pictures/schematic.pdf; the nets are global labels named as below.

3. Layout and mounting

The board, bottom

The holders stand in two rows of six across the robot, 10 mm apart, inputs toward the + bus band between the rows, outputs outward to a row of studs on each long edge: the four RS-04s and the two VESCs along the board's left edge (+y, toward the MCU board), the TRACO's input, the turret, two spares and the J501 along its right edge (-y, toward the bus bars), the 12 V rail's branch, the 12 V input and the star and frame studs at its front (+x, beside the MRBF block). The power entry (J1, the shunt) and the INA228 are in the strip at its rear (-x); MH1 sits on the plate's old shunt nut.

Mounting (all into features the P1 plate already has):

The layout item for cad/body_layout.py is body_fuse_board.LAYOUT_ITEM (name plate_fuse_board, which is what lever_taken('fuse_board') looks for): it replaces plate_fuses and plate_shunt; the board's mass and box come from cad/body_fuse_board.py.

4. The copper

IPC-2221B's external-conductor curve, per layer, with each conductor's current split equally between the two layers (they meet at every holder pin and at every stud's ring of vias). Its charts stop at 35 A and 10.2 mm; beyond them it is extrapolated and marked so. Fault let-through against the copper: IEC 60949's adiabatic K for copper from 60 to 200 C against the fuse's typical pre-arcing I^2t (Littelfuse 0997 datasheet).

Holder Branch Fuse Copper (each layer) IPC-2221 width needed for +20 C Rise at the fuse's rating Neck past the peg (2.6 x 3.6 mm) Fault I^2t margin
F1-F4 RS-04 x 4 (W10-W13) 20 A 6.0 mm 2.4 mm 4.3 C +0.2 C 6.9
F5, F6 VESC L, R (W14, W15) 30 A 6.0 mm 4.1 mm 10.8 C +0.5 C 2.4
F7 TRACO TEP 150-4812WI in (W16) 10 A 6.0 mm 0.9 mm 0.9 C 0 28
F8 the turret, via the stop relay (W22) 7.5 A 6.0 mm 0.6 mm 0.5 C 0 39
F9, F10 spares (sized for 30 A) - 6.0 mm 4.1 mm 10.8 C +0.5 C 2.4
F11 J501 at 12 V (W21) 10 A 6.0 mm 0.9 mm 0.9 C 0 28
F12 the 12 V rail (W43) 7.5 A 2.6 mm 0.6 mm 1.8 C 0 39

The 12 V pour (12.6 mm on both layers, six vias) carries the TRACO's full 12.5 A from J14 at +0.4 C; J14 is an M4 stud with a 16-14 AWG ring on W40 (14 AWG).

Every branch carries its fuse's rating at a few degrees; the heat at a holder is the fuse's own (2.6 W in a 30 A MINI at its rating, 1.9 W in a 20 A), which is why the holders are 10 mm apart. The neck is where the 6 mm run passes the holder's peg slot; it is 3.6 mm long between two large copper ends and rises half a degree.

The main path (J1, the shunt, the + bus band):

Section Copper At 40 A At 80 A (extrapolated) The 80 A, 0.3 s jump pulse
+BAT_IN pour, J1 to the shunt 12 mm, both layers, 14 vias at the shunt +6.6 C +32 C +3.4 C
+ bus band beside the shunt 14.4 mm, both layers, 20 vias at the shunt +4.9 C +24 C +2.4 C
+ bus band toward the holders 30 mm, both layers, 16 vias +1.5 C +7 C +0.5 C

The shunt's pads are on the top only, so the bottom layer's half comes up through the vias beside them: 1.4 A a via at 40 A, 2.9 A for the 0.3 s pulse. The board's continuous rating is 40 A, set by the shunt, not the copper: its 8 W rating needs its terminals under 70 C, and with about 21 C/W from its pads into the pours it reaches about 34 C over the board at 40 A (1.6 W) and would reach about 130 C at 80 A continuous (6.4 W). The jump's 80 A for 0.3 s is 1.9 J (the shunt's short-time rating is 5 x 8 W for 5 s), and the board takes 80 A for up to about 30 s. The duty the plan gives (80 A pulses, a few amps on average) is far inside this; the INA228's alert or the firmware can watch the RMS if a stalled motor ever holds the bus near 40 A.

Clearances (fuse-board.kicad_dru): 1.0 mm between every pair of different power nets and between power and logic (IPC-2221B 51-100 V: 0.6 mm uncoated external, B2); 0.2 mm inside the shunt group (+BAT_IN, +BUS and the sense lines differ by at most the shunt's 80 mV); 0.25 mm where the sense lines escape the INA228's 0.5 mm pins beside its ground and logic (TI's own package puts VBUS 0.2 mm from GND; IPC-2221B B4, coated: 0.13 mm); the INA228's pin pitch itself exempt. Copper is at least 0.3 mm from every edge and NPTH.

5. The INA228's accuracy

The error budget in % of reading (analysis.py); the board between 15 and 55 C, calibrated at 25 C.

Source Value Removed by the calibration
Shunt tolerance 1.0 % yes
Kelvin taps at Bourns' measurement points (pad copper, solder) 0.5 % (allowance) yes
INA228 gain error (max) 0.05 % yes
10 Ohm input resistors against the 92 kOhm input 0.022 % yes
Shunt TCR, 100 ppm/C with its copper terminals, over 30 C 0.30 % no
Shunt self-heating (12.5 C/W to its terminals; the 80 A pulse adiabatic) 0.02-0.20 % no
INA228 gain drift, 20 ppm/C over 30 C 0.06 % no
Offset 1 uV + drift 0.3 uV + CMRR 154 dB at 41 V 0.1 uV + thermal EMF 3 uV 5.4 uV (0.27 % at 2 A) no
The calibrating meter (10 A range) 0.3 % -
Current Uncalibrated, worst case Uncalibrated, RSS Calibrated, worst case Calibrated, RSS
1 A 2.47 % 1.28 % 1.20 % 0.69 %
2 A 2.20 % 1.19 % 0.93 % 0.51 %
5 A 2.04 % 1.17 % 0.77 % 0.44 %
10 A 2.00 % 1.16 % 0.73 % 0.43 %
40 A 2.15 % 1.18 % 0.87 % 0.47 %
80 A (0.3 s) 2.13 % 1.18 % 0.85 % 0.47 %

Result: within 1 % of reading from 2 A to 80 A after a one-point calibration; not within 1 % without it (the shunt's own 1 % and the layout allowance are most of the error). Below 2 A the floor is about 5 mA plus 0.7 % of reading. The calibration (bring-up step 5, which already compares the INA228 with a meter): 5-10 A from a bench supply through the shunt (or a dummy load on the 12 V rail), read on a meter with 0.3 % or better on its 10 A range; set the firmware's scale (or SHUNT_CAL) so the INA228 agrees; record the factor in the build log. VBUS the same against the meter's DC volts (its 4.7 kOhm in series with the 1 MOhm VBUS input reads 0.47 % low before calibration). The INA228's SHUNT_TEMPCO can take the shunt's 100 ppm/C against the die temperature: the two sit 10 mm apart on the same copper.

6. JLCPCB

7. Parts and prices

One board built from a 5-board PCB order (cad/body_fuse_board.py ORDER, the catalogue's entries):

Part Catalogue key Qty Seller (backup) Paid
PCB, 5 boards fuse_board_pcb 1 order JLCPCB (PCBWay) $40.60
Littelfuse MINI FL1 holder fuse_holder_mini_pcb 14 (2 spare) LCSC C142933 $1.67 (TME $4.56) $23.38
Bourns CSS2H-3920R-1L00F shunt shunt_1mohm_3920 2 LCSC C4087295 $0.78 (C1848566 $1.50) $1.57
10 Ohm 0603, 100 nF 100 V and 50 V 0603, 4.7 kOhm 2512 res_10r_0603, cap_100n_100v_0603, cap_100n_50v_0603, res_4k7_2512 LCSC minimums LCSC (alternates listed) $1.95
JST GH 4 header, housings, 4 pre-crimped wires gh_header_4p_smd, gh_housing_4p, gh_lead_2p_300 5, 2, 4 LCSC, TLC Electronics $6.97
Ancor #8 heat-shrink rings 12-10, 16-14, 22-18 AWG ring_12awg_m4, ring_14awg_m4, ring_18awg_m4 3, 12, 3 go2marine 3-packs (25-packs) $24.70
M4 x 12 socket head, M4 nyloc, M6 x 12, M5 x 14, 4 in ties screw_m4x12_socket, nut_m4_nyloc, screw_m6x12_socket, screw_m5x14_socket, cable_tie_4in 100-packs McMaster-Carr (next length up) $53.59
MINI 58V 7.5 A fuses (Littelfuse 099707.5WXN) fuse_mini58_7a5 3 LCSC C2680610 $0.58 (LCSC other suppliers $0.31) $1.73
Total $154.48 before shipping

Reused from P0: the eight MINI 58V fuses of 20, 30 and 10 A, the Adafruit 5832, W4's 8 AWG M6 lug and the bus bars' M6 nylocs. The standoffs are printed (about 26 g of PETG). The bare INA228 (ina228_ic, LCSC C2887910 $6.42, none in stock on 2026-10-27) is optional.

8. The P3 wire list

cad/body_fuse_board.P3_WIRES holds the rows in cad/body_wiring.py's form for the body to merge:

9. Building and testing it

  1. Order the PCB (section 6) and the parts (section 7); print 16 stud standoffs (15 x OD 12, 1 x OD 16), MH1's standoff and three tie blocks, 10 mm tall, in PETG.
  2. SMD first: the shunt (R1) with the board on a hot plate at about 150 C and hot air, then R2-R4, C1, C2, J17, and U1 if fitted. Inspect the shunt's four joints; R1's taps are the small pads outside its north edge.
  3. Holders: snap each FL1's peg into its oval slot (the slot takes the peg on either side of the terminals' line), check it sits flat, solder both terminals (a large tip: the + bus band is 2 oz on both layers).
  4. Insulation, before anything is bolted: more than 1 MOhm between +BAT_IN, +BUS, +12V, BUS- and every OUT_ stud, with no fuses in; +BAT_IN to +BUS reads about 1 mOhm (four-wire: 5 A in at J1, out at an output, mV across TP1-TP2).
  5. On the plate: the standoffs with their nylocs pressed in, MH1's screw into the plate's nut (plate to J16 under 0.1 Ohm), the three ties; then the lugs, each screw down through its lug into its standoff's nut.
  6. Bring-up (docs/body-electrical.md 6) with these changes: step 4's rails with the TRACO's fuses (F7, F11, F12) only; step 5 the calibration of section 5 against a meter; step 6 the RS-04 and VESC fuses one at a time. A fuse is pulled only with both packs out.

10. Still open

Arrival checks (before the board is built):

Open: