桂 陽,周 飛,楊 文,陳 星,李康群
(南京航空航天大學直升機傳動技術(shù)國家級重點實驗室,江蘇南京 210016)
隨著能源短缺和環(huán)境惡化,新能源開發(fā)利用越來越重要。在電動汽車領(lǐng)域,鋰離子電池清潔高效、能量密度高、循環(huán)性能好,已成為電動汽車儲能裝置的首選。儲能鋰離子電池組通常配備電池管理系統(tǒng)(BMS),它能監(jiān)視電池組狀態(tài),并為合理利用EV 車輛電池組能量提供條件,而準確估計電池荷電狀態(tài)(SOC)是BMS 關(guān)鍵技術(shù)之一[1]。
SOC通常用來描述電池的剩余電量,可以用當前電量和額定電量的比值來表示,準確實時地估計SOC非常困難。目前,SOC估算通常用放電實驗法、庫侖計數(shù)法、模型驅(qū)動法、數(shù)據(jù)驅(qū)動法等[2]。放電實驗法估算SOC步驟是,用恒定電流將電池放電至截止電壓,計算得到電池當前的剩余容量,求出剩余容量和標稱容量的比值,即為電池組SOC。該方法簡單易行,結(jié)果也較為準確,但在車輛上無法實時在線估測,實際應(yīng)用困難[3]。庫侖計數(shù)法可通過累計流入或流出鋰離子電池的電荷總數(shù)量來計算當前的SOC,這是可以通過積分型計算軟件來實現(xiàn)。要想準確估算當下SOC需要兩個前提:其一是給出的初始SOC值要準確,其二是用于計算的測量電流值與真實值之間的誤差足夠小。但行駛車輛很難獲得這個準確的初始值,電池工作過程中測量電流傳感器必然存在的誤差會隨時間累積產(chǎn)生較大誤差。因此,該方法局限性較大[4]。
模型驅(qū)動法主要包括卡爾曼濾波法及其衍生算法。卡爾曼濾波是應(yīng)用于估計動態(tài)線性系統(tǒng)內(nèi)部狀態(tài)的最佳算法之一。該算法實際上屬于遞推算法,其本質(zhì)是通過系統(tǒng)輸入輸出觀測數(shù)據(jù)來對動力系統(tǒng)的狀態(tài)做出最優(yōu)估計。卡爾曼及其衍生算法能夠?qū)崟r估計鋰離子電池SOC,但需要搭建準確的電池模型,而這是一項非常困難地工作。
數(shù)據(jù)驅(qū)動的方法不依賴任何電池的物理、化學或熱模型。它可以通過學習電池SOC和學習工作中電池的電壓、電流、溫度等參數(shù)的非線性關(guān)系,通過輸入電壓、電流、溫度等特征,來直接在線估計SOC。常見的數(shù)據(jù)驅(qū)動方法包括支持向量機、人工神經(jīng)網(wǎng)絡(luò)、模糊邏輯等[5-6]。人工神經(jīng)網(wǎng)絡(luò)因其強大的非線性擬合效果可以很好地模擬電池內(nèi)部的復雜結(jié)構(gòu),因而得到廣泛應(yīng)用,主要包括BP 神經(jīng)網(wǎng)絡(luò)、循環(huán)神經(jīng)網(wǎng)絡(luò)等,但是基于數(shù)據(jù)驅(qū)動的方法目前仍然存在著準確度不足、魯棒性較差等缺陷。
針對以上問題,本文提出雙向GRU(BidiGRU)神經(jīng)網(wǎng)絡(luò)和H∞濾波相結(jié)合的SOC估算方法。相較于卡爾曼濾波算法,本方法簡化了SOC的估計流程;相較于神經(jīng)網(wǎng)絡(luò)算法,本方法提高了估計精度和魯棒性。將鋰離子電池放電過程中每一時刻的電壓、電流、表面溫度作為BidiGRU 神經(jīng)網(wǎng)絡(luò)的輸入,對應(yīng)時刻的SOC值作為輸出,用北京動力循環(huán)工況(BJDST)對模型進行訓練,用補充聯(lián)邦測試程序駕駛時間表(US06)進行測試,再將H∞濾波器和BidiGRU 神經(jīng)網(wǎng)絡(luò)結(jié)合起來,濾除BidiGRU 神經(jīng)網(wǎng)絡(luò)的估計噪聲,進一步提高估計精度和魯棒性。
循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)是一類常用于處理序列問題的神經(jīng)網(wǎng)絡(luò),普通的RNN 由于相鄰的上一個時間步都對下一個時間步造成影響,在使用梯度下降法訓練的過程中,會造成梯度消失和梯度爆炸的結(jié)果。梯度爆炸可以通過設(shè)置一個闕值來截取超過該闕值的梯度,但梯度消失往往難以預(yù)測,從而使普通的RNN 在處理長期依賴問題上效果不佳。LSTM 和GRU 神經(jīng)網(wǎng)絡(luò)的出現(xiàn)可以完美地解決這個問題[7]。GRU 在結(jié)構(gòu)上較LSTM 更為簡單,參數(shù)更少,在訓練過程中更不容易出現(xiàn)過擬合,因此往往在大多數(shù)情況下GRU 的表現(xiàn)要優(yōu)于LSTM。GRU 單元由更新門(update gate)和重置門(reset gate)組成,其前向傳播公式為:

