171 lines
10 KiB
Markdown
171 lines
10 KiB
Markdown
---
|
||
title: Watchdog v3 — Electrical Design State & Assumptions
|
||
tags: [project-drogheda, hardware, watchdog, electrical, assumptions, canonical]
|
||
project: Project Drogheda
|
||
author: Helgen CTO
|
||
date: 2026-06-24
|
||
status: Active — CANONICAL current electrical state (read this first)
|
||
---
|
||
|
||
# HBOX Watchdog v3 — Electrical Design State & Assumptions
|
||
|
||
> **Read this to get the electrical context.** It is the single source of truth for the
|
||
> *current* state of the watchdog electrical design — power tree, pin map, the decisions made
|
||
> and why, the bug fixes, what is in the schematic vs. still pending, the prototype approach,
|
||
> and the open items. Supersedes scattered notes. Links: [[watchdog-pcb-v3-design|design doc]] ·
|
||
> [[BOM-master|production BOM]] · `kicad/hbox-watchdog-v3.kicad_sch` (schematic).
|
||
|
||
---
|
||
|
||
## 0. Status (2026-06-24)
|
||
|
||
KiCad schematic `03-Architecture-Hardware/kicad/hbox-watchdog-v3.kicad_sch` — **ERC = 0 errors**
|
||
(only cosmetic off-grid + one `Q_NPN_BCE` symbol-cache warning). Authored via the KiCad MCP;
|
||
renders to PDF/SVG (`kicad-cli` PATH fixed in `claude_desktop_config.json`).
|
||
|
||
**In the schematic NOW:** MCU (Blackpill J1/J2), MAIN5V/3V3 rails, 24 V reverse-polarity protect
|
||
(Q10 + 15 V Zener DzG), RTK-stack load switch (Q1/Q5), three sense dividers, **on-board DFR1015
|
||
ignition conditioning**, fan driver + dedicated fan buck (U2), I²C temp sensors (SHT40 0x44 +
|
||
TMP102 0x48), status LED, **reset (SW1 on-board + P10 external)**, **4-LED battery gauge**,
|
||
output connectors, PWR_FLAGs.
|
||
|
||
**Designed but NOT yet wired (next pass):** the **battery-backup power section** (LTC4040 block
|
||
+ battery connector + NTC + the P2→MAIN5V re-route) and the **power-cutoff switch**. The LTC4040's
|
||
detailed switching reference circuit (symbol, inductor, program resistors sized to the real pack)
|
||
is a dedicated power-design pass — *not fabricated blind*.
|
||
|
||
---
|
||
|
||
## 1. Power tree (current intent)
|
||
|
||
```
|
||
Cabinet 24 V ─GX16─► Mean Well SD-15B-05 (24→5 V) ─► MAIN5V (board logic rail)
|
||
├─► Blackpill 5V (J1/20, J2/18) → 3V3 (on-module LDO)
|
||
├─► Load switch (Q5 NPN → Q1 P-FET) → SW_5V → RTK stack
|
||
└─► [PLANNED] LTC4040 backup ↔ 1S4P cell; boosts to 5 V on power loss
|
||
Cabinet 24 V ─GX16─► Q10 rev-pol P-FET (IRFR5305 + DzG 15 V Zener) ─► U2 fan buck (MP1584) → 5V_FAN → fan
|
||
Machine ignition (12–24 V) ─GX16 pin 3─► DFR1015 (ON-BOARD, →5 V) ─► Rig 100 Ω ─► D5 BAT54 clamp→3V3 / C9 ─► PA5
|
||
[PLANNED] cutoff switch in series with SYS_5V (downstream of the battery merge) → kills vehicle + battery
|
||
```
|
||
|
||
- **MAIN5V** is the board logic rail. With the LTC4040 inserted, `P2` (vehicle 5 V) feeds the
|
||
LTC4040 input and the LTC4040 output feeds MAIN5V (so MAIN5V is the *backed-up* rail).
|
||
- **Corrections ride the 4G modem**, not the GNSS — recover a dead link by power-cycling the stack.
|
||
- **Power-off is the safe state**: the RTK stack defaults OFF (gate pull-up) until the MCU asserts.
|
||
|
||
---
|
||
|
||
## 2. Pin map — STM32F411 Blackpill (current)
|
||
|
||
J1 = header P1, J2 = header P2. SWD (PA13/PA14) is **not** on the 2×20 → flash via USB.
|
||
|
||
| Pin | Net | Function | Notes |
|
||
|---|---|---|---|
|
||
| PA0 | `BAT_SENSE` | ADC ÷2 from battery+ | also feeds the gauge logic |
|
||
| PA1 | `PWR_CTRL` | RTK-stack load-switch enable | HIGH = stack ON |
|
||
| PA2 / PA3 | `GNSS_TX/RX` | USART2 ↔ F9P UART | NMEA |
|
||
| PA4 | `5V_SENSE` | ADC ÷2, vehicle 5 V present | — |
|
||
| PA5 | `IGN_SENSE` | **digital** `INPUT_PULLDOWN` | from DFR1015 via Rig + D5 clamp — **NO ÷2** (Finding 2) |
|
||
| PA6 | `FAN_PWM` | 25 kHz fan PWM | TIM3_CH1 |
|
||
| PA8 | `CHRG_EN` | **[PLANNED]** LTC4040 charge enable/disable | MCU cuts charge when TMP102 reads cell hot |
|
||
| PA9 / PA10 | `USART1` relay | optional NMEA relay | `ENABLE_PHLG_RELAY` default 0 |
|
||
| PB0 | `EXT_LED` | status LED (low-side) | **FIXED 2026-06-24** (was disconnected) |
|
||
| PB6 / PB7 | `I2C1 SCL/SDA` | SHT40 (0x44) + TMP102 (0x48) | 4.7 k pull-ups |
|
||
| PB10 | `FAN_TACH` | fan RPM + stalled-fan fault | EXTI |
|
||
| PB12–PB15 | `BATLED1–4` | **[NEW]** battery gauge bar | firmware-driven from `BAT_SENSE`, 330 Ω + LED each |
|
||
| PC13 | onboard LED | — | WeAct module |
|
||
| NRST | `NRST` | **[NEW]** reset | SW1 (on-board) + P10 (external), both → GND |
|
||
|
||
---
|
||
|
||
## 3. Decisions made this session (2026-06-24) + rationale
|
||
|
||
1. **DFR1015 folded ON-BOARD** (was an external module). **GX16 pin 3 now carries RAW machine
|
||
ignition (12–24 V), not pre-conditioned 5 V.** The on-board DFR1015 (7.5–30 V in, 5 V out)
|
||
auto-handles 12 V *and* 24 V machines, drops the external-module dependency, and removes the
|
||
risk of 24 V reaching the 5 V-rated clamp. Nets: `IGN_24V` (P1/3 → U5 VIN), `IGN_5V`
|
||
(U5 VOUT → Rig). **Harness implication: feed raw ignition to GX16 pin 3 — not 5 V.**
|
||
2. **Ignition sense topology (confirmed, Finding 2):** PA5 is a *digital* input. Path =
|
||
DFR1015 5 V → `Rig 100 Ω` series → `IGN_SENSE` → `D5 BAT54` clamp to 3V3 + `C9 100 nF` → PA5.
|
||
**No ÷2 divider** (a divider drops the logic-high below V_IH).
|
||
3. **Battery backup RE-ADDED** — reverses the old "battery dropped / vehicle-only" (Finding 3).
|
||
Real trackers carry a cell; we want runtime on a parked machine. Pack = **18650 1S4P**
|
||
(Hyvel FG-0889, 3.6 V). Charger = **LTC4040** (1S Li-ion/LiFePO4 *battery-backup manager*:
|
||
switching reverse-buck charger + power-path + 2.5 A boost to 5 V backup + **NTC**). **Safety
|
||
lever:** NTC on the cell **+** the Blackpill gates charge (`CHRG_EN`) off when TMP102 reads the
|
||
cell hot — this directly answers the RCA's #1 failure (hot Li-ion swelling/ignition). The
|
||
charge voltage jumper-selects Li-ion *or* LiFePO4, so a future chemistry change is config, not
|
||
redesign. **LTC4040 is 1S-only → sufficient for 1S4P.** (Rejected: supercap = last-gasp only;
|
||
BQ24074 + boost = cheap/available but no LiFePO4 path, linear charge heat.)
|
||
4. **Reset** — on-board button **SW1** + external connector **P10**, both pull `NRST` → GND.
|
||
5. **Battery gauge** — 4 LEDs (D_BAT1–4 = 25/50/75/100 %) on PB12–PB15 via 330 Ω, firmware-driven
|
||
from `BAT_SENSE` (no gauge IC; reuses spare GPIOs).
|
||
6. **Power cutoff** *(planned)* — external switch in series with the **system 5 V** (downstream of
|
||
the battery merge) so it kills vehicle **and** battery power.
|
||
|
||
---
|
||
|
||
## 4. Bug fixes this session
|
||
|
||
- **EXT_LED disconnect (real):** J1/14 (PB0) was not on the `EXT_LED` net — a wire ran *through*
|
||
the pin without terminating, so the MCU couldn't drive the status LED. Fixed →
|
||
`EXT_LED` = J1/14 · Rled · Q4 gate.
|
||
- **Panel-LED short:** a stray wire bridged `P8` pin 1↔pin 2 (anode↔cathode of the external status
|
||
LED). Deleted → `LED_A`/`LED_K` clean.
|
||
- **Ground unified:** 4 stray `power:GNDREF` symbols (added during arrangement) → `power:GND`
|
||
(left as-is they'd have renamed the whole ground net to `GNDREF`). One `GND` net now.
|
||
- Schematic grid-snapped to 1.27 mm; symbol fields (Footprint/Datasheet/Description) hidden so only
|
||
Reference + Value show.
|
||
|
||
---
|
||
|
||
## 5. Prototype approach (3 boards, easy-to-find parts)
|
||
|
||
- BOMs: `watchdog-protoboard-BOM-3boards.xlsx` (engineering, ≈ MXN 5,341) and
|
||
`watchdog-LISTA-DE-COMPRAS-ES.xlsx` (plain-Spanish shop list for a non-expert buyer).
|
||
- **Battery backup on proto = module stand-in:** **TP4056** charger + **MT3608** boost + 2× 1N5819
|
||
OR-ing + 10 k NTC — reproduces charge / power-loss→backup / `BAT_SENSE` / cell-temp so the
|
||
firmware is fully testable. **The PCB uses the LTC4040.** The one thing the proto can't test
|
||
exactly is the *temperature-qualified charge cutoff* (LTC4040-only) — validate it in firmware logic.
|
||
- **GNSS + 4G: one F9P + 4G set, shared** across the three watchdog boards (the watchdog logic,
|
||
sensing, fan/temp, gauge, reset, cutoff and backup all test without them).
|
||
|
||
---
|
||
|
||
## 6. Key assumptions / invariants (electrical)
|
||
|
||
- Backup pack is **1S4P, 3.6 V nominal** (NOT 3S). The "40 Ah" on the label is suspect (4× 18650 ≈
|
||
10–14 Ah max) — **confirm**; it sets charge current + the LTC4040 safety timer.
|
||
- **GX16 pin 3 = raw machine ignition (12–24 V)** into the on-board DFR1015 (changed this session).
|
||
- **MAIN5V** = board logic rail (from SD-15B-05; backed up via the LTC4040 path once wired).
|
||
- Corrections ride the **4G modem** → recover the link by power-cycling the stack, never a GNSS reset.
|
||
- **Power-off is the safe state**; the load switch defaults OFF until the MCU asserts confidence.
|
||
- **Enclosure is ASA** (not PLA); the thermal liability is the **power components** (battery/boost/
|
||
modem), not the case. v3.0 thermal = **waterproof duct + Blackpill smart fan** (active managed).
|
||
- No material softening < ~80 °C in the thermal path.
|
||
|
||
---
|
||
|
||
## 7. Open items / TODO (electrical)
|
||
|
||
- [ ] **Wire the battery-backup section** into the schematic: LTC4040 block (U6) + battery connector
|
||
(BAT+, BAT−, NTC) + the `P2 → LTC4040 → MAIN5V` re-route + `CHRG_EN`/`BAT_SENSE` to the MCU.
|
||
- [ ] **Add the power-cutoff switch** in series with SYS_5V.
|
||
- [ ] **LTC4040 detailed reference design** — symbol, inductor, `RPROG` (charge current sized to
|
||
the real pack Ah), input-current limit, PFI divider, NTC bias, compensation — then **bench-validate**.
|
||
- [ ] **Confirm the real pack capacity** (the "40 Ah" label).
|
||
- [ ] **Firmware**: gauge-LED driver (PB12–15 from `BAT_SENSE`); `CHRG_EN` cut-charge-when-hot logic
|
||
(TMP102); reset is hardware-only.
|
||
- [ ] Cosmetic: position the new parts on-grid (clears off-grid warnings).
|
||
|
||
---
|
||
|
||
## 8. Pointers
|
||
|
||
- **Schematic:** `kicad/hbox-watchdog-v3.kicad_sch` (+ `…-schematic.pdf/.svg`).
|
||
- **Design doc:** [[watchdog-pcb-v3-design]] (sub-circuits, pin map, findings).
|
||
- **Connections:** `watchdog-connections.xlsx` + [[watchdog-connections-rationale]].
|
||
- **BOMs:** [[BOM-master]] (production) · `watchdog-protoboard-BOM-3boards.xlsx` +
|
||
`watchdog-LISTA-DE-COMPRAS-ES.xlsx` (proto) · [[watchdog-protoboard-bringup]] (bench order).
|
||
- **Firmware:** `04-Source-Code/firmware/blackpillrtkcode_v2/` (v2.3) + `docs/PINOUT.md`, `docs/LOGGING-SPEC.md`.
|