電路:MOS管門控消除分壓電阻漏電)
干過幾年帶電池的硬件項(xiàng)目之后你會(huì)發(fā)現(xiàn)一個(gè)特別反直覺的現(xiàn)象系統(tǒng)主控在低功耗模式上已經(jīng)摳到了幾百納安傳感器全部斷電無線模塊也睡了結(jié)果整機(jī)待機(jī)電流還是比理論值高出幾十微安。最后逐項(xiàng)扒開問題往往出在一個(gè)最不起眼的地方——電池電壓檢測(cè)的分壓電阻。電壓檢測(cè)電路在原理上簡(jiǎn)單得不能再簡(jiǎn)單兩只電阻分壓、一顆ADC引腳采樣十分鐘就能畫出原理圖。但麻煩就麻煩在分壓網(wǎng)絡(luò)一旦接到電池上就是一條永遠(yuǎn)在線的漏電路徑。對(duì)于用紐扣電池、鋰電池或者兩節(jié)干電池供電的產(chǎn)品來說這種“不見血”的電流偷吃比短路更難查。本文就把這套基于電阻分壓和MOS管控制的低功耗電壓檢測(cè)方案掰開揉碎講一遍從功耗模型、器件選型、參數(shù)計(jì)算到實(shí)板踩坑適合正在做物聯(lián)網(wǎng)傳感器、便攜儀表、低功耗藍(lán)牙設(shè)備或者任何電池供電產(chǎn)品的硬件/嵌入式工程師參考。1. 分壓電阻常年掛電一年能偷走一整塊紐扣電池1.1 一個(gè)“正常設(shè)計(jì)”為什么成了功耗黑洞先看最基礎(chǔ)的分壓拓?fù)潆姵卣龢O接R1R1和R2的中間抽頭接ADC引腳R2下端接地。電池一接上R1和R2組成的通路就開始持續(xù)從電池抽電電流大小是I VBAT / (R1 R2)很多人覺得“我選了100kΩ電阻電流肯定小得可以忽略”。但我們把賬算到底一顆CR2032紐扣電池標(biāo)稱容量約210mAh實(shí)際到終止電壓能放出來的電量大約在170~180mAh。如果用兩個(gè)100kΩ電阻分壓3.7V電池下持續(xù)漏電流是18.5μA一年8760小時(shí)就是162mAh。也就是說這一顆不起眼的電壓檢測(cè)電路一年時(shí)間幾乎把整塊紐扣電池吃干抹凈。故障表現(xiàn)也非常迷惑——產(chǎn)品不是立刻壞而是用著用著突然在某天沒電換塊電池又能撐一陣。如果把電阻換成1MΩ1MΩ持續(xù)漏電降到1.85μA一年約16.2mAh占可用容量9%左右很多項(xiàng)目可能會(huì)覺得“能接受”。但問題是低功耗系統(tǒng)里的漏電路徑往往不止一條——溫濕度傳感器待機(jī)漏電、LDO靜態(tài)電流、DC-DC反饋電阻、藍(lán)牙模塊休眠電流七七八八加起來最后分壓電阻就成了壓垮電池壽命的最后一根稻草。1.2 低功耗目標(biāo)不是“盡量小”而是“算得清楚”低功耗設(shè)計(jì)的第一原則不是追求絕對(duì)零電流而是建立預(yù)算。拿CR2032舉例如果一個(gè)產(chǎn)品目標(biāo)壽命是2年可用容量按170mAh算平均電流預(yù)算只有170mAh / (2 × 8760h) ≈ 9.7μA這9.7μA是整機(jī)包含所有工作模式的均值預(yù)算。假設(shè)主控睡眠占99.9%時(shí)間睡眠電流3μA傳感器偶爾工作平均攤下來2μA留給檢測(cè)電路的預(yù)算就只有不到5μA。如果檢測(cè)網(wǎng)絡(luò)常年掛著1MΩ1MΩ那1.85μA雖然沒超預(yù)算但也已經(jīng)占了三分之一。假如系統(tǒng)目標(biāo)是待機(jī)1~2μA的超低功耗場(chǎng)景常開分壓電阻就完全不能接受了。所以問題的本質(zhì)不是選多大的電阻而是能不能讓檢測(cè)支路在非采樣期間完全不耗電。這里思路要轉(zhuǎn)一下既然電壓檢測(cè)在時(shí)間維度上是稀疏事件——一分鐘甚至十分鐘才需要讀一次——為什么電路要7×24小時(shí)通電用MOS管把分壓網(wǎng)絡(luò)的地端切開就是最省事的辦法。1.3 用時(shí)間換電流把“持續(xù)導(dǎo)通”變成“按需通電”按這個(gè)思路重新設(shè)計(jì)平時(shí)MOS管關(guān)斷分壓電阻回路斷地電路里沒有任何電流通路需要檢測(cè)電壓時(shí)MCU拉高GPIO讓MOS管導(dǎo)通分壓網(wǎng)絡(luò)只供電幾十毫秒ADC完成采樣后立刻關(guān)斷。假設(shè)每60秒采樣一次每次導(dǎo)通20ms占空比為0.02/60 ≈ 0.033%。如果導(dǎo)通時(shí)分壓電流是2.45μA平均下來只有0.0008μA也就是0.8nA完全可以當(dāng)作零處理。這就是“用時(shí)間換電流”的設(shè)計(jì)哲學(xué)——不跟泄漏電流死磕而是從時(shí)間維度上把功耗切掉。提示這種事件驅(qū)動(dòng)采樣思路不僅僅適用于電壓檢測(cè)。任何“低占空比”功能的電路比如溫濕度采樣、按鍵掃描、傳感器供電切換都可以用同樣的門控思想把常開電路變成按需電路。2. NMOS低邊開關(guān)與分壓網(wǎng)絡(luò)的原理拆解2.1 為什么首選低邊NMOS而不是PMOS高端開關(guān)MOS管控制分壓網(wǎng)絡(luò)有兩種常見接法一種是把PMOS放在電源正端做高端開關(guān)另一種是把NMOS放在分壓網(wǎng)絡(luò)地端做低邊開關(guān)。很多工程師第一反應(yīng)是“高端開關(guān)才能徹底斷開電源”但在3.7V鋰電池配3.3V MCU的典型場(chǎng)景下低邊NMOS才是更簡(jiǎn)單的方案。核心原因在于柵極電壓的確定性。NMOS低邊開關(guān)的柵極直接接MCU的GPIO高電平時(shí)VGS3.3V低電平時(shí)VGS0V邏輯清清楚楚。而PMOS高端開關(guān)的源極接電池正極3.7~4.2V漏極接負(fù)載柵極由MCU輸出3.3V控制時(shí)VGS 3.3 - 4.2 -0.9V這個(gè)壓差介于閾值邊緣管子開通不完全想要可靠關(guān)斷/開通還得額外加一級(jí)電平轉(zhuǎn)換電路或者三極管反相器。為了一個(gè)采樣功能引入那么多外圍器件成本和不穩(wěn)定性都上去了。NMOS低邊開關(guān)的導(dǎo)通條件也很直觀柵源電壓VGS大于閾值電壓VGS(th)時(shí)D-S之間等效為低阻通道。分壓網(wǎng)絡(luò)的地端通過NMOS接到系統(tǒng)地GPIO拉高地回路建立分壓網(wǎng)絡(luò)正常工作GPIO拉低地回路斷開R1和R2兩端雖然沒有壓差但整個(gè)鏈路對(duì)電池而言是開路任何電流都不會(huì)產(chǎn)生??梢园阉惐瘸裳b在水管末端的閥門——閥門關(guān)了前面管路再長(zhǎng)再粗也沒有水流。2.2 MOS管選型VGS(th)和漏電流是關(guān)鍵RDS(on)反而無關(guān)緊要在這個(gè)應(yīng)用里MOS管流過的是微安級(jí)電流RDS(on)幾百毫歐和幾歐差別幾乎沒有影響。選型時(shí)真正要盯住的是兩個(gè)參數(shù)柵極閾值電壓VGS(th)和關(guān)斷漏電流。先看閾值。3.3V MCU的GPIO高電平輸出電壓一般在3.0V以上所以要選閾值電壓明顯低于3.0V的型號(hào)留出至少1V以上余量。下表是幾種常見NMOS在3.3V驅(qū)動(dòng)場(chǎng)景下的表現(xiàn)型號(hào)VGS(th)典型/最大值VDS最大額定ID最大額定3.3V GPIO驅(qū)動(dòng)評(píng)估2N7002約1V~2.1V / 最大3V60V0.3A邊緣低溫或工藝偏差下可能不飽和BSS138約0.8V~1.5V / 最大1.5V50V0.2A合適低壓驅(qū)動(dòng)余量充足AO3400約0.4V~1.0V / 最大1.4V30V5A很合適低壓驅(qū)動(dòng)更穩(wěn)2N7002是很多工程師手里常備的管子但在這類低壓門控場(chǎng)景里我吃過虧。它的VGS(th)最大能做到3V碰上偏上限的批次3.3V驅(qū)動(dòng)時(shí)管子只能勉強(qiáng)半開壓降增大采樣節(jié)點(diǎn)建立時(shí)間變長(zhǎng)表現(xiàn)就是電壓讀數(shù)隱隱偏低。相比之下BSS138的VGS(th)最大只有1.5V驅(qū)動(dòng)余量充足AO3400更極端低壓導(dǎo)通特性很好但耐壓只有30V只能用在24V以下場(chǎng)景。再看不該漏掉的關(guān)斷漏電流。NMOS關(guān)斷時(shí)D-S之間并非絕對(duì)絕緣數(shù)據(jù)手冊(cè)上的I_DSS一般在幾百nA到幾μA量級(jí)。在3.7V電池電壓下實(shí)際漏電流通常落在幾十nA到幾百nA這個(gè)區(qū)間雖然比常開分壓電阻的1.85μA好一個(gè)數(shù)量級(jí)以上但在設(shè)計(jì)預(yù)算時(shí)還是要記上這筆賬。要選擇I_DSS數(shù)據(jù)手冊(cè)值較小的型號(hào)BSS138和AO3400在這個(gè)電壓下實(shí)測(cè)都能做到比較低的漏電流。2.3 柵極下拉電阻防止復(fù)位瞬間的“幽靈導(dǎo)通”這個(gè)細(xì)節(jié)是最容易被遺漏的。MCU在上電復(fù)位、燒錄、掉電的瞬間GPIO還沒有被初始化成推挽輸出處于高阻態(tài)。此時(shí)MOS管柵極懸空只要周圍PCB漏電流或者電場(chǎng)耦合把柵極電位拉到閾值以上分壓網(wǎng)絡(luò)就會(huì)在你不希望的階段悄悄導(dǎo)通白白耗電。解決辦法是在柵源之間并聯(lián)一顆下拉電阻R3阻值取100kΩ~1MΩ常態(tài)下把柵極電位釘在0V。采樣時(shí)GPIO高電平通過這個(gè)電阻會(huì)額外流掉幾微安電流但因?yàn)橹挥胁蓸悠陂g才存在平均下來完全可以忽略。選1MΩ比較合適既能有效下拉又不至于在采樣時(shí)增加太多電流。注意這里不推薦再加一個(gè)MOS管做柵極驅(qū)動(dòng)隔離純屬多余。一顆NMOS加一顆下拉電阻已經(jīng)是最簡(jiǎn)可靠的結(jié)構(gòu)。另外這個(gè)電路的MOS管工作在極低頻率開關(guān)狀態(tài)跟PWM高頻驅(qū)動(dòng)完全是兩碼事米勒效應(yīng)和開關(guān)損耗在這里都不構(gòu)成問題不必?fù)?dān)心。3. 采樣時(shí)序與參數(shù)計(jì)算從電池電壓到穩(wěn)定ADC讀數(shù)3.1 分壓比設(shè)計(jì)留出裕量再選取標(biāo)準(zhǔn)電阻現(xiàn)在開始算具體參數(shù)。以3.7V鋰電池、兩節(jié)AA干電池串聯(lián)電壓2.4~3.2V這類低壓場(chǎng)景為例目標(biāo)檢測(cè)范圍設(shè)為3.0~4.2V。MCU采用STM32L151系列ADC參考電壓VDDA3.3V12位分辨率。設(shè)計(jì)分壓比時(shí)要留出上限裕量。電池最高電壓4.2V但我們把設(shè)計(jì)上限壓到4.5V同時(shí)ADC輸入電壓在4.5V時(shí)控制在3.0V不頂?shù)?.3V參考電壓給實(shí)際量產(chǎn)中的電池電壓波動(dòng)和參考電壓偏差留出緩沖。于是分壓比ratio VADC_max / VBAT_max 3.0 / 4.5 ≈ 0.667標(biāo)準(zhǔn)電阻組合取R1510kΩ、R21MΩratio 1MΩ / (510kΩ 1MΩ) ≈ 0.662實(shí)際對(duì)應(yīng)關(guān)系如下表電池電壓ADC引腳電壓ADC原始碼VDDA3.3V4.20V2.781V34533.70V2.450V30423.20V2.119V26303.00V1.987V2467ADC最小分辨率折算成電池電壓約為3.3V / 4096 / 0.662 ≈ 1.22mV/LSB這個(gè)分辨率對(duì)電池電壓監(jiān)測(cè)來說綽綽有余。反推代碼里的換算公式VBAT raw × VDDA / (4096 × ratio) raw × 3.3 / (4096 × 0.662)為什么不選更大的阻值比如10MΩ主要卡在ADC輸入阻抗和PCB阻抗污染上。MΩ級(jí)電阻的等效輸出阻抗太高PCB上的導(dǎo)電殘留物、潮濕環(huán)境下的表面漏電流都會(huì)直接影響分壓精度而且RC建立時(shí)間會(huì)顯著變長(zhǎng)。510kΩ和1MΩ這個(gè)量級(jí)已經(jīng)能把常開漏電控制到納安級(jí)別沒有必要再賭更高的阻抗。3.2 RC建立時(shí)間GPIO拉高后先別急著轉(zhuǎn)換很多人踩過這個(gè)坑GPIO剛拉高讓MOS管導(dǎo)通立即啟動(dòng)ADC采樣結(jié)果讀到的電壓偏低。原因是分壓節(jié)點(diǎn)電容上的電荷需要時(shí)間建立。分壓網(wǎng)絡(luò)從抽頭看進(jìn)去的等效輸出電阻是Rth R1 ∥ R2 (510k × 1M) / (510k 1M) ≈ 337kΩ如果ADC引腳放置了一顆1nF的濾波電容我強(qiáng)烈建議放那么節(jié)點(diǎn)建立時(shí)間常數(shù)τ Rth × C 337kΩ × 1nF 337μs電阻分壓網(wǎng)絡(luò)的電壓建立是RC指數(shù)充電過程需要等5τ才能認(rèn)為誤差降到1%以下這里大約1.7ms。實(shí)際固件建議留雙倍余量延時(shí)5ms再啟動(dòng)轉(zhuǎn)換。如果省掉外部電容只靠ADC內(nèi)部十幾pF的采樣電容τ只有約4μs這時(shí)把ADC采樣周期配置到最長(zhǎng)的239.5周期ADC_CLK4MHz時(shí)約60μs也能在單次采樣窗口內(nèi)建立完畢。計(jì)算公式可以記下備用。ADC采樣保持階段內(nèi)部開關(guān)導(dǎo)通采樣電容充電的建立誤差為ε Vfull × exp(-t_sample / τ_sample)其中τ_sample由等效輸出電阻和采樣電容決定。把Rth壓到337kΩ級(jí)別配合最長(zhǎng)采樣周期誤差能被壓制到遠(yuǎn)低于1個(gè)LSB量產(chǎn)后不會(huì)出現(xiàn)批次漂移。3.3 ADC參考電壓與通道配置別讓VDDA的漂移毀了精度采樣精度的問題有一半藏在參考電壓里。如果VDDA直接來自LDO穩(wěn)壓輸出電池電壓在一定范圍內(nèi)變化時(shí)VDDA能穩(wěn)在3.3V那么直接用VDDA做參考沒問題。但為了量產(chǎn)一致性我推薦使用MCU內(nèi)部基準(zhǔn)電壓VREFINT做實(shí)時(shí)校準(zhǔn)——每次采樣后同時(shí)讀VREFINT通道用校準(zhǔn)系數(shù)修正ADC讀數(shù)消除溫度變化和VDDA微漂的影響。通道配置上ADC設(shè)為單次轉(zhuǎn)換模式、軟件觸發(fā)、采樣時(shí)間拉到最長(zhǎng)。觸發(fā)方式用軟件觸發(fā)足夠不需要定時(shí)器硬件觸發(fā)——畢竟采樣頻率極低軟件開銷可以忽略。void ADC_Init_SingleChannel(void) { ADC_InitTypeDef adc_init; GPIO_InitTypeDef gpio_init; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); GPIO_StructInit(gpio_init); gpio_init.GPIO_Pin GPIO_Pin_4; gpio_init.GPIO_Mode GPIO_Mode_AN; GPIO_Init(GPIOA, gpio_init); ADC_StructInit(adc_init); adc_init.ADC_Resolution ADC_Resolution_12b; adc_init.ADC_ContinuousConvMode DISABLE; adc_init.ADC_ExternalTrigConvEdge ADC_ExternalTrigConvEdge_None; adc_init.ADC_SamplingTime ADC_SamplingTime_239Cycles5; // 最長(zhǎng)采樣時(shí)間 adc_init.ADC_NbrOfConversion 1; ADC_Init(ADC1, adc_init); ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SamplingTime_239Cycles5); ADC_Cmd(ADC1, ENABLE); }3.4 完整采樣時(shí)序與低功耗主循環(huán)代碼全套采樣流程在固件層面分四步喚醒MCU、打開MOS管使能分壓網(wǎng)絡(luò)、等待穩(wěn)定并完成ADC轉(zhuǎn)換、關(guān)斷MOS管回到低功耗模式。uint16_t SampleBatteryVoltage(void) { GPIO_SetBits(GPIOB, GPIO_Pin_0); // 拉高GPIONMOS導(dǎo)通分壓網(wǎng)絡(luò)供電 DelayMs(5); // 等待節(jié)點(diǎn)電壓穩(wěn)定見RC計(jì)算 ADC_SoftwareStartConv(ADC1); while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) RESET); uint16_t raw ADC_GetConversionValue(ADC1); GPIO_ResetBits(GPIOB, GPIO_Pin_0); // 拉低GPIONMOS關(guān)斷分壓網(wǎng)絡(luò)徹底斷電 return raw; }主循環(huán)采用“采樣完成立即睡”的結(jié)構(gòu)用RTC周期性喚醒。進(jìn)入STOP模式前必須先確認(rèn)MOS管柵極已經(jīng)被拉低否則分壓網(wǎng)絡(luò)會(huì)在睡眠期間保持導(dǎo)通等于變回常開電路。void EnterStopModeAndWait(void) { GPIO_ResetBits(GPIOB, GPIO_Pin_0); // 強(qiáng)制關(guān)斷MOS管 RTC_WakeUpCmd(DISABLE); RTC_SetWakeUpCounter(60 - 1); // 60秒后喚醒 RTC_WakeUpCmd(ENABLE); PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI); SystemClock_Config(); // 喚醒后恢復(fù)系統(tǒng)時(shí)鐘 } int main(void) { // 系統(tǒng)和外設(shè)初始化... while (1) { uint16_t raw SampleBatteryVoltage(); float vbatt (float)raw * 3.3f / 4096.0f / 0.662f; if (vbatt 3.2f) { // 低電量處理比如點(diǎn)亮指示燈或發(fā)送報(bào)警報(bào)文 } EnterStopModeAndWait(); } }低電量判斷建議加一個(gè)滯回窗口。比如3.20V觸發(fā)報(bào)警后要等電壓恢復(fù)到3.35V以上才清除報(bào)警標(biāo)志避免電池在臨界電壓附近波動(dòng)時(shí)反復(fù)切換狀態(tài)反而造成額外功耗和用戶困擾。4. 實(shí)板驗(yàn)證與踩坑記錄仿真軟件不會(huì)告訴你的差異4.1 萬用表實(shí)測(cè)三種方案的待機(jī)電流對(duì)比把電路打樣回來后用六位半萬用表串在電池正極測(cè)整機(jī)待機(jī)電流數(shù)據(jù)最能說明問題。主控用STM32L151STOP模式RTC開啟狀態(tài)下睡眠電流約3μA場(chǎng)景設(shè)為每分鐘采樣一次方案分壓網(wǎng)絡(luò)電流形態(tài)整機(jī)待機(jī)電流實(shí)測(cè)100k100k常開18.5μA持續(xù)21.5μA1M1M常開1.85μA持續(xù)4.85μA510k1MNMOS門控采樣時(shí)2.45μA平時(shí)0約3.05μA第三種方案中采樣期間平均電流2.45μA × 0.02/60 ≈ 0.0008μA加上MOS管關(guān)斷漏電流和GPIO翻轉(zhuǎn)的瞬間電流實(shí)測(cè)附加電流在幾十nA量級(jí)對(duì)總待機(jī)時(shí)間幾乎沒有影響。用CR2032跑測(cè)試方案三的理論待機(jī)時(shí)間比方案一翻了好幾倍以上。提示測(cè)這種微安級(jí)電流時(shí)不要用普通萬用表的μA檔直接測(cè)萬用表的采樣電阻本身會(huì)引入壓降影響MCU供電。最好用高精度臺(tái)式萬用表或者串一個(gè)1kΩ采樣電阻用示波器測(cè)壓降換算成電流。4.2 三個(gè)我親自踩過、別人也可能踩的坑坑一第一次采樣結(jié)果總是偏低差幾十毫伏。這是RC建立時(shí)間不夠?qū)е碌牟皇欠謮弘娮杈葐栴}。解決方法是打開MOS管后延時(shí)5ms或者連續(xù)采兩次丟棄第一次結(jié)果只用第二次。我偏向兩者都做延時(shí)保證建立完成第二次采樣值用于消除極端情況下的殘余擾動(dòng)??佣﨧CU進(jìn)入STOP前沒有復(fù)位GPIO導(dǎo)致MOS管在整個(gè)睡眠期間保持導(dǎo)通。排查過程很費(fèi)勁因?yàn)槭静ㄆ鲯煸贕PIO上看波形是正常的但漏看了進(jìn)入STOP的入口路徑上有多個(gè)return分支其中一個(gè)分支繞過了GPIO拉低操作。后來把GPIO復(fù)位操作收斂到EnterStopModeAndWait函數(shù)入口保證所有休眠路徑都會(huì)執(zhí)行。硬件的坑不可怕軟件的隱藏路徑才是真殺手??尤蛪簣?bào)警閾值在溫度變化后漂移。原因是依賴VDDA做參考而VDDA在低溫時(shí)有小幅下降。后來增加VREFINT校準(zhǔn)每次換算電壓前先讀內(nèi)部基準(zhǔn)通道修正系數(shù)報(bào)警閾值的溫度穩(wěn)定性明顯改善。溫度范圍寬的產(chǎn)品建議直接內(nèi)置校準(zhǔn)不要偷懶。4.3 PCB布局采樣節(jié)點(diǎn)要“短、凈、穩(wěn)”這塊PCB很小但布局規(guī)則不能省。分壓電阻要盡量靠近MCU的ADC引腳R1和R2的中間抽頭走線越短越好避免長(zhǎng)走線變成天線耦合噪聲。1nF濾波電容必須放在ADC引腳旁邊也就是R1-R2分壓節(jié)點(diǎn)和地之間而不是放在MOS管附近。分壓電阻下方的PCB表面要保持干凈不要走數(shù)字信號(hào)線。MΩ級(jí)電阻對(duì)表面污染非常敏感潮濕環(huán)境下PCB殘留助焊劑或水汽形成的漏電通路會(huì)直接在分壓節(jié)點(diǎn)引入誤差。量產(chǎn)品可以加三防漆至少保證助焊劑清洗到位。采樣節(jié)點(diǎn)周圍不要鋪大塊浮空銅皮浮空銅皮在開關(guān)瞬間會(huì)通過寄生電容耦合到節(jié)點(diǎn)上影響穩(wěn)定時(shí)間。如果空間允許在采樣節(jié)點(diǎn)周圍打一圈地過孔形成局部屏蔽效果更好。5. 方案擴(kuò)展24V工業(yè)母線、交流市電與純硬件監(jiān)控5.1 24V工業(yè)母線的改動(dòng)要點(diǎn)如果檢測(cè)對(duì)象換成24V工業(yè)開關(guān)電源或者24V電池組分壓比需要重新計(jì)算。設(shè)計(jì)上限取30VADC上限3.3Vratio≈0.11。取R13.3MΩ、R2470kΩratio0.12530V時(shí)VADC3.75V略超3.3V需要在ADC引腳加一顆3.3V齊納二極管或鉗位二極管保護(hù)。如果不想加保護(hù)可以把ratio再壓低比如R14.7MΩ、R2510kΩratio≈0.09830V時(shí)VADC≈2.94V安全余量充足。24V場(chǎng)景下電阻功率需要驗(yàn)算。R14.7MΩ在30V下的功耗是302/4.7M≈0.19mW遠(yuǎn)低于0805封裝0.125W額定值沒問題。但要注意電阻的額定工作電壓0805封裝厚膜電阻額定電壓一般在150V級(jí)別24V使用完全安全。MOS管選型要跟著改耐壓至少留2倍裕量BSS138的50V夠用AO3400的30V就偏緊了建議換耐壓更高的型號(hào)。5.2 交流市電電壓檢測(cè)的延伸如果要做交流220V電壓檢測(cè)不能把市電直接接進(jìn)MOS管和ADC。常見做法是先用變壓器隔離降壓或者用阻容降壓后再經(jīng)光耦隔離得到和市電成比例的低壓直流信號(hào)再進(jìn)入本文這套分壓加門控電路。MOS管門控放在整流濾波后的直流側(cè)開關(guān)時(shí)機(jī)選在信號(hào)穩(wěn)定后原理和電池檢測(cè)完全一致。交流檢測(cè)涉及高壓布局安全間距和安規(guī)要求是另一套體系這里不展開但務(wù)必記住低壓電路不能直接碰高壓。5.3 純硬件監(jiān)控方案比較器/復(fù)位監(jiān)控IC做補(bǔ)充如果MCU死機(jī)或者程序跑飛上述方案就失效了需要真正的“看門狗”來兜底。硬件復(fù)位監(jiān)控IC比如MAX809、TPS3839系列或者STM32專用的復(fù)位監(jiān)控芯片可以做到幾百納安的靜態(tài)電流在電壓跌到閾值以下時(shí)強(qiáng)制拉低復(fù)位引腳。這類芯片只能給數(shù)字閾值不能讀出精確電壓值。實(shí)際產(chǎn)品里我更傾向于組合使用主控正常工作時(shí)用本文這套MOS管分壓方案采集精確電壓并做軟件閾值判斷同時(shí)留一顆硬件復(fù)位監(jiān)控IC做第二道防線防止MCU異常時(shí)鋰電池被過放到損壞。其實(shí)兩者并不沖突硬件監(jiān)控IC的電流預(yù)算幾百納安在低功耗系統(tǒng)里完全付得起。最后分享一點(diǎn)個(gè)人習(xí)慣。我在設(shè)計(jì)這類電池供電產(chǎn)品時(shí)會(huì)先畫一張功耗預(yù)算表把每個(gè)功能模塊的睡眠電流、工作電流、占空比、平均電流全部列出來再做方案選型。這套電阻分壓加上MOS管門控的電路材料成本不到兩毛錢固件邏輯也就十來行卻能把紐扣電池的待機(jī)時(shí)間從幾個(gè)月拉回兩三年。低功耗設(shè)計(jì)的價(jià)值從來不在某個(gè)神奇的芯片或復(fù)雜的算法而在于把每一個(gè)細(xì)節(jié)支路的電流都算得明明白白——這也是我最想傳達(dá)的一句話電池供電系統(tǒng)里沒有“理所當(dāng)然能跑”的設(shè)計(jì)只有算不到位的賬。