杜偉棟 陸金桂 翟鑫鈺 劉新 潘艷飛



摘 要:針對移動小車無法實時顯示當前電量,易出現電池過放從而降低電池循環使用壽命的問題,利用Arduino作為主控制器采集電池的電壓、電流、溫度數據,將三者作為BP神經網絡的輸入量,計算電源SOC值,最后通過LabVIEW平臺嵌入該算法實現對電源SOC的實時估算。實驗結果表明,神經網絡訓練誤差可滿足實際要求,硬件系統整體運行可靠。系統可以實時監測電源的SOC值、電壓、電流和溫度值,從而避免電源出現異常工作狀態,提高電池循環使用壽命。
關鍵詞:SOC估算;BP神經網絡;LabVIEW;Arduino
DOI:10. 11907/rjdk. 192247 開放科學(資源服務)標識碼(OSID):
中圖分類號:TP319文獻標識碼: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 引言
隨著計算機技術與電子技術的快速發展,各種移動設備已經融入人們生活。移動設備通常需要電池作為動力源,以準確估計動力電池的荷電狀態(Stage of Charge,SOC),一方面可以合理分配能量,延長電池續航時間,另一方面可以避免動力電池過充和過放,延長電池使用壽命[1]。目前國內外電池SOC估算策略主要有:開路電壓法[2]、內阻法[3]、線性模型法、人工神經網絡法、負載電壓法[4]、安時積分法[5]、卡爾曼濾波法[6-7]、放電實驗法、動態逼近法等。目前基于嵌入式技術的電源管理系統有的采用安時積分法估算SOC,安時積分法雖然簡單、穩定,但是一種開環方法,無法避免累計誤差[8];也有采用擴展卡爾曼濾波方法進行SOC估算[9],由于卡爾曼濾波算法需要獲得準確的模型,通過算法更新模型中的參數預測SOC值,但是很難建立準確的電池模型[10];BP神經網絡通過模擬人腦神經元工作原理,主要利用輸入、輸出樣本進行訓練,最后得出輸入輸出映射關系。由于SOC與測量所得的電壓、電流、溫度等值之間為非線性關系,BP神經網絡的特點是具有較強的自學習與非線性擬合能力,所以BP神經網絡能夠估算電池的SOC[11]。綜合以上幾種估算方法,可以使用神經網絡算法作為實時估算系統的核心算法。因此,圍繞神經網絡算法,本文設計了硬件電路、下位機程序和上位機程序。
1 總體方案設計
通過對功能的分析與Arduino引腳的使用明確了系統外圍電路,系統需要采集的模擬量有電流、電壓、溫度3種數據,設計電壓電流采集模塊通過I2C總線與arduino uno通信,溫度采集模塊通過SPI總線與Arduino uno通信。為方便使用者直觀了解電源實時狀態,上下位機以無線藍牙方式進行實時通信,通過圖形化編程軟件LabVIEW設計人機界面顯示電源狀態,并借助LabVIEW易與其它編程語言混合編程的特點,將SOC估算算法嵌入上位機。總體方案如圖1所示。
2 電源SOC估算算法
2.1 BP神經網絡原理
BP神經網絡是在訓練過程中信號前向傳播、誤差逆向傳播的通過模仿人類自身大腦神經網絡構造,具有自適應、非線性擬合等能力的人工神經網絡。其實質是通過不斷修正神經網絡各隱含層的各個權值和閾值,使誤差達到設置范圍[12]。BP神經網絡訓練流程主要分為兩步,輸入層—隱含層—輸出層方向的正向傳遞和反方向的誤差傳遞,具體過程如下:設輸入層第i個節點輸入為Xi,隱含層第j個節點輸出為Yj,輸出層第k個節點輸出為Zk,期望輸出為dk,輸入層與隱含層之間連接的權閾值為Wij,隱含層與輸出層之間連接的權閾值為Vjk。
(1)BP神經網絡信號正方向傳遞。
輸入層到隱含層的傳遞關系如式(1)所示。
隱含層到輸出層的傳遞關系如式(2)所示。
其中,Wij、θi分別為輸入層與隱含層之間連接的權閾值,Vjk、θj分別為隱含層與輸出層之間連接的權閾值,f(x)為傳遞函數。
(2)BP神經網絡誤差反方向傳遞。
系統總誤差準則函數為:
將式(2)代入式(3),得到BP神經網絡估算SOC模型的誤差,由輸出層反饋至隱含層時有:
權閾值按照式(5)、式(6)進行修正:
其中:
BP神經網絡誤差由隱含層反饋至輸入層時有:
權閾值按照式(10)、式(11)進行修正:
其中:
BP神經網絡通過最速下降法使權閾值不斷向誤差曲面負梯度方向變化,后一層權閾值修正后向前一層傳遞,并逐層修正,按照誤差函數進行調整,循環迭代,從而滿足誤差要求。
2.2 BP神經網絡預測結果
本實驗對象為兩節18650鋰電池,采用恒壓充電,以電流為充電電流的1/10為停止標準,恒流放電時電壓低于最低工作電壓時停止。每次充放電結束后,靜置一小時以上,根據0.2C、0.4C、0.8C充放電倍率要求進行實驗,并保留數據[13-15]。神經網絡訓練參數設定如下:輸入層為1層,輸入節點為3,這里將電源電壓、電流和溫度作為網絡輸入;輸出層為1層,輸出節點為1,這里將電源SOC作為輸出,設置隱含層節點數為7,學習率為0.01。在實驗數據中均勻選取具有不同放電倍率的300組數據作為BP神經網絡訓練樣本,并任意選取15組數據作為預測數據。樣本數據及預測結果如表1所示,神經網絡預測相對誤差如圖2所示。
3 硬件系統設計
3.1 Arduino單片機
Arduino UNO是基于ATmega328P的Arduino開發板,其有14個數字輸入/輸出引腳(其中6個可用于PWM輸出),6個模擬輸入引腳,1個16 MHz的晶體振蕩器,1個USB接口,1個DC接口,1個ICSP接口,以及1個復位按鈕[16-17]。Arduino與各模塊連接如圖3所示。
3.2 電壓電流采集模塊
電流電壓測量模塊采用INA226模塊,該模塊能全面編程測量電流、電壓和功率,可在0V~36V的共模總線電壓范圍內感測電流。INA226內部模數轉換的雙側開關與低側分流電阻端閉合,經過模數轉換與計算得到分流電壓。模數轉換的雙側開關與待測電壓端相連,經過模數轉換與計算得到待測電源電壓[18]。芯片結構如圖4所示。
3.3 溫度采集模塊
溫度測量模塊使用貼片式Pt1000鉑電阻與MAX31865 RTD數字轉化器組成溫度測量模塊,接線方式如圖5所示。
Pt100是電阻式溫度檢測器,阻值隨溫度不斷變化,阻值與溫度關系如式(14)所示。
其中,R(T)為溫度T℃時的阻值,T為溫度,R0為0℃的阻值。對于Pt100電阻,R0=100Ω。根據IEC751規定,0℃~100℃之間的平均斜率為α=0.003 850 55,a=3.908 30×10-3,b=-5.775 00×10-7。當-200℃≤T≤0℃時,c=-4.183 01×10-12;當0℃≤T≤850℃時,c=0。
MAX31865是成熟的RTD數字轉換器,利用外部電阻設置RTD靈敏度,通過Δ-Σ ADC將RTD電阻與基準電阻進行對比,轉換為數字輸出[19]。在-100℃~+100℃可以很好地逼近溫度值。線性化溫度公式如式(15)所示。
為進一步提高精度,可以使用式(15)修正RTD線性誤差。
3.4 藍牙模塊
HC-05無線藍牙模塊板載3.3V穩壓芯片,輸入直流電壓3.6V~6V,可以直接連接各種單片機。藍牙是全雙工異步通信,需設置相同通信協議雙方才能實現藍牙傳輸。無任何藍牙協議,只能支持波特率為9 600、8位數據位、1位停止位、無奇偶校驗的通信格式。設置藍牙配對方式,將HC-05模塊設置為從機模式,PC端設置為主機模式。
3.5 數碼管
數碼管使用兩片595芯片,74HC595是一個8位串行輸入、并行輸出的位移緩存器。并行輸出為三態輸出,采用兩片595驅動數碼管,需要連接到arduino的3路IO口,根據數碼管動態掃描原理進行顯示,工作電壓為3.3V~5V。
4 軟件系統設計
4.1 Arduino下位機程序設計
Arduino有基于Eclipse的IDE開發環境自身的軟件平臺,采用類C的語言進行編程,支持ISP在線燒寫;可預裝Bootloader程序,不需要外部燒寫,可以通過串口或USB to Rs232更新固件。
下位機程序流程如圖6所示,系統上電復位后,首先對Arduino進行初始化,然后對INA226模塊和MAX31865模塊,以及I2C接口進行初始化,定義軟SPI引腳,設置串口波特率為9 600、8位數據位、1位停止位、無奇偶校驗、清空串口緩沖區等。初始化完成后,Arduino先判斷串口緩沖區是否有數據,如果有則讀取數據,否則向傳感器發送工作指令,讀取傳感器內的寄存器數據并向串口打印輸出。
4.2 LabVIEW上位機程序設計
LabVIEW實現串口通信功能需要安裝VISA驅動,VISA是應用與儀器編程的標準I/O應用程序,也是工業上通用的儀器驅動標準API,具有很好的兼容性、擴展性和獨立性。VISA串口函數主要包括:
(1)VISA配置串口函數。作用是完成串口參數的初始化設置,包括串口資源名稱、波特率、奇偶校驗、數據位數、是否啟用終止符、握手方式、緩沖區大小等。由于藍牙模塊默認設置波特率9 600、8位數據位、1位停止位、無奇偶校驗的通信格式,所以這里采用相同設置[16]。
(2)VISA讀取函數。作用是從VISA資源名稱所指定的串口中讀取指定字節數據,并將數據返回至讀取緩沖區。
(3)VISA寫入函數。作用是將“寫入緩沖區”的數據寫入指定串口。
(4)VISA關閉函數。為增強系統性能的可靠性,并合理利用資源,在程序最后部分需要對串口進行關閉,以釋放資源、提高效率。
4.2.1 串口通信功能模塊
該功能模塊主要讀取串口緩沖區內數據,因串口緩沖區不斷有數據存入,所以需要采用while循環嵌套結構。VISA讀取函數有3個輸入端子,分別是串口資源名稱、錯誤輸入、讀取字節總數。因為每次串口讀取一個字符串,考慮到下位機發送數據的位數及空格數,將讀取字節總數設置為23。由VISA讀取函數輸出的字符串,可通過兩個“匹配模式”將其拆分成3個子字符串,通過字符串轉化輸出至波形圖。串口通信功能模塊程序框架如圖7所示。
4.2.2 SOC估算功能模塊
LabVIEW中可通過多種方式實現神經網絡:①利用CIN節點調用C/C++程序;②利用MATLAB Script節點調用MATLAB程序;③利用LabVIEW本身的圖形編程語言編程實現。CIN是位于LabVIEW框圖程序窗口中的一個功能節點,用戶可將需調用的外部代碼編譯成LabVIEW能夠識別的格式后與該節點相連。當執行該節點時,LabVIEW將自動調用與該節點相連的外部代碼,并向CIN傳遞特定數據結構[20]。另外LabVIEW還有MATLAB Script節點可以實現神經網絡。MATLAB Script節點可以調用MATLAB程序,并在LabVIEW環境下運行,也可直接調入已存在的MATLAB程序。在LabVIEW中添加MATLAB Script節點后,之前讀取的電壓、電流、溫度3個數值類型通過“創建數組”也將組合成一個一維數組,作為MATLAB Script點的輸入,在腳本內加載已訓練好的神經網絡得到SOC估算值。SOC估算功能模塊程序框架如圖8所示。
4.2.3 電源監控界面前面板
利用LabVIEW開發平臺中豐富的顯示控件,可將上位機采集的各個參數進行實時數值顯示與波形圖顯示,并設置了報警功能,以方便管理人員查看。設計系統的LabVIEW顯示界面如圖9所示。
5 結語
本文設計了一種移動小車電源SOC實時估算系統,通過將電子技術、智能算法與虛擬儀器相結合,解決了傳統移動小車只顯示電源電壓,而無法顯示電量的問題,從而避免電源出現異常工作狀態,提高了電池循環使用壽命。系統體積小、成本低、操作方便、連接簡單,可應用于放電狀態下鋰電池組的監控管理。未來可針對采集電池內阻數據作為神經網絡的又一個輸入以及神經網絡算法優化作進一步研究,以提高預測精度。
參考文獻:
[1] 贠海濤,林晉召,曾欣. 增程式燃料電池物流車動力系統設計與控制[J]. 現代制造工程,2019(3):56-61.
[2] 王力臻,項民,谷書華,等. 開路電壓及其影響因素[J]. 電池,1999(4):157-160.
[3] 楊亞麗,李匡成,陳濤,等. 采用電動勢-內阻模型在線估計蓄電池荷電狀態[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]. 清華大學學報(自然科學版),2010,50(8):1293-1296,1301.
[6] 高明煜,何志偉,徐杰. 基于采樣點卡爾曼濾波的動力電池SOC估計[J]. 電工技術學報,2011,26(11):161-167.
[7] 溫家鵬,姜久春,文鋒,等. Kalman算法在純電動汽車SOC估算中的應用誤差分析[J]. 汽車工程,2010,32(3):188-192,227.
[8] 李貴海. 電池SOC估算策略研究[D]. 杭州:浙江大學,2006.
[9] 劉永祥,李緒勇,王洪亮. 動力電池管理系統的設計與仿真研究[J]. 計算機測量與控制,2019,27(2):197-201,206.
[10] 劉艷莉,戴勝,程澤,等. 基于有限差分擴展卡爾曼濾波的鋰離子電池SOC估計[J]. 電工技術學報,2014,29(1):221-228.
[11] 朱曉青,馬定寰,李圣清,等. 基于BP神經網絡的微電網蓄電池荷電狀態估計[J]. 電子測量與儀器學報,2017,31(12):2042-2048.
[12] 何曉陽,徐惠鋼,謝啟. 基于LabVIEW與BP神經網絡的零件識別系統[J]. 儀表技術與傳感器,2017(1):119-122.
[13] 雷雨,李銳,余佳玲,等. 基于BP神經網絡的鋰離子電池SOC估計研究[J]. 長沙航空職業技術學院學報,2018,18(4):64-70,74.
[14] 李江江,馮麗娟. 改進的BP神經網絡在電動汽車鋰電池SOC估算中的研究[J]. 汽車實用技術,2018(21):19-21.
[15] 楊冬進,婁建安. 18650型鋰電池荷電狀態的估計[J]. 計算機測量與控制,2018,26(4):268-271.
[16] 于洋. 基于Arduino的自動避障及通信控制智能小車系統的研究與設計[D]. 長春:吉林大學,2017.
[17] 蔡睿妍. Arduino的原理及應用[J]. 電子設計工程,2012,20(16):155-157.
[18] 郭旭東. 電源分配單元監控系統的設計與實現[D]. 北京:北京郵電大學,2019.
[19] 林源. 便攜式煙氣預處理系統的開發及其與非分散紅外分析儀的聯用[D]. 蘇州:蘇州大學,2018.
[20] 熊秀,石秀華,許暉,等. 用LabVIEW實現神經網絡控制[J]. 測控技術,2005(4):51-54.
[21] 何曉陽,徐惠鋼,謝啟. 基于LabVIEW與BP神經網絡的零件識別系統[J]. 儀表技術與傳感器,2017(1):119-122.
(責任編輯:黃 健)