從事BMS軟件設計已有3年,自覺還沒有真正的入門,不過還是有一些心得是想可以分享的,也是對自己的知識做一個梳理吧。
- 初稿
一個項目入手,我的理解:首先,必須明確項目的需求。只有真正的理解項目,從用戶的角度考慮,才能做出最為適合的產品,畢竟產品最終還是為人服務的。
一聽到,新能源汽車,很多人的第一印象,不就是,以電池代替汽油給汽車提供動力嘛。是的,大家都是聰明人,一下子抓住了事物的本質。對,就是這樣。就像小時候,我們玩的四驅車,本質都是一樣的,不要聽別人忽悠,有多神秘似的。
那么以電池代替汽油有什么好處呢?這些都被專家們分析的雲里霧里,十分的高大上。其實,也就這么幾個優點,環保清潔(好像是一句廢話),其次還是在這個國度電費比油費便宜。
概要
大家都知道要實現電池提供動力,控制終端就是電池管理系統(BMS)。
接下來,我會從信號采集,數據處理和控制邏輯,一一解析,我眼中的BMS
一、信號采集
顧名思義,電池管理系統,首先管理的對象是電池。我們就必須對當前電池的狀態有一個細致的了解,也不能什么都不知道就用開始電池。電池的狀態,主要表現為以下的幾個方面。
- 電池的單芯電壓
- 電池的溫度
- 電池組的總電壓
- 電池組的總電流
- 電池組的絕緣電阻
下面,我就對電池信息的采集,做一簡單的說明:
1. 單芯電壓的檢測
電池的成組方式一般是串聯加並聯。以我的理解,串聯主要是加大整個電池模組的電壓,並聯就是增加電池的可充放電電流。
我們都知道,想要能驅動電機工作,就必須給它一定的能量,能量怎么來的,學過物理的都知道
P = V*I
想要 P 變大,不就得使電流電壓變大嗎?
再說電池,一節電池的最大放電電流和最大充電電流都是固定的。並聯簡單的就是將這兩個值成倍的放大。
那么,單芯電壓到底怎么測?就是將並聯的單芯當做一節電池使用,這節電池的兩端電壓,就是單芯電壓了。很簡單的,不是嗎?
原理雖然說起來是很簡單,不過精度要求卻是挺高的,這是硬性要求。我們一般的電池OCV曲線,是上下抖中間平的的樣子。電池的電壓稍有變化,SOC的變化就很大了。
所以呢,檢測芯片的要求也是很高的。我用到的有兩款芯片一塊是凌特的LTC6804,還有一塊是TI的EMB1428,有興趣的朋友可以看看他們的數據手冊,了解一下。
2. 電池的溫度檢測
相對於電壓的高精度要求,溫度的檢測不是那么的嚴格了。一般來說在2°的誤差內,都是可接受的。溫度的檢測,相對來說也是簡單多了,我了解的大多數做BMS的廠商,用的都是NTC來做檢測的。
NTC檢測溫度的原理,就是溫度值和對應溫度下電阻值一一對應,一般和另一個電阻分壓一個標准電壓。使用單片機ADC功能就可以簡單的得到溫度值。
3. 電池的總電壓采集
總電壓,即觀察電池整個模組的電壓狀況。一般來說,沒什么太大的用處,只是作為一個參考值,來用。總電壓除以電池的串聯數,就是一個大概的單芯電壓平均值。
總電壓的大小不定,這是由車輛本身的需求決定,就我所見到的電壓等級150V~800V不等。
那么,總電壓如何采集?
常用的一種方法就是,將總電壓使用電阻等比例分壓,AD采集采樣電阻的兩端電壓。需要注意的是,動態電壓的變化是十分不穩定的,所以必須的消抖電路和消抖程序都是需要的。
4. 電池的總電流采集
工作模式有充有放,電流因此有正有負。
電流,我認為這是所有電子設計中是最需要關注的一個參數。電流,是最容易引發故障,也是最為危險的。
在BMS系統中,電流在SOC的計算,電池均衡策略中都有不可忽視的作用。
電流采集的精度和頻率都有非常高的要求。這里我用過兩款芯片AS8510和CS5490,有興趣的朋友,可以了解一下。
5. 電池的絕緣電阻采集
什么是絕緣電阻?
簡單來說,就是防觸電保護的最小電阻。國標上的要求是0.1mA。我們一般來說都會放大余量,安全問題再怎么關注都不差。
那么,絕緣電阻又是怎么測量的呢?傳統的話,有兩種測試方法,使用單橋檢測,或者雙橋檢測方式。具體的原理圖我就不貼了
簡單說一下優缺點:
- 單橋檢測,就是在主正或者主負一端加一個繼電器,優點是節約成本,減少繼電器本身兩端的電壓而導致的誤差。缺點也很明顯,如果接在主正繼電器一側,恰好主正的絕緣電阻值較大,會有較大的誤差(主要是正負兩端采集的倍數過大)。
- 雙橋檢測,就是正負兩端都加一個繼電器。缺點是成本高,采集精度下降。優點,減少兩端的采集倍數,算出的值相對准確
二、數據處理
之前一直在思考,什么是程序,程序的本質是什么?
我的理解“程序就是一種控制思想,一種因果變化”。
為了實現某個功能,具現化為某個狀態變量的輸出。就要從已有的輸入變量中選擇合適的變量作為輸入。輸入通過某種復雜的轉換(控制實現/計算實現)得到輸出的過程就是程序。
關鍵:
- 確保輸入輸出變量的准確性(數據處理)
- 從輸入到輸出實現的可能性(邏輯控制)
數據的處理可以從以下的兩個方面考慮:
- 輸出變量的處理
- 輸入變量的處理
數據,我將它分為兩類
- 功能數據
- 性能數據
功能數據:數據是作為算法的必要輸入特意獲取的數據,比如上面的采集數據,SOC等;
性能數據:數據不作為功能邏輯上的輸入,更多的是對軟硬件的穩定性安全性的一個評估作用。比如板子的輸入電壓檢測,繼電器開關的狀態檢測,CAN出錯等。
變量分兩類:數據和狀態,有以下的幾種處理方式
- 數據:不同狀態下,多個數據,取權重。
- 數據:
- 去除在范圍之外的數據,多個采樣,取有效值的均值。
- 對於超范圍的數據,設置標志位,故障處理。
- 狀態:連續一段時間維持某一狀態不變(消抖)
數據,經過處理,如果沒有問題就可以作為有效輸入數據。在功能被觸發的條件下,直接被調用。
那出錯了呢?對於這個問題,專門有一個故障處理的模塊。實時的將故障點檢測出來,發給整車,並且存儲起來。
故障等級大致是這樣的分的:
- 一級:只是報警,不做任何處理,可消退
- 二級:報警,限速,可消退
- 三級:報警,限速,不可消退
- 四級:報警,制動,不可消退
具體的哪些故障對應哪個等級,就不說了。
三、邏輯控制
邏輯控制主要有以下的幾個部分:
- 上電自檢,確定系統狀態
- 繼電器控制,不同狀態,不同的繼電器數量有不同的控制方式
- 充電控制,分為快充和慢充,需要分開處理
- 均衡控制
- 電池加熱控制
1. 上電自檢
汽車一共有兩個工作模式:放電,充電。其中充電再分為快充和慢充。確定工作模式的方式是,給BMS供電的到底是哪個24V電源,T15/快充/慢充
只有自檢通過才允許上高壓,也就是閉合對應的繼電器。那么,觀察哪些信號,就可以確認自檢沒問題?
- 所有繼電器狀態OK
- 總電流OK
- 絕緣電阻OK
- 只存在一個工作模式
自檢OK,就可以使能對應的CAN通訊,也可以上高壓放電和充電。
2. 繼電器控制
繼電器的控制邏輯更多的是一個先后順序
- 開始放電
- 吸合負極繼電器
- 吸合預充繼電器
- 吸合放電繼電器(正極和電機之間的繼電器)
- 斷開預充繼電器
- 停止放電
- 斷開負極繼電器
- 斷開放電繼電器
- 開始充電
- 吸合負極繼電器
- 吸合充電繼電器(正極和充電機之間的繼電器)
- 停止充電
- 斷開負極繼電器
- 斷開充電繼電器
先斷負極,再斷正極,是為了分擔上下電的壓力;這種說法保留
3. 電池加熱控制
電池加熱主要是在電池充電的時候使用。
溫度過低,電池的活性降低,所以需要先給電池加熱,后續再充電。
基本的流程:吸合加熱繼電器,向充電機需求一個電流。此時動力和充電機同時給加熱繼電器提供電流,只是充電機電流比較大。加熱結束,斷開加熱繼電器,同時向充電機需求一個大的充電電流。
4. 充電(快充)控制
所有的控制邏輯在國標GBT 27930-2015中定義的很清楚。嚴格按照國標來基本不會出什么問題
5. 均衡控制
均衡,是一個比較大的概念,后續再講
總結
梳理了BMS的一些基本概念,通過這個過程這才發現,我了解的還是太少太生疏了。雖然做了這么長時間的BMS,我還是處於表面化的層次中。抱頭痛哭!
技術啊,就怕深究!!!
留下的問題:
- SOC算法和均衡控制算法
- Simulink/Stateflow模型化設計的一些知識
- AutoSar架構的梳理
- 標准化設計的一些想法
- 標定和bootloader
- 上位機MFC/Qt上的知識
- 電池知識的深入了解