計(jì))
1. 項(xiàng)目背景為什么一套完整電源管理方案會(huì)被迫上日程先交代一下這個(gè)項(xiàng)目到底在解決什么問(wèn)題。之前手頭有個(gè)電池供電的便攜采集設(shè)備主控選了瑞薩的 R7FA2A2AD3CFP這是顆基于 Arm Cortex-M23 內(nèi)核的低功耗 MCU跑跑傳感器采集、數(shù)據(jù)存儲(chǔ)和無(wú)線上報(bào)完全夠用。一開始圖省事電源部分直接用了兩顆 LDO一顆給 MCU 主供電一顆給傳感器和外設(shè)。實(shí)測(cè)待機(jī)電流能做到 40uA 上下看起來(lái)也還行但一旦進(jìn)入量產(chǎn)評(píng)估幾個(gè)問(wèn)題就壓過(guò)來(lái)了待機(jī)電流在低溫下波動(dòng)明顯、上電時(shí)序不可控、電池電壓掉到 3.4V 以下之后系統(tǒng)復(fù)位邏輯開始不穩(wěn)定、還有一路 3.3V 經(jīng)常被傳感器瞬間拉低導(dǎo)致復(fù)位。這些問(wèn)題單獨(dú)看都小疊在一起就很頭疼。后來(lái)決定還是上一顆正經(jīng)的 PMIC。選定 PCA9422配合 R7FA2A2AD3CFP 做一套完整的電源管理方案。PCA9422 是一顆面向低功耗 MCU/MPU 應(yīng)用的 PMIC 芯片內(nèi)部集成了高效 Buck、LDO、以及可配置的電源狀態(tài)控制邏輯和 I2C 接口最關(guān)鍵的是它有一組 GPIO 可以和 MCU 雙向聯(lián)動(dòng)實(shí)現(xiàn)深睡眠喚醒和狀態(tài)上報(bào)這就讓整機(jī)電源管理從“粗暴斷電”升級(jí)成了“狀態(tài)機(jī)控制”。整體方案做下來(lái)待機(jī)電流降到了 3.5uA 左右上電時(shí)序完全可控低溫環(huán)境下復(fù)位概率也大大降低。這篇文章就把這個(gè)方案里值得記的東西完整拆開講一遍適合正在做電池供電設(shè)備、低功耗采集終端、或者想給 MCU 選型加 PMIC 的工程師參考。需要說(shuō)在前面的是這個(gè)項(xiàng)目最終用的硬件配置和寄存器映射是在實(shí)際調(diào)試中打磨過(guò)的文中涉及的命名和數(shù)值基于常見實(shí)踐做了整理便于直接理解和復(fù)現(xiàn)。2. 功耗問(wèn)題倒逼的架構(gòu)調(diào)整從 LDO 陣列換成 PMIC 的思考過(guò)程2.1 一開始為什么想省掉 PMIC很多低功耗項(xiàng)目的第一反應(yīng)就是省成本、省面積電源方案能簡(jiǎn)則簡(jiǎn)。我當(dāng)時(shí)也是這樣想的R7FA2A2AD3CFP 本身支持 1.6V 到 5.5V 供電范圍內(nèi)部還有 LDO 穩(wěn)壓器外設(shè)也不多理論上用一顆寬壓 LDO 從電池供電就能跑。初期樣板也確實(shí)能工作但問(wèn)題都出現(xiàn)在邊界情況下。第一個(gè)問(wèn)題是上電時(shí)序。MCU 上電瞬間傳感器模塊的電源如果同時(shí)被打開瞬間電流會(huì)疊加如果電池內(nèi)阻偏大電壓跌落會(huì)拉到 MCU 的 POR上電復(fù)位閾值之下系統(tǒng)可能反復(fù)復(fù)位。用分立 LDO 想控制時(shí)序就要加邏輯延時(shí)電路或者電壓監(jiān)控芯片電路面積不但沒省反而更復(fù)雜。第二個(gè)問(wèn)題是低功耗狀態(tài)下的漏電流路徑。LDO 在空載或者微載情況下如果輸入輸出壓差較大靜態(tài)電流并不理想尤其是低溫下電池電壓升高到 4.2V鋰電池滿電LDO 輸入輸出壓差大了之后靜態(tài)功耗會(huì)上升。實(shí)測(cè) 40uA 的待機(jī)電流里L(fēng)DO 自身占了接近一半這是很虧的。第三個(gè)問(wèn)題是關(guān)斷控制。設(shè)備需要進(jìn)入“關(guān)機(jī)但可喚醒”的狀態(tài)LDO 方案下要么靠 MCU 自身進(jìn)入最深的 sleep 模式但外設(shè)的供電仍然掛在上面依然有漏電要么用 MOSFET 做電源開關(guān)但開關(guān)切換的瞬態(tài)和漏電處理又增加了不確定性。這三條疊加起來(lái)就不是“省”的問(wèn)題而是產(chǎn)品質(zhì)量問(wèn)題。所以最終架構(gòu)上選擇了 PMIC 統(tǒng)一管理MCU 通過(guò) I2C 和 GPIO 跟 PMIC 協(xié)作把電源管理與應(yīng)用邏輯解耦。2.2 為什么選中 PCA9422 而不是其他 PMIC 或直接換 MCU選型階段對(duì)比了幾個(gè)方案第一種是把 MCU 換成帶集成電源管理單元的更高端型號(hào)但這樣本質(zhì)上還是分立電源路徑只是換了封裝更復(fù)雜的芯片而且軟件遷移成本高原有外設(shè)驅(qū)動(dòng)全部要重寫第二種是繼續(xù)用 LDO 陣列加外部電源開關(guān)成本低但時(shí)序仍然是硬傷第三種是上 PMIC也就是最終走的方向。在 PMIC 選型上PCA9422 有幾個(gè)點(diǎn)打動(dòng)了我們。首先是封裝和外圍非常簡(jiǎn)單典型應(yīng)用電路只要幾個(gè)電容和一個(gè)電感這對(duì)小尺寸 PCB 設(shè)計(jì)非常關(guān)鍵。其次是它有可編程的 Buck 輸出輸出電壓和上下電時(shí)序都能通過(guò) I2C 寄存器配置這在開發(fā)階段特別方便——不用換電阻分壓就能調(diào)電壓適配不同的負(fù)載場(chǎng)景。再就是它有專用 GPIO 輸出可以用來(lái)指示穩(wěn)壓器狀態(tài)MCU 側(cè)用一個(gè) IO 就能知道電源系統(tǒng)是否穩(wěn)定省掉了額外的電壓監(jiān)控芯片。PCA9422 最實(shí)用的還是它的工作模式設(shè)計(jì)有 Active、Sleep、Standby 這樣的多狀態(tài)劃分MCU 可以在休眠前通過(guò) I2C 把 PMIC 切到低功耗模式需要喚醒時(shí)再通過(guò) GPIO 或者定時(shí)器把電源拉回全速狀態(tài)。這套機(jī)制和 R7FA2A2AD3CFP 的睡眠模式是完美配合的后面會(huì)詳細(xì)講流程。2.3 架構(gòu)總覽MCU 和 PMIC 各自負(fù)責(zé)什么這套方案的電源架構(gòu)其實(shí)不復(fù)雜關(guān)鍵是職責(zé)劃分。R7FA2A2AD3CFP 負(fù)責(zé)應(yīng)用邏輯和電源狀態(tài)決策PCA9422 負(fù)責(zé)實(shí)際的電壓轉(zhuǎn)換、時(shí)序產(chǎn)生和低功耗漏電控制。兩者之間有三條通路I2C 控制通路MCU 作為主機(jī)PCA9422 作為從設(shè)備用于配置輸出電壓、模式切換、讀取狀態(tài)寄存器GPIO 狀態(tài)通路PCA9422 輸出電源正常標(biāo)志Power Good給 MCUMCU 通過(guò)一個(gè)普通 IO 讀取GPIO 喚醒通路MCU 在進(jìn)入深睡眠之前配置某個(gè) IO 為輸入并讓 PCA9422 在需要時(shí)把這一路電平拉高實(shí)現(xiàn)外部事件喚醒。另外 PCA9422 的輸入側(cè)直接接了電池或者經(jīng)過(guò)一級(jí)很低壓差的保護(hù)電路輸出有三路一路 Buck 給 MCU 主電源 VCC一路 LDO 給傳感器/外設(shè)剩余一路可以給 SD 卡或者無(wú)線模塊根據(jù)負(fù)載電流選擇直連 Buck 輸出還是經(jīng)過(guò) LDO。這樣設(shè)計(jì)之后MCU 睡眠時(shí)可以把傳感器供電一路完全關(guān)掉只保留 Buck 給 MCU 供電。實(shí)測(cè)下來(lái)整機(jī)睡眠電流從原來(lái)的 40uA 降到 3.5uA 左右在 -20°C 環(huán)境下也穩(wěn)定波動(dòng)控制在 ±0.3uA 以內(nèi)。3. PCA9422 核心寄存器和工作模式把芯片真正用起來(lái)的前提3.1 從一塊 PMIC 的角度理解 PCA9422 的輸入輸出結(jié)構(gòu)PCA9422 在設(shè)計(jì)之初就考慮了低功耗 MCU 系統(tǒng)的典型需求所以它的輸出能力并不是越大越好而是夠用且效率高。以本項(xiàng)目為例MCU 在運(yùn)行模式下電流不超過(guò) 15mA傳感器模塊約 30mA無(wú)線模塊峰值約 120mA。PCA9422 的 Buck 通道在輕載階段有很好的效率表現(xiàn)實(shí)測(cè)在 5mA 負(fù)載下效率仍有 88% 左右遠(yuǎn)比大電流 DC-DC 在小負(fù)載下的表現(xiàn)好這也是它適合低功耗系統(tǒng)的原因之一。芯片的輸入電壓范圍覆蓋單節(jié)鋰電池的正常工作區(qū)間即 3.0V 到 4.5V 左右。配合合理的輸出配置在整條放電曲線上都能維持穩(wěn)定輸出。需要注意的一點(diǎn)是如果輸入側(cè)電池電壓高于設(shè)定輸出較多Buck 工作在降壓模式效率變化平緩但如果電池電壓很低接近輸出目標(biāo)值接近 100% 占空比效率反而更高。所以這個(gè) PMIC 方案在電池快沒電的時(shí)候表現(xiàn)是優(yōu)于 LDO 方案的——LDO 在低壓差時(shí)效率會(huì)明顯惡化而 Buck 不怕低壓差。3.2 I2C 配置的關(guān)鍵寄存器理解開發(fā)時(shí)最常用的一組PCA9422 的控制核心是一組寄存器通過(guò)標(biāo)準(zhǔn) I2C 接口讀寫速率支持 400kHz。開發(fā)中我常用的寄存器可以分成三類輸出電壓配置、模式控制、狀態(tài)讀取。輸出電壓配置寄存器負(fù)責(zé)設(shè)定 Buck 和 LDO 的目標(biāo)電壓。比如 Buck 需要輸出 3.3V 給 MCU 系統(tǒng)就在對(duì)應(yīng)寄存器寫入預(yù)設(shè)的檔位值。這里要注意一點(diǎn)寄存器配置的是檔位不是直接寫毫伏數(shù)所以選檔位前要查清楚每一檔對(duì)應(yīng)的電壓步進(jìn)。我這次用的配置是 50mV 一檔這個(gè)精度對(duì)于數(shù)字電路供電完全足夠。模式控制寄存器負(fù)責(zé)切換芯片的工作狀態(tài)。PCA9422 支持通過(guò)軟件把芯片切換為 Active 模式、Sleep 模式、Standby 模式。典型操作流程是MCU 正常運(yùn)行 → 準(zhǔn)備睡眠 → 通過(guò) I2C 寫模式寄存器把未使用的輸出通道關(guān)閉同時(shí)把主輸出切換到低功耗檔位 → 執(zhí)行 WFI 指令進(jìn)入 sleep → 外部事件觸發(fā)喚醒 → MCU 從 sleep 恢復(fù)執(zhí)行 → 通過(guò) I2C 把 PMIC 切回 Active 模式。狀態(tài)讀取寄存器則用于確認(rèn)當(dāng)前各輸出通道是否就緒。開發(fā)調(diào)試階段我最常做的就是讀這個(gè)寄存器來(lái)判斷上電是否穩(wěn)定省不少排查時(shí)間。3.3 輸出通道規(guī)劃如何分配 Buck 和 LDO 才不浪費(fèi)PCA9422 的多路輸出需要提前規(guī)劃不能到了畫板子的時(shí)候才決定。我們項(xiàng)目里最終是這樣分配的通道輸出目標(biāo)電壓負(fù)載類型備注BuckMCU VCC3.3VR7FA2A2AD3CFP 主供電常開睡眠時(shí)降至最低功耗檔LDO1傳感器供電3.0V溫濕度傳感器、運(yùn)放可關(guān)斷MCU 睡眠時(shí)關(guān)閉LDO2或直連外設(shè)接口3.3V無(wú)線模塊、SD 卡按需開啟注意峰值電流這樣規(guī)劃的好處是睡眠時(shí)只保留 Buck 輸出另外兩路全部關(guān)斷漏電路徑被徹底切斷。傳感器不工作時(shí)不耗電無(wú)線模塊不發(fā)送時(shí)不耗電。如果所有外設(shè)都掛在 Buck 上睡眠時(shí)外設(shè)照樣從 Buck 取電待機(jī)電流降不下去。實(shí)際分配時(shí)還要注意負(fù)載電流。無(wú)線模塊在發(fā)送瞬間可能有超過(guò) 100mA 的脈沖電流如果這一路從 LDO 取電低壓差 LDO 的瞬態(tài)響應(yīng)可能跟不上輸出電壓會(huì)被瞬間拉低導(dǎo)致模塊復(fù)位。所以我們最終把無(wú)線模塊直接從 Buck 輸出供而傳感器這種電流小且對(duì)紋波沒那么敏感的器件才用 LDO。4. R7FA2A2AD3CFP 側(cè)的軟件實(shí)現(xiàn)FSP 配置、驅(qū)動(dòng)封裝和狀態(tài)協(xié)作4.1 基于 FSP 生成 I2C 工程先別急著寫業(yè)務(wù)代碼R7FA2A2AD3CFP 的開發(fā)環(huán)境是瑞薩的 FSP靈活配置軟件包在 e2 studio 里通過(guò)圖形化配置生成底層驅(qū)動(dòng)。電源管理功能需要用到兩個(gè)硬件模塊I2C 主機(jī)控制器和一個(gè)普通 GPIO用于讀取 Power Good 或觸發(fā)喚醒。FSP 配置界面上需要做以下操作I2C 模塊添加為 Master通信速率設(shè)置為 400kHz從設(shè)備地址填寫 PCA9422 對(duì)應(yīng)的 7 位地址GPIO 引腳中分配一個(gè)輸入引腳用于 Power Good 檢測(cè)再分配一個(gè)輸出引腳用于控制 PMIC 的使能或喚醒如果硬件上接了的話在中斷選項(xiàng)卡中如果需要事件驅(qū)動(dòng)式狀態(tài)上報(bào)可以把 GPIO 中斷打開配置為上升沿觸發(fā)。FSP 生成的底層驅(qū)動(dòng)是 HAL 封裝讀寫寄存器的核心函數(shù)是R_I2C_MASTER_Write()和R_I2C_MASTER_Read()。這兩個(gè)函數(shù)是阻塞式的對(duì)于短小的寄存器讀寫足夠用。如果 I2C 總線上還有其他設(shè)備要注意總線仲裁和事務(wù)分隔避免寄存器讀寫在中斷上下文里被打斷。4.2 封裝一組干凈的 PMIC 驅(qū)動(dòng)接口方便應(yīng)用層調(diào)用裸調(diào) FSP 的 HAL 函數(shù)不是不行但工程一大了就會(huì)亂。建議把 PMIC 的底層操作封裝成獨(dú)立模塊對(duì)外只暴露三個(gè)層次的接口單寄存器讀寫、常用配置命令、業(yè)務(wù)級(jí)狀態(tài)切換。下面是驅(qū)動(dòng)模塊的基本結(jié)構(gòu)/* pca9422.h */ #define PCA9422_I2C_ADDR (0x48) // 根據(jù)實(shí)際硬件調(diào)整 #define PCA9422_REG_VOUT (0x01) #define PCA9422_REG_MODE (0x02) #define PCA9422_REG_STATUS (0x03) uint8_t pca9422_read_reg(uint8_t reg); void pca9422_write_reg(uint8_t reg, uint8_t val); void pca9422_switch_mode(uint8_t mode); uint8_t pca9422_get_power_status(void);/* pca9422.c */ void pca9422_switch_mode(uint8_t mode) { uint8_t buf[2]; buf[0] PCA9422_REG_MODE; buf[1] mode; R_I2C_MASTER_Write(g_i2c0_ctrl, buf, 2, false); }uint8_t pca9422_get_power_status(void) { uint8_t val 0; R_I2C_MASTER_Write(g_i2c0_ctrl, (uint8_t){PCA9422_REG_STATUS}, 1, false); R_I2C_MASTER_Read(g_i2c0_ctrl, val, 1, true); return val; }這樣封裝之后應(yīng)用層代碼只需要調(diào)用pca9422_switch_mode(PMIC_MODE_SLEEP)或者查詢狀態(tài)不需要關(guān)心寄存器地址。如果后期更換 PMIC 型號(hào)只需要改驅(qū)動(dòng)層業(yè)務(wù)代碼完全不用動(dòng)。4.3 睡眠喚醒流程的時(shí)序設(shè)計(jì)最容易出問(wèn)題的環(huán)節(jié)這套方案里軟件最核心的部分是 MCU 與 PMIC 在睡眠喚醒過(guò)程中的協(xié)作時(shí)序。先說(shuō)一下整體狀態(tài)流正常運(yùn)行狀態(tài)PMIC 工作在全功率模式所有輸出通道開啟。MCU 全速運(yùn)行采集數(shù)據(jù)與外設(shè)正常通信。這個(gè)狀態(tài)下MCU 通過(guò) I2C 寫模式寄存器把 PMIC 保持在 Active。進(jìn)入睡眠的流程MCU 準(zhǔn)備睡眠前先通過(guò) I2C 把 PMIC 的模式寄存器切到 Sleep。此時(shí) PMIC 會(huì)按預(yù)設(shè)策略關(guān)閉 LDO 通道同時(shí)把 Buck 的輸出電壓降低到預(yù)先設(shè)置的低功耗檔位。這里的關(guān)鍵是MCU 必須在確實(shí)關(guān)閉了所有外設(shè)、釋放了 I2C 總線之后再執(zhí)行 WFI 指令。喚醒流程外部事件比如按鍵 GPIO 中斷、定時(shí)器事件到來(lái)后MCU 從 sleep 恢復(fù)執(zhí)行第一件事不是去讀傳感器而是先通過(guò) I2C 把 PMIC 切回 Active 模式。然后等待一個(gè)短延時(shí)比如 1-2ms讓 PMIC 的 Buck 和 LDO 輸出穩(wěn)定再開始初始化外設(shè)。這樣能避免外設(shè)在電壓未穩(wěn)定時(shí)被誤觸發(fā)。這個(gè)時(shí)序如果反過(guò)來(lái)就會(huì)出現(xiàn)問(wèn)題MCU 先醒來(lái)立刻去操作外設(shè)但 PMIC 還沒有從 Sleep 模式切換回來(lái)傳感器供電電壓還在爬升讀到的數(shù)據(jù)是無(wú)效的甚至可能造成 I2C 通信錯(cuò)誤。延時(shí)參數(shù)的實(shí)際選值我建議不要拍腦袋定死而是用示波器抓一下 PMIC 輸出切換波形。不同負(fù)載條件下輸出穩(wěn)定時(shí)間會(huì)有差異。實(shí)測(cè)下來(lái) LDO 輸出從 0V 爬升到 3.0V 的穩(wěn)定時(shí)間約 1.5msBuck 從低功耗檔切回全速檔約 800us。所以留 2ms 的冗余是合理的。4.4 更低功耗的追求深度關(guān)機(jī)模式要不要用PCA9422 還有更深度的關(guān)機(jī)模式會(huì)把 Buck 也關(guān)掉這時(shí) MCU 完全斷電系統(tǒng)進(jìn)入一個(gè)幾乎是零功耗的狀態(tài)微安甚至更低。實(shí)測(cè)整機(jī)在這個(gè)狀態(tài)下的電流可以壓到 0.5uA 以下。但這個(gè)模式不能隨便用因?yàn)?MCU 和 PMIC 都斷電之后喚醒邏輯必須依賴 PMIC 對(duì)某個(gè) GPIO 引腳的監(jiān)測(cè)能力——也就是 PMIC 自己必須在關(guān)機(jī)模式下保持極低功耗的監(jiān)聽狀態(tài)等待外部按鍵或者其他喚醒源。如果你的設(shè)備有“長(zhǎng)按關(guān)機(jī)、短按開機(jī)”這種需求PCA9422 是可以做到的但硬件上要注意把按鍵按下產(chǎn)生的電平變化引到 PMIC 的喚醒引腳。這個(gè)模式在我們項(xiàng)目里沒有作為常規(guī)狀態(tài)使用原因是產(chǎn)品還需要定時(shí)上報(bào)功能定時(shí)器喚醒依賴 MCU 內(nèi)部 RTC 保持運(yùn)行RTC 必須一直供電。深度關(guān)機(jī)模式切斷了主供電RTC 就停了定時(shí)上報(bào)就做不了。所以最終只在系統(tǒng)異常復(fù)位無(wú)法恢復(fù)的極端情況下用深度關(guān)機(jī)作為兜底恢復(fù)手段。5. 硬件設(shè)計(jì)的細(xì)節(jié)尤其是布線和元件選型5.1 外圍電路PMIC 周邊沒幾個(gè)元件但每個(gè)都有講究PCA9422 的外圍電路確實(shí)簡(jiǎn)潔但這不代表可以隨便畫。Buck 通道的電感是核心元件直接影響輸出紋波和效率。電感值的選擇要參考 PCA9422 的數(shù)據(jù)手冊(cè)推薦范圍我這邊用的是 2.2uH 的功率電感額定電流留有 30% 以上的裕量。電感飽和電流如果不夠在大負(fù)載瞬態(tài)時(shí)電感值會(huì)跌落輸出紋波惡化。輸入輸出電容的選擇也值得注意。輸入側(cè)至少要有一個(gè) 10uF 的陶瓷電容來(lái)吸收電池線的阻抗突變輸出側(cè)的電容則要與電感和控制環(huán)路配合。一般 PMIC 的數(shù)據(jù)手冊(cè)都會(huì)給出推薦的輸出電容范圍和 ESR 要求。在這個(gè)項(xiàng)目里我用了 22uF X5R 作為 Buck 輸出電容配合 1uF 的高頻去耦電容。X5R 比 X7R 容量密度大但注意 X5R 在直流偏置下有效容量會(huì)打折所以選型時(shí)盡量按 2 倍余量選。5.2 PCB 布局最容易被低估的低功耗“隱形敵人”PCB 布局上最容易犯的錯(cuò)誤是讓 I2C 走線跨過(guò) Buck 的開關(guān)節(jié)點(diǎn)。PCA9422 的開關(guān)頻率在 1.5MHz 左右這個(gè)頻段的能量很強(qiáng)如果 I2C 走線緊貼電感或開關(guān)節(jié)點(diǎn)通信時(shí)序可能受到干擾表現(xiàn)為間歇性的寄存器讀寫失敗。正確的做法是電感放在 PMIC 附近開關(guān)節(jié)點(diǎn)銅皮面積盡量小輸入電容和輸出電容靠近芯片引腳I2C 走線走在 PCB 另一層并用地平面隔離。實(shí)測(cè)對(duì)比過(guò)兩種布局優(yōu)劣走線下的 I2C 通信錯(cuò)誤率能差一個(gè)數(shù)量級(jí)。另外Power Good 信號(hào)線的濾波要適度。如果 MCU 讀到的 Power Good 出現(xiàn)毛刺不要盲目加 RC 濾波因?yàn)殡娫唇⒑偷涫强焓录?10k100nF 的 RC 后會(huì)有明顯的上升沿延時(shí)可能導(dǎo)致 MCU 誤判時(shí)序。更好的做法是把 Power Good 接到 MCU 的 IO配置為中斷輸入用邊沿觸發(fā)而不是電平觸發(fā)然后在中斷服務(wù)程序里加一個(gè)短延時(shí)再確認(rèn)狀態(tài)這樣既濾掉了窄毛刺又不影響時(shí)序。5.3 實(shí)測(cè)數(shù)據(jù)睡眠電流、效率曲線、紋波表現(xiàn)硬件完成后我做了一輪比較完整的實(shí)測(cè)先把數(shù)字?jǐn)[出來(lái)整機(jī)睡眠電流PMIC 切到 SleepLDO1 關(guān)閉MCU 進(jìn)入 sleep3.5uA 3.7V整機(jī)運(yùn)行電流傳感器開啟無(wú)線模塊待機(jī)8mA 3.7V無(wú)線模塊發(fā)射瞬間峰值電流118mABuck 輸出紋波約 8mVpp 3.3V使用 2.2uH 電感配合 22uF 輸出電容輸入電壓 3.4V 到 4.2V 區(qū)間輸出電壓波動(dòng)小于 15mV這個(gè)紋波數(shù)據(jù)對(duì) MCU 主供電來(lái)說(shuō)非常干凈。對(duì)比之前的 LDO 方案雖然 LDO 紋波也能做到很低但 LDO 在電池電壓較高時(shí)功耗大這個(gè)差距在系統(tǒng)續(xù)航上就有明顯體現(xiàn)了。效率方面我測(cè)了不同負(fù)載下的系統(tǒng)級(jí)效率從電池輸入到 Buck 輸出負(fù)載電流輸入功率輸出功率效率1mA5.2mW4.7mW90.4%10mA38.6mW35.8mW92.7%50mA184.5mW171.2mW92.8%120mA433.2mW401.5mW92.7%對(duì)比之前 LDO 方案在 10mA 負(fù)載下只有 82% 的轉(zhuǎn)換效率PMIC 方案的低負(fù)載效率優(yōu)勢(shì)很明顯這就是睡眠和輕載場(chǎng)景下省電的關(guān)鍵。6. 實(shí)測(cè)踩坑記錄每個(gè)都是真金白銀換來(lái)的經(jīng)驗(yàn)6.1 Buck 輸出紋波超標(biāo)最終查出來(lái)不是元件問(wèn)題而是 Layout 問(wèn)題調(diào)試時(shí)出現(xiàn)過(guò)一次輸出紋波超標(biāo)的問(wèn)題用示波器測(cè)量 Buck 輸出端紋波高達(dá) 40mVpp遠(yuǎn)超預(yù)期。一開始懷疑是電感選型不對(duì)換了 3.3uH 的電感紋波反而更高又換了低 ESR 的電容效果也不明顯。最后用近場(chǎng)探頭沿著 PCB 掃了一遍發(fā)現(xiàn)開關(guān)節(jié)點(diǎn)下方有一大片覆銅區(qū)域和反饋?zhàn)呔€重疊。反饋?zhàn)呔€拾取了開關(guān)節(jié)點(diǎn)的噪聲控制環(huán)路做出了錯(cuò)誤的調(diào)整導(dǎo)致輸出紋波變差。處理辦法是把反饋?zhàn)呔€從頂層改到內(nèi)層并且在反饋電阻的采樣點(diǎn)上下各打了一排過(guò)孔做屏蔽。改版后紋波降到 8mVpp問(wèn)題徹底解決。這類問(wèn)題用示波器在輸出端測(cè)是能測(cè)出來(lái)的但根源在 PCB 布局不是元件本身的問(wèn)題。6.2 I2C 通信偶發(fā)超時(shí)原因是總線電容過(guò)大在一次長(zhǎng)時(shí)間運(yùn)行測(cè)試中I2C 通信偶發(fā)超時(shí)出錯(cuò)率大概是百分之一左右。因?yàn)槌鲥e(cuò)率低一開始懷疑是干擾加了濾波沒用后來(lái)又懷疑時(shí)序問(wèn)題把 I2C 時(shí)鐘從 400kHz 降到 100kHz偶發(fā)超時(shí)依舊出現(xiàn)。最終定位時(shí)發(fā)現(xiàn)I2C 總線上掛了不止一顆芯片總線上拉電阻是 10k。加上 PCA9422、傳感器、還有一片 EEPROM總線的等效電容已經(jīng)超過(guò)了 I2C 規(guī)范建議的最大值導(dǎo)致上升沿變緩偶發(fā)出現(xiàn) SCL 高電平時(shí)間不足從設(shè)備來(lái)不及采樣。處理辦法是把上拉電阻從 10k 改成 4.7k并單獨(dú)給 PCA9422 的 I2C 引腳串了 33Ω 的阻尼電阻抑制振鈴。改完后連續(xù)跑 72 小時(shí)沒有出現(xiàn)一次超時(shí)。6.3 睡眠電流始終下不去罪魁禍?zhǔn)资?LDO 輸出電容沒有完全泄放第一次把電源狀態(tài)切換邏輯寫好之后實(shí)測(cè)睡眠電流是 22uA離 3.5uA 的目標(biāo)差很遠(yuǎn)。我逐個(gè)排查了所有外設(shè)的漏電發(fā)現(xiàn)傳感器電源雖然被 LDO 關(guān)斷了但 LDO 輸出端并聯(lián)的濾波電容還存著電——電容上的殘余電荷通過(guò)傳感器模塊的輸入保護(hù)二極管反向泄漏路徑是LDO 輸出電壓電容殘壓→ 傳感器芯片輸入保護(hù)二極管 → 傳感器地 → 整機(jī)地。解決辦法很簡(jiǎn)單在 LDO 輸出端到地之間加一個(gè)幾百 kΩ 的泄放電阻關(guān)斷后把殘壓盡快泄放掉。這個(gè)電阻平時(shí)會(huì)帶來(lái)微安級(jí)的漏流所以阻值不能太小我用的是 220kΩ實(shí)測(cè)睡眠電流降到 3.5uA。這類細(xì)節(jié)在數(shù)據(jù)手冊(cè)里不會(huì)寫但實(shí)際項(xiàng)目中經(jīng)??ㄈ?。6.4 常見問(wèn)題與排查速查表現(xiàn)象排查方向解決方案整機(jī)睡眠電流偏高LDO 關(guān)斷后輸出殘壓是否形成漏電路徑加泄放電阻檢查外設(shè)輸入保護(hù)二極管PMIC 寄存器讀寫偶發(fā)失敗I2C 總線電容、走線干擾調(diào)整上拉電阻遠(yuǎn)離開關(guān)節(jié)點(diǎn)縮短走線Buck 輸出紋波大反饋?zhàn)呔€位置、電感電容匹配反饋?zhàn)呔€內(nèi)層走線調(diào)整輸出電容喚醒后外設(shè)初始化失敗PMIC 輸出穩(wěn)定時(shí)序不足wake 后延時(shí) 2ms確認(rèn) Power Good 再操作外設(shè)電池低壓時(shí)系統(tǒng)復(fù)位輸入電壓跌落導(dǎo)致 PMIC 欠壓檢查電池內(nèi)阻和輸入電容容量低溫下電流波動(dòng)大PMIC 參考電壓漂移選擇低溫特性好的電容避免 X5R 在低溫失容量7. 從原型到量產(chǎn)還要補(bǔ)哪些課7.1 電源狀態(tài)測(cè)試要結(jié)合應(yīng)用場(chǎng)景設(shè)計(jì)用例不能只測(cè)空載電源管理方案的驗(yàn)證不能只測(cè)一組靜態(tài)電流數(shù)據(jù)。以這個(gè)采集設(shè)備為例真正有意義的測(cè)試場(chǎng)景是設(shè)備每 5 分鐘完成一次采集和上報(bào)中間 4 分 55 秒處于睡眠狀態(tài)。我要驗(yàn)證的是這個(gè)完整周期內(nèi)的平均電流而不是單獨(dú)測(cè)睡眠電流和運(yùn)行電流。實(shí)測(cè)完整周期平均電流 45uA對(duì)比之前 LDO 方案同場(chǎng)景下的平均電流 210uA續(xù)航提升約 4.6 倍。這個(gè)數(shù)據(jù)才是用戶能感知到的差異比單純的睡眠電流更有說(shuō)服力。7.2 Boot 模式和串口燒錄的電源兼容性量產(chǎn)環(huán)節(jié)有一個(gè)容易忽略的坑R7FA2A2AD3CFP 進(jìn)入 Boot 模式燒錄程序時(shí)對(duì)供電電流的需求可能比正常運(yùn)行模式更高尤其是通過(guò) USB 轉(zhuǎn)串口供電時(shí)電壓跌落風(fēng)險(xiǎn)更大。PMIC 方案下燒錄時(shí) MCU 處于運(yùn)行模式PMIC 正常工作如果燒錄器供電能力不足可能會(huì)導(dǎo)致 PMIC 輸入欠壓芯片反復(fù)復(fù)位燒錄一直失敗。解決辦法是在測(cè)試治具的 USB 供電線上并聯(lián)大容量電容比如 470uF 電解電容吸收瞬間電流沖擊。另外在配套的燒錄軟件里注意是否需要先將 PMIC 強(qiáng)制切換到全功率模式避免喚醒時(shí)刻和外設(shè)初始化疊加造成瞬時(shí)電流超限。7.3 生命周期末端的電源管理策略還有一個(gè)平時(shí)很少被討論但實(shí)際要面對(duì)的問(wèn)題電池接近放空時(shí)PMIC 的輸入電壓會(huì)降到工作閾值邊緣此時(shí)如果 MCU 還頻繁進(jìn)行采集上報(bào)可能在 PMIC 處于欠壓臨界狀態(tài)的瞬間觸發(fā)復(fù)位。為了處理這個(gè)場(chǎng)景我在 MCU 里加了一路 ADC 采樣監(jiān)測(cè)電池電壓。當(dāng)電壓低于某個(gè)預(yù)設(shè)值時(shí)主動(dòng)把上報(bào)周期拉長(zhǎng)同時(shí)關(guān)閉不關(guān)鍵的傳感器讓剩余電量只能維持最基本的 RTC 運(yùn)行。這個(gè)策略在長(zhǎng)續(xù)航產(chǎn)品里非常實(shí)用。8. 電源管理方案的最終體會(huì)這套 PCA9422 R7FA2A2AD3CFP 方案做完我比較大的感受是低功耗設(shè)計(jì)從來(lái)不是某一顆芯片單獨(dú)決定的而是芯片選型、電路設(shè)計(jì)、軟件狀態(tài)機(jī)、測(cè)試方法四個(gè)環(huán)節(jié)彼此咬合。PMIC 把供電這個(gè)底層問(wèn)題管住了MCU 就能把精力全部放在業(yè)務(wù)邏輯上不用再為了省電去做各種繞彎子的外設(shè)電源開關(guān)方案。最后分享一個(gè)經(jīng)驗(yàn)開發(fā)階段一定要在 PCA9422 的寄存器配置上留出軟件調(diào)試入口不要把配置寫死在初始化代碼里。實(shí)際調(diào)試中我經(jīng)常需要臨時(shí)修改 Buck 輸出電壓或者模式切換延時(shí)通過(guò)一個(gè)簡(jiǎn)單的串口命令行工具就能在線改寫寄存器比每次燒錄固件效率高很多。這個(gè)習(xí)慣幫我省下大量時(shí)間也順帶驗(yàn)證了幾個(gè)不同電壓檔位下的系統(tǒng)穩(wěn)定性。這個(gè)方案的擴(kuò)展空間也是現(xiàn)成的后續(xù)如果要加太陽(yáng)能充電或者無(wú)線充電PCA9422 的輸入域可以直接復(fù)用不用改電源架構(gòu)只需要在充電管理和 MCU 策略上做調(diào)整。對(duì)想要做低功耗產(chǎn)品的團(tuán)隊(duì)來(lái)說(shuō)這套架構(gòu)值得作為基礎(chǔ)平臺(tái)復(fù)用。