cómo detectar fallas de energía y hacer que el microcontrolador guarde datos en EEPROM

Estoy usando Arduino nano para un proyecto en el que tengo un contador que aumenta continuamente. Y quiero conservar la cuenta después de un corte de energía. Los datos cambian con más frecuencia, por lo que almacenarlos continuamente en EEPROM no es una opción, ya que EEPROM tiene una limitación de ciclo de borrado/escritura. Además, los datos tienen un máximo de 4 bytes.

por favor, ¿alguien puede sugerir un IC o diseño de circuito que pueda detectar una falla de energía e interrumpir Arduino para que pueda guardar datos en EEPROM?

Supongo que tendré que usar un condensador para alimentar Arduino después de que se corte la energía para que Arduino pueda guardar datos en EEPROM.

(1) " Y quiero seguir contando después de un corte de energía". ¿Debería ser "Quiero seguir contando después de un corte de energía"? (La forma en que lo ha escrito sugiere que desea contar los pulsos después de desconectar la alimentación). (2) ¿Ha calculado cuánto tiempo necesita escribir en la EEPROM? Haga que esta sea su especificación para el tiempo de extensión en su pregunta.
Debe especificar los requisitos de energía: Encendido, Apagado (escribir en Flash) V,I,t, Umbral de V de falla y, por lo tanto, Almacenamiento de energía en espera Q=CV o Vbat no voltatil para la duración de Poff Modo de suspensión. Una vez que se definen estas duraciones de V, I, T, elija C o batería de celda (dos métodos diferentes)
Suponiendo que se trata de un proyecto de aficionado, puede obtener una memoria externa FRAM o MRAM y luego escribir felizmente con la frecuencia que desee. Para protegerse contra cortes de energía durante la escritura, la solución más simple es proporcionar un límite de respaldo lo suficientemente grande en el suministro.

Respuestas (3)

Este es el diagrama principal que necesita. Los valores para R1 y R2 dependen del voltaje de la fuente de alimentación y el voltaje de entrada máximo de los pines de su CPU.
El valor de C1 depende de la cantidad de corriente que usa su circuito y cuánto tiempo necesita para mantener la energía y a qué nivel. Agregar un regulador después de ese límite puede mejorar en gran medida su tiempo, lo que le permite usar capacitores más pequeños.
Para calcular el valor de C (su siguiente pregunta obvia), necesitamos todos los datos que solicita Tony Steward.

esquemático

simular este circuito : esquema creado con CircuitLab

No estoy seguro de cuánta energía consume mi proyecto. Pero estoy usando una bruja de lectura, una pantalla LCD de 16 x 2 y un relé, así que basándome en eso, supongo que puedes estimar cuánta energía requerirá mi proyecto. Sé que la luz de fondo en la pantalla LCD consumirá tanta energía que encenderé la luz de fondo de la pantalla desde una fuente de alimentación directa en lugar de alimentar la salida del condensador. Entonces, la pantalla LCD se apagará tan pronto como se corte la energía, lo que le dará más energía a Arduino después de que se corte la energía.
No estoy seguro si corregir su ortografía de 'principio'. ¿Quiere decir que es un diagrama del principio de funcionamiento, cómo funciona, en cuyo caso el inglés suena un poco torpe? ¿O quiere decir que es el primero, el diagrama principal que necesita, antes de refinarlo para los detalles específicos de la aplicación, en cuyo caso el inglés está bien, solo la ortografía está mal? Como te has tomado la molestia de ponerlo en negrita, sería bueno tener el significado correcto escrito correctamente.
Veo de dónde vienes. Principio es la palabra que quería usar. (Conozco la diferencia ya que mi ficha de trabajo es 'ingeniero principal', pero fácilmente podría haber sido un error de ortografía). Como no soy un hablante nativo, puede corregir el inglés torpe :-)
No creo que funcione como desea, si nada más se alimenta de la fuente de alimentación y hay un condensador antes del diodo, la fuente de alimentación permanecerá +0.6V sobre el VCC de la CPU. La detección de pérdida de energía nunca será de nivel lógico bajo. Tal vez leerlo con ADC pero se necesitará una referencia de ADC independiente de VCC.
Sin embargo, esto no funcionará razonablemente bien, ya que en el peor de los casos, al escribir cíclicamente en una eeprom, eventualmente deberá borrarlo. Entonces, el tiempo desde la detección de pérdida de voltaje hasta el momento en que se activa la detección de caída de voltaje de MCU debe ser mayor que el tiempo de borrado/escritura de la eeprom. No es un diseño ideal en absoluto. Acoplamiento estrecho entre todo: consumo de corriente, valor límite, tiempo de escritura/borrado de eeprom y nivel de voltaje de caída de voltaje de MCU.

Puede usar un capacitor y un supervisor de voltaje de 3 pines para la buena señal de potencia. Estos son algunos ejemplos de Texas Instruments.

Como señalaron Oldfart y Tony, debe especificar el voltaje y el consumo de energía para obtener más detalles.

Tenga cuidado, el consumo de energía es mayor al escribir en eeprom.

Supongo que estás tratando de hacer algún tipo de contador irreversible, así que aquí hay algunos consejos:

  • Realice algún tipo de copia de seguridad, los datos en la eeprom se borran antes de escribir, por lo que si sucede algo, obtendrá un valor superior al real. Puede invertir todos los bits como el valor eprom para disminuir el formulario FFFFFFFF a 00000000
  • Agregue una suma de verificación para verificar la integridad de los datos.
  • Incluso si no está apagado, escriba el valor en la eeprom de vez en cuando, así en caso de error para tener un valor reciente.
  • Para aumentar el límite de borrado/escritura, use muchas ubicaciones en lugar de una, al encender lea el valor más alto, al apagar sobrescriba el valor más bajo. Si usa 16 ubicaciones, tendrá una resistencia de eeprom 16 veces mayor.

Aquí hay una solución alternativa que he usado para este problema en el pasado.

  1. Solo escriba la eeprom cada 10 ciclos, o cada 100, o lo que sea. Para mi aplicación, perder un par de conteos en la pérdida de energía no fue un problema.

  2. Escriba a muchas ubicaciones de eeprom para distribuir el desgaste. Probablemente no esté usando todo su eeprom, así que lo que puede hacer es asignar, digamos 20 variables para almacenarlo. Escríbalos secuencialmente, y cuando arranque, simplemente use el valor más grande. Esto le dará instantáneamente 20 veces más longevidad.

Hay otros trucos que puedes usar dependiendo del medio. Por ejemplo, con flash puede escribir la misma dirección más de una vez entre borrados.