Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 11 additions & 9 deletions HANDOVER.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ manager, CAN 2.0B @500k. Docs 01–07 are the spec; read 05 (build plan) first
| Design docs 01–07 | complete (07 = module firmware, new) |
| Phase-1 schematic | **complete, v1**: 7 generated sheets, 137 components, ~90 nets machine-verified; audited (kicad-happy + ngspice 38/40 pass) |
| Footprints | all vetted; custom lib `labbench.pretty` (LM5145 RGY, LMR36015 RNX, DAC80502 no-EP WSON, PowerFET_SON5x6_GDS) |
| PCB — Phase 1 | **Routed, 0 unconnected, 0 DRC errors** (PR #3, 2026-09-27; review fixes in a follow-up PR from `claude/project-thread-nojoms`): pass-1 + `fanout.py` + Freerouting 1.9 + `finish_routes.py`, then `eco_move.py` for the review moves; 1166 tracks / 357 vias. DRC = 9 silk *warnings* (6 are J1/J4 terminal-block silk over the edge, by design). Fab zip generated. `gen_board.py` PLACEMENT matches the board again (every footprint checked) |
| PCB — Phase 1 | **100 × 80 mm, routed, 0 unconnected, 0 DRC errors** (2026-09-27, draft PR from `claude/phase1-100x80`; the 120 × 80 layout it replaces is kept on branch `phase1-120x80`). Re-placed from the netlist, so L1 now has the 17 mm MWSA1707S/XAL1510 superset land and U7 the SC-70-5 land the BOM orders (the 120 × 80 board still carried XAL1350 and SOT-23-5 lands: do not order it). Output bank tightened round the bigger L1; R30 Kelvin shunt, U4/U5 and their sense traces moved as one block with the same geometry; Q3/Q4, J4 and the LTC7004 stack down the right edge. Pipeline: pass-1 + `fanout.py` + Freerouting 1.9 + `finish_routes.py`; 1303 tracks / 353 vias. DRC = 11 silk *warnings*. Fab zip + CPL regenerated |
| PCB — Phase 3 backplane | **FAB-READY (2026-07-26, d9e1a7b)**: 0 DRC, 0 unconnected, silk 39/39 clean, no plane islands. Gerbers+drills in `fab/` (gitignored) via `python3 ../common/finish_board.py phase3-backplane.kicad_pcb`. Cross-checked: Edge_Cuts exactly 330.00×100.00 mm; drills 2×6.4 (M6 lugs), 16×2.8 (8 slots × 2 XT60 pins), 6×3.2 (M3), 86×1.0, 61×0.4. **Still gated on the XT60 polarity buzz-out before ordering** |
| PCB — Phase 2 | **83 unconnected, 0 copper DRC, silk clean (2026-07-26, c1a86eb)** — see the resume section; finish by hand in KiCad. Older detail below: |
| PCB — Phase 2 (history) | **(2026-07-25, 27fb2d1).** `gen_board.py` placement green (173 comps, all pour/courtyard/edge assertions pass, 130×90 4-layer); `route_board.py` pass-1 done (power pours, In2 heat patches, both phases' gate fan-outs, Kelvin pairs, disconnect trunk). DRC: **copper down to ~19 clearance + ~11 dangling/mask/hole in 3 known clusters** (see resume section); 243 unconnected = signal nets, autoroute not yet run. Found & fixed a real LM5143 land-pattern bug in the process (see load-bearing decisions) |
Expand Down Expand Up @@ -209,12 +209,14 @@ Notable route_board facts a future session needs:
is `common/lcsc_parts.py`; `--check` fails if anything is stale. Still
open: generic R/C/jellybean/header numbers, and the `CHECK:` rows in the
BOMs (footprint/variant mismatches vs SOURCING.md).
4. **Phase-1 board** — routed (0 unconnected, 0 DRC errors) and its
review items fixed (2026-09-27): C28 sits on U3.20, the VBUS divider
4. **Phase-1 board** — shrunk to 100 × 80 mm and re-routed (0
unconnected, 0 DRC errors, 2026-09-27) with the BOM's L1 and U7 lands;
the 120 × 80 version (wrong L1/U7 lands) is on branch `phase1-120x80`.
Earlier review items still hold: C28 sits on U3.20, the VBUS divider
(R60/R61/C62) sits by U10.14, and every part offset is in `gen_board.py`
PLACEMENT. VOUT_INT's 39.5 mm FB sense run was left as routed: it keeps
5.5 mm or more from SW copper on every layer and its long end is the
low-impedance output side. Next: owner picks the BOM `CHECK:` parts,
PLACEMENT. The VOUT_INT FB sense run (52 mm, tapped at L1.2) keeps
5.5 mm or more from SW copper on every layer, enforced by
`tools/fb_reroute.py` after routing. Next: owner picks the BOM `CHECK:` parts,
then order.

**Gates before ordering ANY board — including the fab-ready backplane:**
Expand Down Expand Up @@ -316,9 +318,9 @@ by hand. If a DRC report ever shows this class again, suspect the env.
- **INA228 ALERT has no external pull-up** in schematic v1 — firmware enables
PB7's internal one; add a discrete pull-up in the next schematic rev.
- **Grounding**: PGND/AGND split planes joined ONLY at NT1 (net-tie beside the
sense amps); In1 has an AGND pocket under the LTC7004 cluster. Never add a
via that shorts the domains — the seam geometry lives in gen_board.py
(`SEAM`, `AUXW`, `POCKET`).
sense amps). Phase-1 (100 × 80) has no AGND pocket: the LTC7004 cluster
sits below the seam. Never add a via that shorts the domains — the seam
geometry lives in gen_board.py (`SEAM`, `AUXW`).
- **Kelvin shunt**: pours grab only the outer halves of R30's pads; sense
traces leave the inner edges. Preserve this in any re-layout.
- Package truths (all datasheet-verified): LM5145 pin 15 = isolated "EP"
Expand Down
2 changes: 1 addition & 1 deletion hardware/MECHANICAL.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ component + airflow:
| Board | Size | Layers/copper | Notes |
|---|---|---|---|
| phase2-module | **130 × 90 mm** | 4-layer (stackup below) | grows from P1's 120×80 for hot-swap + 4 FETs; XT60PW-M + signal row on the bottom edge (power connector proud by ~2 mm for power-first mating) |
| phase1-module | 120 × 80 mm | 4-layer | unchanged; gets the same bottom-edge connector pair so it can plug the backplane too |
| phase1-module | **100 × 80 mm** (was 120 × 80; that layout is kept on branch `phase1-120x80`) | 4-layer | shrunk to fit JLCPCB's ≤100 × 100 mm tier; gets the same bottom-edge connector pair so it can plug the backplane too |
| phase3-backplane | **~330 × 100 mm** | 2-layer 2 oz | 8 × 30 mm slots + end margins + manager header zone; M6 lug bolts at entry; bus rails solder-reinforced |
| phase3-manager | **100 × 80 mm** | 2-layer 1 oz | display module on standoffs above (or panel-mounted via ribbon); encoder/keys wired to panel |

Expand Down
5 changes: 3 additions & 2 deletions hardware/common/lcsc_parts.py
Original file line number Diff line number Diff line change
Expand Up @@ -221,8 +221,9 @@
"through-hole, hand-solder; SOURCING lists 2EDG 5.08 plugs C3697 for "
"P1 bench IO, but this footprint is a 5.0 mm Phoenix PT - pick the "
"matching header"),
({P1: ["F1"]}, "through-hole, hand-solder; mini blade holder, likely "
"C3207114 as on the manager, not confirmed for 10 A"),
({P1: ["F1"]}, "through-hole, hand-solder; the land is KiCad's "
"direct-solder mini blade pattern, so a 10 A mini blade (ATM) fuse "
"solders straight in with no holder (C3207114 does not fit it)"),
({BP: ["C2"]}, "SOURCING's 470 uF part C106666 is THT D10; this board "
"uses a 16x17.5 SMD footprint - choose an SMD part"),
({P1: ["J2", "J3", "J5", "J6"]}, "through-hole pin header: hand-solder "
Expand Down
2 changes: 1 addition & 1 deletion hardware/phase1-module/bom/phase1-module-bom.csv
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ Item,Qty,References,Value,Footprint,LCSC,MPN,Manufacturer,Unit USD,Ext USD,Note
26,1,D5,SMBJ33A,Diode_SMD:D_SMB,C224019,SMBJ33A,Littelfuse,0.122,0.122,
27,1,D6,1N4148W,Diode_SMD:D_SOD-323,C2128,1N4148WS,"Jiangsu Changjing Electronics Technology Co., Ltd.",0.0158,0.016,1N4148WS is the SOD-323 version (1N4148W is SOD-123)
28,1,D7,STATUS,LED_SMD:LED_0603_1608Metric,C2286,KT-0603R,Hubei KENTO Elec,0.0075,0.007,red 0603 LED (Basic)
29,1,F1,10A blade,Fuse:Fuse_Blade_Mini_directSolder,,,,,,"through-hole, hand-solder; mini blade holder, likely C3207114 as on the manager, not confirmed for 10 A"
29,1,F1,10A blade,Fuse:Fuse_Blade_Mini_directSolder,,,,,,"through-hole, hand-solder; the land is KiCad's direct-solder mini blade pattern, so a 10 A mini blade (ATM) fuse solders straight in with no holder (C3207114 does not fit it)"
30,1,J1,VBUS IN,"TerminalBlock_Phoenix:TerminalBlock_Phoenix_PT-1,5-2-5.0-H_1x02_P5.00mm_Horizontal",,,,,,"through-hole, hand-solder; SOURCING lists 2EDG 5.08 plugs C3697 for P1 bench IO, but this footprint is a 5.0 mm Phoenix PT - pick the matching header"
31,1,J2,SWD,Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Vertical,,,,,,through-hole pin header: hand-solder (or pay for JLCPCB THT assembly)
32,1,J3,UART,Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical,,,,,,through-hole pin header: hand-solder (or pay for JLCPCB THT assembly)
Expand Down
78 changes: 39 additions & 39 deletions hardware/phase1-module/bom/phase1-module-cpl.csv
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,22 @@ C18,63.4000mm,-62.0000mm,Top,0
C19,68.2000mm,-61.0000mm,Top,0
C20,50.0000mm,-36.9000mm,Top,270
C21,42.3000mm,-36.9000mm,Top,270
C22,106.2000mm,-26.9000mm,Top,90
C23,89.6000mm,-36.9000mm,Top,270
C22,103.1600mm,-26.9000mm,Top,90
C23,91.5600mm,-36.9000mm,Top,270
C24,60.2000mm,-64.0000mm,Top,0
C25,63.2000mm,-56.0000mm,Top,0
C26,63.4000mm,-58.5000mm,Top,0
C27,75.3000mm,-47.2000mm,Top,90
C28,67.7500mm,-52.2000mm,Top,90
C29,72.0000mm,-61.5000mm,Top,0
C31,122.2000mm,-49.0000mm,Top,0
C32,127.5000mm,-60.0000mm,Top,270
C33,119.6000mm,-39.5000mm,Top,0
C34,110.5000mm,-56.0000mm,Top,270
C41,127.7000mm,-36.6000mm,Top,90
C42,122.0000mm,-45.5000mm,Top,270
C43,112.8000mm,-65.5000mm,Top,270
C44,107.0000mm,-58.0000mm,Top,270
C31,99.6000mm,-56.7000mm,Top,270
C32,107.8000mm,-69.2000mm,Top,270
C33,106.8000mm,-41.0000mm,Top,90
C34,103.6000mm,-60.0000mm,Top,270
C41,111.5000mm,-60.1000mm,Top,90
C42,117.6000mm,-62.6000mm,Top,0
C43,97.0000mm,-64.0000mm,Top,270
C44,101.6000mm,-59.9000mm,Top,270
C50,28.2000mm,-52.2000mm,Top,0
C51,28.2000mm,-55.6000mm,Top,0
C52,37.0000mm,-52.5000mm,Top,270
Expand All @@ -38,19 +38,19 @@ C65,93.0000mm,-74.0000mm,Top,0
C66,76.8000mm,-79.0000mm,Top,0
C67,76.8000mm,-82.0000mm,Top,0
C68,83.0000mm,-90.5000mm,Top,0
C69,113.0000mm,-76.5000mm,Top,0
C70,113.0000mm,-83.5000mm,Top,0
C69,109.0000mm,-76.3000mm,Top,0
C70,109.0000mm,-83.7000mm,Top,0
C71,83.3000mm,-75.8000mm,Top,0
C72,96.7000mm,-75.8000mm,Top,0
C73,83.3000mm,-88.2000mm,Top,0
C74,96.7000mm,-88.2000mm,Top,0
C75,54.0000mm,-36.9000mm,Top,270
C76,58.0000mm,-36.9000mm,Top,270
C77,62.0000mm,-36.9000mm,Top,270
C78,95.5000mm,-26.9000mm,Top,90
C79,93.3000mm,-36.9000mm,Top,270
C80,97.0000mm,-36.9000mm,Top,270
C81,100.7000mm,-36.9000mm,Top,270
C78,94.3400mm,-26.9000mm,Top,90
C79,94.7800mm,-36.9000mm,Top,270
C80,98.0000mm,-36.9000mm,Top,270
C81,101.2200mm,-36.9000mm,Top,270
D1,68.0000mm,-78.5000mm,Top,0
D2,75.5000mm,-85.5000mm,Top,0
D3,54.4000mm,-66.2000mm,Top,0
Expand All @@ -62,20 +62,20 @@ F1,34.7500mm,-26.5000mm,Top,0
J1,25.0000mm,-35.5000mm,Top,270
J2,65.0800mm,-96.8000mm,Top,90
J3,48.5400mm,-96.8000mm,Top,90
J4,136.5000mm,-44.5000mm,Top,90
J5,136.5000mm,-78.8900mm,Top,0
J4,116.6500mm,-51.8000mm,Top,90
J5,116.5000mm,-81.5900mm,Top,0
J6,30.8700mm,-94.0000mm,Top,90
L1,81.0000mm,-35.0000mm,Top,0
L1,80.5700mm,-35.0000mm,Top,0
L2,33.0000mm,-61.0000mm,Top,0
Q1,67.5000mm,-30.0000mm,Top,0
Q2,67.5000mm,-43.0000mm,Top,180
Q3,122.9000mm,-30.0000mm,Top,0
Q4,131.7000mm,-30.0000mm,Top,180
Q3,115.5000mm,-34.0000mm,Top,270
Q4,115.5000mm,-42.5000mm,Top,90
Q5,51.5000mm,-58.0000mm,Top,0
Q6,55.5000mm,-58.0000mm,Top,0
Q7,128.0000mm,-65.5000mm,Top,0
Q7,95.5000mm,-68.0000mm,Top,0
Q8,34.0000mm,-90.2000mm,Top,0
Q9,109.0000mm,-67.0000mm,Top,0
Q9,99.5000mm,-68.0000mm,Top,0
R1,60.2000mm,-54.0000mm,Top,0
R2,60.2000mm,-60.0000mm,Top,0
R3,58.5000mm,-81.5000mm,Top,0
Expand All @@ -94,19 +94,19 @@ R23,51.0000mm,-65.0000mm,Top,0
R24,60.2000mm,-62.0000mm,Top,0
R25,63.4000mm,-60.0000mm,Top,0
R26,63.4000mm,-64.0000mm,Top,0
R27,104.7000mm,-37.2000mm,Top,270
R27,109.5200mm,-24.4000mm,Top,90
R28,77.6000mm,-47.2000mm,Top,90
R29,66.2000mm,-36.6000mm,Top,270
R30,114.5000mm,-30.0000mm,Top,0
R31,118.5000mm,-49.0000mm,Top,0
R32,130.5000mm,-54.0000mm,Top,270
R33,130.5000mm,-60.0000mm,Top,270
R43,122.0000mm,-66.0000mm,Top,270
R44,131.5000mm,-65.5000mm,Top,270
R45,104.0000mm,-53.0000mm,Top,270
R46,104.0000mm,-58.0000mm,Top,270
R47,124.5000mm,-62.5000mm,Top,270
R48,124.5000mm,-68.5000mm,Top,270
R30,106.7000mm,-34.8000mm,Top,0
R31,99.6000mm,-53.5000mm,Top,270
R32,106.0000mm,-66.0000mm,Top,270
R33,106.0000mm,-69.2000mm,Top,270
R43,92.0000mm,-68.0000mm,Top,270
R44,114.5000mm,-62.6000mm,Top,0
R45,101.6000mm,-53.5000mm,Top,270
R46,101.6000mm,-56.7000mm,Top,270
R47,102.8000mm,-64.5000mm,Top,270
R48,102.8000mm,-67.7000mm,Top,270
R50,34.0000mm,-65.5000mm,Top,0
R51,34.0000mm,-68.0000mm,Top,0
R52,103.5000mm,-81.5000mm,Top,0
Expand All @@ -124,12 +124,12 @@ RT2,81.0000mm,-48.7000mm,Top,0
U1,54.0000mm,-82.0000mm,Top,0
U2,64.0000mm,-82.0000mm,Top,0
U3,67.0000mm,-56.0000mm,Top,0
U4,114.5000mm,-44.0000mm,Top,90
U5,114.5000mm,-56.0000mm,Top,90
U6,127.0000mm,-42.0000mm,Top,0
U7,114.0000mm,-62.0000mm,Top,0
U4,106.7000mm,-48.8000mm,Top,90
U5,106.7000mm,-60.8000mm,Top,90
U6,115.8000mm,-59.6000mm,Top,180
U7,99.5000mm,-64.0000mm,Top,0
U8,33.0000mm,-54.9997mm,Top,0
U9,31.5000mm,-73.0000mm,Top,0
U10,90.0000mm,-82.0000mm,Top,0
U11,118.0000mm,-80.0000mm,Top,0
U11,109.0000mm,-80.0000mm,Top,0
Y1,81.5000mm,-80.5000mm,Top,0
Binary file modified hardware/phase1-module/phase1-module-fab.zip
Binary file not shown.
Loading
Loading