分析一個(gè)極簡(jiǎn)的電源電壓檢測電路
源電壓檢測是常用的功能。
本文引用地址:http://dyxdggzs.com/article/202407/461112.htm比如用電池供電的產(chǎn)品,需要實(shí)時(shí)檢測電壓以判斷電池的電量情況,并及時(shí)提醒用戶(hù)對電池充電或者更換電池。
再比如通過(guò)檢測電池電壓判斷斷電,及時(shí)在斷電之后采用電容上儲存的電荷供電,維持記錄工作,在此期間將RAM中的數據寫(xiě)入flash,eeprom等非易失存儲器,重新上電之后再讀出恢復,從而實(shí)現斷電記憶功能。
為了保證該功能的可靠性,產(chǎn)品需要滿(mǎn)足電源瞬斷試驗要求。比如對于電源50ms瞬斷,在斷電之后,并聯(lián)在供電電源兩端的電解電容可以繼續放電,維持負載正常工作。
50ms瞬斷要求電容在向負載放電50ms之后,其兩端的電壓仍能滿(mǎn)足設備正常工作要求。
電容容值的計算
以下面的電路為例,12V供電電源經(jīng)過(guò)LDO穩壓,得到+3.3V向負載供電,

LDO電路
經(jīng)過(guò)測算,+3.3V電源的負載電流為50mA;
對于線(xiàn)性穩壓器,其輸入電流等于輸出的負載電流加上線(xiàn)性穩壓器的工作電流(也即靜態(tài)電流);
在上圖中,Iin=Iload+IQ,從規格書(shū)上可知,其靜態(tài)電流約為6mA,這樣+12V外部電源的負載電流為50mA+6mA=56mA。
要注意的是,對DC-DC電源,其輸入電流和輸出電流需要從功率的角度通過(guò)效率來(lái)?yè)Q算;
從規格書(shū)上還可以知道,LDO的最小壓差的最大值為1.10V,即輸入電壓需要達到3.3V+1.1V=4.4V以下,LDO才能穩定輸出+3.3V的電壓。

LDO的靜態(tài)電流以及壓差
根據這些參數, +12V輸入電源兩端的電解電容C1需要取多大的容值才能保證在斷電50ms之內,+3.3V的電源電壓穩定,從而負載正常工作。
當+12V斷電之后,C1向通過(guò)LDO向負載放電,其放電電流為56mA。
從開(kāi)始放電,至+3.3V能穩定輸出+3.3V電壓的電壓降ΔU=(12-4.4)=7.6V;
由電容的電流電壓關(guān)系I=C*du/dt,得到C=I*Δt/ΔU=56mA*50ms/7.6V=368uF;
通過(guò)仿真軟件,用示波器測量斷電之后LDO輸入電壓的波形,可知當電容以恒定的56mA的電流放電,放電到LDO穩定輸出+3.3V的電壓4.4V所對應的時(shí)間為49.9mS,與理論分析一致。

