Una electroválvula de gas LP es fundamentalmente un enorme inductor (una bobina de alambre de cobre). Cuando la corriente fluye, crea un campo magnético que jala el émbolo mecánico y abre el gas. El problema ocurre cuando apagas el transistor y cortas la corriente.
La fórmula del voltaje en un inductor es:
$$V = -L \frac{di}{dt}$$
Al apagar el transistor, el cambio de corriente en el tiempo ($di/dt$) es casi instantáneo (tiende a infinito). Esto provoca que la bobina genere un voltaje negativo gigantesco (picos de -300V a -1000V en un sistema de 24V). Este pico perfora la barrera de silicio del transistor (MOSFET o BJT) y lo destruye para siempre, dejándolo en cortocircuito (válvula permanentemente abierta).
Al colocar un diodo en paralelo con la bobina, y polarizado en inversa (apuntando hacia los +24V), el diodo es invisible durante el funcionamiento normal (no deja pasar corriente). Pero cuando el transistor se apaga y el latigazo de voltaje negativo intenta destruir el circuito, el diodo se vuelve directamente polarizado para ese pico inverso.
El pico de miles de voltios es redirigido suavemente y devuelto al inicio de la bobina, disipándose en un bucle cerrado seguro en forma de calor leve (efecto de rueda libre). Tu transistor y tu procesador quedan 100% a salvo.
Ejercicio 1: Programa el controlador de hardware (HAL) para el pin de la electroválvula. Aunque el hardware absorbe el pico magnético, el software debe configurar correctamente el pin GPIO como Push-Pull (Salida de Potencia) y garantizar un estado inicial apagado (Safe State).
#include <stdint.h>
#include <stdbool.h>
// --- 1. REGISTROS FÍSICOS DEL MICROCONTROLADOR ---
// Puerto B - Modo, Tipo de Salida y Registro de Datos (ODR)
volatile uint32_t *GPIOB_MODER = (volatile uint32_t *)0x40020400;
volatile uint32_t *GPIOB_OTYPER = (volatile uint32_t *)0x40020404;
volatile uint32_t *GPIOB_ODR = (volatile uint32_t *)0x40020414;
// Definimos el pin conectado al "Gate" del MOSFET (ej. Pin 5)
const uint8_t PIN_VALVULA_MOSFET = 5;
// --- 2. INICIALIZACIÓN DE POTENCIA ---
void valvula_init_hardware(void) {
// 1. Apagar el pin incondicionalmente ANTES de configurarlo.
// Esto evita que al arrancar, el pin mande un "1" accidental
// y abra el gas por 1 microsegundo.
*GPIOB_ODR &= ~(1 << PIN_VALVULA_MOSFET);
// 2. Configurar el pin como Salida (Output)
// Limpiamos los dos bits del modo y seteamos a 01 (General purpose output mode)
*GPIOB_MODER &= ~(3 << (PIN_VALVULA_MOSFET * 2));
*GPIOB_MODER |= (1 << (PIN_VALVULA_MOSFET * 2));
// 3. Configurar como Push-Pull (Empuje Fuerte)
// Necesitamos entregar toda la corriente posible al "Gate" del MOSFET para
// que se encienda rápidamente y no se caliente.
*GPIOB_OTYPER &= ~(1 << PIN_VALVULA_MOSFET); // 0 = Push-Pull
}
// --- 3. FUNCIÓN DE COMANDO (Integrada con el Súper Bucle) ---
// El diodo Flyback en la PCB nos garantiza que ejecutar esta
// función no colapsará la placa.
void valvula_set_estado(bool abrir) {
if (abrir) {
// Enviar 3.3V al MOSFET -> Deja pasar 24V a la bobina
*GPIOB_ODR |= (1 << PIN_VALVULA_MOSFET);
} else {
// Cortar los 3.3V -> El MOSFET corta los 24V.
// ¡El Diodo Flyback entra en acción y absorbe el latigazo en nanosegundos!
*GPIOB_ODR &= ~(1 << PIN_VALVULA_MOSFET);
}
}
int main(void) {
// Arranque de seguridad
valvula_init_hardware();
// ... RESTO DEL POST Y MÁQUINA DE ESTADOS (Día 60) ...
return 0;
}
Objetivo del día: Blindaje contra Interferencias y Transitorios Magnéticos.
Muchos programadores construyen sus prototipos con relés azules de Arduino (que ya traen este diodo integrado en la tarjetita) y el código les funciona. Pero al diseñar una placa PCB industrial desde cero en KiCad para accionar electroválvulas y motores directamente con transistores (MOSFETS), olvidan el diodo.
Al agregar un robusto Diodo 1N4007 (o un Schottky rápido) en paralelo a los bornes de conexión de la electroválvula del Despachador, tu hardware soporta ciclos de millones de aperturas y cierres (Corte Fino de Presets - Día 53) sin que el STM32 se entere. Toda la violencia termodinámica y magnética de detener un flujo de gas a alta presión se queda atrapada, de forma segura, en un simple componente pasivo de 5 centavos.
1. ¿Qué ocurriría si por un error de soldadura instalas el diodo Flyback al revés (polarización directa, con la flecha apuntando a Tierra/MOSFET)?
Respuesta: ¡Cortocircuito inmediato e incendio! Si lo pones al revés, cuando el MOSFET se active y cierre el circuito hacia tierra, los +24V pasarán directamente por el diodo hacia tierra sin pasar por la bobina. El diodo (que casi no tiene resistencia) absorberá decenas de amperios al instante, explotará, la fuente de 24V se protegerá (o quemará) y el MOSFET volará en pedazos. El Flyback siempre debe apuntar hacia el positivo (VCC).
2. ¿Por qué usamos el modo "Push-Pull" en el pin GPIO en lugar del modo "Open-Drain" (Drenador Abierto) que vimos en el I2C (Día 37)?
Respuesta: Porque los transistores MOSFET dependen del voltaje para activarse (capacitancia del Gate). El modo Push-Pull del STM32 literalmente "empuja" electrones conectando el pin físicamente a los 3.3V internos con mucha fuerza. Esto carga la compuerta del MOSFET rapidísimo, haciendo que cambie de estado al instante. El Open-Drain solo puede jalar a tierra, no puede inyectar corriente de forma activa hacia arriba (dependería de una lenta resistencia Pull-up, causando que el MOSFET se active lento y se caliente).