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