電容以恒定電流放電的電壓波形
電解電容的容量誤差大多數一般都是標稱(chēng)±20%;
鋁電解電容器的電氣性能參數受溫度影響:隨著(zhù)溫度的降低,電解液的粘度增加,從而使其導電性能降低,因此,溫度降低時(shí)電容量會(huì )減小,溫度上升時(shí)電容量增加,且這種現象比其他類(lèi)型的電解電容器更加明顯;
-40℃時(shí)的容量比常溫時(shí)下降10% ;
因此,電容的容量誤差應該以標稱(chēng)容量的±30%來(lái)考慮;
理論計算得到368uF的實(shí)際容量需求,應該選用368F/70%=525uF的電容,可選擇680uF的電容;
軟件設計的考量
在第一部分中,根據測算得到的負載電流,設備正常工作的最低電壓,瞬斷時(shí)間要求,通過(guò)電容的電流電壓關(guān)系推算出電容的容值;并通過(guò)電源瞬斷試驗進(jìn)行驗證。
處理器的中斷資源有限,一般情況中中斷處理函數僅用于實(shí)時(shí)性要求非常高的業(yè)務(wù);
比如MODBUS通信;
耗時(shí)長(cháng)而實(shí)時(shí)性要求不好的業(yè)務(wù)一般在主循環(huán)中處理;
所以斷電檢測以及將RAM數據寫(xiě)入EEPROM或者FLASH一般都在主程序中完成;
代碼中不能有while等死等待,比如軟件延時(shí),死等ADC完成等硬件標志。
需要評估所有中斷執行的時(shí)間,主程序最長(cháng)執行時(shí)間;
在發(fā)生斷電時(shí),有可能需要耗費這些時(shí)間之后才執行輸入電壓檢測以及保存數據的程序;
對于STM32F103的處理器,擦除一頁(yè)(1kB)FLASH的時(shí)間最大為40ms;
寫(xiě)1個(gè)word數據的時(shí)間最長(cháng)時(shí)間為70us,保存50個(gè)word的數據的最長(cháng)時(shí)間為3.5ms;
如果還需要同時(shí)備份一組數據的話(huà),那50個(gè)word數據斷電記憶的總時(shí)間高達87ms;
顯然50ms的維持時(shí)間不滿(mǎn)足采用STM32F103處理器的內部FLASH的斷電記憶的要求。
即使不額外備份一組數據,要求考慮了總的中斷時(shí)間之后,主程序在在3ms之內輪詢(xún)一次,也是難以做到的。
如果采用外置的SPI FLASH,比如MX25L系列,其只支持以sector(4KB)為單位的擦除操作,所需要花費的時(shí)間最短為40ms, 最長(cháng)為200ms,顯然無(wú)法在50ms的時(shí)間內完成斷電記憶;
如果采用EEPROM,比如AT24C系列,可以按頁(yè)寫(xiě)入,即通過(guò)IIC通信發(fā)送一頁(yè)數據之后,再啟動(dòng)寫(xiě)入操作,這樣寫(xiě)入的時(shí)間可以達到5ms左右;
容量為8KB的AT24C64一頁(yè)的大小為32Byte,即寫(xiě)入32個(gè)Byte,考慮400kbps波特率的通信時(shí)間,總耗費約6ms,寫(xiě)入100個(gè)字節的數據,大概耗時(shí)約18ms,即使再備份一組數據,也能在36ms內完成,從而輪詢(xún)一次主程序的最大時(shí)間為14ms,這是努力一把可以做得到的;
有人可能會(huì )問(wèn),為什么需要在檢測到斷電之后才將數據存入非易失存儲器;
如果不計成本,用鐵電存儲器當作非易失存儲器,那就可以不受限制隨時(shí)寫(xiě)入了;
FLASH的擦寫(xiě)壽命一般為10萬(wàn)次;
EEPROM的擦寫(xiě)壽命一般為100萬(wàn)次;
可以通過(guò)在軟件算法在不同扇區之間做讀寫(xiě)平衡以延長(cháng)擦寫(xiě)壽命。
但是,對于一些變化快的數據,依然很達到使用的壽命要求;
一些外部輸入的高速計數,比如生產(chǎn)線(xiàn)上的生產(chǎn)計件,假設一秒內有1次計數,如果數據變化就寫(xiě)入非易失存儲器,則1秒內大概會(huì )擦寫(xiě)1次;大概2天擦寫(xiě)次數就會(huì )達到16萬(wàn)次。
綜合以上信息,
采用STM32F103處理器的內部FLASH,通過(guò)檢測電源電壓進(jìn)行斷電記憶需要滿(mǎn)足至少100ms左右的瞬間要求;
采用外部SPI FLASH,很難通過(guò)檢測電源電壓進(jìn)行斷電記憶;
采用大容量的EEPROM,滿(mǎn)足50ms的電源瞬斷要求,可能可以做到斷電記憶。
如果成本沒(méi)有壓力,可以采用鐵電存儲器做斷電記快功能,鐵電存儲器沒(méi)有寫(xiě)入次數的限制,不需要檢測斷電,可以存儲寫(xiě)入,而且寫(xiě)入的速度非???,不需要考慮寫(xiě)入時(shí)間;
電源電壓檢測電路的分析

一個(gè)檢測的電源電壓檢測電路
上圖是一個(gè)簡(jiǎn)單的電源電壓檢測電路,將電源電壓通過(guò)電阻分壓之后接到MCU的ADC口。
二極管D1除了電源防反接保護之后,還可以避免電容C1上的電壓反灌到輸入電源檢測電路,使得斷電之后,可以立即被檢測到;
有幾個(gè)問(wèn)題需要考慮:
1)檢測電路的工作電流,以智能灌溉的閥門(mén)控制器為例,該設備由9V堿性電池供電,實(shí)測大概為400mAh的容量;
單片機睡眠功耗大概可以做到10uA;
根據設定的定時(shí)澆灌邏輯,利用RTC的Alarm功能每天定時(shí)喚醒,驅動(dòng)閥門(mén)打開(kāi)澆水,
驅動(dòng)電流大概為500mA,驅動(dòng)時(shí)間大概為1s,執行一次消耗電量為0.14mAh,一天執行三次總耗電為0.42mAh;
而設備待機一天消耗的電量約為0.24mAh;
一天總耗電為0.66mAh,400mAh的電池可使用606天;
而該電源電壓檢測電路的平均工作電流約為64uA,一天消耗的電量為1.54mAh,遠大于單片機睡眠功耗,加上該電流,電池僅可使用180天左右;
雖然增加R2的阻值可以減少檢測電路的電流,然而,阻值大的電阻精度差,而且PCB板的表面絕緣電阻也會(huì )對測量精度造成影響。
2)MCU的端口保護,在這一電路中,MCU的端口通過(guò)分壓電阻R2裸露到了外部;
當有靜電放電、電磁干擾、閃電、接地不良、感性負載切換等情況發(fā)生時(shí),可能有浪涌電壓或者浪涌電流從外部串入MCU;
浪涌電壓時(shí)間很短,一般在幾十微秒,幅度可以達到數千伏;
正電壓可以在D1導通之后由C1、C2吸收,但是由于D1導通需要響應時(shí)間以及走線(xiàn)的寄生電感的影響,不可避免會(huì )有高壓脈沖串入IO口;
電源的電壓越高,R3兩端的分壓值也越大,當該分壓值超過(guò)MCU的工作電壓與MCU端口的上拉保護二極管的正向導通電壓之和,
則電流通過(guò)上拉保護二極管流向MCU的供電電源;
假設電源電壓為Vin,MCU的工作電壓為V+3.3V,MCU內部上,下拉保護二極管的導通電壓為Vf,流過(guò)MCU內部二極管為Iin,則滿(mǎn)足下面關(guān)系式:
當

