DÍA 082 DE 365

Fase 2: Fundamentos de Hardware y Electrónica

📖 Teoría a Estudiar

El DRC (Design Rules Checker) de KiCad

El DRC es el auditor matemático de tu placa. Constantemente calcula la distancia entre cada pista de cobre, cada agujero y cada borde. Si violas una regla, no te dejará exportar la placa a la fábrica. Para que el DRC sea efectivo, debemos configurarlo definiendo Net Classes (Clases de Redes).

Clearance vs Creepage (El Salto de la Muerte)

El aire y la fibra de vidrio de la placa (FR4) son aislantes, pero hasta un límite. Si pones una pista de 24V de alta corriente (que sufre latigazos inductivos, Día 64) demasiado cerca de una pista de tu procesador STM32, el voltaje romperá la resistencia del aire y saltará como un rayo en miniatura. Para evitarlo, controlamos dos medidas:

  1. Clearance (Distancia en el Aire): La línea recta más corta a través del aire entre dos pistas de cobre.
  2. Creepage (Línea de Fuga): La distancia más corta a lo largo de la superficie del material aislante (FR4). La suciedad, la humedad y el polvo industrial facilitan que la electricidad "resbale" por la superficie, por lo que el Creepage requerido siempre es mayor que el Clearance.
REGLAS DE AISLAMIENTO: CLEARANCE vs CREEPAGE FALLA: ARCO ELÉCTRICO Material FR4 24V 3.3V MCU 0.2mm [DRC ERROR] Clearance Violation: 0.2mm < 0.5mm CORRECTO: RANURA DE FRESADO (SLOT) FR4 AIRE 24V_EXT 3.3V_MCU Clearance (3mm) Creepage (~7mm) [DRC OK] Isolation Constraints Met REGLAS PERSONALIZADAS KICAD (S-Expression) Board Setup -> Custom Rules: (rule "Aislamiento_Galvanico_Optoacoplador" (constraint clearance (min 3.0mm)) (condition "A.NetClass == 'Potencia' && B.NetClass == 'Logica'") )

El Truco de la Ranura de Fresado (Milled Slot)

¿Recuerdas el Aislamiento Galvánico con Optoacoplador que diseñamos en el Día 67? Ese chip divide el mundo de 24V y el mundo de 3.3V. Para que el aislamiento sea efectivo, la distancia física (Clearance) bajo el chip debe ser de al menos 3mm.

Pero en atmósferas húmedas o llenas de vapores industriales, la electricidad resbala por la placa. Para aumentar el Creepage sin usar un chip más grande, el Arquitecto le dice a la fábrica que taladre una ranura vacía (Milled Slot) en la placa de circuito justo debajo del optoacoplador. Al remover el FR4, fuerzas a la chispa eléctrica a tener que "bajar al abismo y volver a subir" por las paredes del hoyo, aumentando la línea de fuga mágicamente de 3mm a 7mm, logrando blindaje de grado aeroespacial.

⚙️ Ejercicios Prácticos

Ejercicio 1: Aunque KiCad obliga a la física de la placa a ser segura mediante el DRC, un rayo estático o una falla extrema puede inducir un arco magnético (EMI) que haga fallar el núcleo interno del STM32. Cuando esto pasa, el procesador dispara una interrupción de hardware indetectable para el Súper Bucle normal: el HardFault_Handler. Escribe esta función Bare-Metal como tu última línea de defensa de software.


#include <stdint.h>

// --- 1. REGISTROS DE POTENCIA Y SEGURIDAD BARE-METAL ---
volatile uint32_t *GPIOB_ODR = (volatile uint32_t *)0x40020414; // Simulación

// Los pines de las válvulas (Día 66)
#define PIN_VALVULA_1 5
#define PIN_VALVULA_2 6

// --- 2. EL ÚLTIMO GUARDIÁN (CATCH-ALL FAULT HANDLER) ---
/**
 * @brief Manejador de Fallos Críticos de Hardware.
 * Esta función es llamada automáticamente por el núcleo ARM Cortex-M 
 * si ocurre un arco eléctrico (EMI), memoria corrupta, puntero nulo,
 * o si el procesador pierde la cordura por ruido de la gasera.
 */
