AVR自帶的BOD電路,作用是在電壓過低(低于設定值)時產生復位信號,防止CPU意外動作。對EEPROM的保護作用是當電壓過低時保持RESET信號為低,防止CPU意外動作,錯誤修改了EEPROM的內容而我們所理解的掉電檢測功能是指具有預測功能的可以進行軟件處理的功能。
例如,用戶想在電源掉電時把SRAM數據轉存到EEPROM,可行的方法是外接一個在4.5V翻轉的電壓比較器 (VCC=5.0V,BOD=2.7V),輸出接到外部中斷引腳(或其他中斷),一但電壓低于4.5V,馬上觸發中斷,在中斷服務程序中把數據寫到 EEPROM中保護起來注意:寫一個字節的EEPROM時間長達8mS,所以不能寫入太多數據,電源濾波電容也要選大一些,將AVR的BOD設為2.7V,從4.5v到2.7這段時間寫EEPROM。
在圖中,外部9V電源通過7805穩壓到5V,作為系統電源使用。而AVR的工作電源則是單獨提供的,由5v系統電源通過低壓差肖特基二極管1N5817后得到。IN5817的正向壓降為0.3v,因此,AVR的工作電壓為4.7v。電源監控芯片IMP809-L的監控電壓為4.63V,當系統電源的電壓低于4.63V時,在R腳上產生由高電平到低電平的變化,使AVR進入INT0中斷。
該電路的工作原理為:首先通過配置AVR的熔絲位,設置BOD掉電檢測電壓門限為2.7V,并允許BOD檢測。因此,當AVR的Vcc電壓掉到2.7v以下時,AVR就停止工作。電源監控芯片IMP809-L檢測電壓門限為4.63v,用于檢測系統電源的電壓。當系統電源大于4.63v 時,IMP809-L的R端輸出高電平,整個系統正常工作。當系統電源的電壓跌到4.63v以下時,IMP809-L的R腳輸出低電平,作為AVR外部中斷INT0的申請。INT0設計為掉電處理中斷,其主要任務是備份系統運行的重要數據到EEPROM中。在提供AVR工作的電源系統中,大容量的電解電容C5作為儲能電容,一旦系統電源電壓下降,二極管1N5817截止,此時AVR可以靠C5 提供的電儲可以繼續工作一段時間。C5容量應足夠大,在系統電源掉電過程中,IMP809-L的R端輸出低電平(下降到4.63v)時,要能夠保證維持 AVR的工作電壓Vcc從4.7v降到2.7V的時間超過300ms,使AVR有時間做緊急處理和備份數據。AVR寫EEPROM大約需要 50-100mA的電流,所以電容C5的值應該在1000u~4700u,需要保存的數據越多,C5的容量應該越大。
INT0是AVR優先級最高的中斷,采用外部電平變化的下降沿觸發方式。一旦IMP809-L的R腳電平由正常的高電平變為低電平時,將觸發INT0中斷,進入INT0掉電中斷服務程序。
在INT0掉電保護中斷服務程序中,應按以下的步驟和過程處理:
緊急處理,關閉所有外部器件的工作,或將外部狀態設置到安全模式,如關閉馬達、開關等,保證系統不出事故;將AVR所有I/O設置為輸入方式,最大程度的減少AVR芯片對電源的消耗;循環檢測INT0引腳是否恢復高電平。如為高電平則轉到下一步E執行;如果INT0電平一直為低,程序將在此循環,直到完全停止運行(因為儲能電容C5的電壓低于2.7v后,AVR的BOD起作用,產生內部復位,AVR停止運行程序);再次檢測INT0引腳電平。為低電平時轉回D再次循環檢測;為高電平時繼續向下執行(這種情況表示系統電源受到干擾或短時掉電,現已經恢復正常);恢復外部器件工作(此時盡管進入了掉電保護程序,但AVR在C5的維持下,一直正常工作,所有的數據并沒有破壞,可以繼續進行工作);
編輯點評:在實際應用中,系統斷電保護的設計是一個比較難的問題,實現的方法和手段也有不同。這個設計主要是作為一個使用外部中斷的例子,讓讀者可以從中體會到如何合理和正確的使用外部中斷。
電子發燒友六月《嵌入式技術特刊》,更多優質內容,馬上下載閱覽
評論
查看更多