新闻  |   论坛  |   博客  |   在线研讨会
单片机系统中的掉电检测与数据存储问题
colinzhang | 2008-06-07 18:03:35    阅读:3112   发布文章

先看两个之前的两个讨论贴(悬赏贴):
http://bbs.ednchina.com/showtopic.aspx?id=53979
http://bbs.ednchina.com/showtopic.aspx?id=539796
下面是我在电能表系统中的方案与分析
2.掉电检测与数据存储
1)总体思路
   由于电能表的计量是要求持续性的,而主供电系统不可能是持续的,注意这里需要一个掉电检测与数据存储的问题。首先检测出供电系统已经断电,然后启用备用电源存储数据,而且数据必须存储在掉电不易失的存储器(如EEPROM,FLASH等)中。
   本应用中,需要检测出掉电后备用电源能提供足够的电能供单片机进行数据存储。总体思路,本应用中单片机采用的是STC89C58RD+,单片机内部已经集成了16K的EEPROM,所以不需要另外外接存储器。ADE7755已经自带了电源监控功能,前面的ADE7755的介绍中已经有所描述,所以亦无须担心。这里只需要解决好单片机的掉电问题即可。在系统的稳压前端设置监测点,当监测点的电压下降到另一个基准比较电压时产生单片机外部中断。当单片机接收到外部中断后启动数据存储程序,将数据存储到片内EEPROM内。当主供电系统恢复供电后,单片机首先读取EEPROM数据,然后再恢复计数。
2)掉电检测
有电压采集转换、电压比较等方案。经过综合考虑,这里采用LM393比较器来对比监测点与参考点电压,一旦监测点电压降到某种程度,比较器就会有高电平输出,由此产生单片机外部中断。
另外有一种反其道而行之的方案。在降压后的交流端加一个光耦产生中断,一旦中断消失程序转向数据存储。
3)备用电源
虽然备用电源可以采用可充电电池,大电容等方案,但由于这里所需要的电量并不是很大,持续时间也不需要很长,只需要能完成数据存储即可。所以这里选择了大电容作为备用电源这一方案。选择了在稳压后端与单片机电源端直接并联了两个达3300uF的大容量电解电容。同时,为安全起见,在单片机的电源输入端还串入了一个低正向压降压降的二极管来阻止大电容向除单片机意外的其他电路放电。
4)数据存储
不可易失存储方案很多,比如EEPROM,FLASH,铁电等。但Flash读写比较麻烦,铁电也需要另加外围器件,所以这里选择单片机内置的EEPROM无疑是最好的选择。不仅读写简单方便,可多次擦写,减少外围器件与单片机IO口,而且为备用电源减轻了很大的负担。
最后,需要说明的是,实际上现在很多高档单片机已经集成上述功能。比如AVR自带的BOD(Brown-out Detection)电路,内置模拟比较器,C8051F系列自带AD而且在掉电时自动产生中断。也有独立的专用复位芯片,如TPS3705,ISL88706等。
5)理论计算
(1)按恒流充放电的简化计算:Q = CV = IT.Q是电量,C是电容量,V是电压,I是电流,T是时间
那么T=CV/I,在本例中可以估算时间为 T= 0.0033f*(5.0V-3.8V) / 0.012A = 0.33s,即330ms.
    330/8.5 = 38.8mS,即最多可以保存38字节数据到EEPROM中,38字节对于本应用已经足够。
数据说明:
单片机在3.8V到5.5V之间工作正常;单片机的工作电流典型值是4mA;最大工作电流20mA;普通外置EEPROM的读写一个字节的时间是8.5mS左右。据下面引述资料显示,此计算是保守估算,故可靠性有所保证。
STC单片机datasheet上是这样描述的:
1.同一次修改的数据放在同一扇区中,不是同一次修改的数据放在另外的扇区,就不须读出保护。
2.如果一个扇区只用一个字节,那就是真正的EEPROM,STC 单片机的Data Flash 比外部EEPROM 要快很多,读一个字节/ 编程一个字节大概是0.2uS/60uS。
3.如果在一个扇区中存放了大量的数据,某次只需要修改其中的一个字节或一部分字节时,则另外的不需要修改的数据须先读出放在STC单片机的RAM中,然后擦除整个扇区,再将需要保留的数据和需修改的数据一并写回该扇区中。这时每个扇区使用的字节数是使用的越少越方便(不需读出一大堆需保留数据)。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客