¿Cómo averiguar cuánto tiempo tiene para escribir cuando la fuente de voltaje falla?

1

Intento descubrir cómo puedo asegurarme de que mi controlador (STM32F030K6) siempre puede guardar un entero de 16 bits en el flash cuando la alimentación se está descomponiendo rápidamente.

Este controlador tiene un Watchdog analógico que dispara una interrupción cuando detecta un valor por debajo de un determinado umbral.

El ADC se ejecuta en modo continuo y multiplexa 4 canales, de los cuales uno es crítico y se utiliza para el Watchdog analógico. Así que pensé que obtendría un nuevo valor para este canal cada 350 ciclos (87.5 * 4, para escanear y convertir 1 canal, el adc necesita 71 + 12.5 = 87.5 ciclos). Cuando el IRQ se dispara ejecuta esta función:

uint16_t data=...;
...

void ADC1_IRQHandler(void)
{       
    HAL_FLASH_Unlock();
    HAL_FLASH_Program(TYPEPROGRAM_HALFWORD,0x8007C00, data);
    HAL_FLASH_Lock();

    HAL_ADC_IRQHandler(&hadc);
}

Según la hoja de datos, toma este chip ~ 50µs para programar un valor de 16 bits para el flash.

Mi configuración es una PCB con un suministro de 24 V, un LM317 que genera 3,3 V y una bomba de carga para un MOSFET, que toma el reloj del controlador. Pensé en apagar todo antes de escribir en flash, para ahorrar algo de energía, pero apagar los ciclos de costos ...

Tengo 100 nF en la entrada de 24 V y 1 µ en la entrada y salida del regulador de voltaje LM317.

¿Cómo puedo asegurarme de que siempre pueda guardar ese valor, incluso si el voltaje en la entrada se rompe inmediatamente?

esquemático http://i59.tinypic.com/29qld7o.jpg

    
pregunta JavaForStarters

1 respuesta

3

Algo como esto debería funcionar.

Dado que C1 solo suministra la corriente para el controlador LM317 +, sabes que se está descargando con ~ 35mA. Si establece el umbral en (por ejemplo) 10 V, entonces tiene al menos 5 V delta-V para C1 antes de que U1 comience a abandonar.

Diga que desea que permanezca despierto 1 ms después de que se detecte un fallo de alimentación, luego

C1 = (0.001 * 0.035) / 5 = 7uF. Así que podrías usar una gorra de 10uF.

simular este circuito : esquema creado usando CircuitLab

    
respondido por el Spehro Pefhany

Lea otras preguntas en las etiquetas