基于STM32的铅酸蓄电池充放电监测系统设计
2018-02-01王超秦会斌
王超+秦会斌
摘要:设计了一种铅酸蓄电池充放电监测系统,实现对4节12V/20AH串联铅酸电池组充放电参数的监测。系统硬件设计以STM32单片机为核心,完成温度检测、电压检测、电流检测、显示、声光报警等电路设计;软件设计由单总线读取4个DS18B20温度传感器数据实现温度检测,并通过STM32多通道连续AD转换和DMA(Direct Memory Access,直接内存存取)技术实现电压、电流的快速检测。
关键词:铅酸蓄电池;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