void HardFault_Handler(void) {
    
    // 1. EL MUNDO ESTÁ ARDIENDO: CORTAR TODO
    // Forzamos un 0 absoluto en el registro ODR del puerto de válvulas.
    // Esto asegura que el MOSFET se apague sin importar qué hacía la FSM.
    *GPIOB_ODR &= ~((1 << PIN_VALVULA_1) | (1 << PIN_VALVULA_2));
    
    // 2. Encender un LED rojo indicador de "Muerte Súbita" 
    // (Asumiendo que el hardware de la placa sobrevivió)
    // *GPIOA_ODR |= (1 << PIN_LED_FAULT);
    
    // 3. Reiniciar el sistema de forma violenta a través del Watchdog
    // Si caímos aquí por un chispazo temporal, un reset limpio
    // revivirá la gasera y cerrará las válvulas por defecto (Safe State).
    
    while(1) {
        // Al atrapar a la CPU en un bucle infinito aquí dentro, 
        // dejamos intencionalmente de alimentar al Perro Guardián (IWDG - Día 40).
        // En 500ms, el IWDG reiniciará físicamente todo el silicio del STM32.
    }
}


int main(void) {
    // Código normal del Despachador...
    while(1) {
        // ...
    }
    return 0;
}
        

🚀 Avance del Proyecto Tesis: Despachador de Gas LP

Objetivo del día: Certificación Físico-Matemática de la PCB (DRC Layout).

Dibujar pistas de cobre al azar es para aficionados; establecer reglas es para ingenieros. Al abrir Board Setup en KiCad, crear una Net Class llamada "Potencia_24V" y otra llamada "Logica_3v3", y decirle al software que la separación mínima absoluta entre ellas es de 3.0 milímetros, has programado a tu entorno de diseño para que sea tu supervisor de calidad.

Si durante el cansancio del ruteo manual intentas pasar una pista de la bomba peligrosamente cerca del cristal de cuarzo del procesador, el motor DRC encenderá la pantalla de advertencias y bloqueará tu herramienta. Al sumar esto al Milled Slot (ranura fresada en el FR4 bajo tus optoacopladores) y al HardFault_Handler en C puro para atrapar la destrucción por EMI térmico, el Despachador de Gas ha dejado de ser un "proyecto de electrónica" para convertirse en Instrumentación a Prueba de Explosiones (ATEX).

📝 Resumen del Día

❓ Cuestionario de Autoevaluación

1. Observando las reglas personalizadas en KiCad del archivo SVG, ¿qué sucedería si no clasificamos nuestras redes y dejamos todas las pistas de la placa bajo la clase "Default" con un Clearance de 0.2mm?
Respuesta: KiCad te permitiría rutear la pista del motor (24V / ruidosa) a solo 0.2 milímetros de la delicada pista analógica de 3.3V del sensor PT100. Un simple pico de arranque del motor saltaría el espacio, induciendo ruido (o friendo el ADC). Al crear Clases (Net Classes), fuerzas a KiCad a aplicar distancias matemáticas masivas (ej. 3mm) entre mundos diferentes, pero permitiendo distancias estrechas (0.2mm) entre pistas inofensivas (como dos líneas I2C).

2. ¿Por qué delegamos el reinicio de emergencia en el HardFault_Handler al Watchdog Timer, en lugar de intentar hacer un System Reset por software (ej. NVIC_SystemReset()) directamente dentro del handler?
Respuesta: Porque si la CPU cayó en el HardFault debido a un arco eléctrico masivo o a una caída drástica de voltaje (Brown-out), su estado interno está corrompido e impredecible. Ejecutar código complejo o comandos de reinicio por software podría fallar si la ALU (Unidad Aritmética) colapsó. El Watchdog (IWDG) es un chip de silicio completamente independiente con su propio reloj (LSI). Al quedarnos "atrapados" intencionalmente, forzamos a que el hardware duro, implacable y primitivo del Watchdog limpie la mesa y reinicie el procesador desde cero.