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