DÍA 170 DE 365

Fase 3: Comunicaciones y Redes Industriales

📖 Teoría a Estudiar

Creepage vs Clearance (Las Leyes de Aislamiento)

Cuando trabajas con voltajes superiores a los 50V, las normas internacionales (como la IPC-2221 o IEC 60950) te exigen mantener dos tipos de distancias de seguridad entre las pistas de Alto Voltaje y las de Bajo Voltaje:

La Magia de la Ranura (Slot)

A menudo, el tamaño de tu relé mecánico o de tu optoacoplador es muy pequeño. Sus pines de 220V están a solo 2.54 mm de los pines de 3.3V. Esa distancia cumple con el Clearance (el aire aísla bien), pero no cumple con el Creepage (la superficie de la PCB conduciría el voltaje si se moja).

La solución de los ingenieros de potencia es tallar un hueco físico a través de toda la PCB entre ambos pines. Al remover la fibra de vidrio, obligas a la electricidad a tener que "bajar por las paredes del hueco, cruzar el fondo y volver a subir", duplicando artificialmente la distancia de Creepage sin tener que comprar un relé más grande.

AISLAMIENTO GALVÁNICO: CLEARANCE VS CREEPAGE Y RANURAS (SLOTS) PCB FR4 (Sin Ranura) 3.3V DC 220V AC Clearance (Línea Recta) Creepage Corto = RIESGO ARCO ELÉCTRICO SLOT Hueco Vacío 3.3V DC 220V AC Creepage Extendido (Viaja por las paredes) Vista Superior (KiCad Edge.Cuts Layer) DOMINIO SEGURO (Baja Tensión) DOMINIO PELIGROSO (220V AC) Optoacoplador MOC3021 Slot (Milling) Relé 30A Barrera de Aislamiento Físico

⚙️ Ejercicios Prácticos

Pasos para diseñar Slots en KiCad:

  1. Selecciona la capa Edge.Cuts (Cortes de borde) en la barra lateral derecha.
  2. Utiliza la herramienta Draw a Line (Trazar Línea) o Draw an Arc (Arco) para dibujar una forma geométrica cerrada o una línea recta entre los pines de Alto y Bajo voltaje de tu Relé o Optoacoplador.
  3. Haz doble clic en la línea trazada. Configura el grosor de línea (Line Width) a un mínimo de 1.5 mm o 2.0 mm. Las fábricas de PCBs (JLCPCB, PCBWay) utilizan fresas (routers) de este grosor. Si haces un slot de 0.5 mm, la fábrica lo rechazará porque su broca no cabrá en el agujero.
  4. Abre el Visor 3D (Alt+3) y verifica que el hueco atraviese la placa hasta ver el fondo de la pantalla a través de él.

El Impacto en el Firmware (Monitor de Soldadura de Relé):
Ahora que el hardware es seguro, debemos proteger la lógica. Los relés de 220V que encienden bombas pesadas sufren arcos eléctricos internos. A veces, los contactos se sueldan (Welded Contacts). Si esto pasa, el STM32 apagará el pin de control, pero la bomba seguirá girando peligrosamente. Crearemos un Watchdog que lea el estado real de la línea AC mediante un optoacoplador de retorno, aplicando la regla de Falla Segura.


/**
 * @file monitor_rele_ac.c
 * @brief Watchdog de Hardware para Contactos Soldados y Fallas de Bomba (220V)
 */

#include "stm32f401xe.h"
#include <stdbool.h>
#include <stdint.h>

// Dependencias
extern void Bloqueo_Legal_Fatal(uint32_t codigo_error); // Día 158
extern volatile uint32_t ms_ticks;

#define ERR_RELE_SOLDADO     0xE010
#define ERR_BOMBA_NO_ARRANCA 0xE011

// Supongamos que el STM32 enciende el Relé usando PA4
#define PIN_CONTROL_RELE (1 << 4) 
#define RELE_ENCENDER()  (GPIOA->BSRR = PIN_CONTROL_RELE)
#define RELE_APAGAR()    (GPIOA->BSRR = (PIN_CONTROL_RELE << 16))

