Drogheda/03-Architecture-Hardware/watchdog-production-schematic-delta.md
Leopoldo Rodríguez 2c3dffa232 2026-07-02: PROD schematic complete (ERC 0) + carrier-board PCB + doc sweep to the Jul-2 ledger
Electrical/PCB:
- LTC4040 Block B sized to the 12 Ah 1S4P pack (RPROG 825R -> 2.42 A ~ C/5,
  RS 8 mR -> 3.1 A input limit, PFI 4.60 V, backup 4.79 V, charge 4.00 V Li-ion
  via VSYS-referenced straps) + Block E cutoff (P11) + Block F PA4->VEH5V re-tap
  + Block H fail-safe Modo-B bypass (K1 normally-closed relay) + Block I NTC->PB1.
- CARRIER-BOARD conversion: simpleRTK2B Pro on UNO-pattern female headers (MOD1;
  D0/D1=UART1, D2=RX2, D8=TX2, IOREF=3V3, 5V=SW_5V) + 4G NTRIP Master on on-board
  XBee socket (J7/J8; VCC=3V3_MODEM via new Block K MP1584 buck off SW_5V - the
  HP XBee socket is 3.3 V not 5 V). Board 120x100, placement + GND pour + DRC
  baselines. Custom symbols: LTC4040EUFD, AO4406A, SimpleRTK2B_Pro_Socket.
- Fixed duplicated U2, stale no-connects, A4->A3 sheet; ERC 0 errors.

Docs:
- Canonical electrical-design-state + production delta (Block B values table,
  5b/5c/5d/5e) + design/rationale/connections/BOM swept to the Jul-2 assumptions
  ledger (Conexiones-por-Bloque xlsx).
- Guia de Conexion Protoboard: LaTeX source now maintained in-repo -> v2.1 PDF.
- CircuiTikZ sheet + wiring Beamer: block 11 (NTC->PB1) + guinda ignition legend.
- Client decks: Avance v1.1 (overclaims fixed) + RCA v1.1 (2-jul addendum).

Repo hygiene:
- .gitignore: live rtk-config (SIM/APN/NTRIP creds) now ignored and REMOVED from
  tracking (NOTE: rotate those credentials - they exist in prior commits);
  KiCad .bak/snapshots/.history, LaTeX intermediates, Office locks ignored+purged.
- Removed rogue .history gitlinks that broke git status.
2026-07-02 22:18:56 -06:00

