Actualmente estoy trabajando en un proyecto incrustado en el que tengo un contador que estará activo todo el tiempo. Si se corta la energía, también tengo que almacenar el último estado del contador y volver a cargarlo en el próximo inicio. Entonces, estaba planeando usar EEPROM en el que escribiré continuamente mi valor de contador. Pero he leído en alguna parte que la EEPROM tiene una resistencia de lectura/escritura de alrededor de 100 000 y actualizaré ese contador probablemente a 120 000 cada 24 horas. Así que estoy encontrando alternativas para lograr esta tarea. por favor dame tu sugerencia para hacer lo mismo.
Otra solución podría ser utilizar un microcontrolador con FRAM no volátil. FRAM no sufre las mismas limitaciones en los ciclos de escritura que EEPROM.
Algunos de los productos MSP430 de TI están disponibles con FRAM, aquí hay un enlace a una aplicación similar a la que usted describe:
MSP430 con estado de ahorro de FRAM en caso de corte de energía
Aquí está el artículo de Wikipedia sobre FRAM: FRAM
Tengo este problema en un proyecto actual.
La forma en que lo manejo es mantener el valor en vivo del contador en la RAM. Agregué un poco de hardware para que el microcontrolador pueda detectar que el voltaje de entrada sin procesar es bajo. Si es así, detiene lo que está haciendo, guarda el valor del contador en vivo en EEPROM, luego espera a ver el voltaje de energía sin procesar. Si vuelve a subir, con algo de histéresis, entonces el micro esencialmente se reinicia. De lo contrario, si la energía continúa bajando, el micro eventualmente se detendrá. En el próximo reinicio, el valor del contador se carga desde la EEPROM, luego se usa en vivo en la RAM nuevamente hasta el próximo apagado.
No lleva mucho tiempo escribir un pequeño valor en la EEPROM. Lo más probable es que su sistema de suministro de energía existente tenga suficiente almacenamiento de energía para que pueda detectar que el voltaje está bajando, y aún así tener suficiente tiempo de ejecución garantizado antes de que la energía del micro baje del umbral operativo o de escritura de EEPROM.
En mi caso, el único hardware adicional fue un diodo Schottky para evitar que la fuente de alimentación de CC absorbiera carga del depósito local en el camino hacia abajo, y dos resistencias como divisor de voltaje para que el micro pueda leer el voltaje de entrada sin procesar. El resto es firmware.
Es importante tener en cuenta que debe observar el voltaje en la entrada de cualquier suministro final que alimente el micro, no el voltaje de alimentación del micro directamente. Para cuando este último baje, puede que sea demasiado tarde. Con suerte, hay un rango de voltaje que está por debajo del peor de los casos cuando todo funciona correctamente, y por encima de lo que necesita la fuente de alimentación del micro para garantizar un voltaje regulado al micro. En mi caso, el suministro del micro era un regulador reductor alimentado desde 48 V, por lo que hay un gran rango que está por debajo de lo normal pero donde el micro aún puede funcionar de manera confiable.
Solución antigua, antigua, contador cmos + batería de litio o Ram + batería de litio.
El suministro de energía para el elemento de almacenamiento proviene de la fuente de alimentación normal cuando está disponible o de la batería cuando no lo está.
Muchos micros modernos en reposo mantendrán su estado con un suministro de corriente muy bajo. Por lo tanto, puede usar esta técnica con detección de apagado para ir a dormir y luego usar una batería para mantener el estado durante el período de suspensión mientras el suministro principal está apagado.
Microchip tiene una serie de partes I 2 C "EERAM" que permitirán que los datos se almacenen en SRAM, luego los escriban en EEPROM (usando la energía almacenada en un capacitor) cuando se pierda la energía, para que se carguen cuando regrese la energía. Esto parece que sería perfecto para su aplicación.
Un ejemplo representativo de estas piezas es el 47L04 .
Otra solución.
Detecte el apagado y use un supercap o no supercap para mantener el encendido durante unos pocos milisegundos. Utilice este tiempo para escribir el valor de su contador en la EPROM. Solo escriba en la EPROM cuando se apague. Número de ciclos de EPROM = número de ciclos de apagado.
Utilice un chip FRAM como el FM24C04B. Tienen una resistencia de escritura muy alta y no son volátiles.
https://www.mouser.com/ds/2/100/001-84446_FM24C04B_4_KBIT_512_X_8_SERIAL_I2C_F-RAM-477782.pdf
También puede usar un módulo SRAM respaldado por batería (NVRAM). Por ejemplo M48Z02-150PC1
Decidí ir con "ds1307 RTC". Porque tiene 54 bytes de SRAM respaldada por energía. lo que permite un ciclo infinito de lectura/escritura.
Si su proyecto incrustado tiene NIC, envíe su contador a una computadora/servidor remoto. Parece que 120.000 iteraciones en 24 horas es aproximadamente una iteración en 0,72 segundos, debería estar bien para el tráfico de red.
El servidor siempre tendrá almacenado el último valor del contador. No hay corrupción del valor del contador en la pérdida de energía porque se debe emitir un paquete válido para actualizar el valor en el servidor; sin embargo, requiere conectividad constante o se debe diseñar un protocolo de tiempo de espera especial. Además, como beneficio adicional, podrá controlar su dispositivo de forma remota si es necesario.
A) Use un capacitor de 100 µF (o mayor) para encender el contador durante el tiempo de inactividad. O cualquier lógica que se requiera para mantener el valor del contador.
B) Use memorias de núcleo magnético , pueden ser un poco dudosas de configurar.
C) Haga un potenciómetro controlado por motor (como un servo), en algún momento su contador se desbordará, ¿verdad? Mapea eso a 360 grados. Luego haga un bucle de retroalimentación para que pueda establecer el valor del potenciómetro digitalmente y leerlo digitalmente.
D) Envíe el valor de su contador una vez cada minuto a algún servidor o servidores, y permítales recordar el valor por usted durante el tiempo de inactividad. Luego, una vez que vuelva la energía, recupere el valor del contador.
PlasmaHH
PlasmaHH
Bryan Boettcher
Eugenio Sh.
RoyC
turbo j
dandavis