杜偉棟 陸金桂 翟鑫鈺 劉新 潘艷飛
摘 要:針對移動小車無法實時顯示當(dāng)前電量,易出現(xiàn)電池過放從而降低電池循環(huán)使用壽命的問題,利用Arduino作為主控制器采集電池的電壓、電流、溫度數(shù)據(jù),將三者作為BP神經(jīng)網(wǎng)絡(luò)的輸入量,計算電源SOC值,最后通過LabVIEW平臺嵌入該算法實現(xiàn)對電源SOC的實時估算。實驗結(jié)果表明,神經(jīng)網(wǎng)絡(luò)訓(xùn)練誤差可滿足實際要求,硬件系統(tǒng)整體運行可靠。系統(tǒng)可以實時監(jiān)測電源的SOC值、電壓、電流和溫度值,從而避免電源出現(xiàn)異常工作狀態(tài),提高電池循環(huán)使用壽命。
關(guān)鍵詞:SOC估算;BP神經(jīng)網(wǎng)絡(luò);LabVIEW;Arduino
DOI:10. 11907/rjdk. 192247 開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID):
中圖分類號:TP319文獻標(biāo)識碼:A 文章編號:1672-7800(2020)007-0131-05
Mobile Car SOC Real-time Estimation System Design
DU Wei-dong1,LU Jin-gui1,ZHAI Xin-yu1,LIU Xin2,PAN Yan-fei2
(1. School of Mechanical and Power Engineering, Nanjing Technology University, Nanjing 211816, China;
2. Jiangsu Changjiang Intelligent Manufacturing Research Institute Limited Liability Company, Changzhou 213012, China)
Abstract: For the mobile car, the current power cannot be displayed in real time, and the battery over-discharge is easy to reduce the battery cycle life. The Arduino is used as the main controller to collect the voltage, current and temperature data of the battery, and the three are used as the input of the BP neural network. The power SOC value is estimated, and finally the algorithm is embedded in the LabVIEW platform to realize real-time estimation of the power SOC. The experimental results show that the maximum error of 6.88% in neural network training can meet the actual requirements, and the overall hardware system runs reliably. The system can monitor the SOC value, voltage, current and temperature value of the power supply in real time, avoiding the abnormal working state of the power supply and improving the battery cycle life.
Key Words: SOC estimation; BP neural network; LabVIEW; Arduino
0 引言
隨著計算機技術(shù)與電子技術(shù)的快速發(fā)展,各種移動設(shè)備已經(jīng)融入人們生活。移動設(shè)備通常需要電池作為動力源,以準(zhǔn)確估計動力電池的荷電狀態(tài)(Stage of Charge,SOC),一方面可以合理分配能量,延長電池續(xù)航時間,另一方面可以避免動力電池過充和過放,延長電池使用壽命[1]。目前國內(nèi)外電池SOC估算策略主要有:開路電壓法[2]、內(nèi)阻法[3]、線性模型法、人工神經(jīng)網(wǎng)絡(luò)法、負載電壓法[4]、安時積分法[5]、卡爾曼濾波法[6-7]、放電實驗法、動態(tài)逼近法等。目前基于嵌入式技術(shù)的電源管理系統(tǒng)有的采用安時積分法估算SOC,安時積分法雖然簡單、穩(wěn)定,但是一種開環(huán)方法,無法避免累計誤差[8];也有采用擴展卡爾曼濾波方法進行SOC估算[9],由于卡爾曼濾波算法需要獲得準(zhǔn)確的模型,通過算法更新模型中的參數(shù)預(yù)測SOC值,但是很難建立準(zhǔn)確的電池模型[10];BP神經(jīng)網(wǎng)絡(luò)通過模擬人腦神經(jīng)元工作原理,主要利用輸入、輸出樣本進行訓(xùn)練,最后得出輸入輸出映射關(guān)系。由于SOC與測量所得的電壓、電流、溫度等值之間為非線性關(guān)系,BP神經(jīng)網(wǎng)絡(luò)的特點是具有較強的自學(xué)習(xí)與非線性擬合能力,所以BP神經(jīng)網(wǎng)絡(luò)能夠估算電池的SOC[11]。綜合以上幾種估算方法,可以使用神經(jīng)網(wǎng)絡(luò)算法作為實時估算系統(tǒng)的核心算法。因此,圍繞神經(jīng)網(wǎng)絡(luò)算法,本文設(shè)計了硬件電路、下位機程序和上位機程序。
1 總體方案設(shè)計
通過對功能的分析與Arduino引腳的使用明確了系統(tǒng)外圍電路,系統(tǒng)需要采集的模擬量有電流、電壓、溫度3種數(shù)據(jù),設(shè)計電壓電流采集模塊通過I2C總線與arduino uno通信,溫度采集模塊通過SPI總線與Arduino uno通信。為方便使用者直觀了解電源實時狀態(tài),上下位機以無線藍牙方式進行實時通信,通過圖形化編程軟件LabVIEW設(shè)計人機界面顯示電源狀態(tài),并借助LabVIEW易與其它編程語言混合編程的特點,將SOC估算算法嵌入上位機??傮w方案如圖1所示。
2 電源SOC估算算法
2.1 BP神經(jīng)網(wǎng)絡(luò)原理
BP神經(jīng)網(wǎng)絡(luò)是在訓(xùn)練過程中信號前向傳播、誤差逆向傳播的通過模仿人類自身大腦神經(jīng)網(wǎng)絡(luò)構(gòu)造,具有自適應(yīng)、非線性擬合等能力的人工神經(jīng)網(wǎng)絡(luò)。其實質(zhì)是通過不斷修正神經(jīng)網(wǎng)絡(luò)各隱含層的各個權(quán)值和閾值,使誤差達到設(shè)置范圍[12]。BP神經(jīng)網(wǎng)絡(luò)訓(xùn)練流程主要分為兩步,輸入層—隱含層—輸出層方向的正向傳遞和反方向的誤差傳遞,具體過程如下:設(shè)輸入層第i個節(jié)點輸入為Xi,隱含層第j個節(jié)點輸出為Yj,輸出層第k個節(jié)點輸出為Zk,期望輸出為dk,輸入層與隱含層之間連接的權(quán)閾值為Wij,隱含層與輸出層之間連接的權(quán)閾值為Vjk。
(1)BP神經(jīng)網(wǎng)絡(luò)信號正方向傳遞。
輸入層到隱含層的傳遞關(guān)系如式(1)所示。
隱含層到輸出層的傳遞關(guān)系如式(2)所示。
其中,Wij、θi分別為輸入層與隱含層之間連接的權(quán)閾值,Vjk、θj分別為隱含層與輸出層之間連接的權(quán)閾值,f(x)為傳遞函數(shù)。
(2)BP神經(jīng)網(wǎng)絡(luò)誤差反方向傳遞。
系統(tǒng)總誤差準(zhǔn)則函數(shù)為:
將式(2)代入式(3),得到BP神經(jīng)網(wǎng)絡(luò)估算SOC模型的誤差,由輸出層反饋至隱含層時有:
權(quán)閾值按照式(5)、式(6)進行修正:
其中:
BP神經(jīng)網(wǎng)絡(luò)誤差由隱含層反饋至輸入層時有:
權(quán)閾值按照式(10)、式(11)進行修正:
其中:
BP神經(jīng)網(wǎng)絡(luò)通過最速下降法使權(quán)閾值不斷向誤差曲面負梯度方向變化,后一層權(quán)閾值修正后向前一層傳遞,并逐層修正,按照誤差函數(shù)進行調(diào)整,循環(huán)迭代,從而滿足誤差要求。
2.2 BP神經(jīng)網(wǎng)絡(luò)預(yù)測結(jié)果
本實驗對象為兩節(jié)18650鋰電池,采用恒壓充電,以電流為充電電流的1/10為停止標(biāo)準(zhǔn),恒流放電時電壓低于最低工作電壓時停止。每次充放電結(jié)束后,靜置一小時以上,根據(jù)0.2C、0.4C、0.8C充放電倍率要求進行實驗,并保留數(shù)據(jù)[13-15]。神經(jīng)網(wǎng)絡(luò)訓(xùn)練參數(shù)設(shè)定如下:輸入層為1層,輸入節(jié)點為3,這里將電源電壓、電流和溫度作為網(wǎng)絡(luò)輸入;輸出層為1層,輸出節(jié)點為1,這里將電源SOC作為輸出,設(shè)置隱含層節(jié)點數(shù)為7,學(xué)習(xí)率為0.01。在實驗數(shù)據(jù)中均勻選取具有不同放電倍率的300組數(shù)據(jù)作為BP神經(jīng)網(wǎng)絡(luò)訓(xùn)練樣本,并任意選取15組數(shù)據(jù)作為預(yù)測數(shù)據(jù)。樣本數(shù)據(jù)及預(yù)測結(jié)果如表1所示,神經(jīng)網(wǎng)絡(luò)預(yù)測相對誤差如圖2所示。
3 硬件系統(tǒng)設(shè)計
3.1 Arduino單片機
Arduino UNO是基于ATmega328P的Arduino開發(fā)板,其有14個數(shù)字輸入/輸出引腳(其中6個可用于PWM輸出),6個模擬輸入引腳,1個16 MHz的晶體振蕩器,1個USB接口,1個DC接口,1個ICSP接口,以及1個復(fù)位按鈕[16-17]。Arduino與各模塊連接如圖3所示。
3.2 電壓電流采集模塊
電流電壓測量模塊采用INA226模塊,該模塊能全面編程測量電流、電壓和功率,可在0V~36V的共模總線電壓范圍內(nèi)感測電流。INA226內(nèi)部模數(shù)轉(zhuǎn)換的雙側(cè)開關(guān)與低側(cè)分流電阻端閉合,經(jīng)過模數(shù)轉(zhuǎn)換與計算得到分流電壓。模數(shù)轉(zhuǎn)換的雙側(cè)開關(guān)與待測電壓端相連,經(jīng)過模數(shù)轉(zhuǎn)換與計算得到待測電源電壓[18]。芯片結(jié)構(gòu)如圖4所示。
3.3 溫度采集模塊
溫度測量模塊使用貼片式Pt1000鉑電阻與MAX31865 RTD數(shù)字轉(zhuǎn)化器組成溫度測量模塊,接線方式如圖5所示。
Pt100是電阻式溫度檢測器,阻值隨溫度不斷變化,阻值與溫度關(guān)系如式(14)所示。
其中,R(T)為溫度T℃時的阻值,T為溫度,R0為0℃的阻值。對于Pt100電阻,R0=100Ω。根據(jù)IEC751規(guī)定,0℃~100℃之間的平均斜率為α=0.003 850 55,a=3.908 30×10-3,b=-5.775 00×10-7。當(dāng)-200℃≤T≤0℃時,c=-4.183 01×10-12;當(dāng)0℃≤T≤850℃時,c=0。
MAX31865是成熟的RTD數(shù)字轉(zhuǎn)換器,利用外部電阻設(shè)置RTD靈敏度,通過Δ-Σ ADC將RTD電阻與基準(zhǔn)電阻進行對比,轉(zhuǎn)換為數(shù)字輸出[19]。在-100℃~+100℃可以很好地逼近溫度值。線性化溫度公式如式(15)所示。
為進一步提高精度,可以使用式(15)修正RTD線性誤差。
3.4 藍牙模塊
HC-05無線藍牙模塊板載3.3V穩(wěn)壓芯片,輸入直流電壓3.6V~6V,可以直接連接各種單片機。藍牙是全雙工異步通信,需設(shè)置相同通信協(xié)議雙方才能實現(xiàn)藍牙傳輸。無任何藍牙協(xié)議,只能支持波特率為9 600、8位數(shù)據(jù)位、1位停止位、無奇偶校驗的通信格式。設(shè)置藍牙配對方式,將HC-05模塊設(shè)置為從機模式,PC端設(shè)置為主機模式。
3.5 數(shù)碼管
數(shù)碼管使用兩片595芯片,74HC595是一個8位串行輸入、并行輸出的位移緩存器。并行輸出為三態(tài)輸出,采用兩片595驅(qū)動數(shù)碼管,需要連接到arduino的3路IO口,根據(jù)數(shù)碼管動態(tài)掃描原理進行顯示,工作電壓為3.3V~5V。
4 軟件系統(tǒng)設(shè)計
4.1 Arduino下位機程序設(shè)計
Arduino有基于Eclipse的IDE開發(fā)環(huán)境自身的軟件平臺,采用類C的語言進行編程,支持ISP在線燒寫;可預(yù)裝Bootloader程序,不需要外部燒寫,可以通過串口或USB to Rs232更新固件。
下位機程序流程如圖6所示,系統(tǒng)上電復(fù)位后,首先對Arduino進行初始化,然后對INA226模塊和MAX31865模塊,以及I2C接口進行初始化,定義軟SPI引腳,設(shè)置串口波特率為9 600、8位數(shù)據(jù)位、1位停止位、無奇偶校驗、清空串口緩沖區(qū)等。初始化完成后,Arduino先判斷串口緩沖區(qū)是否有數(shù)據(jù),如果有則讀取數(shù)據(jù),否則向傳感器發(fā)送工作指令,讀取傳感器內(nèi)的寄存器數(shù)據(jù)并向串口打印輸出。
4.2 LabVIEW上位機程序設(shè)計
LabVIEW實現(xiàn)串口通信功能需要安裝VISA驅(qū)動,VISA是應(yīng)用與儀器編程的標(biāo)準(zhǔn)I/O應(yīng)用程序,也是工業(yè)上通用的儀器驅(qū)動標(biāo)準(zhǔn)API,具有很好的兼容性、擴展性和獨立性。VISA串口函數(shù)主要包括:
(1)VISA配置串口函數(shù)。作用是完成串口參數(shù)的初始化設(shè)置,包括串口資源名稱、波特率、奇偶校驗、數(shù)據(jù)位數(shù)、是否啟用終止符、握手方式、緩沖區(qū)大小等。由于藍牙模塊默認(rèn)設(shè)置波特率9 600、8位數(shù)據(jù)位、1位停止位、無奇偶校驗的通信格式,所以這里采用相同設(shè)置[16]。
(2)VISA讀取函數(shù)。作用是從VISA資源名稱所指定的串口中讀取指定字節(jié)數(shù)據(jù),并將數(shù)據(jù)返回至讀取緩沖區(qū)。
(3)VISA寫入函數(shù)。作用是將“寫入緩沖區(qū)”的數(shù)據(jù)寫入指定串口。
(4)VISA關(guān)閉函數(shù)。為增強系統(tǒng)性能的可靠性,并合理利用資源,在程序最后部分需要對串口進行關(guān)閉,以釋放資源、提高效率。
4.2.1 串口通信功能模塊
該功能模塊主要讀取串口緩沖區(qū)內(nèi)數(shù)據(jù),因串口緩沖區(qū)不斷有數(shù)據(jù)存入,所以需要采用while循環(huán)嵌套結(jié)構(gòu)。VISA讀取函數(shù)有3個輸入端子,分別是串口資源名稱、錯誤輸入、讀取字節(jié)總數(shù)。因為每次串口讀取一個字符串,考慮到下位機發(fā)送數(shù)據(jù)的位數(shù)及空格數(shù),將讀取字節(jié)總數(shù)設(shè)置為23。由VISA讀取函數(shù)輸出的字符串,可通過兩個“匹配模式”將其拆分成3個子字符串,通過字符串轉(zhuǎn)化輸出至波形圖。串口通信功能模塊程序框架如圖7所示。
4.2.2 SOC估算功能模塊
LabVIEW中可通過多種方式實現(xiàn)神經(jīng)網(wǎng)絡(luò):①利用CIN節(jié)點調(diào)用C/C++程序;②利用MATLAB Script節(jié)點調(diào)用MATLAB程序;③利用LabVIEW本身的圖形編程語言編程實現(xiàn)。CIN是位于LabVIEW框圖程序窗口中的一個功能節(jié)點,用戶可將需調(diào)用的外部代碼編譯成LabVIEW能夠識別的格式后與該節(jié)點相連。當(dāng)執(zhí)行該節(jié)點時,LabVIEW將自動調(diào)用與該節(jié)點相連的外部代碼,并向CIN傳遞特定數(shù)據(jù)結(jié)構(gòu)[20]。另外LabVIEW還有MATLAB Script節(jié)點可以實現(xiàn)神經(jīng)網(wǎng)絡(luò)。MATLAB Script節(jié)點可以調(diào)用MATLAB程序,并在LabVIEW環(huán)境下運行,也可直接調(diào)入已存在的MATLAB程序。在LabVIEW中添加MATLAB Script節(jié)點后,之前讀取的電壓、電流、溫度3個數(shù)值類型通過“創(chuàng)建數(shù)組”也將組合成一個一維數(shù)組,作為MATLAB Script點的輸入,在腳本內(nèi)加載已訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)得到SOC估算值。SOC估算功能模塊程序框架如圖8所示。
4.2.3 電源監(jiān)控界面前面板
利用LabVIEW開發(fā)平臺中豐富的顯示控件,可將上位機采集的各個參數(shù)進行實時數(shù)值顯示與波形圖顯示,并設(shè)置了報警功能,以方便管理人員查看。設(shè)計系統(tǒng)的LabVIEW顯示界面如圖9所示。
5 結(jié)語
本文設(shè)計了一種移動小車電源SOC實時估算系統(tǒng),通過將電子技術(shù)、智能算法與虛擬儀器相結(jié)合,解決了傳統(tǒng)移動小車只顯示電源電壓,而無法顯示電量的問題,從而避免電源出現(xiàn)異常工作狀態(tài),提高了電池循環(huán)使用壽命。系統(tǒng)體積小、成本低、操作方便、連接簡單,可應(yīng)用于放電狀態(tài)下鋰電池組的監(jiān)控管理。未來可針對采集電池內(nèi)阻數(shù)據(jù)作為神經(jīng)網(wǎng)絡(luò)的又一個輸入以及神經(jīng)網(wǎng)絡(luò)算法優(yōu)化作進一步研究,以提高預(yù)測精度。
參考文獻:
[1] 贠海濤,林晉召,曾欣. 增程式燃料電池物流車動力系統(tǒng)設(shè)計與控制[J]. 現(xiàn)代制造工程,2019(3):56-61.
[2] 王力臻,項民,谷書華,等. 開路電壓及其影響因素[J]. 電池,1999(4):157-160.
[3] 楊亞麗,李匡成,陳濤,等. 采用電動勢-內(nèi)阻模型在線估計蓄電池荷電狀態(tài)[J]. 電測與儀表,2010,47(3):16-19,37.
[4] PLETT G L. Sigma-point Kalman filtering for battery management systems of LiPB-based HEV battery packs[J].? Journal of Power Sources,2006, 161(2):1369-1384.
[5] 李哲,盧蘭光,歐陽明高. 提高安時積分法估算電池SOC精度的方法比較[J]. 清華大學(xué)學(xué)報(自然科學(xué)版),2010,50(8):1293-1296,1301.
[6] 高明煜,何志偉,徐杰. 基于采樣點卡爾曼濾波的動力電池SOC估計[J]. 電工技術(shù)學(xué)報,2011,26(11):161-167.
[7] 溫家鵬,姜久春,文鋒,等. Kalman算法在純電動汽車SOC估算中的應(yīng)用誤差分析[J]. 汽車工程,2010,32(3):188-192,227.
[8] 李貴海. 電池SOC估算策略研究[D]. 杭州:浙江大學(xué),2006.
[9] 劉永祥,李緒勇,王洪亮. 動力電池管理系統(tǒng)的設(shè)計與仿真研究[J]. 計算機測量與控制,2019,27(2):197-201,206.
[10] 劉艷莉,戴勝,程澤,等. 基于有限差分?jǐn)U展卡爾曼濾波的鋰離子電池SOC估計[J]. 電工技術(shù)學(xué)報,2014,29(1):221-228.
[11] 朱曉青,馬定寰,李圣清,等. 基于BP神經(jīng)網(wǎng)絡(luò)的微電網(wǎng)蓄電池荷電狀態(tài)估計[J]. 電子測量與儀器學(xué)報,2017,31(12):2042-2048.
[12] 何曉陽,徐惠鋼,謝啟. 基于LabVIEW與BP神經(jīng)網(wǎng)絡(luò)的零件識別系統(tǒng)[J]. 儀表技術(shù)與傳感器,2017(1):119-122.
[13] 雷雨,李銳,余佳玲,等. 基于BP神經(jīng)網(wǎng)絡(luò)的鋰離子電池SOC估計研究[J]. 長沙航空職業(yè)技術(shù)學(xué)院學(xué)報,2018,18(4):64-70,74.
[14] 李江江,馮麗娟. 改進的BP神經(jīng)網(wǎng)絡(luò)在電動汽車鋰電池SOC估算中的研究[J]. 汽車實用技術(shù),2018(21):19-21.
[15] 楊冬進,婁建安. 18650型鋰電池荷電狀態(tài)的估計[J]. 計算機測量與控制,2018,26(4):268-271.
[16] 于洋. 基于Arduino的自動避障及通信控制智能小車系統(tǒng)的研究與設(shè)計[D]. 長春:吉林大學(xué),2017.
[17] 蔡睿妍. Arduino的原理及應(yīng)用[J]. 電子設(shè)計工程,2012,20(16):155-157.
[18] 郭旭東. 電源分配單元監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)[D]. 北京:北京郵電大學(xué),2019.
[19] 林源. 便攜式煙氣預(yù)處理系統(tǒng)的開發(fā)及其與非分散紅外分析儀的聯(lián)用[D]. 蘇州:蘇州大學(xué),2018.
[20] 熊秀,石秀華,許暉,等. 用LabVIEW實現(xiàn)神經(jīng)網(wǎng)絡(luò)控制[J]. 測控技術(shù),2005(4):51-54.
[21] 何曉陽,徐惠鋼,謝啟. 基于LabVIEW與BP神經(jīng)網(wǎng)絡(luò)的零件識別系統(tǒng)[J]. 儀表技術(shù)與傳感器,2017(1):119-122.
(責(zé)任編輯:黃 ?。?/p>