Drogheda/03-Architecture-Hardware/watchdog-proto-bench-bringup-v3.md

137 lines
14 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 — Preparación y bring-up del prototipo en protoboard"
tags: [project-drogheda, hardware, watchdog, prototype, breadboard, bring-up, readiness, historico]
date: 2026-06-24
project: Project Drogheda
author: Helgen Technologies
status: HISTÓRICO — guía de banco del 25-jun-2026 (sustituyó la mitad de procedimiento de la lista de compras para v3)
---
# Watchdog v3 — Preparación y bring-up del prototipo en protoboard
Tarjeta: V3 en protoboard (prototipo DEV sobre Blackpill, antes de la EinarBoard 1.0).
!!! abstract "Para quién · Cuándo · Tiempo · Necesitas"
- Para quién: ingeniería (banco QRO)
- Cuándo: documento histórico — bring-up del prototipo en protoboard del watchdog v3 (jun-2026), antes de la primera PCB. El paso siguiente fue el [bring-up de la EinarBoard 1.0](einarboard-1.0-bringup.md)
- Tiempo: un día de banco
- Necesitas: la [lista de compras del protoboard](historico-protoboard.md), Blackpill, fuente de 5 V, multímetro, fuente de calor
Traducido del original en inglés (24-jun-2026, actualizado 03-jul-2026).
Alcance: armar en protoboard el watchdog DEV sobre el Blackpill existente y probar la máquina de estados + sensado + interruptor de carga + lazo ventilador/temperatura. El layout de la PCB queda explícitamente fuera del alcance (se hace después de que el prototipo funcione). Autoridad: `watchdog-electrical-design-state` (canónico, repo) · firmware `04-Source-Code/firmware/blackpillrtkcode_v2/` (v2.3) · esquemático `kicad/hbox-watchdog-v3.kicad_sch`.
!!! warning "Actualización 2026-07-03 — el conjunto de sensores cambió a las partes en mano"
Los sensores del prototipo ahora son **AHT10** (0x38, I²C1 solo, 3V3) + **LM35 → PA7** + **NTC → PB1** (sin SHT40/TMP102 en el prototipo — solo en PCB). El TP4056 del kit **no tiene pin TEMP** → el corte de carga es **PA8 `CHRG_RUN`** (IRF9540N en IN+ del TP4056, **invertido respecto a `CHRG_EN` de PROD**). Interruptor de corte cableado: nodo SYS → SPST → MAIN5V. **El ventilador en mano es de 2 hilos** → la prueba de tacómetro en PB10 se elimina. Las filas de §1/§3 están parchadas; el cableado autoritativo = libro de conexiones xlsx + `Drogheda_Guia-Conexion-Protoboard_ES_v2.2.pdf`. **El firmware v2.3 todavía lee el SHT40 (0x44)** — el driver del AHT10, el canal LM35 y la bandera CHRG_RUN quedaron pendientes de un pase de firmware; hasta entonces las filas de I²C y corte de carga son «cablear ahora / probar después».
## 0. Veredicto: se puede construir, con tres salvedades
Se puede construir y arrancar el núcleo del watchdog. Nada del esquemático ni de su estado de ERC bloquea un armado en protoboard. Las salvedades son de *cobertura de firmware* y *disciplina de alcance*, no de preparación:
1. **Los «problemas» de ERC son cosméticos — no bloquean.** ERC sobre el archivo `hbox-watchdog-v3.kicad_sch` = **0 errores, 1 aviso** (un símbolo `Q_NPN_BCE` que no coincide con la caché). La red de tierra está unificada (4 símbolos `GND`, **0** instancias `GNDREF` colocadas — el GNDREF que se ve es solo una entrada huérfana de la caché de librería, no una segunda tierra real). Nada de esto afecta al protoboard. *(Limpiarlo solo antes de pasar al layout — ver §2.)*
2. **Dos subcircuitos de v3 todavía no están en firmware.** El build v2.3 flasheado **no** maneja el indicador de batería de 4 LEDs (PB12–15) ni `CHRG_EN` (PA8). Se pueden cablear, pero quedarán apagados hasta un pase de firmware. Decidir según §4 si se arman ahora o después.
3. **v2.3 nunca se ha validado en hardware.** Invariante del repositorio: *probar en banco antes de flashear.* Este es su primer banco real — tratar el paso 1 (flash + confirmar telemetría) como la compuerta antes de confiar en cualquier paso posterior.
**Lo que no se pudo verificar:** las partes compradas exactas. Los dos BOM del prototipo en `.xlsx` (`watchdog-protoboard-BOM-3boards.xlsx`, `watchdog-LISTA-DE-COMPRAS-ES.xlsx`) estaban abiertos en LibreOffice, así que el checklist (§3) se reconstruyó desde los documentos de diseño; se compara con la lista real al cerrarlos.
## 1. Qué se puede probar (el firmware v2.3 lo soporta) y qué no
| Subcircuito | Pines | Firmware v2.3 | ¿Se prueba? |
|---|---|---|---|
| Arranque + telemetría `$PHLG`/STREAM (USB) | USB-C | ✅ `ENABLE_PHLG=1` | Sí — es la compuerta |
| LED de estado (códigos de parpadeo) | PB0 | ✅ | Sí |
| Interruptor de carga de la etapa RTK (el corazón de la recuperación) | PA1 → 2N3904 → IRF9540 | ✅ OFF al reset, el MCU lo enciende | Sí |
| Sensado: batería / 5 V / ignición | PA0 / PA4 / PA5 | ✅ histéresis + debounce | Sí |
| Ventilador inteligente (PWM) | PA6 · *(PB10 tacómetro = DNP, el ventilador en mano es de 2 hilos)* | ✅ PWM 25 kHz · RPM/atasco n/a | Sí (rampa PWM; sin tacómetro) |
| Temperatura/HR por I²C — **AHT10 0x38, solo en el bus** [2026-07-03] | PB6/PB7 | ❌ v2.3 lee SHT40 0x44 → **driver AHT10 pendiente** (+ el respaldo de temperatura del MCU funciona) | cablear OK, lee después del parche de firmware |
| Temperatura analógica ×2 — NTC→PB1 + **LM35→PA7** [2026-07-03] | PB1 / PA7 | ❌ canales no codificados | cablear OK, verificar con multímetro mientras tanto |
| Indicador de batería de 4 LEDs | PB12–15 | ❌ no codificado | cablear OK, queda apagado |
| Corte de carga por temperatura — **`CHRG_RUN`** [2026-07-03] | PA8 → 2N3904 → IRF9540N en IN+ del TP4056 | ❌ no codificado (**invertido respecto a `CHRG_EN` de PROD** — necesita bandera) | cablear OK; probar a mano puenteando PA8 alto/bajo |
| Reset (hardware) | NRST | n/a (solo HW) | Sí — el botón simplemente funciona |
**Nota del ventilador [actualizada 2026-07-03]:** el ventilador en mano es de **2 hilos** → sin tacómetro; PB10 queda DNP y la comprobación de RPM/atasco de v2.3 no lee nada (inofensivo). La falla de ventilador se inferirá por temperatura en el pase de firmware. El manejo PWM en PA6 a través del IRLZ44N se prueba exactamente igual.
## 2. La situación del ERC
- Lo que ERC reporta en el archivo DEV: 0 errores, 1 aviso (`Q_NPN_BCE` no encontrado en la librería `Device`). Ese aviso significa que el símbolo del esquemático viene de la caché del proyecto y la librería `Device` instalada tiene un nombre/pines ligeramente distintos — puramente cosmético, de enlace de librería.
- El GNDREF: **no hay símbolos GNDREF colocados** — solo la *definición* sobrante en la caché embebida. La tierra es una sola red.
- **Por qué no bloquea el protoboard:** ERC valida una *netlist para fabricación*. En protoboard todas las tierras se unen físicamente; la colocación fuera de rejilla y un nombre de caché distinto son invisibles para el cobre que se cablea a mano.
- Antes del layout (después), limpiar en KiCad: Tools → *Update Symbols from Library* (quita el aviso de caché de `Q_NPN_BCE`), después *Annotate* y volver a correr ERC; mover cualquier parte fuera de rejilla a la rejilla de 1.27 mm. No editar el esquemático por script mientras KiCad lo tiene abierto (conflicto de bloqueo de archivo).
## 3. Checklist de partes antes de armar (reconstruido — confirmar contra la caja)
**Ya se tiene (no comprar):** Blackpill STM32F411, cable USB-C, 18650 + PowerBoost (o fuente de banco), Mean Well SD-15B-05 (o 5 V de banco), multímetro, una fuente de calor (secadora / taza de agua caliente) para la prueba del ventilador. *F9P + 4G master NO se necesitan para este bring-up.*
Núcleo (los «cerebros» — indispensable):
- [ ] Protoboard ×2 (830 puntos) + kits de jumpers (M-M y M-F)
- [ ] Surtido de resistencias incl. **330 Ω, 1 k, 4.7 k, 10 k, 100 k, 220 Ω**
- [ ] **2N3904** ×3 (driver del interruptor de carga, TO-92)
- [ ] **IRF9540 / IRF9540N** ×2 (P-FET lado alto para 5 V, TO-220)
- [ ] LED ×5 (estado) · **100 nF** cerámico ×10 (filtros ADC/desacoplo) · 100 µF ≥ 16 V ×4 (bulk)
- [ ] **Potenciómetro de 10 kΩ** ×2 + botón táctil/interruptor deslizante ×2 (barrer VBAT / simular ignición)
- [ ] Tira de header macho 1×40 (para pinar cualquier módulo sin pines)
**Térmico (nuevo en v3):**
- [x] Ventilador 5 V, 40–60 mm — **2 hilos, en mano** [2026-07-03] (sin tacómetro; PB10 DNP)
- [ ] **IRLZ44N** ×2 (N-FET de nivel lógico, lado bajo del ventilador) — *un IRF540/IRFZ44 común no enciende con 3.3 V; si no hay IRLZ44N usar 2N2222A/TIP120 + 1 kΩ en base*
- [ ] **1N5819** ×3 (flyback del ventilador; 1N4007 aceptable)
- [x] Breakout I²C **AHT10** (0x38) — en mano [2026-07-03]; **solo en el bus**, 3V3 únicamente; parche de lectura de firmware pendiente (v2.3 habla SHT40)
- [x] **LM35** (TO-92) — en mano [2026-07-03]; temperatura analógica #2 en **PA7**, alimentado de 5 V
**Adiciones de v3 (armar solo si se quieren cableadas ahora — ver §4):**
- [ ] Reset: botón táctil → NRST↔GND (+ header de 2 pines opcional para reset externo)
- [ ] Indicador de batería: **4× LED + 4× 330 Ω** en PB12–15 *(quedan apagados hasta el firmware)*
- [ ] Sustituto del respaldo de batería: módulo **TP4056** + boost **MT3608** + **2× 1N5819** (OR-ing) *(reproduce carga / pérdida de energía→respaldo / BAT_SENSE)*. **[2026-07-03]** El TP4056 del kit **no tiene pin TEMP** → la NTC de 10 kΩ del cargador no se usa; el corte por temperatura ahora está en el prototipo en hardware: PA8 `CHRG_RUN` → 1 k → 2N3904 → IRF9540N (pull-up 10 k) en IN+ del TP4056 (ALTO = carga; sin MCU = sin carga — invertido respecto a PROD). Más el interruptor de corte: nodo SYS → SPST → MAIN5V (corta vehículo y batería)
## 4. Decisión antes de sentarse: cuánto de v3 cablear
- Recomendado — armar el núcleo probable + térmico (todo lo marcado *Sí* en §1). Prueba toda la lógica del watchdog y el nuevo lazo ventilador/temperatura, que es el objetivo del prototipo. Añadir el botón de reset (gratis — funciona sin firmware).
- **Indicador (PB12–15):** cablearlo si se quiere el layout/sensación, pero no encenderá hasta que exista el driver del indicador. *Más barato añadirlo después.*
- **Sustituto del respaldo de batería (TP4056+MT3608):** vale la pena si se quiere observar específicamente la transferencia pérdida de energía → respaldo y que `BAT_SENSE` siga a la celda. Omitir si el día es solo para la lógica del watchdog.
## 5. Secuencia de bring-up (correr en orden — cada paso habilita el siguiente)
1. **Solo USB — flashear y compuerta.** Compilar v2.3 (Arduino IDE / STM32duino, tarjeta = Blackpill F411CE), flashear por DFU (mantener BOOT0). Abrir serie a 115200. **Confirmar líneas `BOOT` / `COLS` / `TLM` y un `$PHLG,...*CS` cada 30 s.** Si falla, detenerse y corregir el firmware antes de cablear nada.
2. LED de estado — PB0 → 330 Ω → LED → GND. Observar que los códigos de parpadeo cambien con el estado.
3. Interruptor de carga (el corazón de la recuperación) — PA1 → 1 kΩ → base del 2N3904; colector → gate del IRF9540; 10 kΩ gate→5 V; drain → 5 V conmutado; poner un LED+330 Ω en la salida conmutada. **Confirmar: OFF al reset, ON cuando PA1 lo pide.** (Apagado es el estado seguro.)
4. Divisores de sensado — 10 k/10 k ÷2 hacia **PA0** (batería vía 18650/pot) y **PA4** (riel 5 V); pot de 10 kΩ hacia **PA5** (ignición). Barrer y observar que `veh`/`ign`/`vbat` cambien en TLM con histéresis (V5V_ON 4.20 / V5V_OFF 3.80; BAT_CRIT 3.40 / BAT_REC 3.70).
5. Ventilador + tacómetro — PA6 → 220 Ω → gate del IRLZ44N; ventilador(−) en el drain; 1N5819 ∥ ventilador; 100 kΩ gate→GND. Tacómetro de 3 hilos → pull-up 10 kΩ a 3V3 → PB10. Verlo girar/rampar; **desconectar el ventilador → `fan_fault`** en telemetría.
6. Temperatura I²C — SHT40/TMP102 en PB6/PB7 (+4.7 kΩ pull-up cada uno). Calentarlo → el ventilador rampa en la curva 45→70 °C. *¿Sin sensor? El respaldo de temperatura del MCU también rampa el ventilador — calentar toda la tarjeta.*
7. (Opcional) botón de reset — NRST↔GND momentáneo; presionar → reinicio limpio, línea de causa de reset en el log.
8. (Opcional) sustituto del respaldo de batería — 5 V del vehículo → IN del TP4056; celda en BAT del TP4056; TP4056/celda → MT3608 → 5 V vía OR-ing 1N5819 al riel; NTC junto a la celda. Quitar los 5 V del vehículo → observar que el respaldo sostenga el riel y `BAT_SENSE` siga.
## 6. Hoja de cableado (lado Blackpill, v3)
```
PA0 ← BAT ÷2 (10k/10k) desde 18650+ / pot PA6 → 220Ω → gate IRLZ44N; ventilador(−); 1N5819 ∥ ventilador
PA4 ← 5V ÷2 (10k/10k) desde riel 5V PB10 ← tacómetro, pull-up 10k → 3V3
PA5 ← IGN ÷2 (10k/10k) desde pot/interruptor PB6/PB7 → I²C SCL/SDA (+4.7k cada uno → 3V3)
PA1 → 1k → base 2N3904; colector → gate IRF9540 PB0 → 330Ω → LED → GND
; 10k gate→5V; drain → 5V conmutado NRST ← botón de reset → GND (opcional)
→ etapa (LED+330Ω como carga de prueba) PB12–15 → 330Ω → LED → GND (indicador; apagado hasta FW)
Rieles GND / 5V / 3V3 comunes. 5 V del ventilador desde una fuente de 5 V SEPARADA (2ª fuente / LM2596) — no del riel conmutado de la etapa.
```
!!! note "Mapa de partes prototipo↔PCB (para no confundirse)"
El esquemático usa equivalentes SMD (Q1 **AO3401A** P-FET, Q5 **MMBT3904**, Q2 **AO3400A** FET del ventilador). En el protoboard se usan los sustitutos through-hole de arriba (**IRF9540N / 2N3904 / IRLZ44N**) — misma topología, mismo firmware.
## 7. Después de que el prototipo funcione — siguientes pasos
- Pase de firmware: driver del indicador de LEDs (PB12–15 desde `BAT_SENSE`) + lógica `CHRG_EN` de corte de carga en caliente.
- KiCad: limpieza cosmética de ERC → huellas → después layout de PCB (DEV primero, después PROD según `watchdog-production-schematic-delta`).
- Capacidad del paquete confirmada **~12 Ah** (2026-06-30; la etiqueta «40 Ah» estaba mal) — dimensiona la corriente de carga del LTC4040 (≈ C/5, ≤ 2.5 A).
## Relacionados
`watchdog-electrical-design-state` (canónico, repo) · [lista de compras del protoboard](historico-protoboard.md) (22-jun) · `watchdog-production-schematic-delta` (especificación del build PROD, repo) · `kicad/hbox-watchdog-v3.kicad_sch` · lo que siguió: [bring-up de la EinarBoard 1.0](einarboard-1.0-bringup.md).
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-06-24 | Guía de banco original (inglés); actualización de sensores 03-jul. |
| 1.1 | 2026-09-29 | Traducción al español, encabezado uniforme y enlaces. Sin cambios técnicos. |