同的嵌入式電源路徑保護設(shè)計實戰(zhàn))
嵌入式和工業(yè)設(shè)備上的電源路徑保護是我這幾年做硬件設(shè)計最不敢省的一環(huán)。TPS259483AYWPR 和 MKV44F128VLH16 這個組合我之前在好幾版工業(yè)控制器里驗證過一顆 eFuse 負責(zé)硬件級快速切斷一顆 Kinetis MCU 負責(zé)狀態(tài)監(jiān)測、故障記錄和恢復(fù)策略兩者配合起來電源鏈路的可靠性比過去堆二極管、保險絲、比較器的方式高了一個量級。這篇文章會把整個設(shè)計思路、參數(shù)計算方法、固件狀態(tài)機以及調(diào)試時容易踩的坑完整寫出來給正在做嵌入式電源保護或者工業(yè)主板的工程師一個可以照抄的參考。1. 為什么電源路徑會成為嵌入式和工業(yè)設(shè)備的阿喀琉斯之踵1.1 那些年我們踩過的電源失效場景先講講我遇到過的三個真實事故你會發(fā)現(xiàn)它們有個共同點問題都出在“電源進入板卡之后到各個負載之前”這段路徑上。第一類是熱插拔?,F(xiàn)場運維人員帶電拔出 24V 端子連接器彈片在接觸和斷開瞬間產(chǎn)生弧光線路上的感性負載繼電器線圈、電磁閥、電機繞組在電流突變時產(chǎn)生高電壓反沖直接打在板子電源入口。脆一點的 TVS 當場炸掉運氣差的連后級 DC-DC 都帶走。第二類是負載短路。電機驅(qū)動板上的功率 MOS 擊穿后24V 母線被瞬間拉到接近地同一母線上并聯(lián)的其他設(shè)備跟著重啟。你以為是“有一路負載掛了”實際上整臺設(shè)備的供電都崩了。如果前面的 24V 開關(guān)電源進入打嗝模式整個控制柜會有節(jié)奏地斷電上電非常難排查。第三類是錯插電源。工業(yè)現(xiàn)場線號標錯并不罕見有人把 36V 接到了 24V 輸入端或者是電源極性接反。這類問題一旦發(fā)生輕則換保險絲重則燒一片芯片返修成本遠超一顆保護器件本身。1.2 傳統(tǒng)分立保護方案的三大痛點早期我做保護電路用的還是“自恢復(fù)保險絲加 TVS 加 P-MOS 負載開關(guān)”這套組合。能用但不好用。第一個痛點是保護精度差。自恢復(fù)保險絲的熔斷特性受溫度影響非常大同一個額定 3A 的保險絲在 85℃ 環(huán)境下降額可能只有一半。設(shè)計余量只能往大了放放大了之后短路保護又會遲鈍。第二個痛點是響應(yīng)速度跟不上。分立方案里如果要做過流保護通常是“采樣電阻加比較器加 MOSFET 驅(qū)動”的鏈路從檢測到過流到真正關(guān)斷中間隔著比較器延遲、驅(qū)動延遲、MOS 關(guān)斷延遲整體響應(yīng)在微秒到幾十微秒級別。對功率 MOS 的短路瞬態(tài)來說這個速度有時不夠快。第三個痛點是 PCB 面積和調(diào)試成本。一套完整的欠壓、過壓、過流、防反接、浪涌保護用分立器件搭下來往往需要十幾顆甚至幾十顆元件每個元件都有公差批量一致性和溫漂都得單獨測。出了問題現(xiàn)場維修人員很難快速定位是具體哪一個電阻分壓漂了。1.3 一顆 eFuse 能覆蓋哪些故障類型后來我改用 eFuse把上述問題壓縮進一顆芯片。以 TPS259483AYWPR 這類器件為例它把功率 FET、電流采樣放大器、比較器、基準電壓源、驅(qū)動電路和定時器集成在一起能同時處理故障類型傳統(tǒng)分立方案覆蓋情況eFuse 方案覆蓋情況過流/短路能覆蓋但速度和精度堪憂硬件級限流響應(yīng)在納秒到微秒級輸入過壓/欠壓需額外搭比較器電路內(nèi)置檢測引腳電阻分壓即可設(shè)置閾值上電浪涌電流需設(shè)計軟啟動電路通過 dVdT 引腳設(shè)置啟動斜率過熱保護幾乎沒有芯片內(nèi)部結(jié)溫檢測超溫自動切斷故障上報需要額外設(shè)計信號電路FLT 開路輸出直接通知 MCU電流遙測需要采樣電阻加 ADC 鏈路IMON 電流鏡輸出一顆電阻轉(zhuǎn)成電壓這里有個很關(guān)鍵的點eFuse 的保護是“自治”的。就算 MCU 死機、代碼跑飛、看門狗超時eFuse 依然能獨立完成限流和關(guān)斷動作。電源保護不能依賴軟件這是我在架構(gòu)設(shè)計里始終堅持的一條底線。2. 認識 TPS259483AYWPR把保護邏輯從幾十顆元件縮成一顆 QFN2.1 TPS259483AYWPR 的核心工作方式TPS259483AYWPR 的基本結(jié)構(gòu)可以理解為“一個帶智能控制的大功率開關(guān)”。正常情況下內(nèi)部功率 FET 完全導(dǎo)通輸入電源從 VIN 傳到 VOUT導(dǎo)通損耗由 FET 的 Rds(on) 決定。故障情況下內(nèi)部比較器檢測到流過 FET 的電流超過設(shè)定值驅(qū)動電路會拉低柵極把 FET 壓入恒流區(qū)或者直接關(guān)閉。和普通 MOSFET 負載開關(guān)最大的區(qū)別在于這顆器件內(nèi)部有一套完整的“檢測—比較—響應(yīng)”鏈路所有保護閾值都不是靠外部比較器拼出來的而是通過少量電阻和電容配置。這樣不僅一致性更好而且器件本身對瞬態(tài)事件的響應(yīng)速度遠快于 MCU 軟件干預(yù)。2.2 關(guān)鍵引腳與信號流實際操作中我重點關(guān)注這幾個信號EN使能引腳MCU 的 GPIO 通過這個引腳控制電源通斷。低電平時強制關(guān)斷高電平時允許導(dǎo)通。FLT故障輸出開漏結(jié)構(gòu)。任何故障發(fā)生都會把 FLT 拉低MCU 通過這個引腳接收硬件級的中斷通知。IMON電流監(jiān)測輸出輸出電流與負載電流成比例通過外接電阻轉(zhuǎn)成電壓后送給 MCU 的 ADC實現(xiàn)實時電流測量。RLIM限流設(shè)置引腳外接電阻決定限流閾值。CdVdT啟動斜率控制引腳外接電容決定輸出端電壓上升速度。UVLO/OVLO輸入欠壓、過壓檢測引腳通過電阻分壓網(wǎng)絡(luò)設(shè)置閾值。這組引腳的配合很直接RLIM 決定“多大電流算過流”CdVdT 決定“上電時電壓爬升多快”UVLO/OVLO 決定“輸入電壓在什么范圍內(nèi)允許工作”FLT 和 IMON 則把保護和監(jiān)控信息傳給 MCU。2.3 三種工作模式怎么選鎖存、自動重試與 ABMTPS25948 系列支持不同的故障恢復(fù)模式我自己的經(jīng)驗是先把需求問清楚“故障之后系統(tǒng)到底是該徹底停下來還是該自動恢復(fù)”工作模式故障行為適用場景鎖存模式故障后一直保持關(guān)斷直到 EN 再次觸發(fā)或輸入重新上電短路、錯插電源等嚴重故障需要人為介入自動重試/ABM故障后等待設(shè)定時間自動嘗試重新導(dǎo)通無人值守設(shè)備瞬時過流可自恢復(fù)定時打嗝故障后進入周期性導(dǎo)通/斷開循環(huán)上電時容性負載較大的場合逐步充飽電容我通常在短路這類硬故障上選鎖存模式因為反復(fù)自動重試會讓故障點的熱量持續(xù)積累連接器觸點、PCB 銅皮都可能被燒壞。在浪涌電流過大這類軟故障上才考慮自動重試比如負載電容很大第一次啟動可能觸發(fā)限流等電容充到接近工作電壓后重啟就能正常進入運行狀態(tài)。3. MKV44F128VLH16 在電源鏈路中的角色別把 MCU 當保險絲用3.1 為什么 MCU 要參與電源路徑管理很多人會問eFuse 都做了硬件保護了還要 MCU 干什么我的答案是eFuse 負責(zé)“快”MCU 負責(zé)“聰明”。硬件保護能在微秒級切斷但它不能告訴你故障發(fā)生在一天中的哪個時間點、故障前的電流趨勢是什么、這個故障是第一次出現(xiàn)還是反復(fù)出現(xiàn)。而這些信息對工業(yè)設(shè)備來說恰恰最重要。舉兩個例子。一臺設(shè)備在凌晨三點發(fā)生了一次過流關(guān)斷現(xiàn)場無人在意第二天設(shè)備又正常工作了。如果只看硬件保護這只是“一次瞬時抖動”但如果結(jié)合 MCU 的故障日志和電流趨勢你可能會發(fā)現(xiàn)是某個執(zhí)行器的電流在逐步上升說明機械部件已經(jīng)出現(xiàn)卡滯再過兩周就會徹底堵轉(zhuǎn)。這種趨勢預(yù)測只有 MCU 參與才能實現(xiàn)。3.2 KV44F128VLH16 的哪些外設(shè)正好用得上M K V44F128VLH16 是 NXP 的 Kinetis KV44 系列Cortex-M4F 內(nèi)核、168MHz 主頻、128KB Flash。選它做電源管理的核心不是因為算力強而是因為它的模擬和定時外設(shè)配置非常適合這類任務(wù)。12 位 ADC 加可編程增益放大器PGAIMON 引腳輸出的電流鏡信號通常比較小經(jīng)過 PGA 放大后再進 ADC能明顯提高小電流段的檢測分辨率。我試過直接采樣和經(jīng) PGA 采樣兩種方式后者在 100mA 以下負載時的讀數(shù)穩(wěn)定性好很多。模擬比較器可以在 MCU 內(nèi)部設(shè)置一個二級電流閾值電流超過設(shè)定值但還沒觸發(fā) eFuse 限流時先產(chǎn)生一個高級別中斷讓系統(tǒng)提前進入告警狀態(tài)。這相當于在硬件保護之外加了一道“預(yù)警防線”。定時器和 PWM用來做周期性采樣。比如每 10ms 觸發(fā)一次 ADC 轉(zhuǎn)換統(tǒng)計平均電流和峰值電流形成電源鏈路的運行畫像。UART/SPI/I2C把故障碼、電流數(shù)據(jù)、上電次數(shù)發(fā)給觸摸屏或者上位機方便現(xiàn)場運維人員定位問題。3.3 系統(tǒng)級信號鏈設(shè)計整個電源路徑保護系統(tǒng)的信號鏈是這樣的電源連接器進線先經(jīng)過 EMI 濾波和 TVS 瞬態(tài)吸收然后進 TPS259483AYWPR 的輸入端輸出端接后級負載電容和 DC-DC 模塊。MCU 側(cè)通過 GPIO 控制 eFuse 的 EN通過外部中斷引腳接收 FLT 故障信號通過 ADC 采樣 IMON 電流反饋同時再用一個電壓分壓采樣 VOUT 輸出電壓。這套設(shè)計最大的好處是“控制通道和故障通道分離”。FLT 是硬件中斷不經(jīng)過任何軟件協(xié)議棧即使 MCU 正在執(zhí)行其他密集任務(wù)故障也能在第一時間得到響應(yīng)并記錄下來。而 IMON 的電流數(shù)據(jù)是慢速遙測通道用 100Hz 到 1kHz 的采樣率就夠了不需要多高的實時性。4. 硬件電路設(shè)計實操把參數(shù)算清楚再焊板子4.1 限流電阻與啟動斜率的工程取值限流電阻 RLIM 的取值直接決定系統(tǒng)允許的最大電流。以我在 24V 系統(tǒng)中常用的配置為例負載額定電流 2A短路保護點需要留有一定余量我通常把限流設(shè)在 3A 左右。TPS25948 系列數(shù)據(jù)手冊中給出了 I_LIM 與 RLIM 的換算關(guān)系近似算下來 3A 對應(yīng)電阻值在幾百歐姆到 1k 歐姆之間。選型時應(yīng)該直接查手冊的換算曲線確認而不是憑經(jīng)驗拍腦袋。這里有個容易被忽略的原則限流值不能只按穩(wěn)態(tài)電流設(shè)置。如果后級 DC-DC 模塊的上電浪涌很大限流值設(shè)得太低一上電就觸發(fā)保護。我的做法是先根據(jù)負載穩(wěn)態(tài)功率確定一個下限再根據(jù)啟動電容和啟動斜率確定上限兩者取一個中間值然后實測整板從冷啟動到滿載的完整電流波形。啟動斜率電容 CdVdT 的取值直接影響輸出端電壓的爬升速度。電容越大斜率越緩浪涌電流越小但啟動時間也會變長。對多數(shù)嵌入式主板來說啟動時間控制在 1ms 到 10ms 之間比較合適負載電容在幾十微法以下時可以從 470pF 起步負載有幾百微法電解電容時建議用 2.2nF 到 4.7nF再結(jié)合示波器實際觀察啟動波形。4.2 輸入過壓欠壓閾值的設(shè)置TPS259483AYWPR 的 UVLO/OVLO 引腳通過外部電阻分壓設(shè)置閾值。以 24V 系統(tǒng)為例我一般設(shè)置欠壓閾值 18V、過壓閾值 30V留出足夠的正常波動空間。分壓計算遵循一個通用原則引腳檢測電壓等于基準閾值典型值在 1.2V 上下具體以手冊為準時對應(yīng)的輸入電壓就是保護閾值點。設(shè) VIN 到檢測引腳的上分壓電阻為 R1引腳到地的下分壓電阻為 R2則V_IN_THRESHOLD V_REF × (R1 R2) / R2對于欠壓 18V、V_REF 1.2V可得 R1/R2 14。取 R2 100kΩR1 1.4MΩ用 E96 系列的 1.43MΩ實際欠壓閾值約 18.36V。對于過壓 30V可得 R1/R2 24取 R2 100kΩR1 2.4MΩ。注意分壓電阻選用精度優(yōu)于 1% 的型號并從輸入側(cè)方向接入讓閾值不受后級負載影響。欠壓、過壓閾值分得越近系統(tǒng)對輸入電源的要求越嚴苛。如果前級是開關(guān)電源本身有 5% 到 10% 的紋波波動閾值設(shè)得太窄會頻繁誤動作。這也是為什么我習(xí)慣把欠壓點到 18V 而不是 20V24V 電源在重載下本身就會跌到 20V 左右。4.3 PCB 布局與散熱設(shè)計的幾條硬經(jīng)驗硬件電路能否可靠工作PCB 布局的作用可能比芯片選型還大。我在實際布局中固定了幾條規(guī)則功率路徑盡量短而寬。VIN 到 eFuse 輸入端、eFuse 輸出端到負載端這段過流路徑上的寄生電阻每增加一點都會變成壓降損耗和熱量。建議鋪銅寬度按 10A 級別的載流能力設(shè)計至少加兩到三個過孔陣列來降低阻抗。散熱焊盤要多打過孔。TPS259483AYWPR 這類 QFN 封裝的底部散熱焊盤是整個器件最重要的散熱通道必須在焊盤上均勻布置過孔連接到內(nèi)層的覆銅平面。過孔太少連續(xù)大電流時結(jié)溫會迅速超過熱關(guān)斷閾值導(dǎo)致保護頻繁誤觸發(fā)。輸入輸出電容要緊貼器件引腳。輸入電容負責(zé)吸收輸入端瞬態(tài)能量輸出電容負責(zé)穩(wěn)定輸出兩者都要盡量靠近對應(yīng)引腳走線長度控制在幾毫米以內(nèi)。電容離遠了引腳上的寄生電感會讓高頻動作失效。IMON 和 FLT 走線遠離功率鏈路。這兩個信號都是低速模擬/數(shù)字信號不需要刻意做阻抗控制但必須避開開關(guān)電源的電感區(qū)域和功率 FET 柵極驅(qū)動回路防止噪聲耦合導(dǎo)致 ADC 讀數(shù)抖動。5. 固件側(cè)的狀態(tài)機與故障處理讓保護行為可管理可追溯5.1 故障上報鏈路的兩種接法MCU 和 eFuse 之間的接口我總結(jié)為兩種典型接法。第一種是基礎(chǔ)接法FLT 引腳開漏輸出接一個 3.3kΩ 上拉電阻到 MCU 的 3.3V 電源域再連接到 GPIO 的外部中斷輸入。正常時 FLT 被上拉為高電平故障時被拉低觸發(fā) MCU 下降沿中斷。IMON 引腳通過一個采樣電阻接到地電阻上的電壓進 ADC。第二種是增強接法IMON 進來后先經(jīng)過一級 RC 低通濾波器1kΩ 串聯(lián)、100nF 對地把高頻噪聲濾掉之后再進 ADC。這樣雖然犧牲了一點實時性但測到的電流曲線平滑穩(wěn)定更容易做趨勢判斷。FLT 信號則可以在 GPIO 輸入之前加一個 100Ω 串聯(lián)電阻做保護防止靜電或者意外電壓沖擊損壞 MCU 引腳。5.2 一個帶故障恢復(fù)的電源管理狀態(tài)機固件側(cè)我建議把電源管理做成一個獨立狀態(tài)機而不是散落在各個模塊里。這樣可以保證任何電源事件都有明確的走向和退出條件。狀態(tài)進入條件內(nèi)部行為退出條件OFF系統(tǒng)上電EN 保持低不使能 eFuse忽略 FLT收到開啟命令STARTING置高 EN延時 50ms檢查 VOUTVOUT 達到 90%進入 RUNFLT 有效進入 FAULTRUN啟動成功周期采樣 IMON統(tǒng)計電流電流超閾值進入 PRE_FAULT收到關(guān)斷命令進入 OFFPRE_FAULT電流達到限流閾值的 85%記錄告警不切斷電源電流回落回到 RUN持續(xù)超閾值進入 FAULTFAULTFLT 低電平有效記錄時間戳和故障電流按策略鎖存或重試鎖存模式需命令恢復(fù)重試模式延時后進入 STARTING對應(yīng)的核心偽代碼可以這樣實現(xiàn)typedef enum { EFUSE_OFF, EFUSE_STARTING, EFUSE_RUN, EFUSE_PRE_FAULT, EFUSE_FAULT } efuse_state_t; void efuse_task(void) { switch (efuse_state) { case EFUSE_OFF: if (cmd_enable) { gpio_set(EN_PIN, 1); efuse_state EFUSE_STARTING; } break; case EFUSE_STARTING: if (gpio_read(FLT_PIN) 0) { efuse_state EFUSE_FAULT; } else if (time_after(start_ts, 50)) { efuse_state EFUSE_RUN; } break; case EFUSE_RUN: if (gpio_read(FLT_PIN) 0) { efuse_state EFUSE_FAULT; } break; default: break; } }這里有一個重要的工程細節(jié)FLT 引腳低電平要加抗抖動處理。上電瞬間、負載切換瞬間FLT 可能出現(xiàn)毛刺MCU 如果立刻響應(yīng)容易把瞬時擾動誤判成故障。我的做法是在中斷服務(wù)程序里只標記事件在主循環(huán)中確認低電平持續(xù)超過 10ms 才真正進入故障處理流程。5.3 故障日志工業(yè)現(xiàn)場排障最需要的功能每次觸發(fā)保護后把現(xiàn)場信息記到片內(nèi) Flash 或者外接存儲里。我記錄的最小集合是故障類型、發(fā)生時刻用 MCU 的實時時鐘、故障時刻的輸入電壓、故障時刻的 IMON 采樣值、故障恢復(fù)方式。這組數(shù)據(jù)在售后階段價值極高。以前設(shè)備返廠工程師只能通電實測故障不復(fù)現(xiàn)就只能換板了事?,F(xiàn)在有了故障日志即使能復(fù)現(xiàn)不了也能從日志判斷“是短路還是過壓”、“是首次上電就發(fā)生還是運行十小時后發(fā)生”很多疑難問題幾分鐘就定位了。6. 調(diào)試與驗證讓保護電路真正“該斷就斷、該恢復(fù)就恢復(fù)”6.1 上電順序與基礎(chǔ)測量拿到 PCB 后我的調(diào)試順序是從空載逐步加載每一步都在示波器上確認波形。先把輸入電源調(diào)到 24V輸出端不接任何負載。觀察 VOUT 波形確認啟動斜率是否符合預(yù)期。如果啟動時間短于設(shè)計值說明 CdVdT 電容實際容值偏離設(shè)計值或者 PCB 上有額外寄生電容如果啟動時間過長則需要檢查負載電容是否過大或者 dVdT 引腳的電容是否焊錯。然后接入額定負載用示波器測 VOUT 在負載開關(guān)瞬間的跌落幅度。跌落超過 5% 的話優(yōu)先檢查輸入輸出電容容量和 ESR再看功率路徑上的壓降。6.2 短路、過流、過壓實測時的波形讀法保護電路的驗證不能只看“有沒有動作”還要看動作過程是否干凈。我常做四類測試測試項測試方法關(guān)鍵觀察點過流保護用電子負載 CCC 模式設(shè)置電流為限流閾值的 120%VOUT 是否降到接近 0FLT 是否同步拉低短路保護在輸出端加一個可控短路開關(guān)峰值電流是否被有效鉗位關(guān)斷速度過壓保護緩慢升高輸入電壓到 31VVOUT 在閾值處是否干凈切斷FLT 是否輸出熱插拔輸入側(cè)帶電插拔輸出接容性負載啟動浪涌是否能被斜率控制平滑吸收這里特別提一下短路測試的安全操作不要直接用鱷魚夾去短接輸出端子強烈的電弧會對 PCB 和器件本體造成二次損傷。正確做法是做一個可控短路測試板用大功率 MOSFET 做開關(guān)先合上 MOSFET 再去觸發(fā)導(dǎo)通這樣每次測試的時序都是可控的。6.3 我踩過的三個坑和對應(yīng)的工程習(xí)慣這幾個問題我在不同項目里都真實遇到過寫出來省得大家再走一遍彎路。第一個坑是 FLT 上拉電阻接到了輸入電源域。開漏輸出是有漏洞的FLT 拉低時電流會從電源流入芯片內(nèi)部如果這個電源電壓高于 MCU 的 IO 耐壓時間長了會損壞 MCU 引腳。正確做法是把上拉電阻接到 MCU 所在 3.3V 電源域保證 FLT 高電平永遠在 MCU 的 IO 容忍范圍內(nèi)。第二個坑是 IMON 信號質(zhì)量差。IMON 出來的電流信號非常微弱如果采樣電阻的地回路和功率地重疊功率路徑上的大電流會在采樣電阻兩端產(chǎn)生附加壓降導(dǎo)致 MCU 讀到的電流值偏高且抖動。后來我把模擬采樣點用地線單獨引回 MCU ADC 的地引腳也就是開爾文接法讀數(shù)立刻穩(wěn)定了。第三個坑是把自動重試用在了短路場景。第一次設(shè)計時所有故障都開了自動重試結(jié)果一次故障后設(shè)備在短時間內(nèi)反復(fù)上電斷電故障點的溫度持續(xù)累積最后把端子和 PCB 都熏黃了。從那以后我改成短路和過溫故障一律鎖存只能手動或者通過上位機命令恢復(fù)只有運行時的瞬時過流才允許有限次數(shù)的自動重試。我實際使用中的體會是eFuse 加 MCU 的架構(gòu)真正的價值不在硬件保護本身而在“硬件果斷動作、軟件完整記錄”這套分工。硬件負責(zé)把故障限制在毫秒甚至微秒內(nèi)軟件負責(zé)把故障變成可追溯的數(shù)據(jù)和可執(zhí)行的恢復(fù)策略。后續(xù)如果還想擴展可以把 IMON 的電流數(shù)據(jù)加上趨勢預(yù)測算法在電流緩慢上升的早期就給出檢修預(yù)警這比等到故障再處理要主動得多。