同實現(xiàn)工業(yè)電源過流保護與智能管理設(shè)計)
1. 一塊返修板教我的事保險絲在電源保護里的三個短板上個月我去客戶現(xiàn)場處理一臺返修的電機驅(qū)動板故障現(xiàn)象很奇怪板子沒有冒煙也沒有明顯的燒毀痕跡但 24V 入口之后的 DC-DC 輸出全部沒了。拆開外殼一看入口處的保險絲外殼已經(jīng)裂開后端一個 470μF 電解電容鼓了包??蛻裟沁叺木S修人員說前幾天現(xiàn)場有一次端子誤操作電源線被短暫反接了一下然后設(shè)備就再也起不來了。這件事讓我重新把電源路徑保護這件事從頭想了一遍。過去很多嵌入式設(shè)備和工業(yè)控制板入口處就是一顆保險絲加一個 TVS 管便宜、簡單但它的短板在實際故障面前非常明顯保險絲動作慢。反接、短路瞬間產(chǎn)生的能量往往先讓后端器件損壞保險絲還沒熔斷或者剛?cè)蹟嚯娙菀呀?jīng)鼓包了短路電流大時保險絲熔斷過程還會伴隨燃弧在防爆場合是很危險的事情。不可恢復(fù)。熔斷以后必須人工更換工業(yè)現(xiàn)場換一顆保險絲要停電、開柜、排查原因半個小時算快的。很多小設(shè)備壓根沒人愿意換直接拿銅絲短接等于把保護徹底廢掉。只能保護過流一種故障。過壓、欠壓、浪涌、熱插拔打火、反接普通保險絲一概不管后端電路全靠自己硬扛。所以我在后來的項目里基本把保險絲 TVS升級成電子保險絲eFuse 單片機的方案。這次要分享的組合是 TI 的 TPS259483AYWPR 這顆 eFuse配 Microchip 的 dsPIC33FJ256GP710A 數(shù)字信號控制器。兩臺器件配合起來實現(xiàn)過流限流、過壓/欠壓保護、浪涌控制、故障鎖存與遠(yuǎn)程復(fù)位、以及帶時間戳的故障日志記錄。下面的內(nèi)容不是照抄數(shù)據(jù)手冊而是我在這套方案里實際搭電路、寫固件、調(diào)試和踩坑的完整過程。先給大家一張需求清單后面所有設(shè)計都圍繞它展開保護需求傳統(tǒng)保險絲方案eFuse DSC 方案過流/短路保護熔斷速度慢需更換微秒級限流/關(guān)斷可恢復(fù)過壓/欠壓保護不支持可配置閾值關(guān)斷輸出上電浪涌/容性負(fù)載靠后端電路硬扛軟件控制輸出爬升斜率故障通知無FLT 引腳 MCU 外部中斷故障日志無MCU 記錄故障類型與時間戳遠(yuǎn)程/自動復(fù)位無MCU 控制 EN 引腳復(fù)位這個表里每一項都不是理論推導(dǎo)而是我在實際測試中驗證過的。下面逐個展開。2. TPS259483AYWPR 的防護層次從限流、過壓到軟啟停它到底怎么工作TPS259483AYWPR 是 TI TPS25948x 系列里的一顆電子保險絲這個系列內(nèi)部集成了 MOSFET、電流采樣電路、比較器、驅(qū)動邏輯和故障輸出簡單說就是一顆能感知自己過流、過壓、過溫的智能開關(guān)。它的工作方式和保險絲有本質(zhì)區(qū)別保險絲靠融化斷開電路eFuse 靠 MOSFET 的線性區(qū)或開關(guān)動作限流和切斷電路動作時間可以做到微秒級而且不限次數(shù)。我給這套電源路徑畫了一個很簡單的等式來解釋它的工作電源路徑保護 串聯(lián)開關(guān) 故障感知 決策 執(zhí)行。TPS259483 把這四件事集成在了芯片內(nèi)部外部只需要配幾個電阻電容把閾值設(shè)好就行。2.1 過流保護限流和切斷是兩回事eFuse 的過流保護有兩種模式一種是限流模式一種是切斷模式。限流模式下負(fù)載電流超過設(shè)定值后MOSFET 進入恒流狀態(tài)輸出電流被鉗住電壓會被拉低這時可以做軟的處理如果芯片配置為切斷模式超過閾值后直接關(guān)閉輸出負(fù)載掉電。這里有個細(xì)節(jié)大家要留意很多負(fù)載在啟動瞬間需要很大的電流比如電機啟動、大電容充電如果一超限就直接切斷系統(tǒng)根本起不來。所以實際設(shè)計中我會把 TPS259483 的過流響應(yīng)配置成先限流持續(xù)一段時間后仍超限再關(guān)斷給負(fù)載一個啟動窗口。這個時間窗在數(shù)據(jù)手冊里通常對應(yīng)一個可編程的消隱時間具體引腳或配置方式以手冊為準(zhǔn)。2.2 過壓和欠壓讓輸入電壓待在該待的地方工業(yè)現(xiàn)場最怕的不是電壓慢慢漂而是突然出現(xiàn)一個尖峰或者電源掉到設(shè)各不能正常運行的范圍。TPS259483 的 OVP/UVLO 引腳通過外部電阻分壓監(jiān)測輸入電壓當(dāng)輸入電壓高于過壓閾值時立刻關(guān)閉輸出低于欠壓閾值時關(guān)閉輸出。這個特性配合后端的 TVS能把前級浪涌的破壞降到最低。2.3 軟啟動為容性負(fù)載留一條活路這個是我認(rèn)為 eFuse 比保險絲高級的核心點。上電瞬間如果輸出端掛著大電容不加控制的話充電電流會大得離譜甚至讓前級電源直接進入保護。TPS259483 的軟啟動引腳接一個電容就可以控制輸出電壓的爬升斜率把充電電流限制在預(yù)設(shè)范圍內(nèi)。舉個實際例子假設(shè)輸出端接了 100μF 電容電源電壓 12V如果不做軟啟動上電瞬間理論上就是電壓突變電流取決于回路寄生電阻和電源能力往往是幾十安培。做了軟啟動讓輸出電壓在 2ms 內(nèi)從 0 爬到 12V也就是爬升斜率 6V/ms那么充電電流約為 100μF × 6V/ms 0.6A。這個數(shù)就非常友好了。2.4 故障輸出和使能控制讓外部大腦可以參與決策TPS259483 有 FLT 故障輸出引腳和 EN 使能引腳。FLT 引腳在故障動作時輸出低電平可以直接接到 MCU 的外部中斷引腳EN 引腳控制芯片的開啟和關(guān)斷MCU 可以通過一根 GPIO 線遠(yuǎn)程復(fù)位故障。這兩個引腳是整套方案中硬件保護和軟件管理的接縫下文會詳細(xì)講。3. dsPIC33FJ256GP710A 真正在做的是決策采樣、判斷、記錄與恢復(fù)很多人看到這套方案會問eFuse 自己就能保護為什么還要加一個 dsPIC33FJ256GP710A直接用純硬件電路不行嗎我的答案是eFuse 負(fù)責(zé)快MCU 負(fù)責(zé)聰明。硬件保護動作是微秒級的但只能執(zhí)行預(yù)設(shè)的邏輯它不知道負(fù)載是什么不知道故障發(fā)生了多少次不知道該不該重試更沒法把故障信息告訴上位機。這些事需要一顆真正的處理器來做。3.1 為什么選 DSC 而不是普通 MCU選 dsPIC33FJ256GP710A主要是看中三點采樣精度和速度。它內(nèi)置的 ADC 配合 DMA可以做到多通道連續(xù)采樣而不占用 CPU 主循環(huán)這對電流、電壓的實時監(jiān)控非常關(guān)鍵。數(shù)學(xué)能力。作為數(shù)字信號控制器在處理電流有效值、功率計算、平均值濾波這些運算時比普通 8 位或者低端 32 位 MCU 輕松得多工業(yè)上經(jīng)常要算持續(xù)功率超限這需要做積分運算。外設(shè)資源。它的 PWM、UART、SPI、I2C、定時器數(shù)量都很充裕我在這套方案里要用到 ADC、外部中斷、定時器、UART、GPIO 至少五類外設(shè)dsPIC33FJ 分配起來毫無壓力。說白了普通單片機也能做但做了以后 CPU 占用率會很高留給通信和診斷的余量就少了。DSC 讓我可以把采樣循環(huán)壓到很小同時還有一半以上的 CPU 性能留給上層邏輯。3.2 電流采樣用 IMON 還是外加分流電阻電流采樣是整套保護方案里最影響判斷準(zhǔn)確度的環(huán)節(jié)。TPS259483 這類 eFuse 通常會提供電流監(jiān)測輸出 IMON輸出一個與負(fù)載電流成比例的電流或電壓送到 MCU 的 ADC。用 IMON 的優(yōu)勢是省掉一枚分流電阻走線簡潔缺點是這個信號在芯片內(nèi)部經(jīng)過放大帶寬和精度受芯片規(guī)格限制而且受芯片自身溫度影響。我的做法是如果在要求不高的場合直接用 IMON 輸出經(jīng)過一個 RC 低通濾波后送 ADC如果是要做精度較高的功率監(jiān)測我傾向于在輸出母線串一枚 20mΩ/1% 的分流采樣電阻用電流檢測放大器比如 INA240放大后送 ADC。通過校零和滿量程校準(zhǔn)這套采樣的電流誤差可以控制在 2% 以內(nèi)。3.3 三級保護決策預(yù)警、慢斷、快斷我在固件里把保護邏輯分成了三級每一級的觸發(fā)條件和動作都不同第一級是預(yù)警電流超過額定值的 80%持續(xù) 200ms 以上MCU 不切斷輸出只通過 UART 上報一條預(yù)警消息讓上位機知道負(fù)載狀態(tài)有異常。第二級是慢斷電流超過額定值的 100%持續(xù) 1s 以上認(rèn)為負(fù)載異常MCU 主動拉低 EN 引腳關(guān)閉 eFuse記錄一條過載事件。為什么用 1s 而不是立刻切斷因為有些負(fù)載的短時過載是正常的比如電機堵轉(zhuǎn)瞬間直接切斷可能比故障本身還麻煩。第三級是急斷電流超過額定值的 150%持續(xù) 50ms 以上這個級別就是比較嚴(yán)重的短路或者器件損壞了MCU 立即關(guān)閉 EN同時記錄急斷事件。注意這里有個關(guān)鍵設(shè)計真正瞬時的短路是靠 TPS259483 內(nèi)部的硬件比較器先動作的MCU 的處理速度根本來不及MCU 的三級邏輯針對的是持續(xù)過載不是突發(fā)短路。這就是我反復(fù)強調(diào)的硬件負(fù)責(zé)快MCU 負(fù)責(zé)聰明。3.4 故障記錄與復(fù)位策略故障一旦發(fā)生MCU 會記錄故障類型、故障時的電壓電流值和時間戳寫入內(nèi)部 Flash。dsPIC33FJ256GP710A 的 Flash 可以用于數(shù)據(jù)存儲但擦寫壽命有限所以我不會每條故障都單獨寫而是把故障日志放在一個緩存區(qū)里積累幾條后一次寫入。復(fù)位策略這里有個細(xì)節(jié)系統(tǒng)上電后MCU 會先讀 FLT 引腳狀態(tài)如果 eFuse 處于故障鎖存狀態(tài)MCU 不會立刻復(fù)位它而是先等電源輸入穩(wěn)定再延時 5 秒后拉高 EN 嘗試恢復(fù)。這個延時很重要很多現(xiàn)場故障是輸入電源瞬時跌落引起的如果 eFuse 在這個時侯立刻重啟很可能再次觸發(fā)保護造成反復(fù)重啟損壞負(fù)載。4. 兩個器件拼在一起的電路骨架連接、參數(shù)計算與上電時序下面說說具體的電路連接和參數(shù)計算。我先給大家一個連接關(guān)系的總表再逐個展開參數(shù)計算過程。TPS259483 引腳連接對象作用VIN電源入口接輸入濾波電容電源輸入VOUT后端負(fù)載或 DC-DC接輸出電容受保護輸出OVP/UVLO分壓電阻網(wǎng)絡(luò)設(shè)置過壓/欠壓閾值ILIM限流設(shè)定電阻設(shè)置限流點SS/dVdt軟啟動電容控制輸出爬升率ENdsPIC33FJ GPIOMCU 使能/復(fù)位控制FLTdsPIC33FJ 外部中斷引腳故障通知IMONRC 濾波后接 ADC電流監(jiān)測4.1 過壓/欠壓閾值的計算設(shè)內(nèi)部比較器的參考電壓為 VrefOVP/UVLO 引腳外接上分壓電阻 R1 和下分壓電阻 R2則閾值電壓 Vth 滿足Vth Vref × (R1 R2) / R2反過來給定目標(biāo)閾值 VthR1 R2 × (Vth / Vref - 1)。拿 24V 系統(tǒng)舉例我希望欠壓閾值 18V過壓閾值 33V。先選 R2 10kΩ假設(shè)該引腳參考電壓 Vref 為 1.2V具體以數(shù)據(jù)手冊為準(zhǔn)我不能憑記憶替你確認(rèn)那么欠壓上分壓電阻 R1 10k × (18 / 1.2 - 1) 140kΩ過壓上分壓電阻 R1 10k × (33 / 1.2 - 1) 265kΩ。實際取標(biāo)稱值 140kΩ 和 270kΩ再用 1% 精度電阻最終閾值會有細(xì)微偏差可以在原理圖階段用計算器驗算一遍這個步驟不要省略。4.2 限流點和軟啟動電容的計算限流點通過 ILIM 引腳電阻設(shè)定數(shù)據(jù)手冊會給出 ILIM 電阻和限流電流的對應(yīng)系數(shù)一般形式是 Rilim K / I_LIM。假設(shè)目標(biāo)限流 4A系數(shù) K 查手冊為某個值計算出的阻值取最近的標(biāo)準(zhǔn)電阻然后必須實測校準(zhǔn)。因為 ILIM 電阻的電流基準(zhǔn)和芯片內(nèi)部 MOSFET 的導(dǎo)通電阻都會隨溫度變化理論值和實測值往往有差距我一般在測試階段用電子負(fù)載把每個限流檔位都拉一遍把實際限流值和理論值偏差記錄到固件校準(zhǔn)表里。軟啟動電容的選取先算輸出負(fù)載的等效電容。比如輸出端有 220μF 電解電容還有若干小陶瓷電容合計約 250μF我希望啟動過程的影響不超過限流點的 70%也就是 4A × 70% 2.8A。充電電流公式I C × (dV/dt)。設(shè)電源電壓 12V希望充電電流 2.4A留一點余量那么 dV/dt 2.4 / 250μF 9.6V/ms。輸出電壓從 0 爬到 12V 所需時間約 12 / 9.6 ≈ 1.25ms。再根據(jù) SS 引腳內(nèi)部充電路徑的電流大小反推所需電容值。這個內(nèi)部充電流數(shù)值比較小常見在微安級別我選電容時會按數(shù)據(jù)手冊的公式去算不會憑感覺瞎貼一個 100nF 完事。4.3 固件骨架固件我用 C 語言寫核心流程如下void init_power_protection(void) { init_adc_dma(); // 電流電壓連續(xù)采樣 init_ext_int(); // FLT 低電平觸發(fā)中斷 EN_GPIO 0; // 先保持關(guān)閉 } void check_history_fault(void) { if (FLT_PIN 0) { log_fault(FAULT_HARDWARE); delay_ms(5000); // 等待輸入穩(wěn)定 EN_GPIO 1; // 嘗試恢復(fù) } } while (1) { vbus get_avg(VBUS_ADC); // 母線電壓 iload get_avg(ILOAD_ADC); // 負(fù)載電流 if (iload I_ALERT tick_alert 200ms) { send_uart(ALERT_OVERLOAD); } if (iload I_SLOW_TRIP tick_slow 1s) { EN_GPIO 0; // 關(guān)閉 eFuse log_fault(FAULT_SLOW_TRIP); digest_fault_buffer(); } if (iload I_FAST_TRIP tick_fast 50ms) { EN_GPIO 0; log_fault(FAULT_FAST_TRIP); digest_fault_buffer(); } }這段代碼只是骨架實際項目中我會把閾值參數(shù)做成結(jié)構(gòu)體從 Flash 里讀取方便批量設(shè)備調(diào)整參數(shù)而不動代碼。4.4 完整上電時序信號從系統(tǒng)上電到穩(wěn)態(tài)可以分成五步電源輸入建立eFuse EN 為低FLT 和 PGOOD 處于初始狀態(tài)后端負(fù)載掉電。MCU 上電復(fù)位執(zhí)行初始化讀取故障歷史。MCU 確認(rèn)無硬件故障后拉高 ENeFuse 開始軟啟動輸出電壓按設(shè)定斜率爬升。輸出電壓達到穩(wěn)態(tài)PGOOD 拉高MCU 收到 PGOOD 上升沿正式開始運行監(jiān)控邏輯。正常運行期間MCU 持續(xù)采樣母線電壓和負(fù)載電流任何一級故障觸發(fā)時執(zhí)行對應(yīng)動作并記錄。5. 聯(lián)調(diào)階段踩過的四個真坑這一節(jié)是整篇里我最想寫的。電路圖看著再合理聯(lián)調(diào)時該踩的坑一個都不會少。我挑四個典型的每個都講清楚現(xiàn)象、原因和最終解決辦法。5.1 第一個坑電機啟動瞬間被誤切斷帶電機負(fù)載測試時一啟動就觸發(fā) eFuse 的過流關(guān)斷電機根本轉(zhuǎn)不起來。查了一圈發(fā)現(xiàn)電機啟動瞬間的電流峰值超過了設(shè)定的限流點雖然只持續(xù)了幾十毫秒但 eFuse 的硬件響應(yīng)比 MCU 快得多直接就切了。解決辦法是兩招組合一是把限流點從 4A 抬高到 6A讓啟動峰值落在限流點以內(nèi)二是把軟啟動時間拉長讓輸出電壓緩慢爬升減小大電容充電帶來的額外沖擊電流。這里要注意限流點抬高后正常穩(wěn)態(tài)電流的裕量變大但短路時的峰值電流也變大了所以后端器件的耐流能力要跟著確認(rèn)不能光顧著讓電機轉(zhuǎn)起來。5.2 第二個坑故障鎖存導(dǎo)致系統(tǒng)無法自恢復(fù)把 eFuse 配置成故障鎖存模式后遇到一次瞬時過載輸出被切斷。MCU 按預(yù)設(shè)的 5 秒延時后拉高 EN 復(fù)位但發(fā)現(xiàn)復(fù)位不生效最后查到原因eFuse 在鎖存狀態(tài)下有些型號的 EN 引腳只在特定條件下才能重新開啟比如必須先拉低 EN 保持一段時間再拉高才有效。我的固件原先是直接拉高 EN沒有先拉低的過程。改成拉低 EN 保持 100ms → 再拉高之后復(fù)位就正常了。這個細(xì)節(jié)數(shù)據(jù)手冊里往往藏在時序圖里容易漏看。建議大家在自己板子上復(fù)現(xiàn)一次鎖存故障用邏輯分析儀抓 EN 和 FLT 的時序確認(rèn)自己的復(fù)位動作符合芯片要求。5.3 第三個坑IMON 采樣噪聲導(dǎo)致的誤報警IMON 信號直接接 ADC發(fā)現(xiàn)負(fù)載電流明明很穩(wěn)定MCU 卻頻繁報預(yù)警甚至偶爾觸發(fā)慢斷。用示波器看 IMON 引腳上面疊加了明顯的高頻毛刺來源是后級 DC-DC 的開關(guān)噪聲沿著地平面耦合過來的。解決方法是兩層硬件上加了一階 RC 濾波截止頻率設(shè)在 10kHz 左右把開關(guān)噪聲濾掉軟件上做了移動平均和閾值滯回處理電流判斷分上升觸發(fā)和下降恢復(fù)兩個閾值避免信號在閾值附近抖動時反復(fù)觸發(fā)。這兩個措施加上以后誤報問題徹底消失。5.4 第四個坑散熱和地回路疊加出來的采樣偏差滿載 4A 連續(xù)運行時TPS259483 的表面溫度明顯上升。用熱成像儀一看芯片周邊 PCB 銅皮溫度達到 85°C 以上。溫度上來以后兩個問題同時出現(xiàn)一是限流點漂移實測限流值比常溫時低了約 8%二是采樣電阻周圍的溫度梯度導(dǎo)致分流電阻阻值漂移電流讀數(shù)出現(xiàn)偏差。處理辦法在 PCB 布局上給 eFuse 的散熱焊盤多打散熱過孔讓熱量快速通向底層大銅皮分流電阻改用低溫漂的合金電阻電流校準(zhǔn)不再用常溫單點校準(zhǔn)而是在 25°C 和 85°C 兩個溫度點都做校準(zhǔn)固件里按芯片溫度做線性補償。6. 換一個負(fù)載時這套參數(shù)該從哪開始調(diào)每一次新項目接入不同負(fù)載我都不建議直接抄上一個項目的參數(shù)。我整理了一個起始參數(shù)表方便大家快速定位負(fù)載類型額定電流建議限流點建議軟啟動時間MCU 慢斷閾值MCU 急斷閾值傳感器板容性負(fù)載為主1A1.5A1ms1.2A / 1s1.5A / 50ms工業(yè)控制板小電機3A5A2ms4A / 1s6A / 50ms伺服驅(qū)動前級6A9A5ms7.5A / 500ms10A / 20ms24V 通信設(shè)備2A3A1ms2.5A / 1s3.5A / 50ms拿到表后第一步是用電子負(fù)載做靜態(tài)拉載測試驗證限流點實際值與設(shè)定值一致第二步做動態(tài)負(fù)載測試模擬負(fù)載突變確認(rèn)不會誤觸發(fā)第三步做短路測試用一根短粗導(dǎo)線短接輸出觀察 eFuse 動作時間和 MCU 記錄的內(nèi)容是否正常第四步連續(xù)跑 8 小時滿載用熱成像儀確認(rèn)芯片溫度在規(guī)格范圍內(nèi)。最后提一個很多人忽略的驗證項目反復(fù)上下電 100 次每次冷啟動都檢查 PGOOD 是否穩(wěn)定建立、MCU 是否記錄到異常。我遇到的多次偶發(fā)啟動失敗都是在這個測試?yán)锉┞冻鰜淼?。這四步走完這套電源路徑保護方案才算真正能用。每次做這類電源保護設(shè)計我心里都有一個同樣的體會好的保護不是越靈敏越好而是在該斷的時候斷、該穩(wěn)的時候穩(wěn)、該醒的時候醒之間找一個平衡點。TPS259483AYWPR 給了硬件層面的可靠dsPIC33FJ256GP710A 給了系統(tǒng)層面的智能兩者各司其職才是工業(yè)電源保護該有的樣子。