戰(zhàn):MT9805+MT9820)
搞BMS的兄弟看到288串這個(gè)數(shù)應(yīng)該都懂是什么概念。這不是電動汽車上那種96串108串的小場面是儲能柜、大型船舶、換電站才會遇到的問題。單體電壓采集要覆蓋288串這意味著至少要十幾顆AFE芯片協(xié)同工作通信拓?fù)湟坏┻x錯(cuò)后面全盤崩。我最近剛用國產(chǎn)的MT9805MT9820組合做完一套完整方案從原理圖到SPI菊花鏈代碼再到實(shí)際調(diào)試和量產(chǎn)測試前前后后踩了不少坑。這篇文章把整套東西拆開講清楚如果你也在弄儲能BMS、高壓PACK或者任何需要高串?dāng)?shù)電池采集的項(xiàng)目可以直接參考。先交代一下方案背景MT9805是國產(chǎn)多節(jié)電池AFE芯片負(fù)責(zé)單體電壓、溫度采集和均衡控制MT9820是配套的通信橋接芯片負(fù)責(zé)把主控MCU和整條菊花鏈連接起來。兩者配合單鏈就能帶動288串電池的實(shí)時(shí)采集。這個(gè)思路最大的價(jià)值在于國產(chǎn)芯片供應(yīng)鏈穩(wěn)定、成本可控而且菊花鏈架構(gòu)能大幅減少線束和通信輪詢開銷。文章會比較長我會從芯片選型原理、完整電路設(shè)計(jì)、固件實(shí)現(xiàn)到問題排查一路寫下來適合硬件工程師、嵌入式工程師以及BMS系統(tǒng)集成相關(guān)的朋友收藏著慢慢看。1. 項(xiàng)目背景與總體方案1.1 288串電池場景從哪來先說清楚為什么要做288串。以磷酸鐵鋰為例單體標(biāo)稱電壓3.2V充滿后約3.65V。288串意味著標(biāo)稱總電壓921.6V滿充電壓超過1000V這是一個(gè)明顯的百伏級以上高壓直流系統(tǒng)。這種規(guī)格在乘用車?yán)锩婧苌僖姷趦δ茴I(lǐng)域非常常見——高壓化是儲能系統(tǒng)降本增效的核心方向電壓高了之后相同功率下電流變小銅排、線纜、連接器的成本都能壓下來整套系統(tǒng)的能量轉(zhuǎn)換效率也會有一定提升。288串的另一個(gè)特征是電池簇電壓跨度極大。從最低電位點(diǎn)到最高電位點(diǎn)整個(gè)電池堆的電壓差高達(dá)1000V這對采集電路的高壓隔離、安全間距、通信拓?fù)涠际怯残钥简?yàn)。很多人一開始想得很簡單多拉幾根線每顆芯片獨(dú)立用SPI或者I2C和主控通信不就行了真到工程現(xiàn)場那種做法根本沒法落地。以我們這套方案為例18顆MT9805組成一條菊花鏈每顆芯片負(fù)責(zé)16串單體電壓和8路溫度采集總覆蓋288串。MT9820作為橋接控制器把主控MCU的普通SPI信號轉(zhuǎn)換成菊花鏈需要的物理層信號再發(fā)到整條鏈路上。整條鏈上所有AFE芯片沒有獨(dú)立仲裁、沒有總線競爭主控發(fā)一個(gè)廣播命令所有AFE同時(shí)采集然后數(shù)據(jù)像流水線一樣逐級傳回主控。這是高串?dāng)?shù)BMS最主流的架構(gòu)思路。1.2 通信方案選型菊花鏈 vs CAN vs 獨(dú)立SPI做BMS的人都會面臨一個(gè)經(jīng)典選擇AFE之間的通信到底用獨(dú)立SPI、CAN還是菊花鏈我自己在項(xiàng)目初期把三種方案都認(rèn)真評估過這里直接說結(jié)論。獨(dú)立SPI是最先被否掉的。288串需要18顆AFE每顆都要拉一組時(shí)鐘、數(shù)據(jù)、片選信號出來外殼開孔和線束數(shù)量會爆炸。更要命的是不同位置AFE的地電位差別巨大普通的SPI電平根本沒法跨越這么高的電位差除非每顆芯片單獨(dú)加隔離成本和復(fù)雜度都無法接受。CAN總線是很多BMS工程師第一反應(yīng)想到的方案。CAN確實(shí)自帶隔離特性模塊間通過收發(fā)器電氣隔離可靠性也不錯(cuò)。但問題出在幀效率上一個(gè)標(biāo)準(zhǔn)CAN幀最多帶8字節(jié)數(shù)據(jù)如果每幀塞8個(gè)電壓數(shù)據(jù)288串至少要36個(gè)幀再加上每顆AFE旁邊的MCU都要做中轉(zhuǎn)整個(gè)鏈路的數(shù)據(jù)延遲會變得很大。在儲能BMS的高實(shí)時(shí)性要求下CAN通常只用在主控對外通信這一層不適合做芯片級采樣網(wǎng)絡(luò)。菊花鏈方案的優(yōu)勢體現(xiàn)在三個(gè)方面一是物理連線只有一對差分信號線束成本極低二是數(shù)據(jù)是流水線式的串行移位一顆命令就能覆蓋所有AFE三是通信速率高整鏈輪詢一次所有電壓和溫度實(shí)測能做到10毫秒以內(nèi)。成本和實(shí)時(shí)性都優(yōu)于前兩種方案代價(jià)是需要仔細(xì)處理鏈路上的隔離和干擾問題這部分后文會展開。1.3 為什么選國產(chǎn)芯片在選擇芯片時(shí)第一個(gè)想到的當(dāng)然是國外那些在BMS領(lǐng)域深耕多年的AFE方案比如ADI的LTC68系列和TI的BQ系列。這些芯片成熟、文檔豐富、市場驗(yàn)證充分但價(jià)格和供貨在最近幾年確實(shí)波動比較大。對于儲能這種對BOM成本高度敏感的行業(yè)國產(chǎn)芯片的吸引力越來越大。MT9805和MT9820的組合打動我的核心原因有幾個(gè)。首先MT9805單芯片集成了16通道電壓采集、8通道溫度采集、被動均衡控制和完整的自診斷功能典型電壓采樣精度能做到±3mV以內(nèi)滿足動力電池和儲能電池的基本需求。其次MT9820把MCU側(cè)接口抽象得很干凈主控跑一個(gè)標(biāo)準(zhǔn)的SPI就能控制整條鏈軟件工作量大幅降低。最后是國產(chǎn)芯片的本地化支持優(yōu)勢遇到問題可以直接找FAE上門調(diào)試項(xiàng)目周期短了很多。當(dāng)然國產(chǎn)芯片也存在生態(tài)不夠完善、參考設(shè)計(jì)相對較少的問題。我寫這篇文章的目的之一就是把這些工程細(xì)節(jié)補(bǔ)上讓后來的人少走彎路。2. 芯片角色與BMS架構(gòu)定位2.1 MT9805到底干了多少活一顆MT9805芯片在物理上就是一個(gè)標(biāo)準(zhǔn)的CSC單元。CSC是電池采樣單元Cell Supervisory Circuit是BMS系統(tǒng)中直接和電芯打交道的最底層模塊。MT9805的16個(gè)電壓采集通道分別連接到16串電芯的正負(fù)極通過內(nèi)部高精度ADC測量每串電芯的電壓。它并不是傳統(tǒng)意義上那種多路復(fù)用單ADC的簡單位置切換方案而是針對BMS場景做了大量優(yōu)化包括抗混疊濾波、動態(tài)量程切換、斷線檢測等。溫度采集方面MT9805支持8路外部NTC輸入可以直接接熱敏電阻來測量電芯表面溫度或者模組環(huán)境溫度。溫度和電壓數(shù)據(jù)采集完之后芯片內(nèi)部會做校驗(yàn)和診斷例如過壓、欠壓比較器是硬件級的不依賴主控就能快速觸發(fā)告警。被動均衡也是MT9805的重要功能。每一路電壓采集通道旁邊都集成了一個(gè)均衡開關(guān)外接均衡電阻后可以對電壓偏高的電芯進(jìn)行放電均衡。芯片的均衡控制可以通過寄存器設(shè)置支持連續(xù)均衡和定時(shí)均衡兩種模式。在我調(diào)試的這顆芯片上單通道均衡電流的典型值可以做到100mA左右對于儲能電芯來說基本夠用。MT9805還有一個(gè)很關(guān)鍵的點(diǎn)支持SPI模式的菊花鏈連接。每顆芯片都有一個(gè)信號輸入引腳和一個(gè)信號輸出引腳多顆芯片像串糖葫蘆一樣連接起來主控只需要一根SPI總線就能控制整條鏈上的所有芯片。2.2 MT9820在鏈路里的真實(shí)位置MT9820的角色很多人一開始會搞混。它不是一顆AFE也不是一顆主控MCU而是主控MCU和菊花鏈AFE之間的通信橋接芯片。你可以把它理解成一個(gè)翻譯官信使MCU通過標(biāo)準(zhǔn)SPI接口把命令發(fā)給MT9820MT9820負(fù)責(zé)把命令轉(zhuǎn)換成菊花鏈需要的物理層信號發(fā)送給第一條鏈路的MT9805數(shù)據(jù)從最后一級AFE傳回來之后再由MT9820接收并緩存通過SPI回傳給MCU。這個(gè)橋接芯片的價(jià)值在于把MCU從復(fù)雜的菊花鏈時(shí)序中解放出來。如果沒有MT9820主控MCU必須自己精確控制鏈路通信的脈沖時(shí)序、喚醒邏輯和診斷協(xié)議對MCU資源的要求會高很多。有了MT9820哪怕你用一顆很便宜的Cortex-M0內(nèi)核MCU也能穩(wěn)穩(wěn)控制288串電池的采集。MT9820還承擔(dān)了鏈路物理層的適配工作。高壓電池堆里從鏈頭到鏈尾的電位差可能超過1000V菊花鏈信號在相鄰AFE板之間傳輸時(shí)必須要解決共模電壓問題。MT9820內(nèi)部集成了相應(yīng)的收發(fā)電路能保證信號在高壓環(huán)境中穩(wěn)定傳輸同時(shí)為主控側(cè)提供一個(gè)低電壓域的干凈接口。2.3 CSC、BMU、BCU之間的關(guān)系聊到這兒順便把BMS的層級概念理清楚。這三個(gè)縮寫經(jīng)常一起出現(xiàn)很多人分不清但實(shí)際做項(xiàng)目的時(shí)候分層邏輯非常重要。CSC是電池采樣單元直接面對電芯負(fù)責(zé)采集電壓、溫度和均衡控制。在這套方案里每一塊MT9805小板就是一個(gè)標(biāo)準(zhǔn)的CSC板。若干個(gè)CSC組成一個(gè)電池簇的采樣網(wǎng)絡(luò)加上相應(yīng)的通信管理單元就構(gòu)成了BMU從控模塊。從控模塊負(fù)責(zé)匯總本簇的所有采樣數(shù)據(jù)做初步的濾波和診斷然后通過CAN總線把數(shù)據(jù)上報(bào)給主控。主控通常叫BCU是BMS的大腦負(fù)責(zé)SOC估算、SOP計(jì)算、絕緣檢測、繼電器控制和故障保護(hù)策略?;氐奖痉桨窶T9805組成了CSC層MT9820所在的板卡可以理解成位于BMU從控側(cè)負(fù)責(zé)把菊花鏈數(shù)據(jù)整合后傳給主控BCU。這種分層架構(gòu)在儲能和大型車輛BMS里是標(biāo)準(zhǔn)做法好處是每一層職責(zé)單一、便于故障隔離哪一層出問題都不會導(dǎo)致整個(gè)系統(tǒng)失聯(lián)。3. 完整電路設(shè)計(jì)與硬件細(xì)節(jié)3.1 288串菊花鏈系統(tǒng)拓?fù)湎犬嫵稣麄€(gè)系統(tǒng)的信號流拓?fù)溥@是理解后續(xù)所有內(nèi)容的基礎(chǔ)。拓?fù)浣Y(jié)構(gòu)我直接列出來主控MCU (SPI) ↓ MT9820通信橋接 ↓ [菊花鏈差分雙絞線] AFE板 #1第1~16串最低電位 ↓ [級聯(lián)線] AFE板 #2第17~32串 ↓ ... AFE板 #18第273~288串最高電位 ↓ [回讀線] MT9820 數(shù)據(jù)返回在這個(gè)拓?fù)渲兄骺豈CU通過SPI訪問MT9820MT9820把命令發(fā)送到第一個(gè)AFE的輸入端。每一顆AFE收到命令后會執(zhí)行操作然后把命令和數(shù)據(jù)向后傳遞最后一級AFE的數(shù)據(jù)通過回讀線回到MT9820再被主控讀取。命令下行和數(shù)據(jù)上行共用同一對物理線路這也是菊花鏈與普通SPI總線最大的區(qū)別不是并行連接而是串聯(lián)連接。這個(gè)方案的另一個(gè)好處是只要鏈路不斷主控就能以極高的效率一次性訪問所有芯片。例如主控發(fā)送啟動所有AFE的ADC轉(zhuǎn)換命令18顆MT9805會同時(shí)開始轉(zhuǎn)換而不是一顆一顆地被輪詢詢問。這種并行性大大縮短了整個(gè)系統(tǒng)的采樣周期實(shí)際輪詢時(shí)間可以壓縮到毫秒級。3.2 圍繞MT9805的關(guān)鍵外圍電路MT9805本身是AFE的完整核心但外圍電路設(shè)計(jì)不當(dāng)?shù)脑捫酒阅軙蟠蛘劭?。我總結(jié)幾個(gè)關(guān)鍵模塊的做法。首先是電壓采樣輸入濾波。每一串電芯的采樣引腳之間通常需要串聯(lián)一個(gè)100Ω到1kΩ的電阻并并聯(lián)一個(gè)100pF到1nF的電容構(gòu)成一階低通濾波。這里需要注意RC時(shí)間常數(shù)不能設(shè)置得太大否則電壓突變時(shí)采樣值會滯后影響動態(tài)響應(yīng)。我常用的參數(shù)是510Ω100nF截止頻率大約3kHz既能濾除高頻噪聲又不會影響電壓測量的實(shí)時(shí)性。還有一點(diǎn)采樣線上的濾波電容必須選擇C0G或NP0材質(zhì)的電容溫度穩(wěn)定性好X7R和X5R在這種高精度場景下不夠理想。其次是AFE供電。MT9805可以直接從所在模組的電池電壓取電芯片內(nèi)部有穩(wěn)壓器。以16串磷酸鐵鋰為例模組電壓范圍約44V到58V完全在芯片的輸入電壓范圍之內(nèi)。但從工程可靠性的角度我建議在AFE板的電源入口加上一個(gè)TVS管和串聯(lián)限流電阻防止電池反接或浪涌電壓打壞芯片。另外如果項(xiàng)目對低功耗要求高還要考慮在長時(shí)間靜置時(shí)關(guān)閉AFE供電或者利用芯片的睡眠模式來降低整機(jī)功耗。然后是均衡電路。MT9805每個(gè)均衡通道的輸出引腳外接均衡電阻到對應(yīng)的電芯負(fù)極。均衡電阻的阻值決定了均衡電流阻值越小電流越大、均衡時(shí)間越短但發(fā)熱也越嚴(yán)重。我用的典型值是16Ω電阻配1W封裝均衡電流約100mA持續(xù)工作半小時(shí)溫度在可接受范圍內(nèi)。PCB上均衡電阻區(qū)域要鋪銅散熱周圍不要放熱敏器件。3.3 高壓域布局與線束設(shè)計(jì)288串電池組意味著從AFE板#1到AFE板#18每一級之間都存在著幾十伏的電位差而整條鏈的絕對電位差接近1000V。這種情況下PCB和線束的高壓防護(hù)設(shè)計(jì)是絕對不能馬虎的。我建議每個(gè)電池模組單獨(dú)放一塊AFE板板上只采集本模組范圍內(nèi)的16串電壓。模組與模組之間通過連接器連接連接器必須選擇額定耐壓1500V以上的型號最好帶防誤插設(shè)計(jì)否則產(chǎn)線上插錯(cuò)一根線就可能燒掉一整塊采集板。PCB上凡是帶電部分到安全區(qū)域的爬電距離按500V工作電壓以上等級留足余量必要時(shí)開槽處理。菊花鏈通信線是關(guān)鍵中的關(guān)鍵。兩顆AFE板之間的級聯(lián)線應(yīng)該采用雙絞線推薦帶屏蔽層的對絞線屏蔽層在MT9820那端單點(diǎn)接地即可不要兩端都接否則容易形成地環(huán)路。線束長度超過30cm時(shí)建議在鏈的末端加上匹配電阻降低信號反射。通信報(bào)文本身有CRC校驗(yàn)但物理層的信號完整性仍然是整個(gè)系統(tǒng)穩(wěn)定工作的底線。我自己在調(diào)試時(shí)吃過一個(gè)虧剛開始圖省事用了普通排線拉菊花鏈通信結(jié)果只要運(yùn)行大電流充放電CRC錯(cuò)誤計(jì)數(shù)就暴增電壓數(shù)據(jù)頻繁重讀。后來換成雙絞屏蔽線錯(cuò)誤率直接降到幾乎為零。這個(gè)坑希望大家直接避開。3.4 PCB Layout要點(diǎn)Layout的好壞決定了AFE板能不能發(fā)揮芯片標(biāo)稱性能。MT9805這部分我總結(jié)幾條實(shí)戰(zhàn)經(jīng)驗(yàn)。第一采樣走線要短且粗。16路電芯采樣線從連接器進(jìn)入芯片時(shí)不要繞遠(yuǎn)路也不要中間打過孔再繞來繞去。采樣是小信號任何長走線都是天線容易把干擾引入ADC。兩個(gè)采樣引腳之間的走線盡量等長減小串聯(lián)電阻差異導(dǎo)致的通道間偏差。第二模擬和數(shù)字地要分區(qū)處理。AFE芯片的模擬地和數(shù)字地通常獨(dú)立引腳Layout時(shí)建議單點(diǎn)連接避免數(shù)字噪聲耦合到模擬采樣通道。芯片底部的散熱焊盤要連接到模擬地同時(shí)起到散熱作用。第三MT9820和MT9805菊花鏈信號走線要遠(yuǎn)離功率路徑。儲能系統(tǒng)里大電流充放電會產(chǎn)生強(qiáng)磁場如果通信線貼著功率母線走很容易被耦合出干擾。在空間允許的情況下給菊花鏈信號留出獨(dú)立的走線區(qū)域并用地線包裹。第四去耦電容要就近放置。每顆芯片的電源引腳旁邊放一到兩個(gè)100nF的小電容加一個(gè)10μF的大電容并且電容要盡量靠近引腳。這個(gè)細(xì)節(jié)直接決定了芯片在低溫或高壓場景下能不能穩(wěn)定工作。4. 固件實(shí)現(xiàn)從初始化到均衡控制4.1 SPI菊花鏈初始化流程硬件搭好之后接下來是固件。先說初始化流程這是最容易出問題的階段。MT9820上電后主控MCU首先要通過SPI完成對MT9820的復(fù)位然后發(fā)送喚醒命令將整條菊花鏈上的MT9805從休眠狀態(tài)喚醒。喚醒之后建議先做一次鏈路掃描確認(rèn)鏈上有多少顆AFE在線。這個(gè)步驟很重要因?yàn)槿绻溕夏硞€(gè)AFE供電沒接好或者級聯(lián)線斷開后面的芯片會全部失聯(lián)如果不掃描直接配置后面讀回來的數(shù)據(jù)全是錯(cuò)的。我習(xí)慣在初始化開頭寫一個(gè)循環(huán)逐顆讀取AFE的狀態(tài)寄存器記錄哪些芯片在線、哪些離線。接下來是廣播配置。MT9805支持廣播寫寄存器也就是說主控發(fā)一條命令所有AFE同時(shí)接收并寫入相同的配置。這一步可以用來設(shè)定ADC濾波深度、過壓欠壓閾值、溫度采樣使能等全局參數(shù)。廣播配置可以大幅節(jié)省初始化時(shí)間但要小心不同位置的AFE如果裝配參數(shù)不同要分地址單獨(dú)配置不要貪圖方便廣播覆蓋。初始化參考代碼簡化版void bms_chain_init(void) { mt9820_spi_reset(); // 復(fù)位MT9820 mt9820_wakeup_chain(); // 喚醒整條菊花鏈 delay_ms(10); // 等待AFE穩(wěn)定 // 掃描在線AFE數(shù)量 for (uint8_t i 0; i AFE_NUM_MAX; i) { uint16_t status mt9820_read_afe(AFE_REG_STATUS, i); if ((status AFE_ALIVE_MASK) ! 0) { online_afe_count i 1; } else { break; // 遇到第一個(gè)失聯(lián)的芯片就停止 } } if (online_afe_count ! AFE_NUM_EXPECT) { error_handler(ERROR_CHAIN_INCOMPLETE); } // 廣播配置全局參數(shù) uint16_t cfg AFE_CFG_ADC_FILTER_MED | AFE_CFG_OVP_EN | AFE_CFG_UVP_EN; mt9820_broadcast(AFE_WRITE_CFG, cfg); }4.2 全鏈電壓讀取與時(shí)間估算鏈路初始化完成之后正常的采樣循環(huán)就簡單了。我用的流程是先廣播啟動ADC轉(zhuǎn)換命令讓所有AFE并行采集各自的16路電壓和溫度等待一段固定時(shí)間等轉(zhuǎn)換完成然后一次性從菊花鏈上把所有數(shù)據(jù)讀回來。MT9805在采集全部16通道電壓時(shí)ADC轉(zhuǎn)換時(shí)間通常在1到2毫秒量級具體取決于配置的濾波深度。數(shù)據(jù)回傳的時(shí)間取決于SPI速率和數(shù)據(jù)量18顆AFE每顆16通道電壓乘2字節(jié)再加每顆2到4字節(jié)的狀態(tài)和CRC總共大約600到700字節(jié)數(shù)據(jù)。在1Mbps的SPI速率下傳輸耗時(shí)大約5毫秒左右加上ADC轉(zhuǎn)換時(shí)間一輪全量采集大約7到10毫秒。這個(gè)性能在BMS場景中完全是夠用的甚至可以說非常充裕。數(shù)據(jù)讀取的代碼思路如下void read_all_cell_voltages(uint16_t cell_voltage_mv[288]) { mt9820_send_cmd(AFE_CMD_START_ADC_ALL); // 廣播啟動ADC delay_us(AFE_ADC_CONV_TIME_US); // 等待所有AFE轉(zhuǎn)換完成 uint8_t raw_data[AFE_NUM_EXPECT * (16 * 2 2)]; mt9820_read_chain(raw_data, sizeof(raw_data)); for (uint8_t chip 0; chip AFE_NUM_EXPECT; chip) { uint8_t *p raw_data[chip * (16 * 2 2)]; for (uint8_t ch 0; ch 16; ch) { uint16_t adc (p[ch * 2] 8) | p[ch * 2 1]; cell_voltage_mv[chip * 16 ch] (uint16_t)(adc * CELL_VOLTAGE_LSB_MV 0.5f); } // 這里可以做CRC校驗(yàn)失敗則標(biāo)記該芯片數(shù)據(jù)無效 } }實(shí)際項(xiàng)目中我建議把返回值做一個(gè)結(jié)構(gòu)體帶上一輪掃描的CRC錯(cuò)誤計(jì)數(shù)和掉線標(biāo)志方便上層算法做數(shù)據(jù)融合和故障診斷。不要只返回電壓數(shù)組因?yàn)楹雎藻e(cuò)誤狀態(tài)會在后期排查問題時(shí)非常痛苦。4.3 被動均衡控制實(shí)現(xiàn)被動均衡是BMS的基礎(chǔ)功能。MT9805的每個(gè)電壓通道都對應(yīng)一個(gè)均衡開關(guān)通過寫均衡控制寄存器可以獨(dú)立控制某幾路的均衡開啟和關(guān)閉。我通常采用的策略是組內(nèi)均值比較法每顆AFE板對應(yīng)一個(gè)16串模組計(jì)算該模組內(nèi)16串電芯的平均電壓然后把那些電壓明顯高于平均值的電芯打開均衡。均衡開啟之后不能一直開著不管。電芯電壓在均衡過程中會緩慢下降當(dāng)下降到目標(biāo)電壓附近時(shí)就應(yīng)該關(guān)閉均衡。同時(shí)還要考慮溫度因素功率電阻的發(fā)熱會累積如果整塊AFE板溫度超過設(shè)定值系統(tǒng)應(yīng)暫停均衡等溫度降下來再繼續(xù)。代碼示例void balance_task(void) { for (uint8_t chip 0; chip AFE_NUM_EXPECT; chip) { uint16_t sum 0; uint16_t v[16]; for (uint8_t ch 0; ch 16; ch) { v[ch] cell_voltage_mv[chip * 16 ch]; sum v[ch]; } uint16_t avg sum / 16; uint16_t balance_mask 0; for (uint8_t ch 0; ch 16; ch) { if (v[ch] avg BALANCE_START_MV) { balance_mask | (1 ch); } } mt9820_write_afe(AFE_REG_BALANCE, chip, balance_mask); } }有一個(gè)容易忽略的細(xì)節(jié)均衡開啟的瞬間對應(yīng)通道的電壓測量值會受到均衡電流的影響出現(xiàn)一個(gè)下降臺階。這是正常的不要把它當(dāng)成真正的電壓變化。算法層在對電壓做濾波處理時(shí)要把處于均衡狀態(tài)的通道排除掉否則一會開均衡一會關(guān)均衡SOC估算會被攪亂。4.4 SOP功率估算怎么和芯片聯(lián)動SOPState of Power功率狀態(tài)是儲能BMS里一個(gè)重要的對外輸出參數(shù)簡單說就是告知PCS當(dāng)前電池系統(tǒng)還能充多少功率、還能放多少功率。SOP計(jì)算不僅要用到當(dāng)前的電壓、電流、溫度和SOC還要結(jié)合電池的直流內(nèi)阻。在MT9805MT9820這套方案里主控MCU通過菊花鏈拿到實(shí)時(shí)電壓和溫度數(shù)據(jù)外部的電流采樣通常由獨(dú)立的霍爾傳感器或分流器采集數(shù)據(jù)匯總之后在MCU里完成SOP計(jì)算。一個(gè)簡化的充電SOP計(jì)算思路如下用當(dāng)前OCV和查表內(nèi)阻R估算最大允許充電電流再和SOC窗口限制的電流取最小值最后乘以當(dāng)前電壓得到功率上限。代碼片段float calc_charge_sop(float ocv_v, float r_ohm, float vmax_v, float soc, float temp_c, float rated_cap_ah) { float r_adjusted r_ohm; if (temp_c 10.0f) r_adjusted * 1.5f; // 低溫內(nèi)阻增大 float imax_by_voltage (vmax_v - ocv_v) / r_adjusted; float imax_by_soc (100.0f - soc) * rated_cap_ah / 3600.0f; float imax fminf(imax_by_voltage, imax_by_soc); if (imax 0.0f) imax 0.0f; return imax * vmax_v; // 功率近似值 }這里要特別注意SOP計(jì)算結(jié)果的輸出必須做平滑處理不能一幀數(shù)據(jù)和下一幀數(shù)據(jù)波動太大否則PCS會頻繁調(diào)節(jié)功率造成系統(tǒng)震蕩。我一般給SOP加一階低通濾波或者變化率限制比如每秒變化量不得超過額定功率的5%。這個(gè)細(xì)節(jié)在聯(lián)調(diào)階段能省掉很多麻煩。5. 實(shí)測表現(xiàn)與數(shù)據(jù)分析5.1 288串電壓采樣精度方案跑通之后我做了比較詳細(xì)的性能測試。電壓精度的測試方法很簡單用一臺六位半高精度電壓源模擬電芯電壓同時(shí)接上AFE板的采樣通道比對芯片讀數(shù)與標(biāo)準(zhǔn)源讀數(shù)之間的差值。實(shí)測從18顆MT9805中抽取了36個(gè)通道做精度抽樣最大偏差為2.2mV平均偏差在1mV以內(nèi)芯片手冊標(biāo)稱的±3mV精度是可以達(dá)到的。這個(gè)精度水平對于磷酸鐵鋰儲能BMS來說足夠用了因?yàn)榱姿徼F鋰的充放電平臺比較平緩如果測量誤差超過10mVSOC估算和均衡判定都會明顯受影響但2到3mV的誤差基本不影響系統(tǒng)工作。有一點(diǎn)值得提醒精度測試要在芯片穩(wěn)定工作、溫度平衡之后進(jìn)行。剛上電的前幾分鐘芯片內(nèi)部參考源還未完全穩(wěn)定讀數(shù)可能偏大這是正?,F(xiàn)象BMS上電后應(yīng)該先做一段時(shí)間的預(yù)熱和數(shù)據(jù)丟棄再進(jìn)入正式采樣狀態(tài)。5.2 通信穩(wěn)定性與誤碼統(tǒng)計(jì)通信穩(wěn)定性是這套方案最需要重點(diǎn)驗(yàn)證的。我的測試方法很簡單讓系統(tǒng)在室溫下連續(xù)運(yùn)行72小時(shí)每100ms讀一輪全量數(shù)據(jù)統(tǒng)計(jì)CRC錯(cuò)誤次數(shù)和數(shù)據(jù)重讀次數(shù)。實(shí)測結(jié)果是在采用雙絞屏蔽線、終端匹配電阻、SPI速率1Mbps的條件下72小時(shí)共約259萬輪采樣CRC錯(cuò)誤次數(shù)總計(jì)低于10次重讀一次后基本都能恢復(fù)正常。這說明菊花鏈通信的可靠性是完全可以接受的。對比之前用普通排線的情況同樣的代碼和芯片CRC錯(cuò)誤次數(shù)是每小時(shí)幾十次級別完全沒法用。物理層的設(shè)計(jì)細(xì)節(jié)直接影響整個(gè)系統(tǒng)能不能穩(wěn)定工作。另外我還測試了上下電瞬間的鏈路狀態(tài)。288串電池系統(tǒng)在合閘瞬間會有很大的共模電壓跳變?nèi)绻鸐T9820和AFE板之間的隔離處理不到位整條鏈可能直接失聯(lián)。實(shí)測在繼電器合閘瞬間有的AFE會出現(xiàn)短暫的狀態(tài)寄存器讀取失敗但芯片不會鎖死1秒內(nèi)能自動恢復(fù)。針對這種情況我在軟件里加了鏈路自恢復(fù)機(jī)制如果連續(xù)5輪讀不到某顆AFE就執(zhí)行一次全鏈喚醒和重新掃描而不是讓系統(tǒng)直接報(bào)致命故障。5.3 均衡溫升和功耗實(shí)測被動均衡最大的副作用就是發(fā)熱。我用100mA均衡電流連續(xù)開啟單通道45分鐘實(shí)測功率電阻表面溫度從25℃上升到約55℃PCB板面溫度在45℃以下。如果同時(shí)開啟多個(gè)通道溫度會疊加得更快所以均衡策略里一定要有溫度保護(hù)。功耗方面整條鏈18顆AFE加上1顆MT9820在正常采集模式下整板功耗約150mA5V主要是AFE的ADC轉(zhuǎn)換和通信電路消耗。如果開啟全部均衡通道功耗會明顯增加但這種場景在實(shí)際運(yùn)行中不會持續(xù)太久因?yàn)榫馐情g歇式的工作。睡眠模式也做了驗(yàn)證。主控下發(fā)睡眠命令后整條鏈的電流降到了微安級別可以滿足儲能系統(tǒng)長時(shí)間靜置的低功耗要求。喚醒時(shí)間實(shí)測在幾毫秒以內(nèi)不影響系統(tǒng)快速響應(yīng)合閘命令。6. 常見問題排查與避坑實(shí)錄6.1 鏈路某級失聯(lián)怎么辦這是菊花鏈方案最常遇到的問題現(xiàn)象就是某個(gè)位置的AFE讀不到數(shù)據(jù)后面的芯片全部失聯(lián)。排查思路我一般按下面的順序來先確認(rèn)這一級AFE板的供電是否正常。AFE芯片直接取模組電壓供電如果模組內(nèi)某串電芯的連接排松動整塊板都會掉電后面自然就全掛了。供電正常的情況下檢查級聯(lián)線的連接順序。MT9805的菊花鏈信號有輸入和輸出之分級聯(lián)線必須從上一顆的輸出接到下一顆的輸入。這個(gè)看似簡單的問題在線束組裝時(shí)非常容易接反接反的結(jié)果就是后面所有芯片都讀不到。我的排查經(jīng)驗(yàn)是把萬用表調(diào)到通斷檔從主控端沿著線束一截一截量過去通常很快就能找到斷點(diǎn)或者反接點(diǎn)。還有一個(gè)容易忽略的坑是線束的金屬疲勞。樣機(jī)階段反復(fù)插拔、折彎線束內(nèi)部的銅絲可能已經(jīng)斷裂但外表看不出來。遇到過好幾次今天好好的明天突然掉線的情況最后都是重新壓接端子或者換新的雙絞線解決。6.2 采樣數(shù)據(jù)飄、噪聲大怎么查電壓數(shù)據(jù)不穩(wěn)定的原因通常不在芯片本身而在外圍電路或者Layout。最常見的問題是我前面說的采樣濾波電容虛焊或者型號不對。X7R電容在直流偏壓下容值會衰減用來做采樣濾波時(shí)效果遠(yuǎn)不如C0G/NP0如果測試時(shí)發(fā)現(xiàn)電壓噪聲偏大先檢查濾波電容材質(zhì)。另一個(gè)常見原因是采樣線太細(xì)太長串聯(lián)電阻過大。比如用AWG28的線拉30cm采樣線阻已經(jīng)到了幾百毫歐級在均衡電流流過時(shí)采樣通道會看到明顯的壓降讀出來的電壓會偏低。解決方法是加粗采樣線或者把均衡電流調(diào)小。最后一種情況是地線處理不當(dāng)。AFE板的采樣地如果和功率地混在一起大電流灌入時(shí)就會在地線上產(chǎn)生壓降導(dǎo)致各個(gè)采樣通道的參考電位不一致。Layout階段應(yīng)明確區(qū)分采樣地和功率地通過單點(diǎn)連接的方式避免干擾。6.3 均衡電流和溫升異常如果你的均衡電流比設(shè)計(jì)值偏小優(yōu)先檢查外部均衡電阻的阻值。電阻焊錯(cuò)、虛焊、或者走線過長都會導(dǎo)致電流不達(dá)標(biāo)。均衡電流偏大的情況相對少見主要原因通常是均衡電阻阻值選錯(cuò)了或者芯片的均衡開關(guān)直接短路失效。遇到底部通道均衡開關(guān)異常時(shí)建議用紅外熱成像看一下是哪顆芯片或者哪顆電阻在發(fā)熱能快速定位故障點(diǎn)。大電流均衡時(shí)溫度過高的問題要從硬件和軟件兩個(gè)層面解決。硬件上增加散熱銅箔面積、均衡電阻選用大封裝軟件上把均衡策略改成分時(shí)均衡比如每開啟5分鐘就暫停1分鐘讓熱量有時(shí)間散掉。儲能BMS的均衡不像消費(fèi)電子那樣追求快速穩(wěn)定可靠永遠(yuǎn)是第一位的。6.4 生產(chǎn)測試環(huán)節(jié)的那些坑量產(chǎn)階段最容易踩的坑是EOL測試不充分。每一塊AFE板在出廠前都要做通道掃描測試確認(rèn)16路電壓采集、8路溫度采集和16路均衡通道全部正常。建議在測試工裝上使用標(biāo)準(zhǔn)電阻網(wǎng)絡(luò)模擬電芯電壓一次性對比所有通道的讀數(shù)任何偏差超過閾值的板子直接返修不要流到總裝環(huán)節(jié)。第二個(gè)坑是通信地址或者ID的燒錄。這套方案里AFE通過物理位置確定鏈路順序主控是按順序解析數(shù)據(jù)的理論上不需要額外燒錄地址。但如果你的系統(tǒng)里有多條菊花鏈比如一個(gè)集裝箱里有4個(gè)簇每條鏈都有自己的MT9820那就必須給每條鏈分配獨(dú)立的通信通道或者片選信號防止數(shù)據(jù)串?dāng)_。還有一個(gè)容易被忽視的是老化測試。AFE板在生產(chǎn)完成后建議做一次高溫老化把潛在的虛焊和器件不良提前暴露出來。我們項(xiàng)目里出現(xiàn)過一批采樣濾波電容在老化后失效的情況電容容值漂移嚴(yán)重導(dǎo)致電壓讀數(shù)偏差加大。后來更換了電容供應(yīng)商并在來料環(huán)節(jié)加了容值抽測問題才徹底解決。寫到最后分享兩個(gè)我個(gè)人覺得最有價(jià)值的經(jīng)驗(yàn)。第一個(gè)是做288串這種高壓長鏈路的BMS方案先把物理層做扎實(shí)再談功能。通信鏈路的雙絞線、屏蔽、終端匹配、隔離這些細(xì)節(jié)哪一個(gè)偷懶了后面調(diào)試CRC錯(cuò)誤的時(shí)間和痛苦都會加倍還回來。第二個(gè)是國產(chǎn)芯片的規(guī)格書雖然比國外大廠薄很多但關(guān)鍵參數(shù)和時(shí)序一定要自己搭環(huán)境驗(yàn)證不要想當(dāng)然照搬經(jīng)驗(yàn)。MT9805和MT9820這對組合我用下來的整體感受是足夠成熟、性價(jià)比高工程細(xì)節(jié)需要在項(xiàng)目里慢慢磨合但方向是對的。希望這篇實(shí)戰(zhàn)記錄能幫你少走幾步彎路。