時(shí) ,

根據MCU的規格書(shū),流過(guò)保護二極管的電流超過(guò)10mA就可能損壞IO口,
對應的輸入電壓為:

同理,當負電壓低于1008V時(shí),可能損壞IO口;
針對這些情況,靠近MCU IO口放置的小電容可以起到至關(guān)重要的保護作用;
浪涌電壓或者靜電的特點(diǎn)是時(shí)間非常短,最多僅為幾十us;
電容兩端的電壓不能突變,輸入電壓通過(guò)R2,R3向電容充電,時(shí)間常數τ為,

電容兩端的電壓為:

應該保證在高壓脈沖持續時(shí)間內,電容兩端的電壓不能被充至讓MCU的內部保護二極管導通;
考慮持續時(shí)間20us,幅度為2000V的電壓,需要滿(mǎn)足:


問(wèn)題在于,
1)如果防護電壓高達幾千V,持續時(shí)間達幾十us以上的浪涌電壓,避免其對MCU造成損壞,所需的電容容值比較大;
2)出于保護目的,選擇了大電容,同時(shí)會(huì )導致電容放電時(shí)間慢,導致MCU無(wú)法及時(shí)檢測到斷電,為了實(shí)現斷電記憶,有更長(cháng)的瞬斷時(shí)間要求 ;
需要通過(guò)雙極性TVS或者壓敏電阻對浪涌電壓進(jìn)行鉗位。
電源電壓檢測電路的改進(jìn)
可以采用三極管對檢測電路的通斷進(jìn)行控制,如下圖:

開(kāi)關(guān)控制的電源電壓檢測電路
MCU的IO口輸出高、低電平通過(guò)Q1以及Q2控制電源電壓檢測電路的通路;
只有在需要檢測時(shí),才輸出高電平,使能Q1、Q2導通,電源電壓經(jīng)過(guò)R2,R6分壓之后送入ADC口進(jìn)行檢測,如果由電池供電,這時(shí)才會(huì )消耗電池電量。
還有一種更簡(jiǎn)單的電路,可以達到一樣的效果;

優(yōu)化的電源電壓檢測電路
與上一個(gè)電路相比,少了一個(gè)PNP三極管以及兩個(gè)電路,可以節省大幾毛錢(qián),螞蟻腳也是肉,摘下口罩之后,大形勢不明朗,能省一點(diǎn)是一點(diǎn)。
該電路設計要點(diǎn)在于選擇合適的基極、集電結、發(fā)射結的電阻,使得三極管Q1處于飽和導通狀態(tài);
假設三極管仍然處于放大狀態(tài),
電源電壓為Vin,MCU端口輸出高電平為VO;
B極電流為IB,C極電流為IC,BE極的壓降為VF;
電阻R1兩端的電壓為VE,三極管CE兩端的電壓為VCE,
三極管C極的電流放大倍數為β,則有以下關(guān)系式成立:

(1)

(2)

(3)

(4)

(5)
由1,4可以得到,

進(jìn)一步得到:

當VCE<0時(shí),Q1不再處于放大狀態(tài),而進(jìn)入飽和導通狀態(tài),
如果取VO=3.3V,VF=0.7V, R1=10KΩ,R2=100KΩ時(shí),則有Q1處于飽和導通狀態(tài)的條件為:

(kΩ)
取電流放大倍數β的最小值為50,Vin的最大值為20V,則右式的最小值為219kΩ;
所以R4只需要小于219kΩ即可以讓Q1處于飽和導通狀態(tài);
評論