首先必須弄懂一個定義,什麼是BMS?前端
BMS其實就是BATTERY MANAGEMENT SYSTEM的縮寫,中文名字叫電池管理系統,顧名思義,是專門用來進行鋰電池運行管理的模塊,對象是鋰電池。安全
對於通常的終端用戶而言,鋰電池保護板其實並不存在,或者說,他們並不知道正在本身使用的產品中還有這麼一個東西。好比說電動車,100%的用戶都知道電動車上面有電池,由於電池提供了能源,但我敢保證,最多有1%的用戶知道還有鋰電池保護板這個東西的存在。測試
BMS的存在感之因此如此低,徹底是由於它並不能和用戶產生直接的交流,也並不能與用戶發生頻繁的交互,就算是偶爾產生了一些數據,不過這些數據也是經過某些儀表盤傳遞給用戶觀測,當用戶看見儀表盤上的紅燈時只會說:「嗯,車子好像是壞掉了,質量真差。」設計
話說回來,BMS雖然存在感低,不過它存在的意義倒是絲絕不亞於儀表,甚至能夠說是比儀表還重要,由於他能夠檢測出這輛車子的能源系統是否壞掉了,只有擁有BMS系統,用戶纔可能在不冒險的狀況下知道這輛車究竟是好是壞。3d
若是有一個行業內的嵌入式工程師要買一輛電動車,在一輛沒有顯示儀表和BMS板子的電動車中進行選擇,那麼他確定不敢選後者,由於若是電動車沒有了儀表,那麼用戶體驗會極差,但若是電動車沒有了BMS……與其說是一輛電動車,還不如說是一輛隨時可能發生被激活的炸彈。對象
那麼BMS在能源領域爲何如此重要?BMS的存在到底有什麼意義?blog
-------------------------------------------------------------------------------------------------------------接口
本文便從一個底層工程師的角度,以電動車用的BMS模塊做爲例子專門對鋰電池的保護板設計進行一些探討,而且會給出一個參考方案,固然因爲筆者能力有限,水平通常,若是文中出現了錯誤或者紕漏,請直接指出。開發
當設計團隊拿到一個項目,開始開發的時候,首先必需要搞清楚的即是項目的需求,這個需求可不只僅是老闆口頭上說幾句話,而是須要一個切實的、詳細的、標準的文檔,文檔要以一、二、3爲結構,明確的把全部的需求點給羅列出來。文檔
咱們如今拿到了一個項目:低速電動車的BMS板。
只要項目立項成功,那麼做爲產品經理,或者團隊leader,則列出需求文檔是必需要作的事情。
鋰電池管理系統,其中重點二字在於「管理」,要想實現管理功能,必然須要兩個模塊,第一:監測。第二:控制。只有在我可以監測這個系統的前提下,我才能控制這個系統。
由此爲核心點,我即可以慢慢的羅列出大體需求:
電池系統的大體需求分爲採集和控制,那麼採集的都會有什麼數據?
做爲一個以管理鋰電池的系統而言,以上3點是咱們要重點監測的數據,若是系統超級簡單,採集的點只有三、4個,那麼直接使用MCU的AD接口進行讀取信息即可,但在實際中幾乎不可能存在這種狀況,一般所用的採集的方式通常是使用模擬前端。
電壓:鋰電池自己的化學特性決定了咱們必需要對電壓進行保護,所謂的電壓保護,是咱們必需要保證鋰電池的電壓永遠在合適的範圍之類,不能讓電壓太低,由於其內部存儲電能是靠電化學一種可逆的化學變化實現的,過分的放電會致使這種化學變化有不可逆的反應發生,所以鋰電池最怕過放電,一旦放電電壓低於2.7V,將可能致使電池永久性損壞,也就是報廢。同時也不能讓電壓太高,由於電池一旦過分充電,致使的危害遠遠大於過放,過放最多損壞電池,不會對周圍形成危害,而過充則可能致使電池溫度升高,以致於發生自燃甚至爆炸,這種危害是致命的。
電流:所謂的電流保護,也是咱們必需要保證,不管是充電仍是放電,電流都不能過大,你們都清楚的短路即是過流的一種體現,當系統正負極直接接觸,導線電阻極小,致使電流極大,極大的電流又會產生大量的熱,從而引起的燃燒和爆炸是很致命的。其實,就算不是短路,但過大的電流依然會致使電池內部發熱,這樣也極有可能會形成永久性的損害。
溫度:溫度保護不用多言,除開鋰電池自己的化學特性致使它不能在極端溫度下使用以外,我想任何一個相似的系統,爲了安全起見都應該考慮到溫度。
看到這裏你們也應該明白了,鋰電池保護系統的邏輯其實很簡單,無非就是一些判斷,以及MOS管的控制,這些東西只要是有過軟件基礎的大學生應該都能實現。
如今將上面的保護細分:
一個鋰電池包,自己並非一個總體,若是拆開它的外包裝就能發現,它實際上是由N個18650電池通過串並連所組成。
好比咱們手上的48V20AH的鋰電池包,它的組成是,每N個鋰電池並聯,做爲一個子單元,而後在由16個這樣的子單元串聯,最終才造成一個鋰電池包,若論單個18650電池的數量,至少有上百個之多。
由此,若是咱們想要監測而且保護系統的電壓狀況,天然不能簡單的只採集一個整體電壓,考慮到電池均衡等特性,雖然不用對每一個電池進行採集和控制,但做爲組成電池包的每一串的單體電壓是必需要監測的。
若是一個16串的鋰電池包,那麼須要監控的電壓點天然不能低於16個(這就是爲何須要模擬前端的緣由,系統採集點過多,通常的MCU不可能知足)。
等採集到了單體電壓和總電壓之後,咱們就能夠進行邏輯設計了。
電壓保護相關的項目:
※通常更容易觸發的保護固然是單體,若是每一串電池的電壓的都沒問題,那麼整體電壓天然也不會有問題。
保護過程:系統採集電壓量,進行判斷,一旦檢測到某項指標超過設定的保護值,而且系統的狀態符合保護條件(充電時不進行欠壓保護,放電時不進行過壓保護),而後持續了必定時間(防止抖動),那麼斷開充放電迴路並進行報警,至因而斷開充電仍是放電,根據實際狀況決定。
那麼保護以後該如何恢復?總不能讓電動車一次過充電後就永遠報廢吧?
系統發生了保護,從此天然還有恢復的時候,若是系統發生了單體電壓保護,那麼能夠設定恢復值,等待電壓天然恢復到合適範圍,而且持續了必定時間之後(防止抖動),即可以從新打開充放電迴路。
※恢復值和保護值最好不要徹底同樣,這樣能夠給系統留出一些餘量,也能夠防止抖動的發生。
如下是關於電壓保護簡易的邏輯表:
電流的保護與電壓不一樣,它天然不會分爲整體和單體,下面的鋰電池由幾個串組成對電流這個信息而言毫無心義,它關心的只是一個在負載/充電機迴路上的整體量。
保護過程:電流是有方向的,所以咱們在保護中也要考慮到這一點,放電過程當中,電流從電池正極流出,通過負載後再回到電池負極,充電過程當中,電流從充電機的正極流出,通過了電池後再回到充電機負極,這是兩個徹底相反的過程。
假設咱們設定充電過程的電流爲正,那麼放電時電流必然爲負,在保護判斷中,等進入了模塊後,咱們用其絕對值與保護參數比較,當超過正常值時斷開充放電迴路(電流保護只關心最大值,不用關心最小值),這個過程與電壓保護大同小異。
※電流過大產生熱量累積這是一個持續的過程,因此在電流上通常會有兩重保護,第一重保護的設定值比較小,延時時間比較長,第二重保護的設定值比較大,延時時間很短。好比說電流>1A,500ms後保護,電流>5A,10ms後保護。
當電流保護髮生之後,咱們並不能像電壓恢復同樣實時讀取數據,由於一旦咱們把充放電迴路斷開之後,迴路上的電流瞬間就變成了0A,要想恢復保護狀態,通常有兩種條件:第一,不須要人工干預,在通過一段時間以後,自動打開回路,若是此刻依然爲過流狀態,那麼系統又會進入保護,這樣反覆來個幾回,即可以將系統的狀態設置爲故障了。第二,須要人工干預,等負載或者充電機移除後,打開回路。
短路保護其實也是電流保護的一種,只不過當系統短路之後,電流理論上會變成無限大,這樣產生的熱量也是無限大,若是要等到軟件反應過來而後保護,系統說不定早就完蛋了,所以,對於短路保護通常是採用硬件來自動觸發,觸發後傳遞給MCU一個信號便可。
溫度保護比較簡單,通常的邏輯就能夠實現,溫度值有上限也有下限,甚至在細分還能夠分爲充電時的溫度保護以及放電時的溫度保護,根據項目的實際須要設計邏輯便可。
須要注意的是,在實際的測試中發現,溫度是一個比較容易抖動的值(這和選用的傳感器有關,好比使用熱敏電阻),因此在判斷的時候保護值和恢復值必定要作出一個合理的區間,否則系統會不穩定。
鋰電池系統中除了以上3個正常的保護量以外,還須要有一個保護措施,那即是均衡保護。
上面說過,一個鋰電池包由N串電池組成,根據化學特性,若是某兩串電池的電壓相差過大,這就會形成電量的不均衡,好比一串電池的電壓是3.6V,另外一串電池的電壓是2.5V,相差如此之大,那麼這樣的電池基本上已經能夠說是報廢了。
因此係統中也須要這樣的判斷,最大單體電壓和最小單體電壓的差值若是達到了某個極限,致使出現故障的機率極大,那麼不管是放電仍是充電都不該該在繼續進行。
爲了儘可能避免這種情的出現,在BMS系統中就應該設計電壓均衡功能。
電壓均衡分爲主動與被動,被動均衡是設計硬件電壓,使用電壓比較器,當某串電池電壓與其它電池電壓相比太高時(好比相差達到50ms),或是使用別的元件來消耗掉高電壓電池的電量,或是將高電壓電池的電量灌入低電壓電池中。
主動均衡在原理上也同樣,只不過能夠由程序來控制均衡的更多細節,用串轉並的譯碼器做成開關電路,控制系統只在充電過程當中均衡,能夠更爲靈活的設定均衡的電壓閾值等等。