李云紅,田冀達(dá),陳航
(西安工程大學(xué)電子信息學(xué)院,西安 710048)
RT-Thread操作系統(tǒng)的電池管理系統(tǒng)設(shè)計(jì)
李云紅,田冀達(dá),陳航
(西安工程大學(xué)電子信息學(xué)院,西安 710048)
為了保證電池在充放電過程中的安全,針對(duì)目前電池管理系統(tǒng)存在可移植性差、不便于功能擴(kuò)展等問題,提出一種智能電池管理系統(tǒng)。系統(tǒng)采用國(guó)產(chǎn)嵌入式實(shí)時(shí)操作系統(tǒng)RT-Thread,并選用STM32作為主控制器芯片,使整個(gè)系統(tǒng)的監(jiān)控、調(diào)試更加方便。測(cè)試結(jié)果表明,該系統(tǒng)可以實(shí)時(shí)監(jiān)控電池的充放電過程,預(yù)留的接口可以方便以后做功能擴(kuò)展。
RT-Thread;STM32;電池管理系統(tǒng)
電池管理系統(tǒng),主要借助微處理器來解決不同電池由于制作工藝、充電電壓和電池的容量不同引起的充電問題。該系統(tǒng)可根據(jù)電池種類的需要產(chǎn)生充電電壓,利用高分辨率的A/D轉(zhuǎn)換器實(shí)時(shí)采集和監(jiān)控充電過程中電池的狀態(tài),進(jìn)而實(shí)現(xiàn)多種電池充電過程的智能化管理。電池管理系統(tǒng)能夠有效保護(hù)電池并延長(zhǎng)電池壽命,提高充電效率和使用安全性,并且可以實(shí)時(shí)監(jiān)測(cè)電池的狀態(tài)[1]。
目前,電池管理系統(tǒng)主要存在的問題:一是管理系統(tǒng)的可移植性較差;二是不方便對(duì)其進(jìn)行功能擴(kuò)展。辛喆[2]等人采用單片機(jī)進(jìn)行控制,實(shí)現(xiàn)了對(duì)電源電壓、電流和溫度的實(shí)時(shí)監(jiān)控,但系統(tǒng)的可移植性有待提高。蔣忠偉[1]等人通過向串口發(fā)送指令的方法對(duì)系統(tǒng)進(jìn)行控制,但是系統(tǒng)對(duì)后續(xù)功能的擴(kuò)展不完善。針對(duì)以上問題,本文采用國(guó)產(chǎn)嵌入式實(shí)時(shí)操作系統(tǒng)RT-Thread,選用STM32F103作為主控制器芯片,能夠在很短的周期內(nèi)開發(fā)出可應(yīng)用于多種場(chǎng)合、功能完備的智能電池管理系統(tǒng)。另外,該系統(tǒng)也便于操作系統(tǒng)的移植,能夠輕松實(shí)現(xiàn)串口通信、實(shí)時(shí)數(shù)據(jù)記錄和監(jiān)測(cè),實(shí)現(xiàn)充電器的智能化。
簡(jiǎn)而言之,智能電池管理系統(tǒng)應(yīng)該具有如下功能:精確提供(或者顯示)電池狀態(tài)數(shù)據(jù)(包括電池當(dāng)前的端電壓、實(shí)時(shí)溫度、充電電流),提供必要的保護(hù)與報(bào)警功能,在充電過程中有保護(hù)報(bào)警措施(如過壓保護(hù)、超溫報(bào)警等)。
1.1 控制器芯片選擇
本系統(tǒng)采用STM32F103作為主控制器芯片,STM32F103有20KB內(nèi)存、72MHz主頻、各種外設(shè)支持[4-5],其控制器的固件庫具備通用性,比較容易切換到其他的產(chǎn)品線。STM32F103擁有1~3個(gè)ADC,這些ADC可以獨(dú)立使用,也可以使用雙重模式。STM32F103的ADC是12位逐次逼近型的模擬/數(shù)字轉(zhuǎn)換器,有18個(gè)通道,可測(cè)量16個(gè)外部和2個(gè)內(nèi)部信號(hào)源[6];各通道的A/D轉(zhuǎn)換可以單次、連續(xù)、掃描或間斷模式執(zhí)行,ADC的結(jié)果可以左對(duì)齊或右對(duì)齊方式存儲(chǔ)在16位數(shù)據(jù)寄存器中。
1.2 系統(tǒng)硬件設(shè)計(jì)
為了實(shí)現(xiàn)電池的充電管理和控制功能,系統(tǒng)包括電池電壓和電流信號(hào)采集電路、充電環(huán)境溫度檢測(cè)電路、電池充放電控制電路。其硬件框圖如圖1所示。
圖1 系統(tǒng)硬件框圖
圖1中,電池的電壓、電流和溫度通過其ADC接口和傳感器將模擬量轉(zhuǎn)換為數(shù)字量,STM32F103控制芯片再根據(jù)采集到的數(shù)據(jù)和預(yù)設(shè)值進(jìn)行比較,若超過限定值,則停止PWM,從而實(shí)現(xiàn)對(duì)電池的充放電控制。電池的充放電及工作參數(shù)采集系統(tǒng)如圖2所示。
圖2中,VBAT1、IBAT1、TBAT1分別為電池的采集電壓、電流、溫度參數(shù)的輸出信號(hào),通過調(diào)節(jié)PWM1和PWM2占空比來進(jìn)行充放電的控制,直至電池完全充滿。
電池的溫度檢測(cè)使用DS18B20數(shù)字溫度傳感器。DS18B20是一種具有單總線接口的數(shù)字溫度傳感器,具有體積小、功耗低和接口簡(jiǎn)單等特點(diǎn),特別適合作為本系統(tǒng)的溫度采集傳感器。
圖2 充放電及工作參數(shù)采集系統(tǒng)
電池的安全因素包括充電電流、充電電壓和充電溫度。電池最大的充電電流與電池的容量(C)相關(guān),最大的充電電流用電池容量的數(shù)值來表示。例如,電池的容量為750 mAh,充電電流為750mA,則電池的充電電流為1C(1倍的電池容量)。在電池充電的過程中,當(dāng)充電電壓超出電池典型值上限的時(shí)候就要停止充電,實(shí)現(xiàn)過充電壓保護(hù)。
電池充電時(shí),是將電能轉(zhuǎn)化為化學(xué)能儲(chǔ)存起來,但并不是所有的電能都被轉(zhuǎn)化為化學(xué)能,一些化學(xué)能轉(zhuǎn)化為熱能,對(duì)電池起到了加熱的作用。如果在充電的過程中,電池持續(xù)的升溫導(dǎo)致電池過熱,且不能及時(shí)停止充電就會(huì)導(dǎo)致電池?fù)p壞。在進(jìn)行溫度判定時(shí),當(dāng)電池溫度超過一定限定時(shí),就需要停止充電。當(dāng)環(huán)境溫度極低的時(shí)候,也需要采用充電溫度與環(huán)境溫度差值的方法來判定是否停止充電。
電池常用的充電方法有恒定電壓法和恒定電流法。對(duì)于采用恒定電壓法充電的電池,在充電過程中要進(jìn)行相要對(duì)電池的電壓進(jìn)行檢測(cè),以便對(duì)電壓進(jìn)行限制。采用恒定電流法與恒定電壓法進(jìn)行充電時(shí),其電壓和電流隨時(shí)間變化的典型曲線如圖3所示。
圖3 電流、電壓變化曲線
本系統(tǒng)采用國(guó)產(chǎn)嵌入式實(shí)時(shí)操作系統(tǒng)RT-Thread來進(jìn)行電池的充放電控制。RT-Thread實(shí)時(shí)操作系統(tǒng)核心是一個(gè)高效的硬實(shí)時(shí)核心,它具備非常優(yōu)異的實(shí)時(shí)性、穩(wěn)定性、可裁減性。在 中,線程是最小的調(diào)度單位,支持256個(gè)線程優(yōu)先級(jí)[7]。當(dāng)內(nèi)核進(jìn)行最小配置時(shí),內(nèi)核體積只有3KB的ROM占用、1KB的RAM占用[8]。該操作系統(tǒng)支持在ARM7TDMI、ARM Cortex-M3、ARM920T、x86等多種嵌入式平臺(tái)上的移植。操作系統(tǒng)的引入,可以加強(qiáng)電池充放電控制系統(tǒng)的快速性、實(shí)時(shí)性和穩(wěn)定性,增強(qiáng)了該電池管理系統(tǒng)的可移植性,并且方便做后續(xù)的功能擴(kuò)展。
3.1 RT-Thread的finsh shell系統(tǒng)搭建
首先,將系統(tǒng)的內(nèi)核源碼進(jìn)行解壓,打開其STM32F103分支的MDK工程文件。接著,向工程中添加finsh組件。finsh shell系統(tǒng)是RT-Thread操作系統(tǒng)中的命令行操作系統(tǒng),方便用戶進(jìn)行調(diào)試、查看系統(tǒng)信息。要開啟finsh工程,首先要在系統(tǒng)配置文件中添加finsh的宏定義,接著指定作為調(diào)試接口的串口號(hào),最后使console設(shè)備與相應(yīng)的串口相關(guān),其配置語句如下:
所有的配置完成之后,使用Keil MDK進(jìn)行編譯,編譯通過之后再運(yùn)行。如果串口打印出RT-Thread的logo和“finsh>>”字樣,則表示finsh shell系統(tǒng)搭建成功,可以進(jìn)行調(diào)試工作。其串口打印的信息如圖4所示。
圖4 串口打印信息
3.2 設(shè)備注冊(cè)
在搭建好RT-Thread的finsh shell系統(tǒng)之后,需要對(duì)相應(yīng)的接口和設(shè)備進(jìn)行注冊(cè)。首先要完成相關(guān)I/O口的配置,并通過寫控制寄存器的方式初始化相關(guān)寄存器,然后再來定義相關(guān)設(shè)備。在RT-Thread操作系統(tǒng)中,設(shè)備被認(rèn)為是一類對(duì)象,每個(gè)設(shè)備對(duì)象都由基類對(duì)象派生而來,繼承了父類對(duì)象的屬性[9]。這里,需要定義系統(tǒng)的ADC設(shè)備,設(shè)備的定義通過RT-Thread內(nèi)部結(jié)構(gòu)體rt_device來完成。該結(jié)構(gòu)體的主要成員如下:
RT-Thread操作系統(tǒng)的rt_device結(jié)構(gòu)定義了大多數(shù)設(shè)備的結(jié)構(gòu)模型。所有系統(tǒng)支持的設(shè)備驅(qū)動(dòng)實(shí)現(xiàn)的過程,就是實(shí)現(xiàn)該結(jié)構(gòu)體內(nèi)部接口函數(shù)的過程,這也是rt_device結(jié)構(gòu)體的細(xì)節(jié)。其具體的接口函數(shù)如下:
以上init、open、close、read、write等接口函數(shù)都需要用戶進(jìn)行補(bǔ)充和完成,通過操作以上函數(shù),便可以對(duì)設(shè)備進(jìn)行相應(yīng)的操作。
經(jīng)過I/O口配置和定義相應(yīng)的結(jié)構(gòu)體之后,系統(tǒng)的設(shè)備驅(qū)動(dòng)已經(jīng)建立完畢,最后需要調(diào)用rt_device_register函數(shù)向系統(tǒng)注冊(cè)相應(yīng)的設(shè)備。注冊(cè)并編譯成功之后,用命令list_device()便可查詢到該設(shè)備,效果如圖5所示。
圖5 設(shè)備查看情況
圖5中,通過串口打印出了系統(tǒng)現(xiàn)在所支持的設(shè)備。ADC屬于“Chrarcter”型設(shè)備。RT-Thread操作系統(tǒng)還支持多種類型的設(shè)備,如“Block Device”、“Network Interface”、“MTD Device”等,這樣就使得系統(tǒng)的功能擴(kuò)展變得非常方便。如果要添加新的設(shè)備,用戶只要定義相應(yīng)設(shè)備的結(jié)構(gòu)體并進(jìn)行注冊(cè),便可完成系統(tǒng)功能的擴(kuò)展。
3.3 應(yīng)用軟件設(shè)計(jì)
系統(tǒng)的軟件設(shè)計(jì)主要實(shí)現(xiàn)以下幾個(gè)功能。首先,進(jìn)行系統(tǒng)的初始化,然后啟動(dòng)PWM,接著啟動(dòng)定時(shí)器,設(shè)定系統(tǒng)的采樣時(shí)間。在充電過程中,經(jīng)過一段時(shí)間之后,系統(tǒng)便進(jìn)行采樣,根據(jù)其采集到的充電電流、電壓、溫度與預(yù)設(shè)值進(jìn)行判斷,過滿則判停,關(guān)閉PWM。其軟件流程圖如圖6所示。
圖6 軟件流程圖
首先,設(shè)定好判定的初始值和采樣的時(shí)間間隔,并設(shè)定每30s向串口輸出一次采樣結(jié)果。本次測(cè)試在室溫條件下進(jìn)行,在3.3V的電壓下采用恒定電壓法進(jìn)行充電,可以將整個(gè)系統(tǒng)通過相應(yīng)串口連接至PC機(jī),通過串口工具來調(diào)試充放電的過程,并可以觀察電池相應(yīng)的狀態(tài),如圖7所示。
圖7 串口打印信息
可以看到,每到設(shè)定的時(shí)間,系統(tǒng)便會(huì)將采集到的電池的溫度、電壓、電流等數(shù)據(jù)通過串口顯示出來,這樣便實(shí)現(xiàn)了對(duì)電池充電狀態(tài)的實(shí)時(shí)監(jiān)控。前10次的采樣結(jié)果如表1所列。如表1所示,在3.3V的恒定電壓下,電池的充電電流變化基本符合采用恒定電壓法充電時(shí)電流的變化曲線。
表1數(shù)據(jù)采樣結(jié)果
繼續(xù)進(jìn)行測(cè)試,電池的充電電流和溫度的變化曲線如圖8所示。電池的溫度在充電的過程中先升高,達(dá)到32℃左右的時(shí)候開始下降。電流的變化曲線則符合按照恒定電壓法充電的典型曲線,當(dāng)電池的充電電流過小時(shí),系統(tǒng)便停止充電,從而實(shí)現(xiàn)對(duì)電池的過充保護(hù)。
圖8 電流和溫度曲線
本文設(shè)計(jì)的智能電池管理系統(tǒng),選用STM32F103芯片作為主控制芯片,采用國(guó)產(chǎn)實(shí)時(shí)操作系統(tǒng)RT-Thread作為控制系統(tǒng),增強(qiáng)了系統(tǒng)的實(shí)時(shí)性和可擴(kuò)展性,可以實(shí)現(xiàn)對(duì)電池充放電過程的監(jiān)控及保護(hù)。在以后的研究中,可以對(duì)該系統(tǒng)做出功能擴(kuò)展,使其適用于更加復(fù)雜的環(huán)境。
[1]蔣忠偉,孫一鳴,胡曉吉.基于嵌入式計(jì)算平臺(tái)的智能電池系統(tǒng)的設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2011,32(6):1970-1974.
[2]辛喆,葛元月.基于單片機(jī)的純電動(dòng)汽車電池管理系統(tǒng)設(shè)計(jì)[J].農(nóng)業(yè)工程學(xué)報(bào),2014,30(12):163-169.
[3]黃正佳,袁永斌.智能電池模塊[J].電源技術(shù),2002,26(5):379-382.
[4]曹成.嵌入式實(shí)時(shí)操作系統(tǒng)RT-Thread原理分析與應(yīng)用[D].青島:山東科技大學(xué),2011.
[5]陶杰,王欣.基于STM32F407和OV7670的低端視頻監(jiān)控系統(tǒng)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2014(3):60-62.
[6]張旭,亓學(xué)廣.基于STM32電力數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)[J].電子測(cè)量技術(shù),2010,33(11):90-92.
[7]李琦,李梅.基于RT-Thread的工業(yè)遠(yuǎn)程控制器設(shè)計(jì)[J].實(shí)驗(yàn)室研究與探索,2013,32(9):61-64.
[8]司夢(mèng)如.基于RT-Thread的NANDFLASH文件系統(tǒng)中間層的設(shè)計(jì)與實(shí)現(xiàn)[D].合肥:安徽大學(xué),2012.
[9]陳俊彥,何燕.RT-Thread和QT的可視化印花機(jī)控制系統(tǒng)設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2014(7):46-49.
李云紅(副教授),主要從事紅外熱像測(cè)溫技術(shù)、圖像處理、信號(hào)與信息處理技術(shù)研究。
Battery Management System Based on RT-Thread
Li Yunhong,Tian Jida,Chen Hang
(College of Electronic Information,Xi'an Polytechnic University,Xi'an 710048,China)
In order to ensure the safety of the battery during the process of charge and discharge,aiming at the existing problems of the battery management system such as no good portability and not easy to do the function expansion,the paper proposes an intelligent battery management system.The system adopts domestic embedded real-time operating system RT-Thread,and uses STM32as the main controller chip.The test results indicate that the charge and discharge process of the system can monitor the battery real-time,the reserved interface is convenient to do the function expansion.
RT-Thread;STM32;battery management system
TP302.1
A
??薛士然
2015-01-23)