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