電路:PMOS控制分壓電阻,待機(jī)電流低于1μA)
做低功耗設(shè)備的朋友應(yīng)該都有這種體會(huì)一塊小電池要撐幾個(gè)月甚至一年CPU能睡就睡外設(shè)能關(guān)就關(guān)可偏偏電壓檢測(cè)這個(gè)功能怎么都繞不開(kāi)。鋰電池有沒(méi)有過(guò)放鉛酸電池還剩下多少電設(shè)備要不要主動(dòng)報(bào)警全靠它。然而最簡(jiǎn)單的電阻分壓采樣一不留神就會(huì)在待機(jī)時(shí)悄悄漏掉幾十微安對(duì)幾百毫安時(shí)的電池來(lái)說(shuō)這點(diǎn)電流看著不大時(shí)間一長(zhǎng)就把待機(jī)時(shí)間吃掉了。今天分享的這個(gè)電路思路不復(fù)雜就是用一顆PMOS管給分壓電阻供電按需開(kāi)啟、采完即關(guān)再加上一顆NMOS做電平轉(zhuǎn)換實(shí)現(xiàn)用3.3V單片機(jī)的GPIO去控制12V電池側(cè)的檢測(cè)通路。這個(gè)結(jié)構(gòu)很適合用在電池供電的物聯(lián)網(wǎng)傳感器、電瓶車電池監(jiān)測(cè)、太陽(yáng)能控制器等場(chǎng)景既能保留電阻分壓的簡(jiǎn)單和精度又不用為了省電去上專用電壓監(jiān)測(cè)芯片。1. 項(xiàng)目到底要解決什么問(wèn)題1.1 低功耗電壓檢測(cè)的痛點(diǎn)大家最常見(jiàn)的電壓檢測(cè)電路其實(shí)就是兩個(gè)電阻串聯(lián)分壓中間抽頭接ADC像這樣Vbat經(jīng)過(guò)R1到采樣點(diǎn)采樣點(diǎn)經(jīng)過(guò)R2到GND。這個(gè)電路簡(jiǎn)單到不需要思考但問(wèn)題恰恰出在“常開(kāi)”上。我算過(guò)一筆賬如果系統(tǒng)檢測(cè)12V電池R1取100kΩR2取22kΩ那么只要電池接著分壓網(wǎng)絡(luò)就一直有電流流過(guò)。電流大約是12V / 122kΩ ≈ 98μA。這個(gè)數(shù)值單獨(dú)看確實(shí)不多但用一年就是 98μA × 24小時(shí) × 365天 ≈ 858mAh相當(dāng)于一顆紐扣電池或者小容量鋰電池的標(biāo)稱容量直接沒(méi)了。如果是用大電池做后備的儀表這一筆待機(jī)電量會(huì)直接把整機(jī)的續(xù)航拖崩。有人會(huì)說(shuō)用大阻值電阻啊比如R1取10MΩR2取2.2MΩ分壓網(wǎng)絡(luò)電流會(huì)降到1μA左右。但阻值一上去后面ADC的壓力就來(lái)了。很多單片機(jī)的ADC輸入阻抗并不高源阻抗幾十千歐還能勉強(qiáng)接受幾兆歐的話采樣保持電容根本充不滿讀出來(lái)的電壓會(huì)明顯偏低。就算你加了很大的外部電容充放電時(shí)間也變長(zhǎng)檢測(cè)一次要等幾百毫秒甚至幾秒而且高阻抗節(jié)點(diǎn)對(duì)PCB漏電和環(huán)境噪聲特別敏感稍微受潮讀數(shù)就漂。專用電壓檢測(cè)芯片比如一些復(fù)位IC或者電壓比較器待機(jī)電流確實(shí)很低但一來(lái)芯片本身有成本二來(lái)不少電壓監(jiān)測(cè)IC只能輸出一個(gè)“高/低”電平想量化具體電壓還是要額外接ADC通道或者選帶I2C接口的專用電量計(jì)成本和復(fù)雜度又上去了。所以最實(shí)用的思路就是電路還是用電阻分壓但別讓它一直通電。讓一顆MOS管當(dāng)閘門只有在需要采樣的幾十毫秒內(nèi)把分壓網(wǎng)絡(luò)接到電池上采樣完立刻斷開(kāi)。這樣既保留了分壓采樣的精度又把平均功耗壓到了微安以下。1.2 電阻分壓 MOS管控制的設(shè)計(jì)思路這個(gè)項(xiàng)目里MOS管不是用來(lái)做線性穩(wěn)壓也不是用來(lái)驅(qū)動(dòng)大負(fù)載而是做一個(gè)“電源路徑開(kāi)關(guān)”。具體分工是這樣電阻分壓網(wǎng)絡(luò)負(fù)責(zé)把電池電壓按比例映射到MCU的ADC量程內(nèi)。P-MOS管Q1做高邊開(kāi)關(guān)控制分壓網(wǎng)絡(luò)與電池正極之間的通斷。N-MOS管Q2做低邊電平轉(zhuǎn)換讓3.3V的GPIO能去控制12V電源域里的P-MOS。為什么高邊用P-MOS而不是像很多人想的那樣把N-MOS放在分壓網(wǎng)絡(luò)下面做低邊開(kāi)關(guān)我一開(kāi)始也試過(guò)低邊方案電池正極接R1R1另一端接VsenVsen再接R2R2下端串N-MOS到GND??雌饋?lái)沒(méi)問(wèn)題但N-MOS關(guān)斷的時(shí)候R2下端懸空Vsen這個(gè)節(jié)點(diǎn)會(huì)通過(guò)R1被拉到接近電池電壓。如果電池是12VMCU供電是3.3VADC引腳直接吃12V這就不安全了。雖然可以加鉗位二極管但鉗位二極管的漏電流又會(huì)破壞待機(jī)功耗。所以繞了一圈還是回到高邊P-MOS方案關(guān)斷時(shí)Vsen通過(guò)R2穩(wěn)定地拉到GND不會(huì)出現(xiàn)高壓懸空節(jié)點(diǎn)。2. 核心電路拆解分壓電阻計(jì)算與控制管選型2.1 電阻分壓網(wǎng)絡(luò)阻值、精度、功耗怎么權(quán)衡分壓電阻的阻值選擇本質(zhì)是在“電源功耗”和“采樣精度”之間找平衡。很多人第一反應(yīng)是越大越省電但實(shí)際設(shè)計(jì)時(shí)要看系統(tǒng)和ADC的具體情況。我這套設(shè)計(jì)針對(duì)12V電池系統(tǒng)MCU的ADC參考電壓是3.3V同時(shí)預(yù)留一定的余量最高要檢測(cè)到16V。如果滿量程3.3V對(duì)應(yīng)16V那理論分壓比就是k 3.3 / 16 0.206實(shí)際選電阻時(shí)不會(huì)剛好卡到理論值我取了R1 100kΩR2 22kΩ分壓比k R2 / (R1 R2) 22 / 122 0.180312V電池滿電電壓大約12.6V采樣點(diǎn)電壓 Vsen 12.6 × 0.1803 ≈ 2.27V落在3.3V量程內(nèi)到了16V時(shí) Vsen 2.88V仍然不會(huì)超過(guò)ADC上限。分壓比留了一點(diǎn)余量給電阻精度和參考電壓漂移騰出空間。分壓電阻阻值取100k和22k而不是直接上10M主要原因是ADC源阻抗。從取樣點(diǎn)看進(jìn)去等效阻抗是R1和R2并聯(lián)Rth R1 // R2 100k // 22k ≈ 18kΩ。這個(gè)阻抗在很多MCU的ADC手冊(cè)里屬于“建議用低源阻抗但通過(guò)增加采樣時(shí)間可以接受”的范圍。如果后面再接一個(gè)10nF的濾波電容那么給電容充電的時(shí)間常數(shù)大約是18k × 10nF 180μs實(shí)際留2ms左右足夠穩(wěn)定不會(huì)影響周期性檢測(cè)。電阻精度方面普通1%貼片電阻對(duì)于12位ADC來(lái)說(shuō)溫度變化時(shí)會(huì)產(chǎn)生百分之幾的誤差。如果只做粗略的電量指示1%夠用如果要求電壓精度在±1%以內(nèi)建議換成0.1%精度或低溫漂的薄膜電阻或者在產(chǎn)線上做兩點(diǎn)校準(zhǔn)在代碼里把gain和offset補(bǔ)償?shù)簟N以诹慨a(chǎn)項(xiàng)目里一般用1%電阻然后通過(guò)可調(diào)電源標(biāo)定兩個(gè)點(diǎn)把計(jì)算系數(shù)寫死在程序里這樣綜合誤差可以做到1%以內(nèi)。2.2 MOS管選型不要只看導(dǎo)通電阻這顆P-MOS管Q1是這個(gè)電路里最容易選錯(cuò)的地方。很多人一看到“MOS管”就只看導(dǎo)通電阻Rds(on)其實(shí)在這個(gè)低頻、小電流的檢測(cè)場(chǎng)景里Rds(on)根本不重要。真正要關(guān)心的幾個(gè)參數(shù)是Vds耐壓Q1的漏源電壓至少要是系統(tǒng)最高電壓的1.2~1.5倍。12V系統(tǒng)建議選30V以上16V也安全。AO3401A的Vds是-30V完全夠用。Vgs耐壓這個(gè)特別容易踩坑。P-MOS管導(dǎo)通時(shí)柵極會(huì)被Q2拉到GND而源極接電池正極12V所以Vgs -12V。選管子時(shí)必須確認(rèn)Vgs的絕對(duì)最大值大于系統(tǒng)最高電壓。AO3401A的Vgs最大±20V檢測(cè)12V沒(méi)問(wèn)題如果電池電壓超過(guò)18V就要小心了。更高壓的系統(tǒng)柵極驅(qū)動(dòng)還要加穩(wěn)壓管限壓不能直接這么接。門極電荷Qg和等效輸入電容Ciss這個(gè)決定了開(kāi)關(guān)速度。我們這里是低頻開(kāi)關(guān)每次開(kāi)關(guān)間隔幾毫秒以上所以不太敏感。但如果后續(xù)想用PWM方式控制使能那Q1的Qg就要選小的否則會(huì)嚴(yán)重發(fā)熱。漏電流IDSS待機(jī)功耗的直接來(lái)源。AO3401A標(biāo)稱漏電流很小室溫下通常在μA級(jí)以下實(shí)際萬(wàn)用表測(cè)出來(lái)待機(jī)電流基本就是它貢獻(xiàn)的。如果買了劣質(zhì)物料這一項(xiàng)會(huì)超得離譜。N-MOS管Q2負(fù)責(zé)把3.3V GPIO信號(hào)轉(zhuǎn)換成12V域的開(kāi)關(guān)信號(hào)。2N7002是我常用的型號(hào)Vgs(th)約為1V~2.5V3.3V驅(qū)動(dòng)沒(méi)有問(wèn)題開(kāi)啟后的導(dǎo)通電阻只有幾歐姆完全夠用來(lái)拉低P-MOS的柵極。注意不能用那種需要5V以上驅(qū)動(dòng)的高門檻NMOS否則GPIO高電平不夠Q2導(dǎo)通不徹底P-MOS柵極拉不下去整個(gè)檢測(cè)通道就處于半開(kāi)狀態(tài)。2.3 電平轉(zhuǎn)換驅(qū)動(dòng)3.3V單片機(jī)控制12V電源路徑直接用GPIO去控制P-MOS是不行的。P-MOS的導(dǎo)通條件是以源極為參考的Vgs為負(fù)壓也就是說(shuō)Vgs要低于閾值電壓才能導(dǎo)通。12V電池系統(tǒng)里P-MOS源極在12V如果GPIO輸出3.3VVgs 3.3 - 12 -8.7V這會(huì)讓P-MOS一直導(dǎo)通如果GPIO輸出0VVgs -12V還是導(dǎo)通。所以直接用3.3V GPIO根本關(guān)不斷這顆P-MOS。正確的做法就是加一顆N-MOS做開(kāi)漏式的電平轉(zhuǎn)換。GPIO輸出高電平時(shí)Q2導(dǎo)通把P-MOS的柵極拉到GNDP-MOS的Vgs變成-12VP-MOS導(dǎo)通GPIO輸出低電平時(shí)Q2截止P-MOS柵極通過(guò)R3上拉到源極Vgs變成0VP-MOS關(guān)斷。這樣就實(shí)現(xiàn)了“3.3V控制12V”的轉(zhuǎn)換。需要注意Q1柵極和源極之間的R3不能省。這顆電阻有兩個(gè)作用第一在MCU還沒(méi)初始化、GPIO處于高阻狀態(tài)時(shí)把P-MOS柵極可靠地拉到源極保證默認(rèn)關(guān)斷第二給柵極積累的電荷提供泄放通路防止靜電或干擾導(dǎo)致誤觸發(fā)。但R3也不能選太小因?yàn)镼2導(dǎo)通后R3兩端電壓是電池電壓會(huì)有電流一直從Vbat經(jīng)R3到Q2到地。我取2.2MΩ12V下只有5.5μA左右的電流對(duì)導(dǎo)通窗口來(lái)說(shuō)可以接受同時(shí)也能保證關(guān)斷速度。3. 完整電路與參數(shù)計(jì)算3.1 電路連接關(guān)系完整的電路連接關(guān)系可以這樣描述Vbat電池正極 │ ├── Q1.SPMOS Source │ Q1.DPMOS Drain── R1 ── Vsen節(jié)點(diǎn) │ ├── R2 ── GND │ ├── C1 ── GND │ └── ADC引腳 Q1.G ── R3(2.2MΩ) ── Q1.S Q1.G ── Q2.D Q2.S ── GND Q2.G ── R4(1kΩ) ── GPIO_EN Q2.G ── R5(1MΩ) ── GND當(dāng)GPIO_EN輸出高電平時(shí)Q2導(dǎo)通Q1柵極被拉到GNDQ1導(dǎo)通電池電壓經(jīng)過(guò)Q1、R1、R2分壓后在Vsen節(jié)點(diǎn)建立采樣電壓。當(dāng)GPIO_EN輸出低電平時(shí)Q2截止Q1柵極通過(guò)R3上拉到電池正極Q1關(guān)斷分壓網(wǎng)絡(luò)與電池?cái)嚅_(kāi)Vsen節(jié)點(diǎn)通過(guò)R2放到GND。3.2 元件清單為了方便大家直接抄作業(yè)我整理了一份BOM清單編號(hào)元件關(guān)鍵規(guī)格用途R1貼片電阻100kΩ ±1%0603分壓上臂R2貼片電阻22kΩ ±1%0603分壓下臂R3貼片電阻2.2MΩ ±5%0603PMOS柵源上拉R4貼片電阻1kΩ ±5%0603NMOS柵極串聯(lián)電阻R5貼片電阻1MΩ ±5%0603NMOS柵極下拉C1貼片電容10nFX7R0603采樣點(diǎn)濾波儲(chǔ)能Q1PMOSAO3401ASOT-23高邊電源開(kāi)關(guān)Q2NMOS2N7002ASOT-23電平轉(zhuǎn)換R4這顆串在Q2柵極的電阻主要作用是抑制GPIO走線帶來(lái)的振鈴以及限制上電瞬間的柵極充電電流。它在低頻下對(duì)功能沒(méi)有影響但建議保留特別是GPIO線比較長(zhǎng)或者走線經(jīng)過(guò)繼電器、電機(jī)這類干擾源時(shí)能減少誤觸發(fā)。3.3 靜態(tài)功耗與平均功耗分析下面算一下這套電路在12V電池下的功耗表現(xiàn)。先算導(dǎo)通時(shí)的電流。Q1導(dǎo)通、Q2導(dǎo)通的狀態(tài)下有幾路電流分壓網(wǎng)絡(luò)的電流、R3的電流、R5的電流。分壓網(wǎng)絡(luò)電流I_div 12V / (100kΩ 22kΩ) 12 / 122k ≈ 98.4μAR3電流I_R3 12V / 2.2MΩ ≈ 5.5μAR5電流I_R5 3.3V / 1MΩ 3.3μA所以導(dǎo)通時(shí)總電流大約是I_on 98.4 5.5 3.3 ≈ 107μA如果按每秒檢測(cè)一次每次導(dǎo)通5ms計(jì)算平均電流就是I_avg 107μA × 0.005 / 1 0.535μA這個(gè)數(shù)字已經(jīng)比常開(kāi)方案低了接近兩個(gè)數(shù)量級(jí)。如果再把檢測(cè)周期拉長(zhǎng)到10秒一次平均電流就降到約54nA。對(duì)于大多數(shù)電池供電設(shè)備來(lái)說(shuō)這個(gè)消耗完全可以忽略。待機(jī)狀態(tài)下Q1關(guān)斷R3兩端電壓差為0沒(méi)有電流Q2截止R5兩端電壓差為0也沒(méi)有電流分壓網(wǎng)絡(luò)與電池?cái)嚅_(kāi)只剩Q1本身的漏電流和PCB漏電。實(shí)測(cè)做好板子清洗后待機(jī)電流一般在1μA以下。如果測(cè)出來(lái)十幾微安那基本是哪里沒(méi)做對(duì)可以直接去第5章排查。4. 軟件配合檢測(cè)時(shí)序與ADC處理4.1 使能時(shí)序開(kāi)多久、關(guān)多久硬件搭好了軟件時(shí)序如果沒(méi)配合好照樣會(huì)吃大虧。這里最典型的錯(cuò)誤就是GPIO一拉高立刻去讀ADC。因?yàn)閂sen節(jié)點(diǎn)上并聯(lián)了C1需要時(shí)間充電到穩(wěn)定值。按前面的參數(shù)Vsen節(jié)點(diǎn)的等效源阻抗是R1//R2 ≈ 18kΩC1是10nF時(shí)間常數(shù)τ 18kΩ × 10nF ≈ 180μs穩(wěn)定到0.1%以內(nèi)大約需要5τ也就是900μs。實(shí)際程序里我會(huì)留2ms以上確保采樣點(diǎn)電壓已經(jīng)完全建立。如果C1換成100nF那穩(wěn)定時(shí)間會(huì)變成1.8ms延時(shí)至少留5ms才穩(wěn)妥。關(guān)閉檢測(cè)時(shí)同樣要留一點(diǎn)時(shí)間讓Vsen通過(guò)R2放電到GND。這個(gè)放電時(shí)間常數(shù)為R2 × C1 22kΩ × 10nF ≈ 220μs。所以檢測(cè)完成后拉低GPIO再等1ms再進(jìn)休眠ADC引腳就不會(huì)帶著殘壓也不會(huì)通過(guò)內(nèi)部保護(hù)二極管漏電。4.2 ADC讀取與電壓換算ADC部分假設(shè)系統(tǒng)用12位ADC參考電壓3.3V。采樣點(diǎn)電壓和ADC值的關(guān)系是Vsen ADC值 / 4096 × 3.3V電池電壓則是Vbat Vsen / k其中k 22 / 122 ≈ 0.1803。比如ADC讀到2800那么Vsen 2800 / 4096 × 3.3 ≈ 2.255VVbat 2.255 / 0.1803 ≈ 12.51V實(shí)際代碼里不要用浮點(diǎn)數(shù)做除法效率低而且不同MCU的浮點(diǎn)庫(kù)可能帶來(lái)不確定誤差。我一般先把ADC平均值算成mV再用整數(shù)乘除法或者預(yù)先把分壓比轉(zhuǎn)成縮放系數(shù)。4.3 代碼實(shí)現(xiàn)這里給一份參考代碼以HAL庫(kù)風(fēng)格的偽代碼為例#define ADC_REF_MV 3300 #define ADC_FULL_SCALE 4096 #define DIVIDER_RATIO 0.1803f uint32_t read_battery_mv(void) { uint32_t sum 0; uint32_t adc_raw; // 使能分壓檢測(cè)通路 HAL_GPIO_WritePin(EN_GPIO_Port, EN_Pin, GPIO_PIN_SET); delay_ms(2); // 等待Vsen穩(wěn)定 // 多次采樣取平均 for (int i 0; i 8; i) { adc_raw hal_adc_read_battery_channel(); sum adc_raw; delay_us(100); // 讓ADC輸入電容充分恢復(fù) } // 關(guān)閉分壓檢測(cè)通路進(jìn)入低功耗 HAL_GPIO_WritePin(EN_GPIO_Port, EN_Pin, GPIO_PIN_RESET); delay_ms(1); // 等待Vsen放電到0 uint32_t adc_avg sum / 8; uint32_t vsen_mv adc_avg * ADC_REF_MV / ADC_FULL_SCALE; uint32_t vbat_mv (uint32_t)((float)vsen_mv / DIVIDER_RATIO); return vbat_mv; }這段代碼里使能后的2ms延時(shí)和采樣后的1ms放電延時(shí)都很關(guān)鍵。如果MCU的ADC采樣速度很快連續(xù)采樣8次會(huì)在極短時(shí)間內(nèi)完成所以每次采樣之間隔100μs是為了讓內(nèi)部的采樣保持電容有足夠時(shí)間跟住Vsen節(jié)點(diǎn)的電壓避免測(cè)到前一次轉(zhuǎn)換后的殘留電荷。5. 實(shí)測(cè)與常見(jiàn)問(wèn)題排查5.1 待機(jī)電流偏大待機(jī)電流偏大是這套電路最常見(jiàn)的問(wèn)題而且多數(shù)不是原理錯(cuò)誤而是細(xì)節(jié)沒(méi)做到位。第一檢查R3和R5的阻值。R3在導(dǎo)通窗口內(nèi)會(huì)通過(guò)電流如果焊接時(shí)把2.2MΩ焊成了22kΩ導(dǎo)通電流會(huì)從5μA級(jí)別直接跳到幾百微安待機(jī)雖然不受影響但整體功耗會(huì)爆表。R5如果被焊成10kΩGPIO高電平時(shí)的電流就是3.3V/10k330μA同樣很離譜。第二檢查PCB清潔度。分壓網(wǎng)絡(luò)和柵極這些高阻節(jié)點(diǎn)最怕助焊劑殘留和潮濕。我在樣板調(diào)試時(shí)遇到過(guò)待機(jī)電流從0.5μA變成12μA的情況用酒精清洗后重新烘干電流就恢復(fù)正常了。如果是濕度大的環(huán)境板子表面最好涂三防漆。第三確認(rèn)MCU在休眠時(shí)GPIO狀態(tài)。很多MCU的GPIO從外部看是高阻但內(nèi)部可能有微弱上拉或下拉如果EN引腳實(shí)際被拉到高電平Q2會(huì)導(dǎo)通P-MOS也會(huì)跟著開(kāi)。解決辦法是在軟件休眠前明確把EN引腳配置為輸出低電平同時(shí)保持R5下拉電阻在板上。5.2 采樣讀數(shù)不準(zhǔn)、跳動(dòng)讀數(shù)不準(zhǔn)要先排除建立時(shí)間不夠。如果你發(fā)現(xiàn)電池電壓是12V程序讀出來(lái)只有11V甚至更低大概率是GPIO拉高后沒(méi)有等C1充滿就去采樣了。前面算過(guò)2ms是底線保守一點(diǎn)放到5ms不會(huì)有副作用畢竟平均功耗依然很低。排除建立時(shí)間后再看分壓電阻精度。1%電阻的溫度系數(shù)一般是±100ppm/°C如果工作環(huán)境溫差大電阻值會(huì)漂。要求高的話R1和R2都選±50ppm或者更低的低溫漂型號(hào)。ADC讀數(shù)跳動(dòng)則一般是參考電壓波動(dòng)或采樣時(shí)序問(wèn)題。如果電池直接給MCU供電而系統(tǒng)里又有無(wú)線模塊、繼電器這類大電流負(fù)載ADC參考電壓會(huì)跟著波動(dòng)。這種情況建議采樣時(shí)錯(cuò)開(kāi)負(fù)載工作時(shí)段或者使用MCU內(nèi)部的帶隙基準(zhǔn)作為ADC參考而不是用VDD直接供電。在Vsen節(jié)點(diǎn)加10nF C1后讀數(shù)跳動(dòng)通常已經(jīng)會(huì)好很多。如果仍然有跳變可以用軟件濾波比如連續(xù)采8次去掉最大最小再取平均或者做一個(gè)簡(jiǎn)單的滑動(dòng)平均。5.3 高邊PMOS發(fā)熱看到P-MOS發(fā)熱很多人的第一反應(yīng)是Rds(on)太大。但在本電路里采樣電流只有100μA左右就算Rds(on)有100mΩ壓降也才10μV不可能發(fā)熱。真正會(huì)發(fā)熱的原因只有兩個(gè)Q1沒(méi)有完全導(dǎo)通或者開(kāi)關(guān)頻率太高。Q1沒(méi)有完全導(dǎo)通本質(zhì)上是因?yàn)镼2沒(méi)有把Q1柵極拉到足夠低。測(cè)量Q1柵極對(duì)地電壓如果GPIO為高時(shí)柵極電壓還有好幾伏那就要檢查GPIO驅(qū)動(dòng)電平是否足夠。3.3V驅(qū)動(dòng)的2N7002沒(méi)問(wèn)題但如果你用的是1.8V GPIO2N7002的閾值可能不夠要換更低閾值的NMOS。至于開(kāi)關(guān)頻率如果業(yè)務(wù)上把EN信號(hào)改成PWM來(lái)進(jìn)一步占空比控制那就要重新考慮驅(qū)動(dòng)了。P-MOS在開(kāi)關(guān)過(guò)程中會(huì)經(jīng)過(guò)線性區(qū)米勒效應(yīng)會(huì)拖長(zhǎng)這個(gè)過(guò)程開(kāi)關(guān)損耗會(huì)急劇增加。本設(shè)計(jì)是低頻點(diǎn)動(dòng)一次只導(dǎo)通幾毫秒所以不需要擔(dān)心。5.4 上電誤開(kāi)啟與關(guān)斷延遲有人會(huì)問(wèn)MCU還沒(méi)初始化的時(shí)候GPIO是高阻這個(gè)期間Q1會(huì)不會(huì)誤開(kāi)啟正常不會(huì)因?yàn)镽5把Q2柵極固定在地Q2截止R3把Q1柵極拉到源極Q1也截止。但如果大樓里電磁干擾比較強(qiáng)或者板子周圍有動(dòng)力線高阻節(jié)點(diǎn)還是有可能被耦合出電壓。所以啟動(dòng)代碼一進(jìn)去就要盡快把EN引腳配置為輸出低不要讓它長(zhǎng)時(shí)間懸空。關(guān)斷延遲的問(wèn)題主要出在R3阻值選得太大。R3同時(shí)也是Q1柵極電荷的泄放通路如果選10MΩ甚至更大Q2關(guān)斷后Q1柵極要經(jīng)過(guò)很長(zhǎng)時(shí)間才能被拉回源極電位在這個(gè)過(guò)程里分壓網(wǎng)絡(luò)一直處于半導(dǎo)通狀態(tài)。我實(shí)測(cè)用2.2MΩ時(shí)關(guān)斷延遲在1ms以內(nèi)對(duì)低功耗檢測(cè)來(lái)說(shuō)完全夠用。如果你打算進(jìn)一步降低導(dǎo)通功耗把R3換成10MΩ建議同時(shí)用示波器確認(rèn)關(guān)斷波形別讓半導(dǎo)通時(shí)間吃掉你的平均功耗預(yù)算。5.5 問(wèn)題速查表現(xiàn)象可能原因處理方法待機(jī)電流達(dá)到幾十μAR3/R5焊錯(cuò)、PCB漏電、Q1漏電清洗板子核對(duì)阻值更換MOS管采樣電壓明顯偏低建立時(shí)間不夠、分壓比不準(zhǔn)增加延時(shí)校準(zhǔn)電阻系數(shù)ADC讀數(shù)跳變參考電壓不穩(wěn)、受到干擾加濾波電容避開(kāi)負(fù)載切換時(shí)段PMOS發(fā)熱Q2驅(qū)動(dòng)不足、開(kāi)關(guān)頻率過(guò)高檢查GPIO電平重新設(shè)計(jì)驅(qū)動(dòng)上電瞬間誤接通GPIO高阻、干擾耦合使用R5下拉啟動(dòng)時(shí)盡快拉低EN關(guān)斷后仍有漏電流R3太大導(dǎo)致關(guān)斷慢減小R3或增加?xùn)艠O泄放路徑最后再分享一個(gè)實(shí)際操作中的小細(xì)節(jié)如果被測(cè)電壓特別高比如48V系統(tǒng)這套電路的基本結(jié)構(gòu)還能用但P-MOS的Vgs耐壓必須重新考慮。多數(shù)小信號(hào)PMOS的Vgs最大也就±20V直接用3.3V GPIO經(jīng)過(guò)NMOS去控制會(huì)產(chǎn)生過(guò)壓風(fēng)險(xiǎn)。這時(shí)候需要在Q1的柵極回路里串一顆穩(wěn)壓管把Vgs鉗制在安全范圍內(nèi)。調(diào)試這類電路時(shí)我習(xí)慣先不接電池用可調(diào)電源慢慢升壓一邊升壓一邊觀察Vsen節(jié)點(diǎn)的電壓和ADC讀數(shù)確認(rèn)分壓比和關(guān)斷狀態(tài)都正常后再上整機(jī)。這個(gè)習(xí)慣能幫你避開(kāi)不少隱蔽的硬件坑。