更新門(update gate)用于控制歷史信息對當前時刻的影響,決定了模型要將多少過去的信息傳遞到未來,其中xt為t時刻的輸入向量,ht-1為前一時間步的信息,Wz為權(quán)重矩陣,這一步至關(guān)重要,因為模型能夠決定從過去復制所有的信息來降低梯度消失的風險。重置門(reset gate)用于控制歷史信息的篩選,決定了有多少歷史信息被遺忘,其中xt為t時刻的輸入向量,ht-1為前一時間步的信息,Wr為權(quán)重矩陣。再將重置門的結(jié)果rt與上一時刻的信息ht-1經(jīng)過線性變換來確定保留和遺忘的信息,再與當前時刻的輸入與權(quán)重的乘積進行相加,將這部分的計算結(jié)果投入雙曲正切函數(shù)(tanh)中,得到當前時刻的記憶,接著將當前時刻記憶與更新門和前一時刻記憶進行整合最終輸出當前時刻的信息ht,并將其傳遞至下一個單元[8]。無論何種單向RNN,都存在著一個局限性,即在任一時間步t中,只能獲取當前時刻之前的歷史信息,在這之后的時間步信息,模型將無法學習到。因此,我們引入了雙向循環(huán)神經(jīng)網(wǎng)絡(luò)(BidiRNN),其結(jié)構(gòu)圖見圖1。圖1 中的單元為GRU 單元,ht和′分別為t時刻正向和反向序列中神經(jīng)元所存儲的記憶信息[9]。

圖1 BidiGRU結(jié)構(gòu)圖
鋰離子電池工作過程中的SOC變化是連續(xù)的非線性變化,是一個時間序列。當前時刻的SOC受過去和未來時刻SOC值的共同影響,這一點滿足BidiGRU 神經(jīng)網(wǎng)絡(luò)的應(yīng)用條件。因此,搭建了基于BidiGRU 神經(jīng)網(wǎng)絡(luò)的SOC估算模型,其結(jié)構(gòu)見圖2。輸入層中把實驗測得的電壓、電流、電池表面溫度作為輸入。

圖2 BidiGRU-SOC估算架構(gòu)
BidiGRU 層可以采用一層或多層,再通過一個全連階層輸出t時刻的SOC值,訓練過程中的損失函數(shù)為均方誤差函數(shù)(MSE):

式中:N為序列的長度;yk為任一時刻真正的SOC值為任一時刻BidiGRU 的SOC輸出值。使用梯度下降法進行訓練,采用Adam 優(yōu)化器,使用批量訓練的方式,批量大小為30,經(jīng)過調(diào)試后選擇前50%的數(shù)據(jù)的學習率為0.001,后50%的數(shù)據(jù)的學習率為0.000 01。為了防止訓練發(fā)散,數(shù)據(jù)集的輸入使用式(6)進行歸一化至[-1,1]區(qū)間內(nèi)。

在完成訓練之后,采用同樣的歸一化方法對測試集數(shù)據(jù)進行歸一化,采用平均絕對誤差(MAE)和均方根誤差(RMSE)來對神經(jīng)網(wǎng)絡(luò)的性能進行評判。


H∞濾波波器是卡爾曼濾波器的一個變種。卡爾曼濾波器是一種利用線性系統(tǒng)狀態(tài)方程,通過系統(tǒng)輸入輸出觀測數(shù)據(jù),對系統(tǒng)進行最優(yōu)狀態(tài)估計的一種算法。最優(yōu)狀態(tài)估計過程就是濾波過程[10]。卡爾曼濾波的變種有很多,如EKF、UKF等。與EKF、UKF 這些濾波器不同的是,H∞濾波是專門為魯棒性所設(shè)計的濾波。它通過最小化最大估計誤差來進行濾波,可以達到極佳的魯棒性[11]。H∞濾波的核心思想是保證系統(tǒng)的估計誤差的范數(shù)小于所有可能的擾動。
假設(shè)我們有一個標準的線性系統(tǒng):

