備電源管理方案)
1. 項(xiàng)目緣起與整體設(shè)計(jì)思路1.1 為什么偏偏選中這兩顆芯片先交代一下這個(gè)項(xiàng)目的來(lái)龍去脈。我手上有一個(gè)便攜式數(shù)據(jù)采集終端的活兒設(shè)備需要鋰電池供電、支持USB充電、還要給主控、傳感器、顯示屏、無(wú)線模塊分別供不同的電壓。早期版本我用的是分立方案一顆充電IC加一顆DC-DC再加兩三顆LDO板子上電源部分占了將近三分之一的面積BOM表拉出來(lái)十幾行調(diào)試的時(shí)候光是上電時(shí)序就折騰了我一個(gè)禮拜。后來(lái)痛定思痛決定換成集成度更高的PMIC方案最終鎖定了PCA9422這顆電源管理芯片主控則沿用我一直很順手的PIC18F86J15。PCA9422是一顆面向低功耗便攜設(shè)備的電源管理IC內(nèi)部集成了線性充電器、多路可配置的降壓和線性穩(wěn)壓輸出還帶I2C接口可以動(dòng)態(tài)調(diào)壓和讀取狀態(tài)。選它的核心理由有三條第一集成度高一顆芯片把充電、系統(tǒng)供電、多路外設(shè)供電全包了板子面積直接砍掉一半第二I2C可編程電壓和上電時(shí)序都能通過(guò)寄存器配置不用改硬件就能適配不同批次的物料第三靜態(tài)功耗低對(duì)電池續(xù)航敏感的設(shè)備來(lái)說(shuō)這點(diǎn)很關(guān)鍵。PIC18F86J15則是一顆經(jīng)典的8位MCU128KB Flash、近4KB RAM外設(shè)資源豐富I2C、SPI、UART、ADC一應(yīng)俱全工作電壓范圍寬工業(yè)級(jí)溫度范圍也扛得住。它和PCA9422搭配的好處是MCU本身就能通過(guò)I2C直接管理電源芯片不需要額外的橋接芯片整個(gè)電源管理邏輯全部在固件里實(shí)現(xiàn)靈活度極高。提示選PMIC的時(shí)候一定要先確認(rèn)它的輸出電壓檔位和你的負(fù)載需求是否匹配。PCA9422的輸出檔位是固定的幾檔可選不是任意電壓都能出選型階段就要把每一路負(fù)載的電壓需求列清楚。1.2 整體電源架構(gòu)是怎么搭的這個(gè)項(xiàng)目的電源架構(gòu)可以分成三層來(lái)理解。第一層是能量輸入層包括USB 5V輸入和鋰電池PCA9422內(nèi)部集成了充電管理負(fù)責(zé)把USB的電充進(jìn)電池同時(shí)在有USB的時(shí)候優(yōu)先用USB供電。第二層是電壓轉(zhuǎn)換層PCA9422把電池電壓典型3.0V到4.2V轉(zhuǎn)換成系統(tǒng)需要的各路電壓包括一路給MCU的3.3V、一路給傳感器的1.8V、一路給顯示屏的2.8V等等。第三層是監(jiān)控與控制層PIC18F86J15通過(guò)I2C總線讀取PCA9422的狀態(tài)寄存器獲取電池電壓、充電狀態(tài)、各路輸出是否正常等信息并根據(jù)這些信息做出決策比如低電量時(shí)關(guān)閉顯示屏背光、充滿電后切換充電模式等。這個(gè)架構(gòu)最大的好處是軟硬解耦。硬件上電源部分就是一個(gè)標(biāo)準(zhǔn)模塊軟件上所有電源策略都在MCU固件里改策略不用動(dòng)烙鐵。我后來(lái)給客戶做定制版本的時(shí)候只是改了幾行配置寄存器的值硬件一版沒(méi)動(dòng)就交付了這在分立方案時(shí)代是不可想象的。1.3 設(shè)計(jì)階段踩過(guò)的幾個(gè)坑設(shè)計(jì)初期我犯了一個(gè)典型錯(cuò)誤想當(dāng)然地認(rèn)為PMIC的上電時(shí)序可以完全靠硬件默認(rèn)值搞定。結(jié)果樣機(jī)回來(lái)發(fā)現(xiàn)MCU的3.3V和傳感器的1.8V幾乎同時(shí)上電傳感器在MCU還沒(méi)完成初始化的時(shí)候就輸出了數(shù)據(jù)導(dǎo)致I2C總線被拉低MCU啟動(dòng)失敗。后來(lái)查手冊(cè)才發(fā)現(xiàn)PCA9422的各路輸出上電順序是可以通過(guò)寄存器配置的但默認(rèn)值并不一定適合你的負(fù)載。這件事給我的教訓(xùn)是PMIC的上電時(shí)序必須在上電之前就想清楚不能等出了問(wèn)題再補(bǔ)。另一個(gè)坑是I2C總線的上拉電阻。PCA9422的I2C接口和MCU的I2C接口電平標(biāo)準(zhǔn)一致但總線電容如果太大上拉電阻選小了會(huì)導(dǎo)致上升沿太陡產(chǎn)生振鈴選大了又會(huì)導(dǎo)致上升沿太緩?fù)ㄐ攀?。我最后用示波器?shí)測(cè)了波形把上拉電阻定在4.7k總線速率降到100kHz才穩(wěn)定下來(lái)。這個(gè)后面在實(shí)操部分會(huì)詳細(xì)講。2. 核心細(xì)節(jié)解析與實(shí)操要點(diǎn)2.1 PCA9422的寄存器配置邏輯PCA9422的寄存器大致可以分成幾類(lèi)充電控制寄存器、輸出電壓配置寄存器、上電時(shí)序寄存器、狀態(tài)寄存器、中斷寄存器。每一類(lèi)都有它自己的配置邏輯不能混著來(lái)。充電控制寄存器主要管充電電流、充電截止電壓、充電使能這些。這里有個(gè)細(xì)節(jié)充電電流不是隨便設(shè)的要根據(jù)電池容量來(lái)算。一般鋰電池的充電電流建議在0.5C到1C之間比如1000mAh的電池充電電流設(shè)在500mA到1000mA之間比較合適。設(shè)太大了電池發(fā)熱嚴(yán)重壽命縮短設(shè)太小了充電時(shí)間太長(zhǎng)用戶體驗(yàn)差。PCA9422的充電電流是分檔可調(diào)的具體檔位要看手冊(cè)我一般選中間檔兼顧速度和發(fā)熱。輸出電壓配置寄存器管各路輸出的電壓值。這里要注意的是不是所有輸出都能獨(dú)立調(diào)壓有些是固定檔位有些是跟主輸出聯(lián)動(dòng)的。配置之前一定要把每一路負(fù)載的電壓范圍和最大電流列成表格然后對(duì)照手冊(cè)的檔位表逐一匹配。我見(jiàn)過(guò)有人把1.8V的傳感器接到3.3V輸出上上電就冒煙了這種低級(jí)錯(cuò)誤其實(shí)在配置階段就能避免。上電時(shí)序寄存器是我認(rèn)為最容易被忽視但最重要的部分。它決定了各路輸出誰(shuí)先誰(shuí)后、間隔多久。一般的規(guī)則是先給MCU供電等MCU穩(wěn)定后再給外設(shè)供電如果有模擬電路模擬部分要最后上電避免數(shù)字噪聲干擾。PCA9422支持給每路輸出配置獨(dú)立的啟動(dòng)延遲這個(gè)功能一定要用起來(lái)。2.2 PIC18F86J15的I2C驅(qū)動(dòng)要點(diǎn)PIC18F86J15的I2C外設(shè)叫MSSP模塊用起來(lái)不算復(fù)雜但有幾個(gè)坑要注意。首先是時(shí)鐘配置I2C的時(shí)鐘頻率由SSPADD寄存器決定計(jì)算公式是SSPADD (Fosc / (4 * Fscl)) - 1。假設(shè)MCU跑16MHz想要100kHz的I2C速率SSPADD就是(16M / (4 * 100k)) - 1 39。這個(gè)值算錯(cuò)了通信肯定失敗而且失敗的時(shí)候不一定報(bào)錯(cuò)可能只是數(shù)據(jù)錯(cuò)亂很難查。其次是中斷處理。I2C通信如果用電平中斷在從設(shè)備拉低時(shí)鐘的時(shí)候容易反復(fù)進(jìn)中斷我一般用邊沿觸發(fā)或者干脆用輪詢方式。輪詢雖然效率低一點(diǎn)但在這個(gè)項(xiàng)目里I2C通信不是高頻操作輪詢完全夠用而且邏輯簡(jiǎn)單不容易出bug。還有一個(gè)細(xì)節(jié)是PCA9422的I2C地址。它的地址不是固定的有幾位是可以通過(guò)硬件引腳配置的這意味著同一塊板子上可以掛多顆PCA9422。如果你的板子上只有一顆地址引腳接地或接VCC都行但一定要在代碼里寫(xiě)清楚不然換一批板子地址變了就抓瞎了。2.3 上電時(shí)序的配置實(shí)例我拿實(shí)際項(xiàng)目里的配置舉個(gè)例子。這個(gè)設(shè)備有三路主要負(fù)載MCU3.3V、傳感器1.8V、顯示屏2.8V。我的上電順序是MCU先上電延遲10ms后傳感器上電再延遲20ms后顯示屏上電。為什么是這個(gè)順序因?yàn)镸CU要先完成初始化才能去配置傳感器傳感器穩(wěn)定輸出后MCU才能去讀數(shù)據(jù)顯示屏最后上電是因?yàn)樗鼏?dòng)電流大放在最后可以避免和其他負(fù)載搶電流導(dǎo)致電壓跌落。在PCA9422里這個(gè)時(shí)序是通過(guò)給每路輸出配置不同的啟動(dòng)延遲來(lái)實(shí)現(xiàn)的。具體寄存器地址和位定義這里不展開(kāi)但配置的邏輯是先使能MCU那一路設(shè)置延遲為0再使能傳感器那一路設(shè)置延遲為10ms對(duì)應(yīng)的檔位最后使能顯示屏那一路設(shè)置延遲為30ms對(duì)應(yīng)的檔位。配置完之后一定要實(shí)測(cè)波形用示波器同時(shí)抓三路輸出的上升沿確認(rèn)順序和間隔符合預(yù)期。注意上電時(shí)序配置完之后建議在固件里加一個(gè)自檢邏輯讀取PCA9422的狀態(tài)寄存器確認(rèn)各路輸出都正常如果有異常就通過(guò)串口或LED報(bào)錯(cuò)。這個(gè)自檢邏輯在批量生產(chǎn)的時(shí)候能幫你篩掉不少硬件不良品。2.4 低功耗模式的實(shí)現(xiàn)細(xì)節(jié)這個(gè)項(xiàng)目對(duì)功耗有要求待機(jī)電流要控制在100微安以內(nèi)。PCA9422支持多種低功耗模式PIC18F86J15也有休眠模式兩者要配合使用。我的做法是系統(tǒng)空閑時(shí)MCU先通過(guò)I2C把不需要的外設(shè)輸出關(guān)掉然后自己進(jìn)入休眠PCA9422在檢測(cè)到I2C總線空閑一段時(shí)間后自動(dòng)進(jìn)入低功耗模式只保留MCU那一路輸出的待機(jī)供電。這里有個(gè)關(guān)鍵點(diǎn)MCU休眠后怎么喚醒我用的是PCA9422的中斷輸出引腳把它接到MCU的外部中斷引腳上。當(dāng)電池電壓低于閾值、或者有USB插入、或者有按鍵按下的時(shí)候PCA9422產(chǎn)生中斷MCU被喚醒然后通過(guò)I2C讀取狀態(tài)寄存器判斷喚醒源再?zèng)Q定下一步動(dòng)作。這個(gè)機(jī)制比MCU定時(shí)輪詢要省電得多因?yàn)镸CU大部分時(shí)間都在休眠只有事件發(fā)生時(shí)才醒來(lái)。實(shí)測(cè)下來(lái)這套低功耗機(jī)制把待機(jī)電流從原來(lái)的2mA降到了80微安左右效果非常明顯。但調(diào)試過(guò)程中也踩了坑一開(kāi)始中斷引腳沒(méi)有配置上拉導(dǎo)致誤觸發(fā)頻繁MCU反復(fù)被喚醒功耗反而更高了。后來(lái)加了外部上拉電阻并在固件里加了中斷去抖邏輯才穩(wěn)定下來(lái)。3. 實(shí)操過(guò)程與核心環(huán)節(jié)實(shí)現(xiàn)3.1 硬件設(shè)計(jì)與焊接要點(diǎn)PCB布局方面PCA9422的外圍元件不多但有幾個(gè)地方不能馬虎。輸入電容和輸出電容要盡量靠近芯片引腳走線要短而粗減少寄生電感。電感的選擇要根據(jù)輸出電流和開(kāi)關(guān)頻率來(lái)定我一般選4.7微亨到10微亨之間的屏蔽電感飽和電流要留足余量至少是最大輸出電流的1.5倍。I2C總線的走線要等長(zhǎng)遠(yuǎn)離電感和開(kāi)關(guān)節(jié)點(diǎn)避免噪聲耦合。焊接的時(shí)候PCA9422一般是QFN封裝底部有散熱焊盤(pán)這個(gè)焊盤(pán)必須焊好不然芯片散熱不行大電流輸出的時(shí)候會(huì)過(guò)熱保護(hù)。我用的方法是先在PCB焊盤(pán)上涂一層薄錫用熱風(fēng)槍把芯片吹上去再用烙鐵補(bǔ)焊四周引腳。焊完之后用萬(wàn)用表測(cè)一下各引腳對(duì)地阻抗確認(rèn)沒(méi)有短路再上電。PIC18F86J15是TQFP封裝引腳比較密焊接的時(shí)候容易連錫。我的習(xí)慣是用拖焊法先固定對(duì)角兩個(gè)引腳然后加足量焊錫用烙鐵快速拖過(guò)所有引腳最后用吸錫帶清理多余的錫。焊完用放大鏡檢查一遍確認(rèn)沒(méi)有虛焊和連錫。3.2 固件框架與關(guān)鍵代碼固件我分成三個(gè)模塊I2C驅(qū)動(dòng)模塊、PCA9422配置模塊、電源管理策略模塊。I2C驅(qū)動(dòng)模塊負(fù)責(zé)底層的讀寫(xiě)操作PCA9422配置模塊封裝了所有寄存器的讀寫(xiě)函數(shù)電源管理策略模塊則實(shí)現(xiàn)具體的業(yè)務(wù)邏輯。I2C寫(xiě)一個(gè)寄存器的函數(shù)大概長(zhǎng)這樣unsigned char PCA9422_WriteReg(unsigned char reg, unsigned char val) { unsigned char ret; I2C_Start(); ret I2C_WriteByte(PCA9422_ADDR 1); // 寫(xiě)地址 if (ret) { I2C_Stop(); return 1; } ret I2C_WriteByte(reg); // 寄存器地址 if (ret) { I2C_Stop(); return 1; } ret I2C_WriteByte(val); // 寫(xiě)入的值 if (ret) { I2C_Stop(); return 1; } I2C_Stop(); return 0; }讀寄存器的函數(shù)類(lèi)似只是要先寫(xiě)寄存器地址再重啟總線讀數(shù)據(jù)。這里要注意的是PCA9422的I2C時(shí)序要求比較嚴(yán)格每個(gè)字節(jié)之后從設(shè)備會(huì)拉低時(shí)鐘做應(yīng)答如果MCU沒(méi)有正確釋放時(shí)鐘線通信就會(huì)卡死。我在I2C_WriteByte函數(shù)里加了超時(shí)機(jī)制如果時(shí)鐘線被拉低超過(guò)一定時(shí)間就強(qiáng)制退出并報(bào)錯(cuò)避免死鎖。電源管理策略模塊的核心是一個(gè)狀態(tài)機(jī)根據(jù)電池電壓、充電狀態(tài)、系統(tǒng)負(fù)載情況在不同狀態(tài)之間切換。比如電池電壓低于3.3V時(shí)進(jìn)入低電量模式關(guān)閉顯示屏背光、降低MCU主頻電池電壓低于3.0V時(shí)進(jìn)入保護(hù)模式只保留MCU供電其他全部關(guān)閉。這個(gè)狀態(tài)機(jī)的邏輯不復(fù)雜但狀態(tài)之間的切換條件要仔細(xì)設(shè)計(jì)避免在臨界點(diǎn)反復(fù)切換。3.3 參數(shù)計(jì)算與選型過(guò)程充電電流的計(jì)算前面提過(guò)了這里再補(bǔ)充一下其他參數(shù)的計(jì)算。輸出電壓的配置要根據(jù)負(fù)載的電壓范圍來(lái)定比如傳感器標(biāo)稱1.8V但允許范圍是1.7V到1.9V那PCA9422的輸出檔位里選最接近1.8V的那一檔就行。如果負(fù)載對(duì)電壓精度要求高就要選線性穩(wěn)壓輸出而不是降壓輸出因?yàn)榫€性穩(wěn)壓的紋波更小。電感的選擇計(jì)算稍微復(fù)雜一點(diǎn)。假設(shè)降壓輸出的開(kāi)關(guān)頻率是2MHz輸入電壓4.2V輸出電壓3.3V最大輸出電流500mA那么電感值可以用公式L (Vin - Vout) * Vout / (Vin * fsw * ΔIL)來(lái)估算其中ΔIL是電感紋波電流一般取輸出電流的30%左右。代入數(shù)值L (4.2 - 3.3) * 3.3 / (4.2 * 2M * 0.15) ≈ 2.36微亨。實(shí)際選型的時(shí)候我會(huì)選4.7微亨留足余量因?yàn)殡姼兄荡笠稽c(diǎn)紋波小一點(diǎn)代價(jià)是瞬態(tài)響應(yīng)慢一點(diǎn)對(duì)這個(gè)項(xiàng)目來(lái)說(shuō)可以接受。輸出電容的選擇主要看紋波要求。一般降壓輸出的輸出電容在10微法到22微法之間如果紋波要求嚴(yán)格就加大到47微法。我一般用兩個(gè)10微法的陶瓷電容并聯(lián)既保證了容量又降低了ESR。3.4 實(shí)測(cè)波形與調(diào)試記錄樣機(jī)回來(lái)之后我第一件事是上電測(cè)各路輸出的波形。用示波器抓MCU那一路3.3V的上升沿確認(rèn)從0V到3.3V的時(shí)間在1ms以內(nèi)沒(méi)有過(guò)沖和振鈴。然后抓傳感器那一路1.8V確認(rèn)它在MCU上電后10ms才啟動(dòng)。最后抓顯示屏那一路2.8V確認(rèn)它在傳感器上電后20ms才啟動(dòng)。三路都符合預(yù)期之后才開(kāi)始跑固件。固件跑起來(lái)之后我通過(guò)串口打印PCA9422的狀態(tài)寄存器確認(rèn)電池電壓、充電狀態(tài)、各路輸出的使能狀態(tài)都正確。然后模擬各種場(chǎng)景拔掉USB看是否切換到電池供電、電池電壓降到閾值看是否進(jìn)入低電量模式、插入U(xiǎn)SB看是否開(kāi)始充電。每個(gè)場(chǎng)景都反復(fù)測(cè)試了多次確認(rèn)邏輯穩(wěn)定。調(diào)試過(guò)程中遇到一個(gè)有意思的問(wèn)題電池電壓在3.3V附近的時(shí)候系統(tǒng)會(huì)在正常模式和低電量模式之間反復(fù)切換因?yàn)殡姵仉妷涸谪?fù)載變化時(shí)會(huì)波動(dòng)導(dǎo)致ADC讀數(shù)在閾值附近跳動(dòng)。解決辦法是加了一個(gè)遲滯區(qū)間比如低于3.25V才進(jìn)入低電量模式高于3.35V才退出這樣就不會(huì)反復(fù)切換了。這個(gè)技巧在電池供電的設(shè)備里非常實(shí)用建議大家都加上。4. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄4.1 I2C通信失敗怎么查I2C通信失敗是這個(gè)項(xiàng)目里最常見(jiàn)的問(wèn)題表現(xiàn)是MCU讀不到PCA9422的寄存器或者讀到的數(shù)據(jù)全是0xFF。排查思路我總結(jié)了一個(gè)順序先查硬件再查時(shí)序最后查地址。硬件方面先用萬(wàn)用表測(cè)SDA和SCL對(duì)地阻抗確認(rèn)沒(méi)有短路再測(cè)上拉電阻是否焊接、阻值是否正確然后用示波器看SDA和SCL的靜態(tài)電平正常應(yīng)該是高電平如果被拉低說(shuō)明有設(shè)備在占用總線或者有短路。時(shí)序方面用示波器抓通信波形看時(shí)鐘頻率是否正常、數(shù)據(jù)是否在時(shí)鐘高電平期間穩(wěn)定、應(yīng)答位是否正確。如果時(shí)鐘頻率不對(duì)檢查SSPADD寄存器的值如果數(shù)據(jù)不穩(wěn)定檢查上拉電阻和總線電容。地址方面確認(rèn)代碼里的從設(shè)備地址和硬件引腳配置是否一致。PCA9422的地址有幾位是硬件可配的如果引腳接錯(cuò)了地址就錯(cuò)了通信自然失敗。4.2 輸出電壓不對(duì)怎么排查輸出電壓不對(duì)一般有三種情況電壓偏高、電壓偏低、電壓跳動(dòng)。電壓偏高通常是反饋電阻的問(wèn)題檢查反饋引腳的分壓電阻是否焊接正確、阻值是否匹配。電壓偏低可能是負(fù)載太重導(dǎo)致跌落到限流模式檢查負(fù)載電流是否超過(guò)PMIC的最大輸出能力。電壓跳動(dòng)可能是輸入電容不足或者電感選型不當(dāng)加大輸入電容或者換更大感值的電感試試。還有一種情況是配置寄存器寫(xiě)錯(cuò)了比如把1.8V的輸出配成了3.3V。這種問(wèn)題在調(diào)試階段容易發(fā)現(xiàn)但在批量生產(chǎn)的時(shí)候如果固件版本搞錯(cuò)了就很危險(xiǎn)。我的做法是在固件里加一個(gè)版本校驗(yàn)每次上電讀取PCA9422的配置寄存器和預(yù)期值對(duì)比不一致就報(bào)錯(cuò)并進(jìn)入安全模式。4.3 充電異常怎么處理充電異常的表現(xiàn)包括插上USB不充電、充電電流不對(duì)、充電指示燈不亮。先查USB輸入電壓是否正常PCA9422的USB輸入一般要求4.5V到5.5V低于4.5V可能不啟動(dòng)充電。再查充電使能寄存器是否配置正確有些PMIC默認(rèn)充電是關(guān)閉的需要固件里顯式打開(kāi)。充電電流不對(duì)的話檢查充電電流配置寄存器的值以及電池溫度檢測(cè)引腳是否接好。很多PMIC都有電池溫度保護(hù)如果溫度檢測(cè)引腳懸空或者接錯(cuò)PMIC會(huì)認(rèn)為電池溫度異常而降低充電電流甚至停止充電。這個(gè)坑我踩過(guò)后來(lái)在溫度檢測(cè)引腳上接了一個(gè)10k的NTC電阻到地問(wèn)題就解決了。4.4 常見(jiàn)問(wèn)題速查表問(wèn)題現(xiàn)象可能原因排查方法解決方案I2C讀不到數(shù)據(jù)地址錯(cuò)誤核對(duì)硬件引腳和代碼地址修正地址配置I2C讀不到數(shù)據(jù)上拉電阻缺失測(cè)SDA/SCL靜態(tài)電平補(bǔ)焊上拉電阻輸出電壓偏高反饋電阻錯(cuò)誤測(cè)分壓電阻阻值更換正確阻值輸出電壓偏低負(fù)載過(guò)重測(cè)負(fù)載電流減小負(fù)載或換更大電流檔位充電不啟動(dòng)USB電壓不足測(cè)USB輸入電壓換合格USB電源充電電流小溫度檢測(cè)異常測(cè)NTC電阻接正確NTC待機(jī)功耗高中斷誤觸發(fā)測(cè)中斷引腳波形加上拉和去抖上電時(shí)序不對(duì)延遲配置錯(cuò)誤抓各路輸出波形修正延遲寄存器4.5 幾個(gè)獨(dú)家避坑技巧第一個(gè)技巧PCA9422的配置寄存器建議在固件里做成一個(gè)配置表每一項(xiàng)都有注釋說(shuō)明為什么這么配。我見(jiàn)過(guò)太多項(xiàng)目因?yàn)閾Q了一個(gè)人維護(hù)沒(méi)人知道某個(gè)寄存器為什么設(shè)成那個(gè)值結(jié)果改錯(cuò)了導(dǎo)致批量事故。配置表加上注釋后來(lái)人一看就懂。第二個(gè)技巧上電自檢邏輯一定要有而且要把自檢結(jié)果通過(guò)某種方式暴露出來(lái)比如串口打印或者LED閃爍編碼。批量生產(chǎn)的時(shí)候產(chǎn)線工人不需要懂技術(shù)看LED閃幾下就知道板子有沒(méi)有問(wèn)題效率高很多。第三個(gè)技巧低功耗調(diào)試的時(shí)候不要只看萬(wàn)用表上的平均電流要用示波器看電流波形。有時(shí)候平均電流很低但瞬間有大的電流尖峰這種尖峰可能來(lái)自某個(gè)外設(shè)的周期性喚醒萬(wàn)用表看不出來(lái)示波器一看就清楚了。第四個(gè)技巧I2C總線上如果掛了多個(gè)設(shè)備一定要確認(rèn)每個(gè)設(shè)備的地址不沖突。PCA9422的地址可配但配置引腳在PCB上要留測(cè)試點(diǎn)方便調(diào)試的時(shí)候改地址。我一般會(huì)在地址引腳上留一個(gè)0歐電阻的位置需要改地址的時(shí)候換個(gè)電阻就行不用飛線。5. 項(xiàng)目擴(kuò)展與個(gè)人體會(huì)這套電源管理方案后來(lái)我又用在了兩個(gè)類(lèi)似的項(xiàng)目上一個(gè)是手持式儀器一個(gè)是無(wú)線傳感器節(jié)點(diǎn)。手持式儀器對(duì)功耗要求沒(méi)那么高我把低功耗模式簡(jiǎn)化了只保留了基本的充電管理和上電時(shí)序控制開(kāi)發(fā)周期縮短了一半。無(wú)線傳感器節(jié)點(diǎn)對(duì)功耗要求極高我在原有基礎(chǔ)上增加了動(dòng)態(tài)電壓調(diào)節(jié)MCU根據(jù)任務(wù)負(fù)載實(shí)時(shí)調(diào)整自己的供電電壓進(jìn)一步降低了功耗。PCA9422和PIC18F86J15這個(gè)組合給我的最大感受是夠用且靈活。PCA9422不是那種功能最全的PMIC但它把便攜設(shè)備最需要的功能都集成了而且I2C可編程的特性讓它在不同項(xiàng)目之間復(fù)用非常方便。PIC18F86J15雖然是一顆老芯片但它的I2C外設(shè)穩(wěn)定可靠固件開(kāi)發(fā)工具鏈成熟對(duì)于不需要復(fù)雜算法的電源管理任務(wù)來(lái)說(shuō)完全夠用。如果你也在做類(lèi)似的便攜設(shè)備電源管理我的建議是先把電源架構(gòu)想清楚把每一路負(fù)載的電壓、電流、上電時(shí)序需求列成表格然后再去選PMIC。選型的時(shí)候不要只看參數(shù)要看它能不能滿足你的時(shí)序配置需求以及I2C接口是否好用。硬件設(shè)計(jì)階段把電容、電感、上拉電阻這些細(xì)節(jié)做到位固件調(diào)試階段就會(huì)省很多事。最后上電自檢和狀態(tài)監(jiān)控邏輯一定要加這是批量生產(chǎn)時(shí)的保命符。