AVR單片機掉電數(shù)據(jù)保護應用
在單片機應用中經(jīng)常需要在掉電時(包括人為的關機和偶然的外部電源故障),對運行的數(shù)據(jù)進行保存。目前,常用的方法是單獨給單片機增加一個較大的電容(一般為2000 μf以上,也有用法拉級的),外部掉電后,靠大電容存儲的電量緩慢放電,提供單片機向eeprom存儲數(shù)據(jù)所需要的時間。所選的電容小,提供的時間短,存儲數(shù)據(jù)不可靠,所選電容大提供時間長,存儲數(shù)據(jù)可靠。但是隨之而來的問題是,掉電后電容放電過程中,單片機的供電電壓在緩慢下降,當下將到某個值但還沒有降到復位門限電壓之前,如果此時再次開機,則單片機不能正常啟動,導致單片機重復上電后工作混亂。下面具體分析這一過程并給出解決的辦法。
我們先了解一下AVR的上電復位特點。上表是AVR數(shù)據(jù)手冊提供的上電復位參數(shù)。
AVR復位特征
從上表中可知,上電復位的典型門限電壓是1.4V和1.3V,即在單片機上電時,其電源電壓要低于此值,才能使單片機上電復位。單片機的正常工作電源電壓范圍是2.7~5.5V。當電源電壓低于2.7V時,單片機已經(jīng)停止工作,如果此時電壓高于1.3V,并且再次上電,則單片機不能正常復位,導致工作混亂。一些場合的停電可能是瞬間的,包括人為斷電可能都是瞬間的,可能幾秒鐘之內(nèi)又再次上電,而此時單片機電容的電壓恰好處于復位電壓以上和正常工作電壓以下,就會出現(xiàn)上面的現(xiàn)象。這是本人在實際應用當中所遇到的情況。
由此可見,雖然解決了數(shù)據(jù)保護問題,卻又帶來了新的麻煩。所以在解決單片機掉電數(shù)據(jù)保護時,應該注意的是既要保證充足的時間用于數(shù)據(jù)存儲,又要盡快放電,保證正常重新上電。
上圖是本文所用的電路,圖中交流電經(jīng)過CON2輸入,整流濾波后到達三端穩(wěn)壓塊7806(注意在此用7806而不是7805),7806的輸出一路經(jīng)dl送到單片機(cpu_v=5.3V),單獨給單片機供電,單片機耗電通常小于5毫安,由于使用C4(2200μf)電容,該路電源的放電時間較長。另外一路電源經(jīng)過d2送到電路負載中(VCC=5.3V),通常此路電源的電流較大,超過幾十毫安。
這樣,在斷電后,Vcc由于放電電流大而且濾波電容小,很快放電,通常在幾毫秒以內(nèi)。而另外一路cpu_v,由于濾波電容大而且放電電流小,所以放電很慢,t>2200μf×10-6×5V/5ma×10-3=2.2s;Vcc經(jīng)過R4、W2分壓接到單片機比較器的輸入端ain0,cpu_v經(jīng)過R6和穩(wěn)壓管(3.3V)接到單片機比較器的ain'I端。電路正常工作時,調(diào)整電位器W2,使得ain0電壓大于ain1電壓0.2V,當?shù)綦姡ɑ驍嚯姡┌l(fā)生時,ain0下降快,ainl下降慢,當ain0低于ainl時,比較器翻轉。AVR比較器的翻轉可以觸發(fā)中斷,在中斷里完成eeprom的數(shù)據(jù)保存。圖中Q1及周圍的電路的工作作用是:初次上電時,由于電容C1兩端電壓不能突變,所以三極管的b、e結電壓為OV,處于截止狀態(tài),截止的時間取決于Cl和R2的時間常數(shù),本電路中參數(shù)可以保證截止時間超過10ms,在此時間之內(nèi)CPU已經(jīng)進入正常工作狀態(tài),在程序中將OUT端置“1”電平,繼續(xù)使三極管截止。當斷電發(fā)生時,先存儲數(shù)據(jù)到eep-rom,然后out端置“0”電平,三極管飽和導通,立刻給cpu_v電源放電,R3是限流電阻。這樣放電時間取決于R3和C4,大