計)
鋰電池儲能和備用電源里最容易被低估的就是串聯(lián)電池組的均衡問題。很多人覺得只有 4 串、8 串以上才需要認真做均衡實際上哪怕只是 2 串電池在備用電源這種長期浮充、間歇放電的場景下也照樣會因為一致性漂移而提前退役。最近我完成了一套 2 串磷酸鐵鋰備用電源樣機核心方案是 MP2642GR-Z 負責電池間的電荷搬移PIC18LF45K50 做主控做電壓采集、均衡算法和通信管理。這篇文章把選型邏輯、硬件細節(jié)、固件狀態(tài)機以及整機調(diào)試中踩過的坑完整梳理一遍給同樣在折騰小型 BMS 的人一個可以直接參考的樣本。1. 為什么兩節(jié)串聯(lián)電池也需要認真做均衡1.1 兩節(jié)電池的一致性不是出廠定死的先說個很多人理解偏差的地方電池組出廠做過配組不代表后續(xù)一直保持一致。所謂“一致性”是一個隨時間衰減的變量。兩節(jié)電池串聯(lián)流過它們的電流完全相同但每節(jié)電池的內(nèi)部狀態(tài)卻可以越走越偏。主要來源有三類。第一是制造公差即便同一批次極片厚度、電解液浸潤程度、隔膜透氣性都會有微小差異表現(xiàn)出來的就是容量、內(nèi)阻、自放電率不完全一樣。第二是溫度分布備用電源機箱內(nèi)部不是等溫場兩節(jié)電池如果有一節(jié)靠近功率器件或者散熱孔溫度差上幾攝氏度非常正常而溫度直接影響自放電速度和內(nèi)阻時間一長就把初始差異放大了。第三是同一個電池組內(nèi)部的 SOC 校準問題充電曲線和放電曲線都不是完全可逆的反復(fù)充放電后兩節(jié)電池的可用容量會發(fā)生錯位。在 2 串拓撲里因為兩節(jié)電池沒有并聯(lián)關(guān)系容量小或者自放電快的那一節(jié)會先被充滿、先被放空。如果系統(tǒng)沒有均衡機制每次充電都會讓高壓那節(jié)更容易出現(xiàn)過壓保護低壓那節(jié)永遠充不滿每次放電則反過來低壓那節(jié)先觸發(fā)欠壓保護高壓那節(jié)還有電但已經(jīng)無法輸出。日積月累短板越來越短。1.2 被動均衡為什么在備用電源里不夠用低成本 BMS 上最常見的均衡方式是電阻耗散式被動均衡?;驹硎菣z測到某節(jié)電池電壓偏高時把并聯(lián)在該電池兩端的 MOS 管打開讓多余的能量通過大功率電阻放掉直到電壓和其他電池接近。這個方案的優(yōu)勢很直接電路簡單、器件便宜、控制邏輯不復(fù)雜一顆普通 IO 加兩顆 MOS 和兩顆電阻就能實現(xiàn)。但它的短板也恰好卡在備用電源最在意的幾個點上。首先是熱問題。被動均衡的均衡電流一般只有 50~200mA高于這個范圍就會在電阻和 MOS 上產(chǎn)生非常可觀的功耗。100mA、兩只電池壓差 50mV 時看似功率不大可均衡通常不是幾分鐘而是要持續(xù)幾十分鐘甚至幾小時。密閉機箱里發(fā)熱會導(dǎo)致電池溫度升高溫度又拉大自放電差異得不償失。其次是效率問題。被動均衡本質(zhì)是“把多余能量變成熱量扔掉”不是“把能量從高的一節(jié)搬到低的一節(jié)”。在儲能和備用電源系統(tǒng)里能效是硬指標尤其當系統(tǒng)長期待機、只有少量浮充電流時拿電阻把幾瓦能量燒掉邏輯上就很虧。所以我的結(jié)論是被動均衡只能作為低成本的底線方案用在無明顯熱約束、對壽命要求不高的產(chǎn)品里。一旦把“長期浮充、溫度有限、壽命三年以上”作為設(shè)計目標主動均衡才是正路。1.3 方案選型為什么用均衡 IC 加 MCU 而不是專用 BMS AFE做 2 串電池管理市面上有很多集成的 BMS 模擬前端芯片采樣通道、保護邏輯、均衡驅(qū)動基本都做好了理論上最省事。但實際評估后我放棄了這條路原因有三個。一個是通道浪費。大部分模擬前端最少支持 3~4 節(jié)電池為 2 節(jié)電池買單顯然不劃算而且芯片體積、引腳數(shù)、外圍電路對小系統(tǒng)來說都偏重。另一個是均衡能力。多數(shù) AFE 自帶的均衡是“以被動方式為主”少數(shù)支持主動均衡的則需要外掛電感、變壓器和獨立的控制時序芯片本身并不直接解決功率級問題。換句話說選 AFE 省的是采樣和保護均衡功率還得另外設(shè)計。第三個原因是場景定制不夠靈活。備用電源、家用儲能柜、小型 UPS 這類系統(tǒng)均衡策略跟充電策略、負載調(diào)度、通信協(xié)議強相關(guān)。比如備用電源長期浮充時可能希望每天只在固定時間段做一次小電流均衡其余時間主控休眠也希望能通過通信接口看到兩節(jié)電池的壓差變化趨勢。專用 AFE 雖然也可以調(diào)參數(shù)但繞彎路的次數(shù)比直接寫 MCU 邏輯多得多。所以最終定了兩層架構(gòu)MP2642GR-Z 承擔功率級均衡的開關(guān)、電流控制和保護PIC18LF45K50 負責采樣、算法、狀態(tài)機、通信和低功耗調(diào)度。均衡能力由專用芯片保證策略靈活性由 MCU 保證。這相當于把“硬件上的搬移”和“軟件上的決策”解耦開后面調(diào)試時優(yōu)勢非常明顯。2. 硬件搭法從電池到 MCU 的完整通路2.1 功率級外圍少踩電感布局的坑MP2642GR-Z 這類的均衡控制芯片內(nèi)部實際上把驅(qū)動、邏輯控制、電流檢測和功率開關(guān)集成得比較完整外部真正需要搭的只是儲能電感、輸入輸出電容和采樣電阻。這也是我選它的重要原因功率部分不用自己畫半橋驅(qū)動、不需要自舉電容外圍清爽很多。拓撲上兩節(jié)串聯(lián)電池之間的主動均衡常用“電感儲能 交替搬運”的方式。簡單說就是當?shù)谝还?jié)電壓高于第二節(jié)芯片把第一節(jié)的能量先灌入電感然后再讓電感對第二節(jié)放電反過來也一樣。整個過程中電能不是被消耗掉而是從一節(jié)電池搬到了另一節(jié)所以效率和均衡能力都優(yōu)于電阻方案。具體器件選擇上電感我建議按最大均衡電流去選不要只按平均電流。比如目標均衡電流 0.8A峰值可能達到 1.2A 甚至更高電感額定飽和電流至少要達到峰值的 1.5 倍以上否則電流紋波一大電感叫聲和發(fā)熱會非常明顯。感值方面我們最終用了 22μH。感值越大開關(guān)紋波越小但動態(tài)響應(yīng)和效率會受影響感值太小峰值電流容易超過限流點。最終還是以芯片數(shù)據(jù)手冊里的推薦區(qū)間為主再根據(jù)實際溫升微調(diào)。容量上每個電池單元旁邊要放低 ESR 的陶瓷電容我習慣是 10μF 配 0.1μF而且盡量靠近芯片的功率引腳。很多人在布局時圖方便把濾波電容放到背面很遠的地方結(jié)果開關(guān)噪聲一大片ADC 采樣全被污染。主動均衡的開關(guān)頻率一般都在幾百 kHz 量級功率回路的幾何面積直接決定環(huán)路電感環(huán)路電感越大電壓尖峰越難看。還有一點電感的擺放方向最好不要靠近采樣電阻否則磁場會在采樣回路上感應(yīng)出噪聲直接影響均衡電流的穩(wěn)定性。實測中把電感旋轉(zhuǎn) 90 度后示波器上看到的采樣電阻紋波幅度能下降一半以上這個細節(jié)很值得注意。2.2 電壓采樣鏈路精度靠校準抗擾靠濾波主動均衡的效果好不好根本上取決于主控能不能準確判斷“哪一節(jié)電壓高、高了多少”。PIC18LF45K50 內(nèi)部有 ADC但電池電壓不能直接接進去需要經(jīng)過電阻分壓。這里有個容易犯的錯誤為了降低靜態(tài)功耗有些人喜歡用兆歐級的大電阻分壓結(jié)果 ADC 采樣時因為輸入阻抗不夠采樣值明顯偏低。解決辦法是在 ADC 引腳前加一個小阻值的 RC 濾波以及把 ADC 采樣時間設(shè)置得足夠長。我們實際用的分壓電阻總值在 200kΩ 左右ADC 前加 1kΩ 串阻和 0.1μF 電容效果比較均衡既不會明顯增加電池靜態(tài)功耗也不會拉低采樣精度。但分壓電阻本身有精度問題。常用 1% 電阻會帶來約百分之幾的原始誤差放在 3.6V 量程上看就是幾十毫伏的偏差這遠遠大于均衡需要的精度。所以不能只靠硬件精度必須做軟件校準。我的做法是樣機貼片前先用高精度數(shù)字萬用表標定每一組分壓電阻的實際比例再把校準系數(shù)寫進設(shè)備配置區(qū)之后每次上電采樣都按比例修正。這樣實測電壓誤差可以壓到 5mV 左右對 20mV 級的均衡閾值來說已經(jīng)夠用。采樣濾波也不能敷衍。均衡芯片工作時會在電池端產(chǎn)生周期性的電流變化電壓有紋波是正常的。如果直接拿原始 ADC 值比較算法會不停抖動均衡開關(guān)頻繁切換。我在固件里用了“去掉最大最小值的移動平均”每次采集 10 個點去掉一個最大值和一個最小值剩下的 8 個取平均。這樣既不丟失真實電壓變化也能濾掉開關(guān)毛刺。2.3 電源、使能與保護不讓主控比電池先倒下PIC18LF45K50 是低壓 MCU而電池組電壓在 5V 到 8.4V 之間需要 LDO 降壓供電。這里有個很實際的問題均衡器工作時電池電壓會因為負載而出現(xiàn)快速波動如果 LDO 前端走線太長MCU 可能在均衡啟動瞬間復(fù)位。我的建議是LDO 輸入電容要足夠大至少 22μF并且放在電池端子和 LDO 之間而不是放在主控板遠端。如果系統(tǒng)里還有其他負載最好讓主控供電單獨走一條線從電池端子處直接拉避免經(jīng)過功率輸出的大電流路徑。均衡使能信號必須由 MCU 控制但不能只靠軟件慢悠悠地關(guān)斷。板上要有一個 RC 延時電路配合硬件邏輯讓 MCU 一旦檢測到異??梢粤⒓窗咽鼓苣_拉低同時硬件路徑上不允許在沒有 MCU 控制的情況下自動恢復(fù)。備用電源系統(tǒng)最忌諱的是故障后悄悄恢復(fù)然后再次故障所以故障鎖定是必須的。保護方面除了保險絲和反接保護一定要加電池溫度采樣。MP2642GR-Z 這類芯片能處理電氣故障但熱故障是它控制不了的NTC 熱敏電阻放在兩節(jié)電池之間通過分壓直接接 MCU 的 ADC固件里做一二級溫度保護超過 45℃ 把均衡電流降一半超過 60℃ 直接禁止均衡。3. 均衡控制邏輯與 PIC18LF45K50 固件實現(xiàn)3.1 先搞清楚均衡電流和電壓測量之間的矛盾這可能是整個項目里最容易想歪的地方。均衡本身就是一種對電池的擾動主動均衡在工作時會有數(shù)百毫安電流流進或流出某一節(jié)電池電池內(nèi)阻會因此產(chǎn)生電壓降。也就是說均衡開啟的瞬間采樣到的電壓并不是真實的開路電壓而是帶負載后的端電壓。如果固件不做處理就會出現(xiàn)一個很滑稽的現(xiàn)象第一節(jié)電壓高開始向第二節(jié)搬電結(jié)果第一節(jié)電壓因為負載而跌下來了第二節(jié)電壓因為被充電而漲上去了算法以為方向反了于是又往反向搬。來回切換電池沒均衡好空耗能量還可能引起振蕩。解決思路有兩個層次。第一層是在均衡停止的間隙采樣。比如每秒鐘關(guān)斷均衡 10ms等電池端電壓穩(wěn)定后再采一組值用這個值去判斷是否繼續(xù)均衡。第二層是根據(jù)電流方向做端電壓補償需要知道電池內(nèi)阻和當前均衡電流公式是 V_ocv V_terminal - I_discharge × R_internal但這個對參數(shù)準確性要求高一般用在更復(fù)雜的 BMS 上。對 2 串系統(tǒng)來說我最終采用的是“停均衡再采樣”策略簡單可靠代價是均衡占空比會低一點實際測試下來整體效率依然可以接受。3.2 三段式狀態(tài)機比 PID 更好用之前有個項目里我試過用 PID 去連續(xù)調(diào)節(jié)均衡電流想要讓壓差平滑收斂到零。想法很理想實踐很痛苦PID 參數(shù)對電池內(nèi)阻、SOC、溫度都太敏感了同一個系統(tǒng)在冷機與熱機狀態(tài)下性能差很多很難調(diào)出一個穩(wěn)定參數(shù)。后來把策略改成三段式狀態(tài)機簡單粗暴但非常穩(wěn)。第一段是“判斷待命”主控周期性采集兩節(jié)電池電壓計算壓差。只有壓差超過 20mV 時才進入均衡低于 10mV 且持續(xù) 10 秒以上才退出中間的區(qū)間全是滯回區(qū)防止頻繁切換。第二段是“方向執(zhí)行”根據(jù)壓差方向確定搬移方向第一節(jié)高就往二節(jié)搬第二節(jié)高就往一節(jié)搬。這個方向要保持足夠長的時間至少幾十秒不允許像 PID 那樣連續(xù)反轉(zhuǎn)。電池均衡本來就是個緩慢過程剛從充滿電的電池往虧電電池搬了幾秒不可能立刻見效方向頻繁變化是浪費。第三段是“停止檢查”。均衡不是一直開到底的要周期性停止重新測量真實壓差。如果還沒到目標就繼續(xù)如果到了就直接關(guān)閉。整套邏輯用狀態(tài)機寫很清晰也方便把故障狀態(tài)插進去。偽代碼大致是這樣typedef enum { IDLE, BALANCE_A_TO_B, BALANCE_B_TO_A, STOP_CHECK, FAULT } bal_state_t; volatile bal_state_t bal_state IDLE; void balance_task(void) { uint16_t v1 get_batt_mv(1); uint16_t v2 get_batt_mv(2); int32_t delta (int32_t)v1 - v2; switch (bal_state) { case IDLE: if (delta 20) bal_state BALANCE_A_TO_B; else if (delta -20) bal_state BALANCE_B_TO_A; break; case BALANCE_A_TO_B: set_balance_direction(CELL1_TO_CELL2); enable_balancer(true); if (delta 10 || battery_temp 60) { enable_balancer(false); bal_state STOP_CHECK; } break; case BALANCE_B_TO_A: set_balance_direction(CELL2_TO_CELL1); enable_balancer(true); if (delta -10 || battery_temp 60) { enable_balancer(false); bal_state STOP_CHECK; } break; case STOP_CHECK: // 等待端電壓穩(wěn)定后再判斷 if (abs(delta) 10) bal_state IDLE; else bal_state (delta 0) ? BALANCE_A_TO_B : BALANCE_B_TO_A; break; case FAULT: enable_balancer(false); break; } }這套邏輯跑起來后整個系統(tǒng)給人一種“不慌不忙”的穩(wěn)定感沒有明顯來回切換的噪聲和熱波動。3.3 浮充、放電和待機要區(qū)別對待備用電源的使用場景不是只有一個工況我分了幾種典型狀態(tài)來調(diào)均衡策略。浮充狀態(tài)兩節(jié)電池都接近滿充關(guān)鍵是防止過壓。這時候均衡的重點是讓電壓高的那節(jié)稍微少充一點把多余能量搬到低的那節(jié)。但要注意均衡電流會疊加到充電電流上如果均衡導(dǎo)致整體電流超過充電器極限反而會讓電池處于持續(xù)過充狀態(tài)。所以浮充時我把均衡電流限制在較小的擋位比如 0.4A優(yōu)先保證安全。放電狀態(tài)系統(tǒng)帶載運行電池電壓會持續(xù)下降。這時候均衡的價值在于盡量把兩節(jié)電池的剩余電量拉齊防止其中一節(jié)先到欠壓點從而拖垮整個系統(tǒng)。但由于放電電流本身很大端電壓波動明顯不能頻繁依據(jù)瞬時壓差做判斷我建議只在小電流間歇期啟動均衡大電流放電時干脆關(guān)閉均衡等到負載結(jié)束再恢復(fù)。長期待機狀態(tài)這是備用電源最典型的工況。電池滿電掛在那里充電器在浮充偶爾有負載短時啟動。這種狀態(tài)下兩節(jié)電池的差異主要來自自放電率差異壓差增速很慢但會一點一點擴大。我用定時喚醒策略主控平時睡在低功耗模式每 30 分鐘醒一次采樣兩節(jié)電池電壓如果壓差超過閾值就打開均衡均衡 10 分鐘后再次進入睡眠。這樣整機平均功耗非常低又能長期壓住壓差漂移。降載處理也必須有如果系統(tǒng)檢測到放電電流超過設(shè)定值說明進入了高負載工況均衡立即暫停。因為此時均衡模塊的電流會干擾電池對負載的輸出能力尤其是備用電源給小容量負載供電時額外的均衡電流可能觸發(fā)電池過流保護。4. 儲能場景下的系統(tǒng)聯(lián)調(diào)與故障排查4.1 實測波形與關(guān)鍵指標聯(lián)調(diào)階段我把示波器探頭接在均衡電感的開關(guān)節(jié)點和采樣電阻兩端觀察電流波形。正常工況下開關(guān)節(jié)點是穩(wěn)定的方波頻率約 300kHz采樣電阻上看到的是連續(xù)的三角波電流峰值約 1.2A平均電流約 0.6A。最開始發(fā)現(xiàn)一個問題均衡電流波形不是干凈的三角波而是疊加了明顯的高頻振蕩。后來排查確定問題出在電感和芯片引腳之間的走線太長形成了寄生振蕩。把走線縮短、加寬同時在芯片功率腳附近增加了一顆 0.1μF 的高頻電容后波形立刻干凈了。這個現(xiàn)象說明主動均衡電路對功率回路幾何非常敏感布局優(yōu)先級高于一切。均衡效果的測試過程也很重要。為了快速驗證我把兩節(jié)電池人為充到 3.55V 和 3.50V壓差 50mV然后啟動均衡。實測經(jīng)過約 25 分鐘壓差降到 10mV 以內(nèi)均衡過程中電池表面溫度升高不到 3℃。如果不做均衡同樣兩節(jié)電池在備用電源里浮充一個月后壓差可以擴大到 120mV 以上而且趨勢還會繼續(xù)惡化。還有個值得記錄的指標是均衡效率。我通過比較均衡前后兩節(jié)電池各自放出的容量差來衡量整個過程中的能量損耗主要來自電感銅損、芯片開關(guān)損耗和導(dǎo)通損耗總體能量轉(zhuǎn)移效率約 85%。相對被動均衡的 0% 效率這個提升是數(shù)量級的。4.2 常見問題速查表調(diào)試過程中遇到的問題我整理了一張速查表很多問題現(xiàn)象相同、原因卻完全不同提前對照能省很多時間?,F(xiàn)象可能原因排查方向均衡電流很小或沒有電感飽和電流不夠電流保護誤觸發(fā)換更大飽和電流的電感檢查電流采樣電阻規(guī)格均衡啟動時 MCU 復(fù)位主控供電 LDO 輸入被均衡電流拉低增大 LDO 輸入電容獨立供電走線電池電壓讀數(shù)跳變ADC 引腳被開關(guān)噪聲干擾增加 RC 濾波采樣時暫停均衡芯片表面溫度偏高功率回路走線過長或電感品質(zhì)差縮短功率回路換低 DCR 電感均衡方向反復(fù)切換采樣時機不對讀到了帶負載端電壓改成停止均衡后再采樣兩節(jié)電池壓差始終壓不住均衡閾值太寬或均衡時間太短收緊閾值延長最長均衡時間、提高均衡電流外殼靠近電感處有嘯叫電感磁芯松動或開關(guān)頻率進入可聽區(qū)換一體成型電感調(diào)整開關(guān)頻率4.3 長期浮充測試中的特殊發(fā)現(xiàn)備用電源是要一年到頭掛在系統(tǒng)里的跟普通測試瞬間出結(jié)果不一樣我專門做了一輪連續(xù) 30 天的浮充老化測試。 過程中發(fā)現(xiàn)一個有意思的現(xiàn)象均衡并不是完全消除壓差而是把壓差壓在一個動態(tài)穩(wěn)定的區(qū)間內(nèi)。每天白天由于環(huán)境溫度高自放電差異大壓差會稍微漲上去凌晨溫度降下來均衡又會把它慢慢拉回來。這種小幅波動其實是正常的不用一看到壓差超過閾值就緊張。但有個坑必須提醒均衡閾值不能設(shè)得太激進。我開始時把閾值設(shè)成 10mV結(jié)果均衡模塊每隔幾分鐘就啟動一次雖然每次工作時間不長但頻繁的大電流脈沖對電池循環(huán)壽命的影響可能比緩慢的小壓差更糟糕。后來把閾值放寬到 20mV、停止閾值 10mV系統(tǒng)反而更安靜電池溫度更穩(wěn)定整體效果更好。另外一個容易忽視的是主控看門狗。PIC18LF45K50 的軟件跑狀態(tài)機、通信、均衡控制任何一個環(huán)節(jié)卡死都可能讓均衡使能一直保持打開這在備電場景里是安全隱患。我的做法是看門狗周期設(shè)為 1 秒主循環(huán)任務(wù)必須按順序喂狗并且均衡使能引腳在每個主循環(huán)周期內(nèi)都要被重新寫一次一旦主控跑飛看門狗復(fù)位后引腳就會回到默認關(guān)斷狀態(tài)。最終這套 2 串主動均衡方案在儲能樣機和備用電源負載測試中穩(wěn)定運行了幾個月最明顯的變化是兩節(jié)電池在長期浮充后的容量差明顯縮小系統(tǒng)從滿載到低電量報警的可用時間也比未均衡時更長。均衡這件事重點不在于把兩個電池做到絕對一樣而是讓它們不至于因為一點點差異就被迫提早退休。電路和算法都不復(fù)雜真正復(fù)雜的是把每個細節(jié)都想清楚后再動手這也是我一直主張的做法。