深入瞭解電池管理系統的開路檢測
深入瞭解電池管理系統的開路檢測
ADI應用工程師 Frank Zhang
摘要
開路檢測功能對於安全可靠地運行電池管理系統(BMS)產生非常重要的作用。有鑑於其重要性,我們建議對BMS感興趣或會參與BMS設計的人員深入瞭解這項功能。本文以ADI的電芯監控器為例,詳細討論了BMS電路在與外部電芯連接後,如何利用演算法精準識別幾乎所有開路情況。文中關於開路檢測演算法的討論,目的是使讀者更深入地瞭解這個BMS功能。本文提供的開路檢測偽代碼旨在為BMS設計人員提供設計參考。
簡介
在電池管理系統(BMS)中,各電芯和電芯監控電路之間存在大量的佈線連接。這些佈線連接是確保電芯監控器可靠監控電芯參數(包括電壓、電流、溫度等)的關鍵,同時還可以用於電芯被動平衡放電的電流路徑或繼電器控制訊號的傳輸路徑。BMS需要管理的電芯數量通常非常龐大,因此佈線連接的數量也相當可觀。這些連接不僅數量繁多,部分線路甚至相當冗長,因為它們往往需要跨越不同的印刷電路板(PCB),或是連接PCB與由眾多獨立電芯組成的電池組。此外還需要配合使用許多連接元件。BMS設計過程中,應儘量避免出現開路的情況。如果某個電芯發生開路,就表示對其狀態的有效監控將大打折扣或完全失效,而失去監控的電芯將為整個BMS帶來潛在的安全隱患,甚至可能在未知時刻對系統造成致命威脅。當出現開路情況時,首要任務是快速、精準、高效地確定開路位置並及時通報。有效、精準的開路檢測演算法將大幅提高BMS的可靠性,並有利於BMS和電池組的故障排除。透過演算法精準地定位故障,可以有效減少人工排除故障過程中許多不必要的重複檢查、拆卸和組裝工作。
BMS的C接腳中的開路檢測
開路檢測對BMS非常重要,因此ADI的大部分電芯監控器都配備了開路檢測指令及相應的實現方法。不同型號ADI電芯監控器使用的開路檢測方法可能有所不同,例如ADBMS6830B使用的方法就與LTC6813不同。本文將圍繞後者展開討論。採用的開路檢測方法也是ADI各型號電芯監控器常用的方法,具有通用性,其核心是基於ADOW(開路檢查)指令。
ADOW指令主要用於檢查LTC6813-1的ADC與外部電芯之間是否存在開路。此指令與ADCV(測量電芯電壓)指令一樣,對C接腳輸入執行類比數位轉換,但在測量兩個C接腳時,兩個內部電流源會為其提供電流或吸收電流。ADOW指令的上拉(PUP)位決定電流源是提供還是吸收100μA電流。可以使用以下簡單演算法來檢查19個C接腳是否有開路:
- 設定PUP = 1,運行18電芯指令ADOW至少兩次。結束時讀取電芯1至18的電芯電壓一次,並將其儲存在陣列CELLPU(n)中。
- 設定PUP = 0,運行18電芯指令ADOW至少兩次。結束時讀取電芯1至18的電芯電壓一次,並將其儲存在陣列CELLPD(n)中。
- 對於電芯2至18,求上述步驟中進行的上拉和下拉測量結果之差:CELLΔ(n) = CELLPU(n) – CELLPD(n)。
- 對於從1到17的所有n值:如果CELLΔ(n+1) < -400mV,則C(n)開路。如果CELLPU(1) = 0.0000,則C0開路。如果CELLPD(18) = 0.0000,則C18開路。
產品手冊清晰易懂地解釋了LTC6813中使用的ADOW開路檢測指令及其演算法實現。圖1以圖形方式展示了該演算法,協助讀者更直覺地瞭解演算法的精妙之處。
除了圖1中基於ADOW指令的開路檢測圖形展示之外,我們並使用LTC6813評估板和18650電池進行了實際的開路檢測實驗和波形測試。這使我們能夠更清楚地瞭解開路檢測期間電路的行為。實驗中每個電芯的電壓約為4V,示波器的4個探頭分別連接到LTC6813的C1/C2/C3/C4接腳。實驗中分別測量了CELL2/CELL3/CELL4的電壓波形。結合產品手冊中提供的ADCV指令執行時序規範(如圖2和表1所示),使我們能夠更深入地分析本次實驗的波形檢測結果。ADOW指令執行的時序規範可以參考ADCV指令的時序規範,因為ADOW指令與ADCV指令一樣可對C接腳輸入執行類比數位轉換。不同的是,在測量兩個C接腳時,ADOW指令會透過兩個內部電流源向其注入或吸收電流。開路檢測實驗的測試結果如圖3和圖4所示。圖3所示的電路測試沒有出現開路,主要作為參考實驗。在圖4所示的電路測試中,C2接腳位置發生了開路,圖中提供了ADOW指令執行過程中,該開路情況下CELL2/CELL3/CELL4的波形測試結果。從測試結果來看,觀察到的電路行為變化與圖1所示一致。
模式 | 轉換時間(μs) | 同步時間(μs) | |||||
t0 | t1M | t2M | t5M | t6M | t6C | tSKEW2 | |
27 kHz | 0 | 58 | 104 | 244 | 291 | 1,121 | 233 |
14 kHz | 0 | 87 | 163 | 390 | 566 | 1,296 | 379 |
7 kHz | 0 | 145 | 279 | 681 | 815 | 2,343 | 670 |
3 kHz | 0 | 261 | 512 | 1,263 | 1,413 | 3,041 | 1,252 |
2 kHz | 0 | 496 | 977 | 2,426 | 2,909 | 4,437 | 2,415 |
1 kHz | 0 | 960 | 1,908 | 4,753 | 5,702 | 7,230 | 4,742 |
422 Hz | 0 | 1,890 | 3,777 | 9,408 | 11,287 | 12,816 | 9,397 |
26 Hz | 0 | 29,818 | 59,624 | 149,044 | 178,851 | 201,325 | 149,033 |
BMS中出現多處開路的問題
設想BMS面臨的一種嚴重情況,亦即有多條導線開路,例如電芯監控電路中多個C接腳開路。雖然此種情況不太可能發生,但機率低並不代表不可能。在如此情況下,產品手冊所述的演算法對於檢測單個C接腳開路更為有效。當多個C接腳同時出現開路時,機械地應用產品手冊中的演算法可能無法產生精準的結果。
例如,在圖5所示的多條導線開路場景中,應用LTC6813產品手冊所述的演算法進行開路檢測得到的結果是,只能檢測到C6、C7、C8、C9接腳的開路,而無法檢測到C2、C3、C4、C5接腳是否開路。這不是我們想要的結果。
儘管如此,產品手冊中提到的開路檢測演算法仍然非常有效,能夠精準識別單個C接腳開路,並且還為檢測多處開路提供了有價值的參考。
當電芯監控器的C接腳出現開路情況時,無論是單個開路還是多處開路,機械地應用產品手冊中概述的演算法可能無法精準檢測到所有開路情況及其各自的位置,尤其是當多處開路同時發生時。然而,該演算法必定會提醒BMS存在開路故障。如果BMS電路板出現開路錯誤,電路使用者需要手動檢查並更精準地修復電路。一般而言,在進一步的手動仔細檢查中可以發現演算法未檢測到的開路錯誤。
檢測C接腳上多處開路的演算法
有沒有更好的演算法可以快速、精準、高效地識別出電芯監控器內的所有開路情況,即使多個C接腳上同時出現多處開路也能檢測到,而不必僅僅依靠經驗豐富的工程師手動檢查來發現電路中的所有開路情況?答案是肯定的。
深入研究ADOW開路檢測演算法和產品手冊中獲得的資料,我們發現,只需增加一個計算步驟,就能精準識別出電路中C接腳的幾乎所有開路情況。無論是單處開路還是多處開路,也不管開路的位置在哪,幾乎全部都能識別出來。之所以說「幾乎全部」,是因為在實際測試中,當C0接腳或C18接腳出現開路情況時,想要精準檢測出電路中的所有開路故障還是很困難的。與C0接腳和C18接腳相關的開路情況,將在本文的後面部分討論。現在,我們將重點介紹如何檢測接腳C1至C17出現開路時的所有開路情況。
所謂「只需增加一個計算步驟」是指,只需計算CELLΔ[n]和CELLΔ[n+1]的差值,如此就能得到一個高效、精準的開路檢測演算法。以下介紹該演算法的實現和步驟。
步驟1:首先,依照產品手冊所述的方法,向電芯監控器發送ADOW指令以啟動開路檢測。然後,在測量兩個C接腳的同時,兩個內部電流源向其注入或吸收電流。每個電芯的電壓資料透過晶片內的ADC獲得,並儲存在三個陣列中,分別是CELLPU、CELLPD和CELLΔ陣列。
步驟2:開始從下往上觀察從CELL 1到CELL 18的資料。搜索CELLΔ資料中的某些特徵值,判斷是否發生開路情況。通常,對於一系列相鄰連續開路的起始位置,如果該起始位置出現在Cn接腳(n = 1至17)處,則可以在相應的CELLΔ[n]資料中觀察到大於正閾值+400 mV的電壓值。這個超過閾值的電壓值標誌著Cn接腳出現開路,表示其可能是後續一系列相鄰連續開路情況的起點。檢測到此標誌後,繼續執行第3步。
步驟3: 從第步驟2中確定的Cn接腳位置開始,啟動一個迴圈來計算CELLΔ[n]和CELLΔ[n+1]的差值,同時遞增n的值,n的最大值不應超過17。這就是前面提到的新增計算步驟。在開路檢測過程中,差值結果呈現出一定的特點:從開路的起始位置到後續相鄰連續的開路位置,如果連續開路情況沒有中斷,則CELLΔ[n]與CELLΔ[n+1]的差值永遠是一個很小的負值1、0或是一個正值。與第2步中設定的正閾值一樣,此步驟使用-400 mV的負閾值來判斷開路情況。在迴圈計算CELLΔ[n]和CELLΔ[n+1]差值的過程中,如果差值結果大於-400 mV,則顯示Cn接腳存在開路情況。
1 閱讀本文時,如果結合對圖5和圖6的觀察來理解該演算法,讀者會注意到在此兩幅圖中,在相鄰和連續的開路位置,CELLΔ[n]和CELLΔ[n+1]的差值始終為0或正值,而不會出現較小的負值。這看起來可能令人不解。究其原因,是為了便於計算,圖5和圖6中的多個電路模型已被簡化,這會得到更理想的資料。不過,這種簡化對於電路行為的近似描述是可以接受的。在實際的電路開路測試中,此差值確實可能是一個很小的負數、0或是一個正數。
步驟4:繼續步驟3描述的迴圈計算。當開路情況停止時,CELLΔ[n]和CELLΔ[n+1]的差值不再大於-400 mV,而是會變成一個非常大的負值。當檢測到結果小於-400mV時,表示一系列相鄰連續開路終止於Cn接腳位置。此時,跳過之前檢測到的開路位置,重複步驟2至步驟4的計算,直至完成所有18個電芯通道和C接腳(不包括C0接腳和C18接腳)的所有開路檢測。
圖5和圖6以多個C接腳同時出現開路的情況為例,對上述演算法進行了具體化展示,以協助讀者直覺地掌握檢測邏輯。
同樣的,我們可使用LTC6813評估板(DC2350B)和18650電池來開展檢測C接腳上多處開路的實際實驗和波形測試。這使得我們能夠更清楚地瞭解LTC6813電路在多處開路檢測期間的行為。測試結果如圖7和圖8所示。在圖7所示的電路測試中,C2接腳和C3接腳位置同時出現開路;而在圖8所示的電路測試中,C2接腳、C3接腳和C4接腳位置同時出現開路。另外,圖7和圖8還提供了在ADOW指令執行期間,相應開路情況下CELL2/CELL3/CELL4的波形測試結果。從測試結果來看,觀察到的電路行為變化與圖5和圖6所示一致。
該演算法不僅能高效檢測多個C接腳同時出現開路故障的情況,而且同樣適用於整個電芯監控器中僅出現單個開路的情況。讀者可以獨立應用上述演算法,僅有一個C接腳開路的情況下(C0接腳和C18接腳除外)進行開路檢測。讀者會發現,仍然可以得到正確的開路檢測結果。上述演算法不僅繼承了產品手冊所述演算法的優點,而且突破了產品手冊中演算法應用於多個C接腳同時出現開路情況的侷限性,使得多處開路故障的檢測更加精準、高效。
C0接腳或C18接腳出現開路的情況
上述演算法用於檢測LTC6813接腳C1至C17的開路情況。回到前面提到的演算法,當C0接腳或C18接腳出現開路情況時,想要精準檢測出電路中的所有開路故障還是非常困難的。接下來我們將探討這兩個接腳出現開路時的複雜性:
情況1: 如圖1所示,使用產品手冊中提到的方法可以評估C0接腳或C18接腳的開路,前提是它們不與相鄰的C接腳同時出現開路。具體來說,若C0接腳與C1接腳、C18接腳與C17接腳不是同時出現開路,則可作出如下判斷:如果CELLPU[1] = 0,則C0開路。如果CELLPD[18] = 0,則C18開路。
情況2: 如圖9和圖10所示,當C0接腳或C18接腳與其相鄰的C接腳同時出現開路時,通常在此種情況下,仍可使用以下條件來識別C18接腳的開路情況:若CELLPD[18] = 0,則C18開路。但是,當C18接腳與多個相鄰C接腳同時出現開路時,建議將C18接腳的開路檢測規則設定為CELLPD[18] < +400 mV。與此同時,仍然可以使用前面提到的演算法來識別與C18接腳相鄰的開路。
對於C0接腳,可以使用以下條件來識別其開路:若CELLPU[1] = 0,則C0開路。然而,與C0接腳相鄰的開路無法用前面提到的演算法來識別,因為它們不滿足觸發條件。對於演算法無法識別的開路,仍然可以透過產品手冊中提到的開路檢測規則來識別:若CELLΔ[n+1] < –400 mV,則C(n)開路。但需要注意的是,為了精準檢測情況2下C1接腳的開路情況,需要在前面提到的演算法中增加一條額外的開路檢測規則:若C0開路且CELLPD[1] < 400 mV,則C1開路。
情況3:如圖11所示,在PCB內將C0短接至V-並將C18短接至V+,此種方法的優點在於可以免去V-接腳和V+接腳與電池組之間的兩個佈線連接。但缺點是,如果C0接腳和C18接腳之間的導線連接阻抗不夠低,則可能會為CELL1和CELL18的電壓檢測帶來額外的誤差。因為當C0和V-、C18和V+共用同一連接時,V-接腳和V+接腳在晶片運行期間會承載電源電流,此電源電流相較於採樣電流通常較大。例如,當電芯監控器的核心處於MEASURE狀態,isoSPI處於READY狀態(IB = 1 mA)時,根據LTC6813產品手冊中表2和表3所列出的公式,電流消耗可能達到約21 mA。如果佈線阻抗不夠低,C0和C18佈線連接處可能會出現明顯的電壓降,進而影響CELL1和CELL18的電壓檢測精度。
狀態 | IVP | IREG (核心) | |
睡眠 | VREG = 0 V | 6.1 µA | 0 µA |
VREG = 5 V | 3 µA | 3.1 µA | |
待機 | 14 µA | 35 µA | |
REFUP | 550 µA | 900 µA | |
測量/td> | 950 µA | 15 mA |
IsoSPI 狀態 | ISOMD 連接 | IREG (isoSPI) |
IDLE | N/A | 0 mA |
就緒 | VREG | 2.2 mA + 3 × IB |
V- | 1.5 mA + 3 × IB | |
啟動 | VREG | 寫入:: 2.5 mA + (3 + 20 × 100 ns / tCLK ) × IB 讀取: 2.5 mA + (3 + 20 × (100 ns × 1.5) / tCLK ) × IB |
V- | 1.8 mA + (3 + 20 × 100 ns / tCLK) × IB |
基於圖11所示的連接方法,我們來觀察圖12。當C0接腳或C18接腳與其相鄰的C接腳同時出現開路時,通常在這種情況下,仍可使用以下條件來識別C18接腳的開路情況:若CELLPD[18] = 0,則C18開路。但是,當C18接腳與多個相鄰C接腳同時出現開路時,建議將C18接腳的開路檢測規則設定為CELLPD[18] < +400 mV。與此同時,與C18接腳相鄰的開路無法用產品手冊中的演算法或前面提到的演算法來識別,因為它們不滿足觸發條件。在此種情況下,可以額外增加一條開路檢測規則,作為先前提到的演算法的一部分:如果C18開路,並且同時滿足CELLPU[n] < +400 mV和CELLPD[n] < +400 mV兩個條件,則Cn開路。然而,隨著與C18接腳相鄰且連續的開路數量增多,這條檢測規則也有可能失效,晶片無法正常執行ADOW指令。
至於圖12中的C0接腳開路,它將導致晶片無法正常執行ADOW指令。在此種情況下,C0接腳開路無法透過ADOW指令識別。儘管如此,晶片仍然可以執行ADCV指令來完成電芯電壓檢測,並且可能發現CELL1的電壓轉換結果異常低,進而顯示C0接腳可能存在開路情況。但是,該方法不被視為本文所述演算法的一部分。
這些情況說明了上述論斷的理由。當C0接腳或C18接腳出現開路情況時,想要精準檢測出電路中的所有開路故障還是非常困難的。
總之,透過結合本文介紹的所有演算法,可以精準識別出電路中C接腳的幾乎所有開路情況,而無論其位置和數量如何。然而,一旦要檢測涉及C0接腳或C18接腳的開路故障,該組合演算法可能無法保證100%檢測到電路中的所有開路故障。在此種情況下,演算法最好發出警示:在C0/C18中檢測到開路故障,實際開路數量可能與演算法得出的值不一致。
開路檢測的偽代碼和實驗結果
本文介紹的所有演算法均已整合並整合到LTC6813開路檢測偽代碼示例中,如圖13所示,僅供參考。此外,這裡並提供了開路檢測的一些實驗結果。圖14至圖17的結果是在對LTC6813評估板電路的實際開路檢測實驗獲得的。實驗所採用的開路檢測演算法是基於本文所介紹演算法的組合;開路功能的驅動代碼是基於所提供的偽代碼編寫。從實驗結果可以看出,在設定的條件下,所有開路情況(即使存在多處開路)都可以被精準地檢測出來,包括數量和位置,換言之,本文所述的開路檢測演算法既精準,又可靠。
結論
雖然本文主要討論LTC6813的開路檢測方法及演算法,但該IC所採用的開路檢測方法具有通用性,也是ADI各型號電芯監控器所採用的共同方法。因此,本文介紹的開路檢測演算法只需稍加修改,即可輕鬆移植到使用類似開路檢測方法的其他ADI電芯監控器上。