El término Smoke Test proviene de un viejo chiste de la ingeniería electrónica: "Todos los componentes electrónicos funcionan con humo mágico sellado en su interior. Si conectas algo mal y el humo sale, el componente deja de funcionar". Para evitar que el humo escape, debemos realizar pruebas rigurosas en frío (sin energía de la pared).
Un cortocircuito fatal ocurre cuando la línea de poder (VCC) toca la Tierra (GND). Según la Ley de Ohm, Corriente = Voltaje / Resistencia. Si la resistencia entre 3.3V y GND es cero (un puente de soldadura), la corriente tenderá al infinito, evaporando el cobre al instante.
Al utilizar un multímetro, no buscamos valores exactos, buscamos Magnitudes. Cada nodo de poder (El de 24V, el de 5V y el de 3.3V) tiene una impedancia natural hacia tierra dictada por los componentes conectados a ella.
Paso 1: La Trampa de la Continuidad (Beeper).
Pon tu multímetro en modo "Continuidad" (Bip sonoro). Conecta la punta negra al pad de Tierra (GND) y la punta roja al Test Point de +3.3V. Es normal que el multímetro haga "Biiip" durante medio segundo y luego se calle. Eso no es un corto. Son tus capacitores cerámicos cargándose con el minúsculo voltaje de prueba del multímetro. Si el pitido es constante y permanente, tienes un puente fatal.
Paso 2: Medición en modo Ohmios (Resistencia).
Cambia el multímetro al modo `Ω`. Mantén la punta negra en GND y prueba progresivamente con la punta roja:
O.L) o más de 100 kΩ (kilohmios).Paso 3: Inyección Limitada (Fuente de Banco).
Una vez pasadas las pruebas en frío, NO uses el adaptador de corriente de la pared. Usa una Bench Power Supply (Fuente de Laboratorio).
Ajusta el voltaje a 24V, pero limita la corriente (Current Limit) a 0.05 Amperios (50 mA). Conecta la placa. Si el voltaje cae a 1V y la luz de "CC" (Constant Current) se enciende roja, tienes un cortocircuito oculto. La fuente limitó la energía a 50mA, salvando tu placa de fundirse. Si la placa se enciende y la corriente se queda estable en 30mA, ¡has superado el Smoke Test!
Una vez que el STM32 despierta de forma segura, el software no debe enloquecer encendiendo actuadores. Antes de arrancar el Scheduler de FreeRTOS o habilitar los optoacopladores de la válvula de gas, haremos que el procesador confirme sus propios signos vitales.
/**
* @file safe_boot.c
* @brief Secuencia de Protección "Safe Boot" previa al inicio del RTOS
*/
#include "stm32f401xe.h"
#include <stdint.h>
#include <stdbool.h>
// Dependencias de Hardware
extern void Actuator_Emergency_Shutdown_All(void);
extern float ADC_Get_24V_Rail_Voltage(void);
extern void System_Status_LED_Blink(uint8_t mode);
// Umbrales de Salud Eléctrica
#define VOLTAJE_MIN_OPERATIVO (22.0f) // Voltios
#define VOLTAJE_MAX_OPERATIVO (26.0f) // Voltios
/**
* @brief Bucle de guarda que retiene el encendido si la red de potencia está inestable.
*/
void System_Safe_Boot_Check(void) {
// 1. SILENCIO ABSOLUTO (Failsafe state)
// Garantizamos que por defecto, incluso antes de evaluar, todo relé y motor
// está forzado a GND (Apagado).
Actuator_Emergency_Shutdown_All();
// 2. RETARDO DE ESTABILIZACIÓN (Power-On Delay)
// Le damos tiempo a los capacitores gigantes de la etapa Buck a cargarse
// y al LDO de 3.3V para suprimir el rizado inicial (Overshoot).
HAL_Delay(500); // Bloqueo seguro de medio segundo
// 3. AUTO-EVALUACIÓN DEL CARRIL PRINCIPAL (Monitoreo desde el ADC)
float voltaje_rail_24v = ADC_Get_24V_Rail_Voltage();
// 4. VEREDICTO DE ENCENDIDO
if (voltaje_rail_24v < VOLTAJE_MIN_OPERATIVO || voltaje_rail_24v > VOLTAJE_MAX_OPERATIVO) {
// La fuente principal (Ej. Batería de la gasolinera) está cayendo
// o hay un cortocircuito ahogando la corriente que colapsa el voltaje.
while(1) {
// HALT ETERNO.
// Nunca se llamará a osKernelStart();
// Emitimos parpadeo rápido indicando Fallo de Poder Inicial.
System_Status_LED_Blink(1);
HAL_Delay(100);
}
}
// Si llegamos aquí, el hardware ha sido certificado como eléctricamente sano.
// Encendemos el LED de estado en verde continuo indicando "Hardware Ready".
System_Status_LED_Blink(0);
}
Objetivo del día: Comisionamiento Eléctrico en Frío (Cold Commissioning) y Prevención de Daños de Prototipo.
Imagina que ensamblaste tu placa. El procesador ARM Cortex-M4, el ESP32 para comunicaciones en la nube, y los optoacopladores para la actuación industrial (aislamiento galvánico de la válvula). Invertiste más de 150 dólares en componentes y semanas en diseño con KiCad. Pero, por un descuido microscópico al untar la pasta, el polígono grueso de +24V quedó haciendo contacto con la diminuta pista de +3.3V.
Si la enchufas a la fuente directamente, los 24V fulminarán al procesador y al ESP32 al instante. El "Smoke Test Inicial" es el acto de humildad supremo del ingeniero: no confiar jamás ciegamente en el ensamblaje. Al medir con el multímetro en la escala de Ohmios cada riel de potencia (GND a 24V, GND a 5V, GND a 3.3V), y validar que marcan `O.L.` o varios kilohmios de impedancia antes de energizar, proteges activamente tu inversión. Más aún, al usar una fuente de laboratorio con límite de 50mA para el primer encendido y complementar con la rutina `System_Safe_Boot_Check()` en C, te aseguras de que el primer prototipo de tu máquina de Gas LP sobreviva a su propio nacimiento. Es la transición definitiva del plano virtual de KiCad a la realidad física de un producto funcionando en tu escritorio.