式中:Xk、Yk分別為系統(tǒng)的狀態(tài)向量和觀測向量;wk、vk為噪聲項,它們是隨機的,且統(tǒng)計特性未知;Fk為狀態(tài)轉(zhuǎn)移矩陣;Hk為測量矩陣;Zk為我們想要估計的狀態(tài)的線性組合;Lk為一個滿秩的由設(shè)計者自己定義的矩陣。
在H∞濾波中,我們定義了如下的代價函數(shù):

式中:P0、Qk、Rk為設(shè)計者基于特定問題所選擇的對稱正定矩陣為狀態(tài)的估計值和初始值。直接最小化J是非常困難的,所以我們選擇了一個性能邊界,同時尋找一個估計策略使之滿足這個闕值,換言之,我們想找到一個,使之滿足:

式中:θ 為用戶指定的性能邊界[12]。
在SOC估計中,將BidiGRU 神經(jīng)網(wǎng)絡(luò)作為觀測器,其輸出的結(jié)果作為觀測方程,以安時積分法作為系統(tǒng)的狀態(tài)方程,對SOC的估計結(jié)果進行優(yōu)化:
狀態(tài)方程:

觀測方程:

式中:Ik為k時刻的電流;Cq為標稱容量;dt是采樣間隔;wk、vk分別為k時刻狀態(tài)方程和觀測方程的高斯噪聲,其高斯分布分別為wk~N(0,Q)、vk~N(0,R)。Q和R分別設(shè)為10-6、10-2,θ 設(shè)為10-4,采樣間隔dt為1 s,初始SOC值SOC0設(shè)為1,將優(yōu)化過后得到的SOC值作為最終的SOC估計值。
使用21700 型鋰離子電池作為實驗電池,在電池動態(tài)測試系統(tǒng)中模擬電池的充放電循環(huán)并記錄每時刻的電壓和電流數(shù)據(jù),通過高低溫試驗箱模擬不同的電池工作環(huán)境溫度,通過無紙溫度記錄儀測得電池工作過程中的表面溫度,詳細的實驗設(shè)備如圖3 所示。為了模擬電池的實際工作過程,本實驗選用了BJDST 工況對模型進行訓練,用US06 工況進行測試,詳細的BJDST 工況、US06 工況如圖4 所示。

圖3 鋰離子電池測試系統(tǒng)

圖4 電池工況電流變化圖
本實驗在0、15、25、35 和50 ℃五種環(huán)境溫度下,讓電池以BJDST、US06 工況進行放電,測量了電池放電過程中的電壓、電流和電池表面溫度,數(shù)據(jù)采樣間隔為1 s。實驗開始時,將電池以1C恒流充電至4.2 V,再以4.2 V 恒壓充電,截止電流為0.1 A。然后,以不同工況對電池進行放電,放電的截止電壓為3.4 V。將收集到的數(shù)據(jù)進行歸一化處理,作為BidiGRU 的輸入進行后續(xù)的SOC估計。
將在五種溫度下測得的BJDST 工況數(shù)據(jù)集作為訓練集對BidiGRU 神經(jīng)網(wǎng)絡(luò)進行訓練,以電池工作時的電壓、電流、表面溫度作為模型的輸入,對應(yīng)時刻的SOC作為輸出。用US06工況來測試模型的泛化性能。該過程通過Python 3.7 Tensorflow Keras 框架實現(xiàn),基于i7-5500U CPU 上運行。本文探究了不同BidiGRU 層神經(jīng)元數(shù)對SOC估計結(jié)果的影響。文獻[13]表明,BidiGRU 神經(jīng)元數(shù)量的選取一般由經(jīng)驗選取,本文設(shè)定神經(jīng)元數(shù)為30,是因為當神經(jīng)元數(shù)設(shè)定值比30更大時,訓練時間會變長,SOC估計結(jié)果并沒有明顯提高。神經(jīng)網(wǎng)絡(luò)的層數(shù)選擇為1 層,是因為當層數(shù)增加時,SOC估計結(jié)果沒有明顯改善,訓練時間會增加很多。詳細的超參數(shù)設(shè)置見表1。

表1 BidiGRU 超參數(shù)設(shè)置
在設(shè)置了BidiGRU 神經(jīng)網(wǎng)絡(luò)的超參數(shù)之后,使用梯度下降法對神經(jīng)網(wǎng)絡(luò)進行訓練,其訓練集損失變化、驗證集損失變化如圖5 所示。可以看到訓練集損失可以下降到接近于0的水平,而驗證集則在20 次迭代后明顯上升,這是由于訓練時出現(xiàn)了過擬合,采取了降低學習率的方式,將后50%的數(shù)據(jù)采用0.000 01 的學習率來進行訓練,從而減小過擬合現(xiàn)象產(chǎn)生的影響。

