分析一個極簡的電源電壓檢測電路
源電壓檢測是常用的功能。
本文引用地址:http://www.butianyuan.cn/article/202407/461112.htm比如用電池供電的產品,需要實時檢測電壓以判斷電池的電量情況,并及時提醒用戶對電池充電或者更換電池。
再比如通過檢測電池電壓判斷斷電,及時在斷電之后采用電容上儲存的電荷供電,維持記錄工作,在此期間將RAM中的數據寫入flash,eeprom等非易失存儲器,重新上電之后再讀出恢復,從而實現(xiàn)斷電記憶功能。
為了保證該功能的可靠性,產品需要滿足電源瞬斷試驗要求。比如對于電源50ms瞬斷,在斷電之后,并聯(lián)在供電電源兩端的電解電容可以繼續(xù)放電,維持負載正常工作。
50ms瞬斷要求電容在向負載放電50ms之后,其兩端的電壓仍能滿足設備正常工作要求。
電容容值的計算
以下面的電路為例,12V供電電源經過LDO穩(wěn)壓,得到+3.3V向負載供電,
LDO電路
經過測算,+3.3V電源的負載電流為50mA;
對于線性穩(wěn)壓器,其輸入電流等于輸出的負載電流加上線性穩(wěn)壓器的工作電流(也即靜態(tài)電流);
在上圖中,Iin=Iload+IQ,從規(guī)格書上可知,其靜態(tài)電流約為6mA,這樣+12V外部電源的負載電流為50mA+6mA=56mA。
要注意的是,對DC-DC電源,其輸入電流和輸出電流需要從功率的角度通過效率來換算;
從規(guī)格書上還可以知道,LDO的最小壓差的最大值為1.10V,即輸入電壓需要達到3.3V+1.1V=4.4V以下,LDO才能穩(wěn)定輸出+3.3V的電壓。
LDO的靜態(tài)電流以及壓差
根據這些參數, +12V輸入電源兩端的電解電容C1需要取多大的容值才能保證在斷電50ms之內,+3.3V的電源電壓穩(wěn)定,從而負載正常工作。
當+12V斷電之后,C1向通過LDO向負載放電,其放電電流為56mA。
從開始放電,至+3.3V能穩(wěn)定輸出+3.3V電壓的電壓降ΔU=(12-4.4)=7.6V;
由電容的電流電壓關系I=C*du/dt,得到C=I*Δt/ΔU=56mA*50ms/7.6V=368uF;
通過仿真軟件,用示波器測量斷電之后LDO輸入電壓的波形,可知當電容以恒定的56mA的電流放電,放電到LDO穩(wěn)定輸出+3.3V的電壓4.4V所對應的時間為49.9mS,與理論分析一致。
電容以恒定電流放電的電壓波形
電解電容的容量誤差大多數一般都是標稱±20%;
鋁電解電容器的電氣性能參數受溫度影響:隨著溫度的降低,電解液的粘度增加,從而使其導電性能降低,因此,溫度降低時電容量會減小,溫度上升時電容量增加,且這種現(xiàn)象比其他類型的電解電容器更加明顯;
-40℃時的容量比常溫時下降10% ;
因此,電容的容量誤差應該以標稱容量的±30%來考慮;
理論計算得到368uF的實際容量需求,應該選用368F/70%=525uF的電容,可選擇680uF的電容;
軟件設計的考量
在第一部分中,根據測算得到的負載電流,設備正常工作的最低電壓,瞬斷時間要求,通過電容的電流電壓關系推算出電容的容值;并通過電源瞬斷試驗進行驗證。
處理器的中斷資源有限,一般情況中中斷處理函數僅用于實時性要求非常高的業(yè)務;
比如MODBUS通信;
耗時長而實時性要求不好的業(yè)務一般在主循環(huán)中處理;
所以斷電檢測以及將RAM數據寫入EEPROM或者FLASH一般都在主程序中完成;
代碼中不能有while等死等待,比如軟件延時,死等ADC完成等硬件標志。
需要評估所有中斷執(zhí)行的時間,主程序最長執(zhí)行時間;
在發(fā)生斷電時,有可能需要耗費這些時間之后才執(zhí)行輸入電壓檢測以及保存數據的程序;
對于STM32F103的處理器,擦除一頁(1kB)FLASH的時間最大為40ms;
寫1個word數據的時間最長時間為70us,保存50個word的數據的最長時間為3.5ms;
如果還需要同時備份一組數據的話,那50個word數據斷電記憶的總時間高達87ms;
顯然50ms的維持時間不滿足采用STM32F103處理器的內部FLASH的斷電記憶的要求。
即使不額外備份一組數據,要求考慮了總的中斷時間之后,主程序在在3ms之內輪詢一次,也是難以做到的。
如果采用外置的SPI FLASH,比如MX25L系列,其只支持以sector(4KB)為單位的擦除操作,所需要花費的時間最短為40ms, 最長為200ms,顯然無法在50ms的時間內完成斷電記憶;
如果采用EEPROM,比如AT24C系列,可以按頁寫入,即通過IIC通信發(fā)送一頁數據之后,再啟動寫入操作,這樣寫入的時間可以達到5ms左右;
容量為8KB的AT24C64一頁的大小為32Byte,即寫入32個Byte,考慮400kbps波特率的通信時間,總耗費約6ms,寫入100個字節(jié)的數據,大概耗時約18ms,即使再備份一組數據,也能在36ms內完成,從而輪詢一次主程序的最大時間為14ms,這是努力一把可以做得到的;
有人可能會問,為什么需要在檢測到斷電之后才將數據存入非易失存儲器;
如果不計成本,用鐵電存儲器當作非易失存儲器,那就可以不受限制隨時寫入了;
FLASH的擦寫壽命一般為10萬次;
EEPROM的擦寫壽命一般為100萬次;
可以通過在軟件算法在不同扇區(qū)之間做讀寫平衡以延長擦寫壽命。
但是,對于一些變化快的數據,依然很達到使用的壽命要求;
一些外部輸入的高速計數,比如生產線上的生產計件,假設一秒內有1次計數,如果數據變化就寫入非易失存儲器,則1秒內大概會擦寫1次;大概2天擦寫次數就會達到16萬次。
綜合以上信息,
采用STM32F103處理器的內部FLASH,通過檢測電源電壓進行斷電記憶需要滿足至少100ms左右的瞬間要求;
采用外部SPI FLASH,很難通過檢測電源電壓進行斷電記憶;
采用大容量的EEPROM,滿足50ms的電源瞬斷要求,可能可以做到斷電記憶。
如果成本沒有壓力,可以采用鐵電存儲器做斷電記快功能,鐵電存儲器沒有寫入次數的限制,不需要檢測斷電,可以存儲寫入,而且寫入的速度非???,不需要考慮寫入時間;
電源電壓檢測電路的分析
一個檢測的電源電壓檢測電路
上圖是一個簡單的電源電壓檢測電路,將電源電壓通過電阻分壓之后接到MCU的ADC口。
二極管D1除了電源防反接保護之后,還可以避免電容C1上的電壓反灌到輸入電源檢測電路,使得斷電之后,可以立即被檢測到;
有幾個問題需要考慮:
1)檢測電路的工作電流,以智能灌溉的閥門控制器為例,該設備由9V堿性電池供電,實測大概為400mAh的容量;
單片機睡眠功耗大概可以做到10uA;
根據設定的定時澆灌邏輯,利用RTC的Alarm功能每天定時喚醒,驅動閥門打開澆水,
驅動電流大概為500mA,驅動時間大概為1s,執(zhí)行一次消耗電量為0.14mAh,一天執(zhí)行三次總耗電為0.42mAh;
而設備待機一天消耗的電量約為0.24mAh;
一天總耗電為0.66mAh,400mAh的電池可使用606天;
而該電源電壓檢測電路的平均工作電流約為64uA,一天消耗的電量為1.54mAh,遠大于單片機睡眠功耗,加上該電流,電池僅可使用180天左右;
雖然增加R2的阻值可以減少檢測電路的電流,然而,阻值大的電阻精度差,而且PCB板的表面絕緣電阻也會對測量精度造成影響。
2)MCU的端口保護,在這一電路中,MCU的端口通過分壓電阻R2裸露到了外部;
當有靜電放電、電磁干擾、閃電、接地不良、感性負載切換等情況發(fā)生時,可能有浪涌電壓或者浪涌電流從外部串入MCU;
浪涌電壓時間很短,一般在幾十微秒,幅度可以達到數千伏;
正電壓可以在D1導通之后由C1、C2吸收,但是由于D1導通需要響應時間以及走線的寄生電感的影響,不可避免會有高壓脈沖串入IO口;
電源的電壓越高,R3兩端的分壓值也越大,當該分壓值超過MCU的工作電壓與MCU端口的上拉保護二極管的正向導通電壓之和,
則電流通過上拉保護二極管流向MCU的供電電源;
假設電源電壓為Vin,MCU的工作電壓為V+3.3V,MCU內部上,下拉保護二極管的導通電壓為Vf,流過MCU內部二極管為Iin,則滿足下面關系式:
當
時 ,
根據MCU的規(guī)格書,流過保護二極管的電流超過10mA就可能損壞IO口,
對應的輸入電壓為:
同理,當負電壓低于1008V時,可能損壞IO口;
針對這些情況,靠近MCU IO口放置的小電容可以起到至關重要的保護作用;
浪涌電壓或者靜電的特點是時間非常短,最多僅為幾十us;
電容兩端的電壓不能突變,輸入電壓通過R2,R3向電容充電,時間常數τ為,
電容兩端的電壓為:
應該保證在高壓脈沖持續(xù)時間內,電容兩端的電壓不能被充至讓MCU的內部保護二極管導通;
考慮持續(xù)時間20us,幅度為2000V的電壓,需要滿足:
問題在于,
1)如果防護電壓高達幾千V,持續(xù)時間達幾十us以上的浪涌電壓,避免其對MCU造成損壞,所需的電容容值比較大;
2)出于保護目的,選擇了大電容,同時會導致電容放電時間慢,導致MCU無法及時檢測到斷電,為了實現(xiàn)斷電記憶,有更長的瞬斷時間要求 ;
需要通過雙極性TVS或者壓敏電阻對浪涌電壓進行鉗位。
電源電壓檢測電路的改進
可以采用三極管對檢測電路的通斷進行控制,如下圖:
開關控制的電源電壓檢測電路
MCU的IO口輸出高、低電平通過Q1以及Q2控制電源電壓檢測電路的通路;
只有在需要檢測時,才輸出高電平,使能Q1、Q2導通,電源電壓經過R2,R6分壓之后送入ADC口進行檢測,如果由電池供電,這時才會消耗電池電量。
還有一種更簡單的電路,可以達到一樣的效果;
優(yōu)化的電源電壓檢測電路
與上一個電路相比,少了一個PNP三極管以及兩個電路,可以節(jié)省大幾毛錢,螞蟻腳也是肉,摘下口罩之后,大形勢不明朗,能省一點是一點。
該電路設計要點在于選擇合適的基極、集電結、發(fā)射結的電阻,使得三極管Q1處于飽和導通狀態(tài);
假設三極管仍然處于放大狀態(tài),
電源電壓為Vin,MCU端口輸出高電平為VO;
B極電流為IB,C極電流為IC,BE極的壓降為VF;
電阻R1兩端的電壓為VE,三極管CE兩端的電壓為VCE,
三極管C極的電流放大倍數為β,則有以下關系式成立:
(1)
(2)
(3)
(4)
(5)
由1,4可以得到,
進一步得到:
當VCE<0時,Q1不再處于放大狀態(tài),而進入飽和導通狀態(tài),
如果取VO=3.3V,VF=0.7V, R1=10KΩ,R2=100KΩ時,則有Q1處于飽和導通狀態(tài)的條件為:
(kΩ)
取電流放大倍數β的最小值為50,Vin的最大值為20V,則右式的最小值為219kΩ;
所以R4只需要小于219kΩ即可以讓Q1處于飽和導通狀態(tài);
評論