// Supongamos que recibimos la confirmación física (Feedback) de los 220V 
// a través de un Optoacoplador en el pin PA5.
#define PIN_FEEDBACK_AC  (1 << 5)
#define HAY_VOLTAJE_AC() ((GPIOA->IDR & PIN_FEEDBACK_AC) == 0) // Lógica Invertida (Pull-Up)

static bool rele_comandado_encendido = false;
static uint32_t timestamp_cambio_estado = 0;

/**
 * @brief Vigila si el estado físico de los 220V coincide con el comando lógico del procesador.
 *        Debe ejecutarse cíclicamente en el Súper Bucle.
 */
void Vigilar_Integridad_Contactor(void) {
    
    // Dejamos pasar 500 ms después de un cambio de estado para que
    // la mecánica pesada del contactor tenga tiempo de moverse.
    if ((ms_ticks - timestamp_cambio_estado) < 500) return;
    
    bool voltaje_presente = HAY_VOLTAJE_AC();
    
    if (rele_comandado_encendido && !voltaje_presente) {
        // Le ordenamos a la bomba encender, pero el sensor dice que no hay 220V.
        // Falla: Breaker botado, cable cortado o bobina del relé quemada.
        Bloqueo_Legal_Fatal(ERR_BOMBA_NO_ARRANCA);
    }
    else if (!rele_comandado_encendido && voltaje_presente) {
        // PELIGRO LETAL: El STM32 apagó la señal, pero los 220V siguen fluyendo.
        // Falla: Los contactos del relé se pegaron (Arc Welding). 
        // El despachador está entregando gas descontroladamente.
        
        // Disparar contactor maestro de emergencia de la estación si existe,
        // e inutilizar el equipo permanentemente.
        Bloqueo_Legal_Fatal(ERR_RELE_SOLDADO);
    }
}

/**
 * @brief API Pública para controlar la bomba de gas de forma segura.
 */
void Bomba_Set_Estado(bool encender) {
    if (encender) {
        RELE_ENCENDER();
        rele_comandado_encendido = true;
    } else {
        RELE_APAGAR();
        rele_comandado_encendido = false;
    }
    // Reiniciar el temporizador para la ventana ciega mecánica
    timestamp_cambio_estado = ms_ticks; 
}

int main(void) {
    
    // inicializar_sistema();
    
    // Configurar PA4 Salida, PA5 Entrada con Pull-Up
    // ...
    
    while(1) {
        
        Vigilar_Integridad_Contactor();
        
        // Logica de Venta
        // if (autorizado) Bomba_Set_Estado(true);
        // if (litros_completos) Bomba_Set_Estado(false);
    }
    return 0;
}
        

🚀 Avance del Proyecto Tesis: Despachador de Gas LP

Objetivo del día: Aislamiento Galvánico y Redundancia Electromecánica.

En tu revisión de diseño de hardware, el juez podría cuestionar el uso de relevadores manejando las bombas trifásicas directamente en el mismo PCB del microcontrolador. Si un rayo impacta la red eléctrica de la gasolinera, la descarga de 5,000 Voltios viajará por el cable de la bomba hacia tu placa. El optoacoplador puede resistir hasta 5kV, pero el arco eléctrico simplemente saltaría por encima (Clearance) o reptaría por la fibra de vidrio (Creepage), destruyendo tu cerebro STM32 y propagando el fuego.

Al diseñar **Isolation Slots (Ranuras de Aislamiento)** bajo todos tus optoacopladores y relés en KiCad, interrumpes el camino físico. Has creado un abismo que el arco eléctrico no puede cruzar. Por el lado del firmware, tu rutina `monitor_rele_ac.c` supervisa que esta barrera electromecánica esté funcionando como se debe, cerrando el lazo de seguridad absoluto. El hardware impide que el fuego entre; el software garantiza que la mecánica nunca se quede atorada. Una arquitectura verdaderamente redundante.

📝 Resumen del Día