El Aislamiento Galvánico significa que no existe absolutamente ninguna conexión física de cobre entre el mundo exterior (ruidoso y de alto voltaje) y el mundo interior (tu microcontrolador). Ni siquiera comparten la Tierra (GND). Son dos universos eléctricamente independientes.
¿Cómo pasamos una señal (como el pulso del caudalímetro) de un universo a otro si no hay cables que los unan? Usamos un Optoacoplador (ej. PC817). Este pequeño chip negro contiene dos cosas en su interior: un LED Infrarrojo y un Fototransistor. Cuando el sensor de la calle enciende el LED, la luz viaja a través del plástico transparente dentro del chip y golpea el fototransistor, encendiéndolo. La información viaja como fotones, no como electrones.
Para que esto funcione, tu placa debe tener dos fuentes de poder totalmente aisladas (por ejemplo, una fuente de 24V para las válvulas y módulos, y un convertidor DC-DC aislado que genere los 3.3V de la CPU). Si unes la GND_INDUSTRIAL con la GND_DIGITAL en alguna parte de tu placa de cobre, destruirás la barrera galvánica y la protección será nula.
Al igual que vimos en el Día 62, usamos una resistencia Pull-up del lado del procesador. Cuando el sensor externo está inactivo, el LED interno está apagado, el fototransistor no conduce y el STM32 lee 3.3V (1 Lógico). Cuando el sensor externo detecta gas (cierra el circuito), el LED se enciende, el fototransistor se satura conectando el pin del STM32 a GND_DIGITAL, y el procesador lee 0V (0 Lógico).
Ejercicio 1: Tu hardware ahora tiene optoacopladores aislando el sensor de flujo mecánico. Configura la Interrupción Externa (EXTI) en el firmware para contar los pulsos del sensor de gas, traduciendo la lógica inversa del optoacoplador.
#include <stdint.h>
#include <stdbool.h>
// --- 1. VARIABLES GLOBALES DE METROLOGÍA (Día 48) ---
// Usamos volatile porque esta variable cambia dentro de una Interrupción
volatile uint32_t pulsos_totales_gas = 0;
// --- 2. CONFIGURACIÓN DEL HARDWARE ---
void sensor_aislado_init(void) {
// Configurar el pin del STM32 como entrada
// Habilitar Interrupción Externa (EXTI) en "Flanco de Bajada" (Falling Edge)
// ¿Por qué Flanco de Bajada?
// En reposo, el Pull-up mantiene el pin en HIGH (3.3V).
// Cuando el sensor gira y emite un pulso, el LED del optoacoplador se enciende.
// El fototransistor jala el pin a LOW (0V).
// La transición de HIGH a LOW (Bajada) representa el pulso exacto.
}
// --- 3. RUTINA DE SERVICIO DE INTERRUPCIÓN (ISR) ---
// El hardware del STM32 saltará automáticamente a esta función cada
// vez que el fototransistor mande la señal a tierra.
void EXTI4_15_IRQHandler(void) {
// 1. Limpiar la bandera de interrupción (Pending Register)
// EXTI->PR |= (1 << PIN_SENSOR);
// 2. Aumentamos el contador metrológico
pulsos_totales_gas++;
// 3. Alimentar el Watchdog de Flujo (Día 52)
// marca_tiempo_ultimo_pulso = milisegundos_globales;
// NOTA BARE-METAL:
// Nunca uses printf() ni código bloqueante dentro de una ISR.
// Solo incrementamos variables matemáticas y salimos rápido.
}
int main(void) {
sensor_aislado_init();
while(1) {
// El Súper Bucle procesa la metrología pacíficamente (Día 60)
// usando el valor de 'pulsos_totales_gas' que se llena "mágicamente"
// en segundo plano mediante los fotones del optoacoplador.
}
return 0;
}
Objetivo del día: Aislamiento de Señales de Metrología Externas.
El medidor de flujo (caudalímetro) está montado en la tubería de metal, muy lejos de tu placa electrónica. Ese cable actúa como una antena gigantesca. Si hay una descarga electrostática (ESD) o una falla de neutro en la planta, ese cable inyectará miles de voltios directamente hacia tu procesador.
Al rutear la señal del sensor hacia el LED de un Optoacoplador, creas un foso inexpugnable. Si la descarga eléctrica ocurre, lo único que se quemará será el minúsculo LED interno del chip PC817 (que cuesta 10 centavos). La barrera física de plástico detendrá los miles de voltios, y tu valioso procesador STM32 (en el mundo de la GND_DIGITAL aislada) ni siquiera se enterará del impacto, manteniendo los datos metrológicos seguros en la memoria.
1. Observa el diagrama SVG. ¿Por qué usamos dos resistencias diferentes ($R_{in}$ de 2.2kΩ y $R_{out}$ de 10kΩ)?
Respuesta: Porque pertenecen a dos universos de voltaje distintos. La $R_{in}$ está en el mundo industrial; si el sensor inyecta 24V, necesitas una resistencia fuerte (2.2kΩ o 3.3kΩ) para que el LED no se queme y solo consuma unos 10 miliamperios. La $R_{out}$ está en el delicado mundo lógico; solo maneja 3.3V y se usa como Pull-up pasivo (10kΩ es el estándar) limitando el consumo a simples microamperios cuando el fototransistor cierra el circuito.
2. ¿Se pueden aislar señales analógicas continuas (como el voltaje de un sensor de presión) usando este optoacoplador digital básico?
Respuesta: No directamente. El fototransistor de un PC817 no es linealmente preciso; su respuesta a la intensidad de luz varía con la temperatura y la edad del componente. Para aislar señales analógicas sin perder la exactitud en milivoltios de tu sensor, necesitas usar amplificadores de aislamiento magnético, o convertir la señal analógica a digital (I2C) primero y luego aislar el bus digital con un "Optoaislador Lógico Especializado" (ej. ADuM1201 o la familia 6N137).