单片机在掉电瞬间将数据存入EEPROM的方法

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机在掉电瞬间将数据存入EEPROM的方法相关的知识,希望对你有一定的参考价值。

单片机在掉电瞬间将数据存入EEPROM的方法


  • 文章内容来自于:https://tech.hqew.com/news_1123789

在单片机的应用中,一些需要高速处理且掉电后需要保存的数据多放在单片机片内RAM中,采用备用电池保存RAM中的数据。备用电池使用期限有限,存储的数据易受干扰,可靠性低。将数据存在E2PROM中可靠性较高。如果数据量较小(10个字节以内),则可采用在掉电瞬间靠电容储能将需要保存的数据存入E2PROM的方法。在单片机系统中,常用X25045来存储数据。

  • 在单片机的应用中,一些需要高速处理且掉电后需要保存的数据多放在单片机片内RAM中,采用备用电池保存RAM中的数据。备用电池使用期限有限,存储的数据易受干扰,可靠性低。将数据存在E2PROM中可靠性较高。如果数据量较小(10个字节以内),则可采用在掉电瞬间靠电容储能将需要保存的数据存入E2PROM的方法。
      在单片机系统中,常用X25045来存储数据。89C2051和X25045的耗电量都比较低,当稳压电源的滤波电容在3000μF 以上时,一检测到掉电立即关掉耗电量较大的输出,则电容的储能可以保证单片机在系统掉电后继续工作40ms以上。X25045的存储时间为2ms/字节,50Hz交流电压掉电可在20ms内检测到,因此可以将10个字节的数据存入X25045。这样,在单片机的正常运行期间数据存储在内部RAM中,存取速度快,掉电后数据存入E2PROM中,数据保存的可靠性高,系统电路简单、成本低。

1. 硬件电路及原理

由于电容的储能只能保证单片机在掉电后40ms内正常工作,掉电检测电路必须在尽可能短的时间内准确地检测到掉电。将50Hz的交流电压转换为50Hz占空比约为50%的脉冲信号,单片机检测50Hz脉冲,如果脉冲停止则判断为掉电,立即转入掉电处理程序。
  硬件电路如图1所示。220V 交流电经过变压器TI,输出9V交流电,通过1kΩ电阻R2接到光耦D1的输入端。当交流电正半周A、B两点间的电压大于光耦的导通电压时,光耦导通,经过74LS14整形反相后输出一个高电平到单片机;当A、B两点间的电压小于光耦的导通电压时,74LS14输出一个低电平到单片机,输入到单片机的是一个占空比略小于50%的脉冲信号,高电平的脉冲宽度在5~10ms之间。将扫描周期定为5ms,可以保证用最短的时间准确地检测到掉电(如图2所示)。单片机每隔5ms读入一次I/O口的状态,如果连续四次都为低电平,则判为掉电,转入掉电处理子程序。

2. 软件设计

程序中设定 定时器每隔5ms产生一次定时中断,在定时中断程序中读取输入脉冲的状态,对读到输入为低电平的次数进行计数,如果连续四次为低电平,置掉电标志为1。在主循环中查询掉电标志,如果有掉电标志则进入掉电处理子程序。在掉电处理子程序中,首先关掉显示等耗电较大的设备,然后调用E2PROM 存储子程序,把要存储的数据存入E2PROM中,最后让程序进入死循环,防止程序因对E2PROM反复存储而引起错误。当供电恢复后,上电复位电路可以让程序从头开始运行。如果供电在短时间(100ms)内恢复,则上电复位电路失去作用,看门狗电路会使单片机复位,程序从头开始运行。
根据上述方法,读者可以很容易地编制出掉电检测和数据存储程序。

3. 总结

本方法适用于10个字节以内的数据的掉电保存,特别是需要高速计数,计数值需要频繁更新,并且停电后不需要计数的场合。与用备用电池保存数据的方式相比,这种方法不需要电池,而且数据保存在E2PROM中不易受外界干扰,数据保存的可靠性高,系统简单、可靠性高。与常用的在E2PROM中存取数据的方法相比,数据存储的速度快,可以对频率较高的脉冲计数,不受E2PROM存储寿命的限制。掉电检测准确率高,数据存储的可靠性与E2PROM相当。
  笔者用此方法设计的施工用卷扬机转数计数器在现场使用已经一年以上,没有出现过数据丢失的现象。
  - 电路原理图

以上是关于单片机在掉电瞬间将数据存入EEPROM的方法的主要内容,如果未能解决你的问题,请参考以下文章

单片机: EEPROM和串口通信

STC12c5A60s2单片机 想通过片外EEPROM保存掉电信息!

RAMSRAMSDRAMROMEPROMEEPROMFlash存储器区别

RAMSRAMSDRAMROMEPROMEEPROMFlash存储器概念

stm32hal库rtc设置出错

关于掉电数据保存的心得