DÍA 108 DE 365

Fase 2: Fundamentos de Hardware y Electrónica

📖 Teoría a Estudiar

Física de una Válvula Proporcional (Solenoide Lineal)

A diferencia de las válvulas "Todo o Nada" (ON/OFF), una Válvula Proporcional permite suspender el émbolo magnético (spool) exactamente a la mitad del tubo, dejando pasar solo un porcentaje del flujo de gas. El problema es que el procesador solo emite señales digitales puras: 3.3V o 0V.

El Inductor como Filtro Pasa-Bajos Analógico

Aquí es donde la magia de la física electromagnética juega a nuestro favor. La bobina de la válvula es un Inductor masivo. Los inductores se oponen a los cambios de corriente. Si le aplicamos una onda cuadrada PWM de alta frecuencia (ej. 1 kHz), la corriente no puede subir y bajar instantáneamente. Se promedia a sí misma.

Un PWM del 50% entregará una corriente continua y suave equivalente al 50% de la fuerza máxima del electroimán. El campo magnético será estable, y el resorte de la válvula encontrará un equilibrio físico en la posición media.

El Fenómeno "Dither" (Superando la Fricción Estática)

¿Por qué no usar simplemente un voltaje analógico real? Por la fricción (Stiction). Si a un émbolo de acero le aplicas voltaje lento y constante, la fricción estática lo detiene hasta que la fuerza es mucha y entonces "salta" de golpe. Al usar PWM, el ligero rizado (Ripple) residual de la onda cuadrada hace que el émbolo vibre microscópicamente (Dither). Esta vibración continua rompe la fricción estática, permitiendo que la válvula se deslice como si estuviera lubricada en aceite.

DINÁMICA INDUCTIVA: PWM VS CORRIENTE CONTINUA (DITHER) Voltaje (PWM MOSFET) Rampa de Duty Cycle Incrementando Corriente Inductiva (Amperios) Ripple (Dither) = Rompe Fricción Válvula Proporcional (Corte) Coil Coil Émbolo Fuerza Magnética Fuerza Resorte

⚙️ Ejercicios Prácticos

Ejercicio 1: El pin PA7 de tu microcontrolador controla el MOSFET de potencia de la válvula principal. Este pin está mapeado al Canal 2 del TIM3. Configura el timer en modo PWM y escribe una función que aumente el Duty Cycle gradualmente (Soft-Start) para evitar un Golpe de Ariete hidráulico.


/**
 * @file valve_pwm.c
 * @brief Rampa de Aceleración Suave para Válvula de Potencia
 */

#include "stm32f401xe.h"

// Variable externa del Día 98 (SysTick) para manejar tiempos no bloqueantes
extern volatile uint32_t milisegundos_globales;

void inicializar_valvula_proporcional(void) {
    
    // 1. Relojes: Puerto A y Timer 3
    RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
    RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
    
    // 2. Configurar PA7 en Función Alternativa (AF2 para TIM3)
    GPIOA->MODER &= ~GPIO_MODER_MODE7; 
    GPIOA->MODER |= GPIO_MODER_MODE7_1; 
    
    GPIOA->AFR[0] &= ~GPIO_AFRL_AFSEL7;
    GPIOA->AFR[0] |= (2 << (7 * 4)); 
    
    // 3. Frecuencia del PWM (1 kHz = Ideal para electroválvulas y Dither)
    TIM3->PSC = 84 - 1;       // Reloj Timer a 1 MHz
    TIM3->ARR = 1000 - 1;     // Periodo de 1 milisegundo (1000 hz)
    
    // 4. Configurar Canal 2 en Modo PWM1
    TIM3->CCMR1 &= ~TIM_CCMR1_OC2M;
    TIM3->CCMR1 |= (6 << TIM_CCMR1_OC2M_Pos);
    TIM3->CCMR1 |= TIM_CCMR1_OC2PE; // Preload Enable
    
    // 5. Habilitar la salida física
    TIM3->CCER |= TIM_CCER_CC2E;
    
    // Asegurar que la válvula arranca CERRADA (0% Duty Cycle)
    TIM3->CCR2 = 0;
    
    // Activar contador
    TIM3->CR1 |= TIM_CR1_CEN;
}

/**
 * @brief Ejecuta una rampa no bloqueante de 0% a 100%
 *        Debe ser llamada constantemente dentro del bucle main.
 */
void procesar_apertura_suave(void) {
    static uint32_t tiempo_anterior = 0;
    static uint32_t duty_actual = 0;
    
    // Máquina de estados: Incrementa un paso cada 5 ms
    // Esto toma 500ms (medio segundo) para abrir la válvula completamente (1000 pasos)
    if ((milisegundos_globales - tiempo_anterior) >= 5) {
        tiempo_anterior = milisegundos_globales;
        
        if (duty_actual < 1000) {
            duty_actual += 10; // Subir 1% por iteración
            TIM3->CCR2 = duty_actual;
        }
    }
}

int main(void) {
    // Inicialización del hardware
    // SysTick_Init();
    inicializar_valvula_proporcional();
    
    while(1) {
        
        // El CPU llama a esta función millones de veces. 
        // Ella solita avanza un paso solo cuando es el momento correcto.
        procesar_apertura_suave();
        
        // ... Tareas concurrentes RS485, LCD, Metrología
    }
    
    return 0;
}
        

🚀 Avance del Proyecto Tesis: Despachador de Gas LP

Objetivo del día: Mitigación de Estrés Mecánico y Dinámica de Fluidos.

El diseño electromecánico es tan importante como el software. Si abres el paso de Gas LP de cero a máxima presión en un milisegundo, la onda de choque viajará por la manguera y golpeará violentamente la válvula del tanque del cliente. Esto no solo es peligroso; acorta la vida útil de los empaques de neopreno de tu despachador.

Al implementar este algoritmo de Apertura Suave (Soft-Start) con un PWM Bare-Metal a 1kHz, obligas a la bobina de la electroválvula a luchar progresivamente contra la fuerza de su resorte. El émbolo mecánico de acero sube milímetro a milímetro durante el transcurso de medio segundo, permitiendo que la presión del fluido se estabilice gradualmente. Con esta combinación de Hardware Timer y Máquina de Estados, has elevado tu equipo al estándar de seguridad industrial pesada, superando ampliamente a los sistemas básicos tipo "Relé y Arduino".

📝 Resumen del Día