圖5 訓練集及驗證集損失變化
取驗證集損失最小的那一次迭代作為訓練模型進行保存,接著使用0、15、25、35 和50 ℃下US06 工況進行測試。與此同時,我們在保持神經(jīng)網(wǎng)絡(luò)各超參數(shù)不變的情況下,將BidiGRU 神經(jīng)網(wǎng)絡(luò)換成了GRU 神經(jīng)網(wǎng)絡(luò),并且用相同的數(shù)據(jù)進行訓練,相同的數(shù)據(jù)進行測試,得到的SOC估計結(jié)果見圖6。由圖6 和表2 可知,在0 ℃下BidiGRU 的SOC估計精度較低,RMSE達到了3.66%,MAE達到了2.79%。35 ℃時估計結(jié)果最佳,RMSE可達到2.05%,MAE可達到1.58%。這主要是因為在低溫下電池內(nèi)部化學成分的活性較低,到截止電壓時,往往只能放出很少的電量。由圖6 可知,在0 ℃時,放電達到截止電壓時,放出的容量是常溫放電容量的一半。和其他溫度下放電過程的SOC變化過程差異性較大,從而導致神經(jīng)網(wǎng)絡(luò)的訓練效果不佳。在15、25、35 以及50 ℃時,BidiGRU 的估計精度相比于GRU 更高,其中15 ℃時,RMSE和MAE更是相差了近1.5%,盡管在0 ℃下BidiGRU 的估計精度不如GRU,但從整體來看,BidiGRU 在SOC估計上相比與GRU 仍更具有優(yōu)勢。


圖6 US06工況SOC估計結(jié)果

表2 US06 工況各循環(huán)神經(jīng)網(wǎng)絡(luò)對比 %
由于鋰離子電池在不同溫度下的放電容量差異性較大,BidiGRU 很難做到準確無誤地估計每一種環(huán)境溫度下的SOC,因此需要在BidiGRU 估計的SOC值的基礎(chǔ)上,加以H∞濾波器進行優(yōu)化,使得估計結(jié)果魯棒性更好。使用H∞濾波器優(yōu)化之后的SOC估計結(jié)果及其誤差如圖7 所示。通過和BidiGRU 估計得到的SOC比較可以發(fā)現(xiàn),估計的精度得到了較大的提升,RMSE和MAE均降低到了0.5%以下,下降了2%以上。更加值得注意的是,在0 ℃下,經(jīng)過H∞濾波器的優(yōu)化之 后,RMSE和MAE由原來的3.66% 和2.79% 下降到了0.16%,達到了和其他溫度下同樣的精度,說明這種優(yōu)化方法不依賴神經(jīng)網(wǎng)絡(luò)的估計精度,也說明H∞濾波器在系統(tǒng)統(tǒng)計特性未知時具有極佳的魯棒性。表3 為US06 工況經(jīng)H∞濾波優(yōu)化后誤差。


圖7 US06工況經(jīng)H∞濾波優(yōu)化SOC估計結(jié)果

表3 US06 工況經(jīng)H∞濾波優(yōu)化后誤差 %
本文提出基于BidiGRU 神經(jīng)網(wǎng)絡(luò)和H∞濾波器估算鋰離子電池SOC的復合方法。BidiGRU 神經(jīng)網(wǎng)絡(luò)以鋰離子電池工作過程中的電壓、電流、表面溫度作為輸入,輸出每時刻的SOC,接著使用H∞濾波器對結(jié)果進行優(yōu)化,使得其準確性和魯棒性得到很大提升。實驗探討了0、15、25、35 和50 ℃五種環(huán)境溫度下的電池放電過程中SOC的估計情況,用以上五種溫度下的BJDST 工況作為訓練集對BidiGRU 神經(jīng)網(wǎng)絡(luò)模型進行訓練,用不同溫度下的US06 工況進行測試,得到的SOC估計RMSE最低可達到2.05%,MAE最低可達到1.58%,但是在0 ℃下的估計誤差較大,RMSE和MAE 可達3.69% 和2.79%。接著使用H∞濾波器BidiGRU 的SOC估計結(jié)果進行優(yōu)化,得到最終的SOC估計值。結(jié)果表明:無論在何種環(huán)境下,該方法都能夠做到準確的SOC實時估計,RMSE和MAE均能夠達到0.17%以下。該方法是基于數(shù)據(jù)驅(qū)動的,不需要搭建復雜的等效電路,易于實現(xiàn),因此該方法在SOC估計領(lǐng)域具有很大的應(yīng)用前景。