關于AVR的BOD
作為一個正式的系統(tǒng)或產(chǎn)品,當系統(tǒng)基本功能調(diào)試完成后,一旦進行現(xiàn)場測試階段,請注意馬上改寫熔絲位的配置,啟用AVR的電源檢測(BOD)功能。
對于5V系統(tǒng),設置BOD電平為4.0V;對于3V系統(tǒng),設置BOD電平為2.7V。然后允許BOD檢測。
這樣,一旦AVR的供電電壓低于BOD電平,AVR進入RESET(不執(zhí)行程序了)。而當電源恢復到BOD電平以上,AVR才正式開始從頭執(zhí)行程序。保證了系統(tǒng)的可靠性!
原因分析如下:
AVR是寬電壓工作的芯片,當電壓跌至2.5V,系統(tǒng)程序還能工作。這是有2個可怕的現(xiàn)象可能出現(xiàn),
1。外圍芯片工作已經(jīng)混亂,AVR讀到的東西不正確,造成程序的執(zhí)行發(fā)生邏輯錯誤(不是AVR本身的原因)。
2。當電源低到臨界點,如2.4V時,并且在此互上互下的,AVR本身的程序執(zhí)行也不正常,取指令、讀數(shù)據(jù)都可能發(fā)生錯誤,或程序亂飛、不穩(wěn)定(AVR本身的原因,實際任何的單片機都是這樣的),非常容易造成EEPROM、FALSH的破壞。有人問51怎么不會?實際上51也是這樣,只是51內(nèi)部沒有直接寫EEPROM、FLASH的指令,它的程序亂飛留不下痕跡。還有人有疑問:外掛EEPROM,掉電時怎么不會改寫?實際是外掛EEPROM,當電壓低于4V(2.7V)時,它已經(jīng)不工作了,程序去改內(nèi)容也改不了。而AVR內(nèi)部的東西在臨界電壓時都能工作,但非常不穩(wěn)定。
AVR的BOD功能必須要使用,我早期使用51時,凡是產(chǎn)品外部都要使用電源監(jiān)測芯片,現(xiàn)在AVR自己本身就有該功能,一定要使用。
下面是AVR獵手的經(jīng)驗之談:
在做的一個控制系統(tǒng),現(xiàn)場環(huán)境提供給我的電源是DC 24V,我的系統(tǒng)需要兩個電壓,一個是DC 12V 3A,一個是DC 5V 200mA。12V穩(wěn)壓選用了1501A12開關穩(wěn)壓IC(此芯片最大電流可以承受5A,如果要達到這么大的電流,配套的電感很重要,必須使用藍綠磁環(huán),0.85mm的漆包線繞制,22uH的電感量)。5V的電源用7805對12V電源進行穩(wěn)壓。單片機用的是ATMEGA48,使用洞洞板焊接做實驗,芯片的熔絲只修改了下振蕩源為外部晶體振蕩和關閉8分頻功能,未開啟BOD。
因為12V的電壓系統(tǒng)要帶動一個直流電機,由12V的繼電器進行帶動控制,因為電機工作時帶動的負載有可能會被外力阻擋而造成電機停轉過載,這個時候電機的堵轉電流可能達到3A左右,所以在硬件上我做了保護,采用AVR的ADC檢測電機的工作電流,如果發(fā)生過載,則馬上停止電機工作。
這個手工焊接的控制板測試時工作正常,包括電機過載測試,都未發(fā)生什么故障。
都測試通過后,制板回來,燒寫程序的時候順便打開AVR的BOD,設置為4.3V。然后開始著手做一些過載測試,發(fā)現(xiàn)一過載MCU就馬上復位~~~超級郁悶啊~~~以為自己又改了什么程序導致不穩(wěn)定,或者是啟動電機工作后的延時時間不夠(大家都知道:在驅動大功率負載的時候,在接通繼電器的時候,MCU的指令控制一定要再延時幾十個毫秒~幾百個毫秒左右,否則會出現(xiàn)繼電器吸合后馬上斷開的問題。詳細原因不在本文討論范圍之內(nèi)就不多說了,書本上都有詳細說明這些用法),真的很打擊人~ 想想AVR也沒這么脆弱~~或者是我布板設計不合理???沒這個理由的,以前的板子可是用洞洞板焊接的,以前不管怎么測試都不會復位。試著增加了輸出控制的延時時間,還是一樣的結果,一過載就復位。
軟件改了~不行~~~寫入以前的軟件~也不行
換回以前的洞洞板測試,OK,沒問題。不會吧~~~
靜下心來仔細想想,兩個板的差異,硬件一樣,軟件一樣,芯片一樣。等等…好象…對了!新做的板子都開啟了BOD使能。馬上先把BOD關了,果然,系統(tǒng)沒有再發(fā)生過一次復位的情況。問題是解決了,但總得給個理由吧,總不能就放著BOD不用~~~再用眼睛仔細觀察電機過載時電路板的一些狀態(tài),發(fā)現(xiàn)12V的LED電源指示燈會在電機過載的瞬間暗了一下,哇靠~!火眼金睛啊~!多帶了個眼鏡果然不一樣!^_^哈哈,知道哪里的問題了。應該是電機過載時,12V的電壓有所跌落,然后導致經(jīng)過7805穩(wěn)壓后的5V電壓也有所跌落,雖然這個電壓的跌落只是瞬間,可能有跌到 4.3V以下,但這個瞬間馬上被BOD檢測到了,BOD強制MCU復位。這個瞬間的跌落用萬用表是檢測不出的,特別是用數(shù)字表更看不出了,有示波器的話就可以看下這個的跌落波形了。我手上只有兩個數(shù)字表,所以沒法把這個瞬間的波形捕捉出來給大家看了。(有些時候數(shù)字表還不如指針表,指針表可能還會更直觀的顯示出一些瞬態(tài)變化,如果有指針表應該也可以看出一些細微的電壓波動)
解決方法:BOD的作用上面馬老師已經(jīng)說了,所以還是不能關掉了事,設置為2.7V即可,我這樣做有沒有道理大家自己想咯^_^
把自己使用BOD的過程分享出來是想告訴大家:使用BOD的時候不是隨手開下就了事的,要注意實際工作的一些異常狀況的發(fā)生,設置好適合系統(tǒng)的BOD電壓才能保證你的系統(tǒng)工作的更可靠。
評論