378 lines
23 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: Watchdog v3 — Production Schematic Build Spec (delta from the prototype)
tags: [project-drogheda, hardware, watchdog, schematic, production, delta, build-spec]
project: Project Drogheda
author: Helgen CTO
date: 2026-06-25
status: Active — build spec for the PRODUCTION schematic (proto file = current; this = what to add/change)
supersedes: reconciles watchdog-connections.xlsx (Jun23) + watchdog-pcb-v3-bom.xlsx with the Jun-24 canonical state
---
# Watchdog v3 — Production Schematic Build Spec (Δ from prototype)
> **Why this exists.** Decision (2026-06-25): the current `kicad/hbox-watchdog-v3.kicad_sch`
> is the **PROTOTYPE** (module buck, no battery). This doc is the **delta to build the
> PRODUCTION schematic** on the copy `kicad/hbox-watchdog-v3-PROD.kicad_sch`. It is the
> single reconciled definition — the connection list (Jun 23) and the v3 BOM predate the
> Jun-24 battery re-add, so they are *not* on their own a production spec. **Authority order:**
> [[watchdog-electrical-design-state|electrical-design-state.md]] (CANONICAL) > design doc >
> BOM/connection-list. Build against this file.
## Build status (2026-06-25) — Blocks A / C / D BUILT on PROD
Built on `kicad/hbox-watchdog-v3-PROD.kicad_sch` via the KiCad MCP. **ERC = 0 errors**; ~20 cosmetic
warnings remain (off-grid auto-placement, reserved-pin NC flags now legitimately used, and L/SW_Push/
Q_NPN_BCE symbol-cache mismatches) — all clear during layout positioning + Tools→Update Symbols from Library.
- **Block A — discrete buck — DONE.** Replaced the 3-pin U2 module with a **custom MP1584EN symbol**
(`Drogheda-sym.kicad_sym`; datasheet pinout **1=SW 2=EN 3=COMP 4=FB 5=GND 6=FREQ 7=VIN 8=BST**,
registered in the project `sym-lib-table`). Wired: VIN←24V, SW→L2→5V_FAN, FB divider R20 100k /
R21 19.1k (→5.0 V), C22 22µF in, C23 22µF out, Dbk SS34 freewheel (K→SW, A→GND), Cbst 10nF BST–SW.
**New support parts added beyond the original BOM (required for the discrete IC):** Rfreq 100k
(FREQ→GND, sets fsw), Rcomp 40.2k + Ccomp 2.2nF (COMP loop comp), Ren1 100k / Ren2 20k (**EN UVLO
divider — EN abs-max is 6 V, so it must NOT tie directly to 24 V**). **⚠ Bench-tune (typical placeholders):**
Rfreq (target fsw), Rcomp/Ccomp (loop stability), Ren1/Ren2 (UVLO threshold).
- **Block C — reset — DONE.** SW1 (Switch:SW_Push) + P10 (2-pin ext) → NRST (J1.5) → GND.
- **Block D — 4-LED gauge — DONE.** RB1–4 330 Ω + DB1–4 LED on PB12–15 (J2.1–4) → GND.
- **Cleanup:** deleted 3 labels (24V/GND/5V_FAN) orphaned when the old U2 module was removed.
- **Footprints:** the new parts carry no footprint yet — assign at layout (same as the existing parts).
- **Still deferred:** Block B (LTC4040) + E (cutoff) + F (PA4→VEH5V). **Pack Ah confirmed = ~12 Ah** (2026-06-30) → LTC4040 sizing can proceed.
## Build status (2026-07-02) — Blocks B / E / F / H / I capture session
**LTC4040 sized to the 12 Ah pack** (§4 values table — datasheet 4040fb formulas; internally
compensated, no external comp). New Blocks **H** (K1 NC bypass relay, §5b) and **I** (NTC→PB1,
§5c) specified from the Jul-2 assumptions ledger.
**BUILT 2026-07-02 (all of B/E/F/H/I) — ERC = 0 errors**, 62 cosmetic warnings (off-grid
auto-placement + L/Q_NPN_BCE/SW_Push/AO4406A symbol-cache mismatches → clear during layout
positioning + Tools→Update Symbols from Library). Capture notes:
- 37 new components, 107 pins netted; sheet bumped **A4→A3**; custom symbols **LTC4040EUFD** +
**AO4406A** added to `Drogheda-sym.kicad_sym`.
- Rail split done: `P2/R7/JP1 → VEH5V` · `F1/R2/J1-20/J2-18 → SYS5V` (P11 cutoff between
MAIN5V→SYS5V). **JP1's alt rail is now VEH5V** (vehicle 5 V, never battery-backed — a fan on
the backed-up rail would drain the pack; refine of the old MAIN5V tie).
- **P4 → 3-pos** (BAT+, BAT−, NTC); legacy P4 GND stub wire cut, stale labels removed.
- Fixed a **duplicated U2** (two MP1584 instances stacked at the same position — deleted both,
re-placed one). Removed 10 stale no_connect flags on header pins that had gained nets.
- New MCU taps live: `CHRG_EN` J2/5 · `CHRG_STAT` J2/11 · `CHRG_FAULT` J2/12 · `BYP_CTRL` J2/13 ·
`NTC_TEMP` J1/15. §6.2 GNDREF note is **stale — no placed GNDREF remains on PROD** (verified).
- Footprints assigned at capture for all new parts except **L6** (8040 inductor) and **K1**
(HFD23 relay) — assigned during layout kickoff.
Fab gate: **bench validation of the LTC4040 backup transition + temp-qualified charge cutoff** (unchanged).
## 0. What the prototype schematic already has (the shared core — DO NOT re-draw)
49 parts, ERC-clean. Present and correct on **both** boards: MCU (J1/J2), MAIN5V/3V3 rails,
24 V reverse-polarity (Q10 IRFR5305 + DzG 15 V Zener + Rrp), TVS D10 + C10/C11, RTK-stack
high-side load switch (Q1 AO3401A / Q5 MMBT3904 / R1 / R2 / F1 PPTC / C3), the three sense
dividers (BAT PA0, 5V PA4, IGN PA5) incl. on-board ignition chain (Rig + D5 BAT54 + C9),
fan low-side driver (Q2 AO3400A + Rg + Rgs + D2 SS34), I²C temp/humidity (U3 SHT40 + U4
TMP102 + R30/R31), status LED (Q4 + D1 + R3 + Rled), connectors P1–P8, H3 (DNP).
**The production board keeps all of the above unchanged** except the two corrections in §6.
Everything in §1–§5 below is *added* on top.
## 1. Production delta — summary
| Block | Action | Status |
|---|---|---|
| A. Fan buck U2 | **Replace** the 3-pin module placeholder with the **discrete MP1584** circuit | ✅ fully specified · BUILT |
| B. LTC4040 battery backup | **Add** charger + power-path + NTC; re-route P2→VEH5V→LTC4040→MAIN5V | ✅ **sized 2026-07-02** (§4 values table) — bench-validate before fab |
| C. Reset | **Add** SW1 (on-board) + P10 (external) → NRST | ✅ fully specified · BUILT |
| D. 4-LED battery gauge | **Add** D_BAT1–4 + 4×330 Ω on PB12–PB15 | ✅ fully specified · BUILT |
| E. Power cutoff | **Add** P11 series switch in the post-merge 5 V (kills vehicle **and** battery) | ✅ node defined (MAIN5V→SYS5V, §5) |
| F. Corrections | Move PA4 sense tap to vehicle side (`VEH5V`); finish GND unify | ✅ do on both boards |
| G. H1 SWD | **DROP** (rely on USB-C flash + USB log); optional DNP 4-pad footprint | ✅ decided 2026-06-25 |
| H. Modo-B fail-safe bypass | **Add** K1 NC signal relay in the uplink (F9P TX2→4G DIN); MCU energizes to insert | ✅ specified 2026-07-02 (§5b) |
| I. NTC→PB1 hot-spot temp | **Add** P12 NTC connector + 10 k (1 %) divider + 100 nF on PB1 (block 11) | ✅ specified 2026-07-02 (§5c) |
## 2. New Blackpill pins consumed (WeAct pinout, design §2a)
| Pin | Header | Net | Use |
|---|---|---|---|
| PA8 | J2/5 | `CHRG_EN` | LTC4040 CHGOFF — MCU cuts charge when TMP102/PB1 reads cell hot (100 k pull-down = enabled by default) |
| PB12 | J2/1 | `BATLED1` | gauge 25 % (was reserved 2nd-fan-tach spare → reassigned) |
| PB13 | J2/2 | `BATLED2` | gauge 50 % |
| PB14 | J2/3 | `BATLED3` | gauge 75 % |
| PB15 | J2/4 | `BATLED4` | gauge 100 % |
| NRST | J1/5 | `NRST` | reset (SW1 + P10) |
| PB1 | J1/15 | `NTC_TEMP` | **[NEW 2026-07-02]** analog hot-spot temp (ADC1_IN9), block 11 |
| PB3 | J2/11 | `CHRG_STAT` | **[NEW]** U6 CHRG open-drain, 100 k↑3V3 (LOW = charging) |
| PB4 | J2/12 | `CHRG_FAULT` | **[NEW]** U6 FAULT open-drain, 100 k↑3V3 (LOW = NTC/bad-battery fault) |
| PB5 | J2/13 | `BYP_CTRL` | **[NEW]** K1 relay driver via Q6 (HIGH = MCU in-line on the Modo-B uplink) |
No peripheral conflict: PB12–15 plain GPIO; PA8 plain GPIO; NRST is the module reset pin.
---
## 3. Block A — Discrete fan buck (replace U2 module) ✅
**Remove:** the `U2 = Conn_01x03` placeholder ("MP1584 mod").
**Add** (values from design §4.2 + production BOM):
| Ref | Value / MPN | Pkg | LCSC | Note |
|---|---|---|---|---|
| U2 | MP1584EN | SOIC-8-EP | C107226 | 24→5.0 V buck |
| L2 | 10 µH ≥1 A | SMD 4×4 | verify | per datasheet |
| R20 | 100 k 1% | 0603 | C25803 | FB top |
| R21 | 19.1 k 1% | 0603 | verify | FB bottom → Vout=0.8·(1+R20/R21)≈5.0 V |
| C22 | 22 µF / 50 V | 1210 | verify | buck input cap |
| C23 | 22 µF / 16 V | 0805 | C45783 | buck output cap |
| Dbk | SS34 | DO-214AC | C8678 | buck freewheel (separate from fan flyback D2) |
| JP1 | 0 Ω / open | 0603 | C21189 | rail select — **OPEN** = use buck |
**Connections (From → To · Net):** (pin functions per MP1584 datasheet — confirm exact pin #s at capture)
```
U2.IN → 24V 24V (protected rail, post-Q10)
U2.EN → 24V - enable (or datasheet EN divider)
C22.1 → 24V 24V input cap at the IC
C22.2 → GND GND
U2.SW → L2.1 SW2_NODE keep switch-node copper tiny
Dbk.K → L2.1 SW2_NODE freewheel cathode to SW node
Dbk.A → GND GND
L2.2 → 5V_FAN 5V_FAN
C23.1 → 5V_FAN 5V_FAN output cap
C23.2 → GND GND
R20.1 → 5V_FAN 5V_FAN FB top
R20.2 → U2.FB FB
R21.1 → U2.FB FB
R21.2 → GND GND
JP1.1 → 5V_FAN 5V_FAN OPEN by default
JP1.2 → MAIN5V MAIN5V close ONLY if upsizing SD-15B-05 (never both)
```
BST/COMP/SS small caps **per MP1584 datasheet** (e.g. BST ~10 nF) — add at capture.
Keep U2 + L2 + the SW node **away from the GNSS antenna feed / P3** (RF, design §8).
The existing **fan flyback D2 (SS34)** across the fan stays as-is.
---
## 4. Block B — LTC4040 battery backup ✅ SIZED 2026-07-02 (datasheet 4040fb pass, 12 Ah pack)
**Intent (canonical power tree):** `P2 (vehicle 5 V from SD-15B-05) → VEH5V → RS → U6 power path
→ VSYS = MAIN5V (the backed-up rail) ; LTC4040 ↔ 1S4P cell on P4 ; NTC on the cell.`
LTC4040 architecture: single inductor SW↔BAT works as **step-down charger** (VSYS→BAT) when input
is good and **2.5 A step-up backup** (BAT→VSYS) when PFI trips. A **mandatory external NFET (Q7)**
between VIN and VSYS (gate = IGATE charge pump) disconnects the dead input during backup. Buck and
boost are **internally compensated** — no external comp network.
| Ref | Value / MPN | Formula → result | Note |
|---|---|---|---|
| U6 | **LTC4040EUFD** | — | QFN-24 4×5 mm, EP = GND (stitch) |
| Q7 | NFET 30 V ≥10 A, ≤15 mΩ, SOIC-8 (AO4406A-class) | — | VIN→VSYS disconnect, gate = IGATE |
| RS | **8 mΩ 1 %** (1206/2512 sense) | I_SYSLIM = 25 mV/RS → **3.1 A** | protects the SD-15B-05 (5 V/3 A); charge sheds first, load prioritized |
| RPROG | **825 Ω 1 %** | I_CHG = 2500·(0.8 V/RPROG) = 2000/RPROG → **2.42 A ≈ C/5** | ≤2.5 A max; PROG servos 0.8 V |
| RPF1/RPF2 | **287 k / 100 k 1 %** (VEH5V→PFI→GND) | trip = 1.19 V·(1+R1/R2) → **4.60 V falling**, ≈4.72 V recover | ⚠ bench-tune if the vehicle rail sags in service |
| RFB1/RFB2 | **499 k / 100 k 1 %** (VSYS→BSTFB=RSTFB→GND) | V_backup = 0.8 V·(1+R1/R2) → **4.79 V**; RST threshold −7.5 % ≈ 4.43 V | BSTFB+RSTFB shorted, one divider (datasheet) |
| L6 | **2.2 µH, Isat ≥ 8 A, DCR < 20 mΩ** (8040 power inductor) | datasheet range 1–2.2 µH; boost NMOS ILIM 5.5–7.5 A | SW↔BAT; tiny SW copper |
| CVIN | 10 µF X5R + 2.2 µF | — | at U6 VIN |
| CVSYS | **≥100 µF low-ESR ceramic** (2×47 µF 1210 + 10 µF) | datasheet minimum | backup-transition hold-up |
| CBAT | 22 µF X5R | ≥10 µF required | at U6 BAT |
| RNTB | **10 k 1 % low-drift** (VEH5V/VIN→NTC) | with RT1 10 k: datasheet default window | B3380 ideal; **B3950 acceptable** (trip shifts a few °C — note in bring-up) |
| RT1 | 10 k NTC **on the cell** (via P4.3) | — | NTC→GND at U6 |
| P4 | **JST-XH 3-pos** (was 2-pos) | — | 1=BAT+, 2=BAT−, 3=NTC |
| F2/F0 straps | **→ VSYS** · F1 → GND (solder jumpers JP2/3/4) | table: F2=1,F1=0,F0=1 → **4.00 V Li-ion** | strap to **VSYS not 3V3** so chemistry survives an absent MCU; 4.00 V ≈ 3× cycle life, kinder to hot cells (RCA #1); LiFePO4 = re-strap F2→GND (3.50 V) |
| CHGOFF | net `CHRG_EN` → PA8 + **100 k pull-down** | >1.2 V = charge OFF | default = charging enabled, NTC still guards |
| BSTOFF | **tie GND** | — | backup always armed; never float |
| CHRG / FAULT | → PB3 / PB4, **100 k↑3V3** | open-drain | STREAM-log telemetry |
| PFO | test point + DNP 100 k↑ | — | PA4 (VEH5V ÷2) already covers power-fail sensing |
| RST | leave open | — | Blackpill has its own supervisor |
| OVSNS | **short to VIN** | OVP module unused | input is the regulated SD-15B-05 inside the cabinet; 24 V side carries SPD |
| CLPROG | test point only | I_SYS = V_CLPROG/(32·RS) | unbuffered — do not load |
**Connections (From → To · Net):**
```
P2.1 → VEH5V VEH5V vehicle 5 V in (RENAMED from MAIN5V)
P2.2 → GND GND
VEH5V → RS.1 VEH5V RS = input current sense
RS.2 → U6.CLN + Q7.D VIN_SNS (U6.VIN Kelvin at RS.1 side: VIN pin → VEH5V node)
Q7.S → MAIN5V MAIN5V Q7 = VIN→VSYS disconnect NFET, gate → U6.IGATE
U6.VSYS(1,24) → MAIN5V MAIN5V backed-up system rail (feeds §5 cutoff merge)
U6.SW(21,22) → L6.1 SW_BAT keep copper tiny
L6.2 → U6.BAT + P4.1 BAT_PLUS (+ existing BAT_SENSE divider R5.1 stays on BAT_PLUS)
P4.2 → GND GND 1S4P −
P4.3 → U6.NTC NTC RT1 at the cell; RNTB 10 k VEH5V→NTC on-board
U6.PROG → RPROG → GND -
U6.CLPROG → TP -
U6.PFI → RPF1/RPF2 node PFI divider from VEH5V
U6.BSTFB + U6.RSTFB → RFB1/RFB2 node FB divider from MAIN5V
U6.CHGOFF → PA8 CHRG_EN + 100 k → GND
U6.BSTOFF → GND GND
U6.CHRG → PB3 CHRG_STAT + 100 k → 3V3
U6.FAULT → PB4 CHRG_FAULT + 100 k → 3V3
U6.F2/F0 → MAIN5V (VSYS) - via JP2/JP4 ; U6.F1 → GND via JP3
U6.OVSNS → U6.VIN VEH5V OVP unused
U6.EP → GND GND thermal/electrical
```
**Checklist (fab gate unchanged):**
- [x] ~~Confirm pack Ah~~ → **~12 Ah** (corrected 2026-06-30). RPROG sized (2.42 A ≈ C/5).
- [x] ~~Size L6, RS, PFI divider, compensation~~ → table above (internally compensated; no comp parts).
- [x] ~~Jumper-select charge voltage~~ → JP2/3/4 straps to VSYS/GND, default 4.00 V Li-ion.
- [ ] **Bench-validate** the temp-qualified charge cutoff + backup transition **before fab**.
- [ ] ⚠ **Safety-timer note:** deep-discharge full recharge (12 Ah @ 2.42 A ≈ 5 h) exceeds the
internal charge safety timer — firmware restarts the cycle via `CHRG_EN` when the cell is
cool and `BAT_SENSE` is low (see canonical §7 firmware items).
> The proto validates this path with the TP4056 + MT3608 + 1N5819 OR-ing + 10 k NTC stand-in
> (proto BOM). The PCB uses the LTC4040. Only the temp-qualified cutoff is LTC4040-only →
> validate that in firmware logic.
---
## 5. Blocks C / D / E — reset, gauge, cutoff ✅ (E node pending B)
**C. Reset**
| Ref | Part | Connections |
|---|---|---|
| SW1 | SPST momentary (SOT/SMD tact) | NRST → SW1 → GND |
| P10 | JST-XH 2-pos (external reset) | P10.1 → NRST · P10.2 → GND |
**D. 4-LED battery gauge** (firmware-driven from `BAT_SENSE`, HIGH = lit)
| Ref | Part | Connections |
|---|---|---|
| R_BL1..4 | 330 Ω 0603 ×4 | PB12→R_BL1, PB13→R_BL2, PB14→R_BL3, PB15→R_BL4 |
| D_BAT1..4 | LED 0805 ×4 | R_BLn → D_BATn.A ; D_BATn.K → GND |
**E. Power cutoff** (kills vehicle **and** battery)
- External switch in series in the **post-merge** 5 V (LTC4040 VSYS/MAIN5V → system loads).
- Define `SYS5V` = MAIN5V after the cutoff; route the Blackpill 5 V pin + load-switch (Q1 source
+ F1) + the K1 relay coil from `SYS5V`. Implement as 2-pos connector **P11** to an external
switch: `P11.1 → MAIN5V · P11.2 → SYS5V`. **Ship with a jumper plug installed** (open P11 =
dead board). The **PA4 divider taps VEH5V** (Block F), *not* SYS5V.
- Merge/cutoff node finalized with the §4 pass: MAIN5V = U6 VSYS output rail.
## 5b. Block H — Modo-B fail-safe uplink bypass ✅ NEW 2026-07-02
**Requirement (ledger):** a dead/absent/hung MCU must never cut RTCM3 corrections. In Modo B the
watchdog sits in-line on the *uplink* (F9P TX2 → 4G DIN) to inject `$PHLG`; the RTCM3 *downlink*
(4G DOUT → F9P RX2) is always direct and never enters the MCU.
**Implementation: SPDT signal relay, normally-closed** — chosen over an analog mux because a mux
dies with the 3V3 rail; relay contacts keep the direct path **even with the Blackpill physically
removed or the board unpowered**.
| Ref | Part | Note |
|---|---|---|
| K1 | SPDT signal relay, 5 V coil (HFD23/005-class) | NC = direct path; coil ~30 mA only while MCU inserted |
| Q6 | MMBT3904 (SOT-23) | low-side coil driver |
| R40 / R41 | 1 k (PB5→base) / 10 k (base→GND) | default OFF |
| D6 | 1N4148 (SOD-123) | coil flyback |
| P13 | JST-XH 3-pos | 1 = F9P_TX2 · 2 = 4G_DIN · 3 = GND |
```
P13.1 → K1.NC + PA10 F9P_TX2 PA10 = passive monitor tap (USART1 RX)
K1.COM → P13.2 4G_DIN
K1.NO → PA9 PA9_TX MCU uplink (USART1 TX, $PHLG injection)
SYS5V → K1.coil+ SYS5V
K1.coil− → Q6.C ; Q6.E → GND ; PB5 → R40 → Q6.B ; R41 B→GND ; D6 across coil (K→SYS5V)
```
De-energized (default, MCU dead, board cut off): **NC closes F9P TX2 → 4G DIN** — corrections
and position flow exactly as if the watchdog weren't there.
## 5d. Block J — CARRIER-BOARD sockets (F9P + 4G on the board) ✅ NEW 2026-07-02 (PM)
**Decision (Leo):** the PROD board is now the **HBOX carrier/motherboard** — all three modules
ride on female headers: Blackpill (J1/J2, already socketed), **simpleRTK2B Pro as an
Arduino-UNO-form shield** (MOD1), and the **4G NTRIP Master on its own XBee socket** (J7/J8).
Board grown **100×80 → 120×100 mm** (Leo approved; ASA case/plate to be reprinted).
| Ref | Part | Note |
|---|---|---|
| MOD1 | 4× UNO female headers (10+8+8+6, 2.54 mm) | footprint `Module:Arduino_UNO_R3`; custom symbol `SimpleRTK2B_Pro_Socket` in `Drogheda-sym` |
| J7/J8 | 2× PinSocket 1×10, **2.00 mm** | XBee socket, rows **22.35 mm** apart (J7 = pins 1–10 row) |
**MOD1 pin map (pads = KiCad UNO footprint; functions verified against the official
`pinout-simpleRTK2B_Pro-R00` image + UNO geometry cross-check):**
```
D0 = TX1 (F9P UART1 TX) → GNSS_RX (PA3) power hdr: 5V → SW_5V (Pro's "5V=OUTPUT" sw OFF)
D1 = RX1 (F9P UART1 RX) → GNSS_TX (PA2) IOREF → 3V3 (defines TX/RX levels)
D2 = RX2 (F9P UART2 RX) → DOUT_4G (RTCM3 in, direct) GND ×3 → GND
D8 = TX2 (F9P UART2 TX) → USART1_RX (K1.NC + PA10 tap) 3V3/VIN/RESET/A0–A5/D3–D7/D9–D13/
AREF/SDA/SCL → NC (per Ardusimple:
don't connect unused special pins)
```
**XBee socket:** J7.1 VCC → **3V3_MODEM** (⚠ the Pro's HP socket spec is **3.3 V, 1 A/1.5 A pk**
— NOT 5 V; the old "socket gives 5 V" note was wrong) · J7.2 DOUT → `DOUT_4G` → F9P RX2
(RTCM3 **direct**, never through the MCU) · J7.3 DIN ← K1.COM (`DIN_4G`) · J7.10 GND. J8 all NC.
**Consequences:** Modo B is now the *permanent* uplink architecture with the K1 NC bypass as the
hardware fail-safe (dead/absent MCU ⇒ TX2→DIN direct). The F9P's own XBee socket stays EMPTY;
its **XBEE↔UART switch parks on UART1** so UART2 stays on the rails. **P3 / P13 / H3 → DNP**
(harness alternatives for non-socketed installs).
## 5e. Block K — 3V3_MODEM buck (U7) ✅ NEW 2026-07-02 (PM)
The modem needs 3.3 V @ ≥1.5 A pk — too much for the Blackpill's LDO, and an LDO from 5 V would
burn ~1.7 W. Second **MP1584EN** (U7, same BOM as Block A) fed from **SW_5V** so the watchdog's
stack power-cycle also reboots the modem (invariant #3):
`U7: VIN/EN=SW_5V · SW→L7 10 µH→3V3_MODEM · FB R60 100k / R61 31.6k (→3.33 V) · Dbk2 SS34 ·
Cbst2 10 nF · Rfreq2 100k · Rcomp2 40.2k + Ccomp2 2.2 nF · C40 22 µF in · C41 22 µF + C43 100 µF
elco out (LTE bursts)`.
## Build status (2026-07-02 PM) — carrier conversion BUILT
MOD1 + J7/J8 + Block K captured; **ERC 0 errors** (82 cosmetic). Board **120×100**, outline +
GND pour resized, holes at (5,5)(115,5)(5,95)(115,95). Placement: shield field center-bottom
(courtyard ≈ x22.6–98, y45–99) with **only SMD ≤6 mm underneath** (LTC4040 block, dividers,
I²C, NTC, Rdfu); Blackpill sockets horizontal above it; XBee rows vertical right (module field
x≈92–119, y26–44); K1/relay + buck A top-right; all operator/access parts (SW1, gauge, JSTs,
P1) outside the shield. **DRC: 87 pre-route errors** — ~55 are the *by-design* under-shield
courtyard overlaps vs MOD1 + ~29 sub-mm courtyard kisses left for the placement review.
⚠ Review notes: P3 (DNP) sits in the shield's notch corner; J8 is 1.2 mm from the board edge;
**verify D2/D8 = RX2/TX2 against a physical Pro before routing** (positions read from the
official pinout image).
## 5c. Block I — NTC→PB1 hot-spot temperature (block 11) ✅ NEW 2026-07-02
| Ref | Part | Note |
|---|---|---|
| R42 | 10 k **1 %** (3V3 → PB1 node) | divider top |
| P12 | JST-XH 2-pos | external 10 k NTC (B≈3950), placed at the hot spot (battery/modem) |
| C24 | 100 nF (PB1 → GND) | ADC settling |
`3V3 → R42 → PB1 (+C24) → P12.1 ; P12.2 → GND`. ≈1.65 V @ 25 °C; firmware Beta/Steinhart;
can drive the `CHRG_EN` cutoff. This is the proto's temperature path (no SHT40 in hand);
the PCB keeps U3/U4 (I²C) **and** this channel.
---
## 6. Corrections to make on BOTH boards (proto + production) ✅
1. **PA4 5V-sense tap → vehicle side (live Finding 3).** With the LTC4040 backing MAIN5V,
`R7.1` must move from `MAIN5V` to **`VEH5V`** (the P2/SD-15B-05 node, before hold-up).
On the **proto** (no LTC4040) MAIN5V == vehicle 5 V so it's harmless there, but make the
net `VEH5V` now so both boards match and production is correct. *Without this, `v5v` never
drops below `V5V_OFF`, `vehiclePower` never clears, and the cell drains.*
2. **Finish the GND unify.** The file still has **4 `power:GNDREF`** symbols (canonical §4
claimed these were converted to `power:GND` — not persisted). Convert all 4 to `power:GND`
(or wire them to the GND-label net) and re-run ERC, or ground splits into GND vs GNDREF.
---
## 7. Open decisions / flags
- **H1 (SWD header) — DECIDED 2026-06-25: DROP.** SWD (PA13/PA14) isn't on the Blackpill
2×20 socket — it's on the module's own separate SWD header — so a carrier H1 buys nothing the
USB-C path doesn't already give: flashing via USB DFU (BOOT0), diagnostics via the USB CDC
STREAM log. **Optional:** lay an **unpopulated (DNP) 4-pad** SWD footprint (3V3 / SWDIO /
SWCLK / GND) for bench bring-up; if ever used, jumper SWDIO/SWCLK to the module's SWD header.
**Remove or mark DNP** the H1 rows in `watchdog-connections.xlsx` and `watchdog-pcb-v3-bom.xlsx`.
- **PB12 reassigned** from "2nd-fan-tach spare" to gauge BATLED1 (fans are 2-wire, no tach —
canonical open item). PB10 tach stays a DNP provision.
- **JP1 stays OPEN** (dedicated fan rail). Only close if SD-15B-05 is upsized to 5 V/5 A.
## 8. Build mechanics
- Production project copy already created: `kicad/hbox-watchdog-v3-PROD.kicad_{pro,sch,pcb}`
(the proto file is untouched — it was open in KiCad).
- I can generate this in KiCad once the KiCad backend is back up **and** the proto is closed
(so there's no file conflict). Suggest also renaming the proto to `…-proto` once you're out.
## Related
- [[watchdog-electrical-design-state]] (CANONICAL) · [[watchdog-pcb-v3-design]] (§4 sub-circuits) ·
[[watchdog-connections-rationale]] (Finding 3) · `watchdog-connections.xlsx` ·
`watchdog-pcb-v3-bom.xlsx` · `kicad/hbox-watchdog-v3-PROD.kicad_sch`