在单片机应用中经常需要在掉电时(包括人为的关机和偶然的外部电源故障),对运行的数据进行保存。目前,常用的方法是单独给单片机增加一个较大的电容(一般为2000 μf以上,也有用法拉级的),外部掉电后,靠大电容存储的电量缓慢放电,提供单片机向eeprom存储数据所需要的时间。所选的电容小,提供的时间短,存储数据不可靠,所选电容大提供时间长,存储数据可靠。但是随之而来的问题是,掉电后电容放电过程中,单片机的供电电压在缓慢下降,当下将到某个值但还没有降到复位门限电压之前,如果此时再次开机,则单片机不能正常启动,导致单片机重复上电后工作混乱。下面具体分析这一过程并给出解决的办法。
我们先了解一下AVR的上电复位特点。上表是AVR数据手册提供的上电复位参数。
AVR复位特征
,即在单片机上电时,其电源电压要低于此值,才能使单片机上电复位。单片机的正常工作电源电压范围是2.7~5.5V。当电源电压低于2.7V时,单片机已经停止工作,如果此时电压高于1.3V,并且再次上电,则单片机不能正常复位,导致工作混乱。一些场合的停电可能是瞬间的,包括人为断电可能都是瞬间的,可能几秒钟之内又再次上电,而此时单片机电容的电压恰好处于复位电压以上和正常工作电压以下,就会出现上面的现象。这是本人在实际应用当中所遇到的情况。
上图是本文所用的电路,图中交流电经过CON2输入,整流滤波后到达三端稳压块7806(注意在此用7806而不是7805),7806的输出一路经dl送到单片机(cpu_v=5.3V),单独给单片机供电,单片机耗电通常小于5毫安,由于使用C4(2200μf)电容,该路电源的放电时间较长。另外一路电源经过d2送到电路负载中(VCC=5.3V),通常此路电源的电流较大,超过几十毫安。