DÍA 096 DE 365

Fase 2: Fundamentos de Hardware y Electrónica

📖 Teoría a Estudiar

Aislamiento Galvánico y Física Inductiva

Una electroválvula de Gas LP es un inductor masivo. La ley de Faraday-Lenz dicta que $v(t) = L \frac{di}{dt}$. Cuando tu STM32 ordena apagar la válvula, el flujo de corriente ($di$) cae a cero en microsegundos ($dt$). Al dividir por casi cero, el voltaje $v(t)$ se dispara a cientos de voltios negativos en un fenómeno llamado *Back-EMF*.

Si conectas un transistor MOSFET directamente al STM32 para gobernar la válvula y el transistor falla (Avalanche Breakdown) por ese pico de voltaje, los 24V de la batería viajarán directamente al pin de 3.3V del procesador, vaporizando el silicio instantáneamente.

La Barrera de Luz (Optoacopladores)

En el diseño industrial serio, las tierras (GND) no se mezclan. La Tierra Lógica (del STM32) y la Tierra de Potencia (de la bomba de gas) deben estar separadas físicamente. ¿Cómo transmitimos un "1" lógico si no comparten cables? Con fotones.

Un Optoacoplador (ej. PC817) es un chip que contiene un LED infrarrojo y un fototransistor. El STM32 enciende el LED (aislado en su mundo de 3.3V). La luz viaja a través del encapsulado y golpea el fototransistor en el mundo de 24V, activando el MOSFET de la válvula. No hay conexión eléctrica entre ambos mundos, logrando el Aislamiento Galvánico.

AISLAMIENTO GALVÁNICO Y SUPRESIÓN DE TRANSITORIOS BARRERA DE AISLAMIENTO FÍSICO (Luz) DOMINIO LÓGICO (3.3V) STM32 PA8 (OUT) 330Ω GND Lógico DOMINIO DE POTENCIA (24V) PC817 +24V GND Potencia MOSFET IRLZ44N Gate VÁLVULA +24V Bucle Flyback (Neutraliza 500V)

⚙️ Ejercicios Prácticos

Ejercicio 1: En la programación profesional Bare-Metal, no escribimos el acceso a registros crudos disperso por todo el archivo main.c. Usamos Macros del Preprocesador para encapsular la complejidad del registro BSRR. Construye el driver estructurado de la Válvula de Gas LP aplicando abstracción de hardware a medida.


/**
 * @file valve_driver.h
 * @brief Abstracción CMSIS para Control de Válvula
 */

#ifndef VALVE_DRIVER_H
#define VALVE_DRIVER_H

#include "stm32f401xe.h"

// --- 1. DEFINICIONES DE HARDWARE (Mapeadas a KiCad) ---
#define VALVULA_PORT  GPIOA
#define VALVULA_PIN   8

// --- 2. MACROS DE CONTROL ATÓMICO (Cero Overhead) ---
// Al ser Macros, el compilador GCC las reemplaza in-line. 
// No hay saltos de contexto como en el HAL.
#define VALVULA_ON()  (VALVULA_PORT->BSRR = (1 << VALVULA_PIN))
#define VALVULA_OFF() (VALVULA_PORT->BSRR = (1 << (VALVULA_PIN + 16)))

void Valvula_Init(void);

#endif /* VALVE_DRIVER_H */
        

/**
 * @file main.c
 * @brief Súper Bucle de Control Hidráulico
 */

#include "valve_driver.h"

void Valvula_Init(void) {
    // 1. Reloj del Puerto A
    RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
    
    // 2. Modo Salida Push-Pull de Alta Velocidad
    VALVULA_PORT->MODER &= ~(3 << (VALVULA_PIN * 2));
    VALVULA_PORT->MODER |=  (1 << (VALVULA_PIN * 2));
    
    VALVULA_PORT->OTYPER &= ~(1 << VALVULA_PIN);
    VALVULA_PORT->OSPEEDR |= (2 << (VALVULA_PIN * 2)); // 50MHz Speed
    
    // 3. ESTADO SEGURO INICIAL (Fail-Safe)
    VALVULA_OFF();
}

int main(void) {
    
    Valvula_Init();
    
    // El sistema arranca con la válvula cerrada (Garantía de Seguridad)
    
    while (1) {
        // --- Secuencia de Purga de Tubería ---
        
        VALVULA_ON();   // Enciende el LED interno del Optoacoplador
        
        // Retardo operativo (simulando 2 segundos de flujo)
        for(volatile uint32_t i=0; i<4000000; i++);
        
        VALVULA_OFF();  // Apaga. El Diodo Flyback absorbe el golpe electromagnético
        
        for(volatile uint32_t i=0; i<8000000; i++);
    }
    
    return 0;
}
        

🚀 Avance del Proyecto Tesis: Despachador de Gas LP

Objetivo del día: Control de Potencia Inductiva Infalible.

Un error común en proyectos estudiantiles es creer que la electrónica digital y la analógica son lo mismo. No lo son. Cuando tu código ejecuta la macro VALVULA_OFF(), el procesador termina su trabajo en 12 nanosegundos. Sin embargo, físicamente en tu placa (diseñada en el Día 85 y 86), la bobina masiva de la válvula de gas experimenta una contorsión magnética que genera un pico de voltaje letal.

Al implementar el optoacoplador PC817 en el Hardware, garantizas que ni un solo voltio del dominio de potencia toque tu STM32. El Diodo 1N4007 crea un "circuito cerrado" (Bucle Flyback) por donde la energía residual del inductor se recicla y disipa en forma de calor. En el Software, el uso de las macros VALVULA_ON() te entrega una sintaxis limpia y profesional, demostrando que puedes escribir código tan legible como el de Arduino, pero con la potencia industrial del Bare-Metal puro.

📝 Resumen del Día