同實(shí)現(xiàn)電源路徑保護(hù):從選型到調(diào)試的完整實(shí)戰(zhàn))
我在這幾年做嵌入式控制系統(tǒng)和工業(yè)設(shè)備的電源設(shè)計(jì)時(shí)踩過(guò)不少偏門(mén)坑。幾個(gè)項(xiàng)目做完最大的感觸是電源路徑保護(hù)看起來(lái)只是“加個(gè)保險(xiǎn)絲”的小事實(shí)際做起來(lái)涉及選型、計(jì)算、嵌入式聯(lián)動(dòng)、PCB熱設(shè)計(jì)一整條鏈路。最近一個(gè)工業(yè)監(jiān)測(cè)節(jié)點(diǎn)的方案里我用了TI的TPS259483AYWPR跟STM32F103RB搭了一套電源路徑保護(hù)系統(tǒng)把之前分散的分立器件方案徹底換掉了整體調(diào)試下來(lái)效果很穩(wěn)。這篇就把這套方案的完整設(shè)計(jì)思路、關(guān)鍵參數(shù)計(jì)算、STM32固件控制和調(diào)試踩坑過(guò)程一次性整理出來(lái)。先說(shuō)清楚這套東西是干什么的TPS259483AYWPR是一顆電子保險(xiǎn)絲eFuse/電源路徑保護(hù)芯片STM32F103RB扮演監(jiān)控大腦的角色兩者合作實(shí)現(xiàn)對(duì)供電軌的過(guò)流、過(guò)壓/欠壓、浪涌限制、軟啟動(dòng)和故障上報(bào)。適合的場(chǎng)景包括工業(yè)控制器的后級(jí)供電、傳感器節(jié)點(diǎn)、電機(jī)驅(qū)動(dòng)控制板、帶電池的嵌入式設(shè)備等——只要供電路徑上需要“可恢復(fù)、可監(jiān)控、可配置”的保護(hù)都可以直接參考這個(gè)組合。1. 項(xiàng)目拆解為什么是“eFuse MCU”而不是分立器件1.1 傳統(tǒng)電源保護(hù)方案的痛點(diǎn)以前做電源保護(hù)最傳統(tǒng)的做法是慢熔保險(xiǎn)絲這東西到今天就一個(gè)優(yōu)點(diǎn)便宜。但它的問(wèn)題也很要命熔斷電流誤差大、響應(yīng)速度慢、熔斷后必須人工更換在無(wú)人值守的工業(yè)現(xiàn)場(chǎng)簡(jiǎn)直就是災(zāi)難。后來(lái)大家開(kāi)始用“采樣電阻比較器PMOS”自己做電子開(kāi)關(guān)問(wèn)題又變成了電路復(fù)雜度——你得單獨(dú)設(shè)計(jì)基準(zhǔn)源、比較器的遲滯、自鎖或者自動(dòng)重啟邏輯任何一個(gè)環(huán)節(jié)的元器件公差都會(huì)直接影響保護(hù)閾值量產(chǎn)一致性很難保證。另一個(gè)容易被忽略的痛點(diǎn)短路瞬間的能量沖擊。輸入端如果是24V工業(yè)電源短路時(shí)寄生電感和分布電容會(huì)在微秒級(jí)別釋放大量能量分立方案的MOSFET如果沒(méi)有充分的SOA安全工作區(qū)余量很容易在保護(hù)生效前就燒掉。這一點(diǎn)上集成eFuse的優(yōu)勢(shì)非常明顯芯片內(nèi)部把限流環(huán)路、功率管、熱關(guān)斷做在了一起短路時(shí)能在幾微秒內(nèi)把電流限制住功率管不會(huì)瞬間炸掉。1.2 為什么要加STM32F103RB很多人第一反應(yīng)是一顆eFuse不就夠了嗎還要加MCU干什么純硬件保護(hù)只能做到“固定的閾值 固定的響應(yīng)”。但在真正的工業(yè)項(xiàng)目里需求往往是動(dòng)態(tài)的電機(jī)啟動(dòng)時(shí)會(huì)有幾倍額定電流的浪涌正常運(yùn)行電流反而很小保護(hù)閾值最好能跟隨工作模式切換故障發(fā)生時(shí)要記錄時(shí)間和次數(shù)方便后續(xù)運(yùn)維分析設(shè)備要支持遠(yuǎn)程復(fù)位或者自動(dòng)恢復(fù)而不是人到現(xiàn)場(chǎng)去換保險(xiǎn)絲多路電源軌需要按照特定順序上電硬的RC延時(shí)根本改不了時(shí)序。這些需求單靠一顆模擬芯片整不明白。STM32F103RB的定位就是做“策略管理”通過(guò)ADC讀取芯片輸出的電流監(jiān)測(cè)信號(hào)通過(guò)GPIO控制使能和復(fù)位引腳通過(guò)中斷引腳響應(yīng)故障信號(hào)再通過(guò)UART或I2C把電源狀態(tài)上報(bào)給上位機(jī)。把“模擬保護(hù)”和“數(shù)字策略”結(jié)合起來(lái)才是這套方案的核心價(jià)值。1.3 系統(tǒng)整體架構(gòu)整個(gè)系統(tǒng)的信號(hào)流向是這樣的輸入電源比如12V或24V直流先經(jīng)過(guò)EMI濾波和輸入電容送入TPS259483AYWPRTPS259483的輸出端接負(fù)載同時(shí)通過(guò)IMON引腳輸出一個(gè)與負(fù)載電流成比例的電流信號(hào)IMON經(jīng)過(guò)采樣電阻轉(zhuǎn)換后接入STM32F103RB的ADC引腳用于實(shí)時(shí)電流監(jiān)控FLT故障輸出引腳連接到STM32的EXTI外部中斷引腳任何過(guò)流、過(guò)壓、欠壓、熱關(guān)斷都會(huì)觸發(fā)中斷STM32通過(guò)EN引腳控制芯片的啟動(dòng)/關(guān)斷通過(guò)OVP/UVLO引腳附近的電阻網(wǎng)絡(luò)配置保護(hù)閾值狀態(tài)信息通過(guò)UART輸出到調(diào)試串口或上位機(jī)。這個(gè)架構(gòu)的好處在于即使MCU死機(jī)或者程序跑飛模擬保護(hù)鏈路依然獨(dú)立工作不會(huì)出現(xiàn)“大腦宕機(jī)、電源裸奔”的情況。我后來(lái)在項(xiàng)目文檔里給這套架構(gòu)起了個(gè)名字叫“模擬兜底、數(shù)字管理”可靠性設(shè)計(jì)上這種做法非常關(guān)鍵。2. TPS259483AYWPR硬件設(shè)計(jì)引腳、原理與關(guān)鍵參數(shù)計(jì)算2.1 核心引腳與工作原理速覽TPS259483AYWPR是TI TPS25948x家族里功能比較完整的型號(hào)VQFN封裝體積小但功能密度很高。先看需要關(guān)注的幾個(gè)主要引腳引腳功能引腳名稱作用說(shuō)明輸入端IN接輸入電源需就近放置去耦電容輸出端OUT接負(fù)載輸出端電容影響軟啟動(dòng)行為使能控制EN高電平使能低電平關(guān)閉可由MCU直接驅(qū)動(dòng)故障輸出FLT開(kāi)漏輸出正常為高阻故障時(shí)拉低電流監(jiān)測(cè)IMON輸出與負(fù)載電流成比例的電流經(jīng)外部電阻轉(zhuǎn)為電壓限流設(shè)置ILIM通過(guò)外部電阻設(shè)定限流值欠壓/過(guò)壓設(shè)置UVLO/OVP通過(guò)分壓電阻設(shè)置輸入電壓窗口芯片內(nèi)部的功率路徑上集成了低導(dǎo)通阻抗的MOSFET正常工作狀態(tài)下壓降很小比如5A級(jí)別負(fù)載時(shí)壓降往往只有幾十毫伏對(duì)系統(tǒng)效率影響可以忽略。內(nèi)部還有一個(gè)關(guān)鍵設(shè)計(jì)叫可編程軟啟動(dòng)通過(guò)SS引腳的外部電容控制輸出電壓爬升斜率這能有效抑制負(fù)載電容上電時(shí)的浪涌電流。2.2 關(guān)鍵參數(shù)計(jì)算接下來(lái)是整套方案里最核心的部分——參數(shù)計(jì)算。實(shí)際項(xiàng)目中如果不把下面幾個(gè)電阻電容算準(zhǔn)后面調(diào)試基本一定會(huì)出問(wèn)題。第一限流電阻R_ILIM。限流值決定保護(hù)動(dòng)作點(diǎn)這個(gè)值的設(shè)定必須比“最大正常工作電流”高出一截但又不能太高否則保護(hù)失去意義。以我的工業(yè)節(jié)點(diǎn)為例系統(tǒng)穩(wěn)態(tài)電流約1.8A瞬時(shí)浪涌峰值約3.5A。限流點(diǎn)設(shè)在5A這樣浪涌不會(huì)誤觸發(fā)嚴(yán)重過(guò)流和短路又能被有效切斷。TI這顆芯片的限流電阻換算關(guān)系不同批次的數(shù)據(jù)手冊(cè)給出的系數(shù)略有差別設(shè)計(jì)時(shí)必須以下載的最新數(shù)據(jù)手冊(cè)為準(zhǔn)。我這邊以典型規(guī)格為例目標(biāo)限流5A時(shí)按公式計(jì)算得到約2.6kΩ實(shí)際選擇2.61kΩ的1%精度電阻。注意這個(gè)電阻一定要用低溫度系數(shù)的類型因?yàn)樾酒瑑?nèi)部是精確的電流源灌到這個(gè)電阻上形成基準(zhǔn)電壓電阻溫漂會(huì)直接改變保護(hù)點(diǎn)。第二輸入過(guò)壓/欠壓分壓網(wǎng)絡(luò)。工業(yè)環(huán)境下24V輸入經(jīng)常有波動(dòng)甚至?xí)烊肜擞?。OVP和UVLO的閾值通過(guò)從IN到GND的分壓電阻網(wǎng)絡(luò)設(shè)定。這里面有個(gè)原則兩個(gè)閾值之間需要留出足夠的窗口避免輸入電壓在臨界點(diǎn)附近抖動(dòng)時(shí)反復(fù)啟停。舉個(gè)例子我設(shè)定UVLO為8V、OVP為30V。分壓計(jì)算邏輯很簡(jiǎn)單芯片內(nèi)部比較器的參考電壓約為1.0V具體值以手冊(cè)為準(zhǔn)分壓比就是閾值電壓和參考電壓的比值。UVLO分支R_low / (R_high R_low) 1.0V / 8VOVP分支同理。計(jì)算后我選擇了105kΩ和15kΩ的組合實(shí)測(cè)精度基本可以接受。這個(gè)電阻網(wǎng)絡(luò)同樣選1%精度同時(shí)在靠近芯片引腳處并聯(lián)一個(gè)小容值的濾波電容防止噪聲引起誤觸發(fā)。第三軟啟動(dòng)電容C_SS。軟啟動(dòng)時(shí)間直接決定上電瞬間的沖擊電流。如果系統(tǒng)負(fù)載端有大量電容軟啟動(dòng)時(shí)間太短會(huì)導(dǎo)致輸出電容充電電流瞬間超過(guò)限流值造成空載上電就保護(hù)。實(shí)際計(jì)算時(shí)可以按輸出電容容量和限流值來(lái)估算例如輸出端總電容1000μF希望充電電流不超過(guò)3A那么最保守的爬升時(shí)間是t ≥ (C × V_out) / I_limit (1000μF × 24V) / 3A 8ms??紤]到電容等效串聯(lián)電阻和線性爬升的形狀實(shí)際我給SS引腳選擇的電容對(duì)應(yīng)軟啟動(dòng)時(shí)間約10ms留出20%以上的余量。這里多算一點(diǎn)時(shí)間不會(huì)損失什么反而能大幅提高啟動(dòng)可靠性。2.3 外圍器件選型與參考電路除了上面三個(gè)計(jì)算點(diǎn)周邊配套器件的選擇也有講究。輸入端的陶瓷電容我選了4顆10μF/50V的X7R并聯(lián)再加上一顆100μF的電解電容用于低頻能量緩沖因?yàn)閑Fuse熱插拔時(shí)會(huì)面臨很高的di/dt輸入電感會(huì)產(chǎn)生電壓尖峰電容儲(chǔ)能必須足夠。輸出端同樣放幾顆10μF陶瓷電容但要注意不要去耦過(guò)度否則軟啟動(dòng)時(shí)間要跟著調(diào)整。IMON輸出電阻的選擇要兼顧ADC的動(dòng)態(tài)范圍。STM32F103RB的ADC參考電壓設(shè)為3.3V那么把IMON電阻設(shè)定為讓滿載電流對(duì)應(yīng)的IMON電壓在2V左右既能保持線性度又不會(huì)超過(guò)ADC量程。我在這里用的電阻是4.7kΩ實(shí)測(cè)滿載時(shí)IMON電壓約1.9V。FLT引腳是開(kāi)漏輸出必須接上拉電阻到MCU的電源軌我選了10kΩ。EN引腳我加了一個(gè)RC電路加了一個(gè)小電容防止MCU上電瞬間GPIO處于高阻態(tài)時(shí)EN被噪聲拉到有效電平導(dǎo)致芯片意外啟動(dòng)。注意TPS259483的ILIM、SS這些引腳上接的電容電阻都必須靠近芯片放置走線要短。這種高精度模擬引腳對(duì)噪聲敏感走線過(guò)長(zhǎng)或者經(jīng)過(guò)過(guò)孔都會(huì)引入額外誤差。我第一版就是因?yàn)镾S引腳走線繞了一個(gè)大圈導(dǎo)致了明顯的啟動(dòng)時(shí)間抖動(dòng)。3. STM32F103RB固件實(shí)現(xiàn)監(jiān)控、時(shí)序與故障策略3.1 初始化GPIO、ADC與EXTI硬件畫(huà)好之后固件側(cè)的第一件事就是初始化。我用的是標(biāo)準(zhǔn)外設(shè)庫(kù)可以很方便地移植到HAL庫(kù)邏輯是等價(jià)的。GPIO方面需要做四類引腳EN引腳推挽輸出默認(rèn)輸出低電平保持芯片關(guān)閉FLT引腳開(kāi)漏輸入配合外部上拉并使能外部中斷EXTIIMON引腳模擬輸入對(duì)應(yīng)ADC1的通道UART引腳復(fù)用推挽輸出用于調(diào)試和狀態(tài)上報(bào)。ADC的初始化有幾個(gè)容易忽略的點(diǎn)。STM32F103RB的ADC是12位參考電壓接3.3V換算關(guān)系是電壓值 ADC讀數(shù) × 3.3 / 4095。采樣時(shí)間我配置為55.5周期不要用最短的1.5周期因?yàn)镮MON信號(hào)是從功率路徑上耦合過(guò)來(lái)的多少有些紋波長(zhǎng)一點(diǎn)的采樣時(shí)間等于做一個(gè)積分平均數(shù)據(jù)會(huì)穩(wěn)定很多。另外如果項(xiàng)目里還有別的模擬量需要采集可以考慮用掃描模式多通道循環(huán)但這里為了架構(gòu)簡(jiǎn)單我單獨(dú)用了一個(gè)ADC通道。EXTI中斷配置里FLT引腳選擇下降沿觸發(fā)。要注意的是在EXTI中斷服務(wù)函數(shù)里不要做復(fù)雜操作正確做法是置一個(gè)標(biāo)志位在主循環(huán)里做處理。因?yàn)镕LT信號(hào)在故障后會(huì)被芯片拉低如果MCU響應(yīng)太慢或者重入中斷容易丟失細(xì)節(jié)。代碼片段如下void PowerProtect_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; ADC_InitTypeDef ADC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); // EN 引腳 - PA1推挽輸出 GPIO_InitStructure.GPIO_Pin GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_2MHz; GPIO_Init(GPIOA, GPIO_InitStructure); GPIO_ResetBits(GPIOA, GPIO_Pin_1); // 初始關(guān)閉 // FLT 引腳 - PB0上拉輸入 EXTI GPIO_InitStructure.GPIO_Pin GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode GPIO_Mode_IPU; GPIO_Init(GPIOB, GPIO_InitStructure); GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0); EXTI_InitStructure.EXTI_Line EXTI_Line0; EXTI_InitStructure.EXTI_Mode EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd ENABLE; EXTI_Init(EXTI_InitStructure); NVIC_InitStructure.NVIC_IRQChannel EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority 1; NVIC_InitStructure.NVIC_IRQChannelCmd ENABLE; NVIC_Init(NVIC_InitStructure); // ADC1 通道4 - PA4采樣IMON GPIO_InitStructure.GPIO_Pin GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AIN; GPIO_Init(GPIOA, GPIO_InitStructure); ADC_InitStructure.ADC_Mode ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode DISABLE; ADC_InitStructure.ADC_ContinuousConvMode DISABLE; ADC_InitStructure.ADC_ExternalTrigConv ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel 1; ADC_Init(ADC1, ADC_InitStructure); ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_55Cycles5); ADC_Cmd(ADC1, ENABLE); // 上電校準(zhǔn) ADC_ResetCalibration(ADC1); while (ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while (ADC_GetCalibrationStatus(ADC1)); ADC_SoftwareStartConvCmd(ADC1, ENABLE); }3.2 上電時(shí)序控制先初始化、后開(kāi)電源很多嵌入式系統(tǒng)的一個(gè)隱蔽問(wèn)題是MCU還沒(méi)初始化完就先把電源打開(kāi)了。外圍器件在供電不穩(wěn)定的狀態(tài)下運(yùn)行輕則狀態(tài)未知重則閂扣損壞。這套方案天然支持“MCU準(zhǔn)備好之后再開(kāi)啟電源”的時(shí)序。在上電函數(shù)里我做了這樣幾步讀取ADC采樣值確認(rèn)IMON接近0也就是輸出端沒(méi)有異常掛載讀取FLT引腳電平如果已經(jīng)是低電平說(shuō)明芯片處于故障鎖存狀態(tài)先輸出診斷信息一切正常后延時(shí)50ms讓輸入電源穩(wěn)定拉高EN引腳啟動(dòng)TPS259483軟啟動(dòng)啟動(dòng)后持續(xù)監(jiān)測(cè)IMON如果在軟啟動(dòng)期間IMON超過(guò)預(yù)設(shè)閾值立刻拉低EN并記錄故障。這里有一個(gè)經(jīng)驗(yàn)啟動(dòng)過(guò)程一定要有超時(shí)機(jī)制。如果軟啟動(dòng)電容變質(zhì)或者輸出短路IMON可能會(huì)永遠(yuǎn)達(dá)不到穩(wěn)定值如果沒(méi)有超時(shí)判斷主循環(huán)會(huì)一直卡在等待狀態(tài)。我實(shí)現(xiàn)的方式是啟動(dòng)一個(gè)軟件計(jì)數(shù)器超過(guò)500ms仍未完成啟動(dòng)就判為啟動(dòng)失敗。uint8_t PowerPath_Start(void) { uint16_t adc_val; uint8_t timeout 0; // 檢查FLT狀態(tài) if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) RESET) { printf([PWR] FLT active before start, abort.\r\n); return 0; } GPIO_SetBits(GPIOA, GPIO_Pin_1); // 使能輸出 while (timeout 50) { DelayMs(10); adc_val Get_IMON_ADC(); if (adc_val ADC_LIMIT_NORMAL_LOW) // 有電流流過(guò)說(shuō)明已經(jīng)啟動(dòng) { printf([PWR] Startup OK, IMON ADC %d\r\n, adc_val); return 1; } timeout; } GPIO_ResetBits(GPIOA, GPIO_Pin_1); // 超時(shí)關(guān)斷 printf([PWR] Startup timeout!\r\n); return 0; }3.3 故障檢測(cè)、恢復(fù)策略與狀態(tài)記錄工業(yè)設(shè)備對(duì)故障處理的期待跟消費(fèi)電子不一樣不是說(shuō)一有故障就立刻鎖死也不是無(wú)限次自動(dòng)重啟而是有策略的重試。我們把故障分為兩類第一類是瞬態(tài)故障比如負(fù)載短時(shí)過(guò)沖、外部干擾導(dǎo)致的瞬間過(guò)流。這類故障在eFuse保護(hù)動(dòng)作后負(fù)載自身可能已經(jīng)恢復(fù)芯片并沒(méi)有損壞所以可以自動(dòng)重新啟動(dòng)。第二類是持續(xù)故障比如輸出端真正短路、負(fù)載硬件損壞。這種情況反復(fù)重啟只會(huì)讓系統(tǒng)反復(fù)沖擊可能擴(kuò)大故障范圍。我的策略是首次故障后延時(shí)1秒重新啟動(dòng)如果連續(xù)3次都在啟動(dòng)后10秒內(nèi)再次觸發(fā)FLT則判定為永久故障進(jìn)入鎖定狀態(tài)。任何恢復(fù)都必須通過(guò)上位機(jī)命令或手動(dòng)復(fù)位。這個(gè)10秒窗口很關(guān)鍵它比軟啟動(dòng)時(shí)間長(zhǎng)得多可以讓系統(tǒng)充分進(jìn)入穩(wěn)態(tài)電流區(qū)域避免一次正常的浪涌被誤判成永久故障。故障記錄我直接在STM32內(nèi)部Flash的末尾扇區(qū)劃了一塊區(qū)域每次故障把時(shí)間戳如果有RTC、故障類型、IMON采樣值寫(xiě)進(jìn)去。這個(gè)功能在后端運(yùn)維時(shí)非常好用——設(shè)備返修時(shí)第一件事就是讀日志很多問(wèn)題直接就能定位。3.4 通過(guò)UART上報(bào)狀態(tài)UART在這里承擔(dān)“狀態(tài)可觀測(cè)性”的作用。我定義了簡(jiǎn)單的幀格式每秒輸出一次當(dāng)前IMON電流和芯片狀態(tài)故障時(shí)立即輸出故障幀。波特率用115200數(shù)據(jù)格式8N1。為了調(diào)試方便我還加了一個(gè)命令行指令發(fā)送“reset”可以遠(yuǎn)程復(fù)位電源發(fā)送“info”可以查看當(dāng)前限流配置和時(shí)間戳。這個(gè)上報(bào)機(jī)制幫我省了大量時(shí)間。有一次現(xiàn)場(chǎng)反饋設(shè)備偶發(fā)重啟但看波形什么都看不出來(lái)。后來(lái)通過(guò)UART日志發(fā)現(xiàn)是輸入電壓在凌晨出現(xiàn)了持續(xù)幾十毫秒的跌落觸發(fā)了欠壓保護(hù)。如果沒(méi)有日志這種偶發(fā)問(wèn)題根本沒(méi)法查。4. PCB布局與工業(yè)環(huán)境布板要點(diǎn)4.1 熱設(shè)計(jì)eFuse的功耗怎么處理TPS259483在工作時(shí)內(nèi)部MOSFET的導(dǎo)通阻抗雖然低但有電流流過(guò)就會(huì)發(fā)熱。功耗的計(jì)算公式很簡(jiǎn)單P I2 × R_ON。假設(shè)負(fù)載電流3AR_ON約30mΩ具體看數(shù)據(jù)手冊(cè)曲線功耗就是9 × 0.03 0.27W??雌饋?lái)不大但如果環(huán)境溫度已經(jīng)到70°C芯片的散熱條件又差這個(gè)熱量積累起來(lái)足以讓芯片進(jìn)入熱關(guān)斷。所以PCB上給芯片留散熱焊盤(pán)和過(guò)孔陣列是必須的操作。我在芯片正下方的PCB銅皮上打了9個(gè)過(guò)孔連接到內(nèi)層的地平面。為了降低熱阻過(guò)孔內(nèi)徑0.3mm外徑0.6mm直接用實(shí)心過(guò)孔不加阻焊開(kāi)窗溢出問(wèn)題。多打幾個(gè)孔的意義在于熱量能更均勻地傳導(dǎo)到整個(gè)地平面而不是只從引腳散熱。還有一個(gè)很多人會(huì)忽略的點(diǎn)限流值設(shè)定得越高正常工作時(shí)相同電流下的功耗反而越大嗎不是的。正常導(dǎo)通功耗跟限流值沒(méi)直接關(guān)系跟R_ON和電流有關(guān)。但故障時(shí)限流值高意味著短路能量大芯片要在更嚴(yán)酷的條件下承受功耗這個(gè)瞬間熱量雖然短長(zhǎng)期重復(fù)發(fā)生也會(huì)影響壽命。所以限流值的設(shè)定在保證不誤觸發(fā)的前提下盡量往低調(diào)這是對(duì)散熱和可靠性的雙重考慮。4.2 IMON采樣信號(hào)走線避開(kāi)功率噪聲功率路徑上的di/dt非常高IMON這種模擬信號(hào)如果跟功率走線平行走很長(zhǎng)距離等于主動(dòng)接收干擾。我第一版布板時(shí)IMON走線從芯片引腳拉出來(lái)繞了一圈經(jīng)過(guò)了電感附近結(jié)果用示波器測(cè)到IMON上有明顯的開(kāi)關(guān)噪聲毛刺ADC讀數(shù)波動(dòng)超過(guò)10%。后來(lái)重新走線直接從芯片引腳引出走底層上下都用地平面包住噪聲立刻降下來(lái)了。布線的具體原則是IMON走線盡量短不要超過(guò)10mm如果一定要跨區(qū)域走線旁邊要有地線伴行走線不能與電感、開(kāi)關(guān)節(jié)點(diǎn)、高di/dt回路平行采樣電阻的接地點(diǎn)要選在芯片GND引腳附近避免功率回路的地電流混入采樣地。4.3 輸入輸出電容的位置和地平面設(shè)計(jì)輸入電容要放在芯片IN引腳和GND引腳之間距離盡量小于3mm。輸出電容也一樣放在OUT引腳附近。這樣做的原因是形成最小回路面積降低引線電感。高頻下引線電感跟電容是串聯(lián)的電感越大高頻濾波效果就越差。地平面我直接做了一個(gè)完整的底層地沒(méi)有對(duì)半分。芯片的GND引腳、輸入輸出電容的地端、MCU的地全部直接連接到這個(gè)底層地平面。唯一注意的一點(diǎn)是不要為了“隔離”把功率地跟數(shù)字地切開(kāi)。在很多新手教程里會(huì)看到分割地的建議但在這種小功率的電源路徑保護(hù)場(chǎng)景里分割地反而會(huì)造成回流路徑不連續(xù)性能更差。正確的做法是統(tǒng)一地平面用擺放位置來(lái)管理噪聲。5. 調(diào)試實(shí)錄典型問(wèn)題與排查技巧5.1 上電瞬間誤保護(hù)軟啟動(dòng)時(shí)間太短第一次樣板焊接完成上電實(shí)測(cè)就遇到問(wèn)題輸入一上電FLT立刻拉低芯片自動(dòng)關(guān)斷。用示波器同時(shí)抓輸入電壓、輸出電壓和IMON波形發(fā)現(xiàn)輸入電壓在合閘瞬間出現(xiàn)了一個(gè)嚴(yán)重的下凹隨后恢復(fù)但此時(shí)輸出端電容充電電流異常大超過(guò)了限流點(diǎn)。排查起來(lái)其實(shí)有兩條并行思路一是輸入電源的帶載能力不足合閘瞬間被電容充電拉垮二是軟啟動(dòng)時(shí)間太短浪涌電流尖峰過(guò)高。我用直流電源供電單獨(dú)測(cè)試時(shí)故障消失了說(shuō)明問(wèn)題出在軟啟動(dòng)時(shí)間上。把SS電容從原來(lái)的2.2nF加大到4.7nF軟啟動(dòng)時(shí)間從約4ms擴(kuò)展到約10ms故障不再?gòu)?fù)現(xiàn)。這個(gè)案例說(shuō)明一個(gè)道理保護(hù)電路的觸發(fā)閾值不能只看穩(wěn)態(tài)設(shè)計(jì)更要關(guān)注瞬態(tài)過(guò)程。負(fù)載電容、輸入電源內(nèi)阻、軟啟動(dòng)時(shí)間三者的匹配才是上電可靠的根因。5.2 MCU復(fù)位導(dǎo)致FLT誤中斷系統(tǒng)性測(cè)試時(shí)還遇到一個(gè)奇怪的問(wèn)題給MCU做軟件復(fù)位時(shí)串口會(huì)誤報(bào)一次電源故障但實(shí)際負(fù)載工作正常。抓FLT引腳波形復(fù)位瞬間確實(shí)有一個(gè)短暫低電平脈沖。原因也很典型STM32在復(fù)位期間GPIO處于高阻輸入態(tài)FLT引腳的上拉電阻是10kΩ而主電源如果恰好有一個(gè)輕微的跌落毛刺FLT會(huì)被毛刺拉低。MCU復(fù)位結(jié)束后讀取到的狀態(tài)不一定是真實(shí)故障。解決辦法是雙重的。第一FLT到MCU之間串聯(lián)了一個(gè)1kΩ電阻并在MCU側(cè)對(duì)地并聯(lián)1nF電容形成低通濾波短于1μs的毛刺會(huì)被濾掉第二在固件里增加了FLT有效性確認(rèn)邏輯——只有連續(xù)讀到200ms的低電平才算故障這個(gè)用定時(shí)器實(shí)現(xiàn)。兩種手段一起用虛報(bào)問(wèn)題徹底解決。5.3 IMON讀數(shù)滿量程漂移地彈干擾還有一次比較典型的模擬量問(wèn)題IMON讀數(shù)穩(wěn)定狀態(tài)下始終有0.2V左右的漂移而且跟負(fù)載電流大小沒(méi)有明確線性關(guān)系甚至負(fù)載斷開(kāi)時(shí)也有底數(shù)。查到最后發(fā)現(xiàn)是IMON采樣電阻的地接錯(cuò)了位置。我最初把采樣電阻的地接到了功率輸出的地回路上而不是芯片的AGND參考點(diǎn)導(dǎo)致功率電流在地回路上形成的壓降疊加到了采樣電壓上。調(diào)整之后重新測(cè)零負(fù)載時(shí)IMON已經(jīng)能讀到0V附近漂移問(wèn)題消除。這是模擬采樣電路里最容易犯又最難查的錯(cuò)誤排查看似復(fù)雜核心就一句任何測(cè)量系統(tǒng)的參考地必須跟被測(cè)量的參考點(diǎn)是同一點(diǎn)。5.4 常見(jiàn)問(wèn)題速查表現(xiàn)象可能原因排查思路上電立即FLT軟啟動(dòng)電容太小加大C_SS示波器抓VOUT斜率正常運(yùn)行時(shí)偶發(fā)關(guān)斷輸入電壓瞬時(shí)跌落優(yōu)化輸入電容檢查電源阻抗IMON讀數(shù)毛刺大走線平行功率線或者地參考不對(duì)重新走線就近接采樣地芯片熱關(guān)斷環(huán)境溫度高、散熱過(guò)孔不足增加過(guò)孔陣列或降低限流值MCU復(fù)位后誤報(bào)故障FLT毛刺被采樣串聯(lián)電阻、并聯(lián)電容濾波固件增加確認(rèn)時(shí)間啟動(dòng)超時(shí)誤判軟啟動(dòng)時(shí)間較長(zhǎng)但超時(shí)窗口不夠延長(zhǎng)超時(shí)判斷窗口或者用IMON斜率為判斷依據(jù)6. 整套方案的實(shí)測(cè)效果與擴(kuò)展思路測(cè)試階段我把這套保護(hù)系統(tǒng)跑了一輪比較狠的實(shí)驗(yàn)輸入從6V到36V連續(xù)慢掃描輸出端直接用電線短接反復(fù)100次每次設(shè)備的響應(yīng)都一致——限流動(dòng)作、FLT拉低、MCU記錄故障后自動(dòng)重啟。整個(gè)過(guò)程沒(méi)有一次損壞芯片或負(fù)載。這個(gè)結(jié)果比之前分立方案穩(wěn)定了太多之前同樣的短路測(cè)試約30次里面就會(huì)出現(xiàn)一次MOSFET燒毀或者熔斷電流分散性大的問(wèn)題。電流監(jiān)測(cè)精度方面STM32 ADC讀取IMON換算后的電流值跟鉗表的誤差在3%以內(nèi)。對(duì)監(jiān)測(cè)場(chǎng)景來(lái)說(shuō)這個(gè)精度已經(jīng)足夠判斷系統(tǒng)是否處于健康工作狀態(tài)。如果后續(xù)要在這個(gè)方案上繼續(xù)擴(kuò)展我的建議是有兩條路一是把通信接口從UART升級(jí)成CAN或者RS485因?yàn)楣I(yè)現(xiàn)場(chǎng)往往需要多節(jié)點(diǎn)組網(wǎng)監(jiān)控二是把多個(gè)TPS259483配合一個(gè)STM32用做多路電源軌的分級(jí)管理和時(shí)序控制在復(fù)雜的工業(yè)控制器里這個(gè)應(yīng)用價(jià)值更大。這套“模擬保護(hù)MCU策略”的組合方式本身是可復(fù)用的基礎(chǔ)架構(gòu)換不同接口、不同路數(shù)都是在當(dāng)前骨架上做增量。同時(shí)TPS259483系列本身也有不同規(guī)格的版本實(shí)際選型的時(shí)候可以按照輸入電壓范圍、持續(xù)電流、限流精度等參數(shù)去匹配不同項(xiàng)目。我用這顆芯片的原因主要是它的參數(shù)覆蓋范圍廣、外圍簡(jiǎn)單而且在過(guò)流精度和軟啟動(dòng)可編程性上的表現(xiàn)符合工業(yè)級(jí)要求。真到了大批量生產(chǎn)階段再根據(jù)具體應(yīng)用場(chǎng)景調(diào)整型號(hào)和外圍這套開(kāi)發(fā)邏輯是不變的。從我的實(shí)際體會(huì)來(lái)說(shuō)電源路徑保護(hù)這類設(shè)計(jì)真正考驗(yàn)人的往往不在芯片本身而在于對(duì)瞬態(tài)過(guò)程的理解、對(duì)PCB布局細(xì)節(jié)的把控以及MCU和模擬電路之間的配合默契。希望這份實(shí)操記錄能幫你少走幾段彎路。