王超+秦會斌



摘要:設計了一種鉛酸蓄電池充放電監測系統,實現對4節12V/20AH串聯鉛酸電池組充放電參數的監測。系統硬件設計以STM32單片機為核心,完成溫度檢測、電壓檢測、電流檢測、顯示、聲光報警等電路設計;軟件設計由單總線讀取4個DS18B20溫度傳感器數據實現溫度檢測,并通過STM32多通道連續AD轉換和DMA(Direct Memory Access,直接內存存?。┘夹g實現電壓、電流的快速檢測。
關鍵詞:鉛酸蓄電池;STM32;充放電監測系統
DOIDOI:10.11907/rjdk.172001
中圖分類號:TP319
文獻標識碼:A文章編號文章編號:1672-7800(2018)001-0122-04
Abstract:A charge and discharge monitoring system for the lead-acid battery was designed. It could monitor the charge and discharge parameters of the serial lead-acid battery pack that consists of four 12V/20AH lead-acid batteries. The temperature detection, voltage detection, current detection, display, sound and light alarm circuit design was completed in the hardware design of the system based on the STM32 microcontroller as the core. In the software design of the system, the temperature detection was realized through a single bus and it could read the data of four DS18B20 temperature sensors, the rapid voltage and current detection was achieved throug the STM32 multi-channel continuous AD conversion and DMA technology.
Key Words:lead-acid battery; STM32; charge and discharge monitoring system
0引言
鉛酸蓄電池廣泛應用于電力、交通、通信等各個領域,不合理的充放電使其實際使用壽命和設計使用壽命相差很多,造成極大的資源浪費,并對由其構成的供電系統安全性產生嚴重威脅[1]。為延長鉛酸蓄電池使用壽命,及時發現充放電過程中的過充電、過放電、超溫等異常問題,設計了一種鉛酸蓄電池充放電監測系統,該系統可對4節12V/20AH串聯鉛酸電池組充放電時的電流以及電壓和溫度進行監測,并在充放電參數出現異常時進行報警提示。
1系統硬件設計
系統硬件設計以SMT32單片機為核心,整體結構如圖1所示,由含溫度檢測模塊、電壓檢測模塊、電流檢測模塊、顯示和通信模塊、聲光報警模塊組成。溫度、電壓、電流檢測模塊用于檢測充放電時電池組的電流,以及電池組中每個單體蓄電池的電壓和溫度;顯示和通信模塊用于顯示檢測到的充放電參數,并將其發送給計算機;聲光報警模塊在充放電參數出現異常時進行報警。
1.1主控芯片簡介
設計采用STM32F103RCT6單片機作為主控芯片,該芯片有以下特點:①接口豐富、性能穩定、功耗低、價格便宜;②工作電壓2.0V~3.6V,工作溫度-40℃~85℃;③使用ARM 32位Cortex-M3高性能內核,內置高速存儲器(48KB SRAM, 256KB FLASH),工作頻率最高可達72MHz;④外部有64引腳,其中51個為通用IO口,IO引腳資源豐富;⑤含有3個12位ADC,支持多通道ADC;⑥擁有2個DMA控制器(共12個通道),可用于存儲器到存儲器、④外設到存儲器和存儲器到外設的數據傳輸;⑦支持I2C、USART、SPI、CAN、USB等通信[2]。
1.2溫度檢測模塊設計
溫度檢測模塊實現對鉛酸蓄電池溫度的檢測。設計使用單總線溫度傳感器DS18B20進行溫度檢測,其提供9位溫度讀數,溫度測量范圍為-55℃~125℃,精度±0.5℃,每個DS18B20的內部光刻ROM中均有唯一的64位序列號。為節約IO資源,設計采用單根總線掛載4個DS18B20對4節鉛酸蓄電池溫度進行檢測,通過64位序列號對DS18B20進行匹配后,逐個讀取溫度檢測數據[3-4]。溫度檢測模塊電路設計如圖2所示。
1.3電壓檢測模塊設計
電壓檢測模塊完成對每節單體鉛酸蓄電池電壓的檢測。設計采用電阻分壓法實現電壓檢測,電路設計如圖3所示。串聯鉛酸電池組電壓V1-V4經過分壓電阻RF1-RF4和采樣電阻RF01-RF04分壓后,接入STM32的PA0-PA3引腳進行AD轉換。設計采用的12V/20AH鉛酸蓄電池最高充電電壓為15V左右。為保證分壓后的電壓信號不超過STM32 AD轉換最高輸入電壓3.3V,要進行阻值選取,如圖3所示。電池組電壓最高時,分壓后輸出電壓和分壓放大倍數如表1所示,其中60V-15V分別對應圖3中V1-V4的電壓。STM32通過PA0-PA3引腳對分壓后的電壓進行AD轉換,轉換結果乘以相應的分壓放大倍數即可求得V1-V4電壓值,對V1-V4進行減法運算即可求得各節電池充放電時的電壓。為提高電壓endprint
檢測精度,電壓檢測電路中電阻使用溫漂為10ppm、精度為0.1%的低溫漂精密電阻。
1.4電流檢測模塊設計
電流檢測模塊實現對鉛酸電池組充放電電流的檢測。
設計采用量程為20A的ACS712ELCTR-20A霍爾電流傳感器進行電流檢測,電路設計如圖4所示,鉛酸電池組充放電電流通過1、2引腳和3、4引腳流經ACS712時,其7引腳會輸出一個與流經電流IP線性相關的電壓VIOUT,VIOUT=2.5+0.1IP[5]。設計中充放電電流最大10A,ACS712輸出電壓可能超過最高輸入電壓3.3V,VIOUT需要分壓后才能接入STM32 AD轉換引腳。STM32 AD轉換引腳輸入電阻較小,將VIOUT分壓后電壓信號直接接入STM32 AD轉換引腳會對VIOUT的分壓電路產生影響,進而影響電流檢測精度。如圖4所示,設計中先通過低溫漂精密電阻Rc1(30kΩ)和Rc2(20kΩ)對VIOUT進行分壓,分壓后的電壓信號通過由運放OPA180構成的電壓跟隨器,再接入STM32的PA4引腳,理想狀態運放輸入電阻無窮大,對VIOUT的分壓電路的影響可忽略。OPA180輸出電壓VPA4等于VIOUT分壓后的電壓,VPA4=1.5+0.06IP,鉛酸電池組充放電電流IP計算如式(1)所示。當IP為正時表示電池組處于充電狀態,當IP為負時表示電池組處于放電狀態。
1.5聲光報警模塊設計
聲光報警模塊在充放電參數出現異常時進行報警,電路設計如圖5所示。源蜂鳴器BEEP驅動電流為30mA左右,為減少STM32負載,使用三極管S8050對STM32輸出的電流擴流后再驅動蜂鳴器,STM32 IO口只需提供不到1mA的驅動電流。當充放電參數正常時LED0為低電平,GRE(綠色LED)燈亮;當充放電參數出現異常時LED1為低電平,BEEP為高電平,RED(紅色LED)燈亮,蜂鳴器響,進行報警。
1.6顯示和通信模塊設計
顯示模塊用來顯示檢測到的鉛酸蓄電池充放電參數,通信模塊用來將檢測到的充放電參數發送給計算機。顯示模塊使用2.8寸TFT LCD液晶進行數據顯示,電路設計如圖6所示。通信模塊采用電平轉換芯片CH340G實現計算機和STM32間的RS232串口通信。
2系統軟件設計
2.1溫度檢測程序設計
在STM32的一個IO口上設計掛載4個DS18B20,需先讀取DS18B20的64位光刻ROM以對其進行匹配,實現單總線讀取4個溫度數據。DS18B20的64位光刻ROM數據結構如圖7所示。為保證讀取到的光刻ROM數據無誤,需要根據最高8位CRC編號對低56位數據進行校驗,DS18B20的64位光刻ROM讀取程序流程見圖8。
根據光刻ROM數據對DS18B20進行匹配并逐個讀取溫度檢測數據,實現對4節鉛酸蓄電池的溫度檢測,單總線讀取4個DS18B20數據程序流程如圖9所示[6]。
2.2電壓和電流檢測程序設計
電壓信號和電流檢測被轉換成5路電壓信號進行檢測,STM32需要對PA0-PA4引腳電壓信號進行檢測。STM32 AD轉換支持單通道單次轉換、單通道多次轉換、多通道單次轉換、多通道連續轉換等多種轉換模式,為提高轉換速度,減少誤差,設計采用多通道連續轉換模式對PA0-PA4引腳的5路電壓信號進行連續多次AD轉換。STM32 AD轉換支持DMA技術,AD轉換結果可不經CPU和中斷,由DMA控制器直接傳輸到設定的目標地址中。為提高AD轉換的效率,使用DMA技術對多通道連續AD轉換的結果進行保存[7]。電壓和電流檢測程序流程如圖10所示。對每個通道進行12次AD轉換,在數據處理部分,去除12次轉換結果中兩個最大值和兩個最小值后求平均值以減少誤差。將PA0-PA4 AD轉換配置為5通道連續轉換模式并開啟DMA,核心代碼如下:
ADC_DeInit(ADC1);//復位ADC1
ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;//獨立模式
ADC_InitStructure.ADC_ScanConvMode=ENABLE;//多通道掃描模式
ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;//連續轉換模式
ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//軟件觸發轉換
ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;//ADC數據右對齊
ADC_InitStructure.ADC_NbrOfChannel=5;//順序進行規則轉換的ADC通道的數目
ADC_Init(ADC1,&ADC_InitStructure);//初始化外設ADCx的寄存器
//設置指定ADC的規則組通道,設置它們的轉化順序和采樣時間
ADC_RegularChannelConfig(ADC1,ADC_Channel_0,0,ADC_SampleTime_55Cycles5);
ADC_RegularChannelConfig(ADC1,ADC_Channel_1,1,ADC_SampleTime_55Cycles5);
ADC_RegularChannelConfig(ADC1,ADC_Channel_2,2,ADC_SampleTime_55Cycles5);
ADC_RegularChannelConfig(ADC1,ADC_Channel_3,3,ADC_SampleTime_55Cycles5);endprint
ADC_RegularChannelConfig(ADC1,ADC_Channel_4,4,ADC_SampleTime_55Cycles5);
ADC_DMACmd(ADC1,ENABLE);//開啟ADC的DMA
ADC_Cmd(ADC1,ENABLE);//使能ADC1
3系統整體程序設計
系統整體程序流程見圖11,系統對鉛酸蓄電池充放電溫度、電壓、電流參數進行循環檢測,將檢測到的充放電參數顯示在LCD液晶上,并通過RS232串口將充放電參數發送給計算機,在充放電參數出現異常時進行聲光報警。
4測試結果與分析
根據系統軟硬件設計,完成電路焊接和各模塊編程調試后,對系統整體進行測試。與標準溫度對比,表明系統DS18B20溫度傳感器工作正常,檢測精度達到±0.5℃;充放電電壓檢測數據如表2所示,表中BAT1-BAT4為圖3中鉛酸蓄電池編號,電壓檢測精度達到±50mV;充放電電流檢測數據如表3所示,充放電電流較小時電流檢測誤差相對較大,可能是由于小電流時ACS712輸出電壓電路中電磁干擾造成,電流檢測整體誤差低于2%;系統能根據設定的報警參數在充放電參數異常時進行聲光報警。
5結語
本文基于STM32單片機設計了一種鉛酸蓄電池充放電監測系統,該系統能實現對4節12V/20AH串聯鉛酸電池組充放電電流及每個單體鉛酸蓄電池的電壓和溫度的檢測,并能在充放電參數出現異常時及時報警。該系統溫度檢測精度±0.5℃,電壓檢測精度±50mV,電流檢測誤差低于2%,能對鉛酸蓄電池充放電參數進行有效監測。下一步研究將對系統功能進行擴展,實現遠程監測、充放電控制等功能。
參考文獻:
[1]常維靜.一款動力電池充電管理芯片的研究與設計[D].合肥:合肥工業大學,2016.
[2]孫書鷹,陳志佳,寇超.新一代嵌入式微處理器STM32F103開發與應用[J].微計算機應用,2010(12):59-63.
[3]湯鍇杰,栗燦,王迪,等.基于DS18B20的數字式溫度采集報警系統設計[J].傳感器與微系統,2014(3):99-102.
[4]孫明利,鮑健,張鑠.單總線技術及DS18B20的溫度測量實現[J].大氣與環境光學學報,2010(4):322-326.
[5]王慧.基于ACS712的直流電機電流監測系統的設計[J].自動化技術與應用,2014(9):103-105.
[6]朱麗麗,王長友.基于AVR單片機與溫度傳感器DS18B20的多點溫度測量[J].電工電氣,2010(12):47-51.
[7]張滔.基于STM32單片機DMA機制的多通道數據采集[J].黑龍江科技信息,2013(30):27-28.
(責任編輯:杜能鋼)endprint