基于STM32F103控制器的蓄电池双向电流检测设计

更新时间:2023-05-20 06:13:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于STM32F103控制器的蓄电池双向电流检测设计

基于STM32F103控制器的蓄电池双向电流检测设计

高兵权 肖学福 刘金彪 张扬奇

摘要:介绍了装备蓄电池组工作电压和电流实现检测的需求,利用运算放大器构建了正负双向电流量累积求和及跟踪反向的预处理电路,基于STM32F103控制器片内AD实现了12位电压和电流的信号采集转换。最后给出了主要程序片段和如何提高ADC精度的一些措施。

关键词:STM32,控制器,双向,电流,检测

中图分类号:TB51 文献标识码:A

The Design of Bidirectional Battery Current Detection With STM32F103 Controller

Gao Bing-quan, Xiao Xue-fu, Liu Jin-biao Zhang Yang-qi

(Institute of Military Transportation ,Tianjin,300161)

Abstract:The need of equipment battery voltage and current real-time detection is introduced. Build the bidirectional current sum, trace and reverse pre-process circuit with operational amplifier. achieve the 12 bit voltage and current signal collection and conversion based on STM32F103 internal AD.At last the main program segment and the methods of How to get the best ADC accuracy are given. Keywords: STM32,Controller,Bidirectional,Current,Detection

1.引言

在某装备的研制过程中,为保障装备效能的正常发挥,需要实时掌握其内部集成的铅酸蓄电池组的工作状态,主要状态参数包括电池组电压和充放电电流,要求监控系统做到精度高、可靠、简单。具体参数指标是:蓄电池组标称值DC24V,充放电电流在5A以内。电压检测精度要求0.01V,电流检测精度要求0.01A,即小数点后保证两位有效数字。据此本文设计了基于STM32F103VB嵌入式控制器为核心的信号处理、采样和计算的软硬件控制系统。

STM32F103系列控制器由意法半导体公司(ST)推出,使用高性能的ARM Cortex-M3 32位的RISC内核,工作频率为72MHz,内置高速存储器(高达128K字节的闪存和20K字节的SRAM),丰富的增强I/O端口和联接到两条APB总线的外设。该器件包含3个通用16位定时器和一个PWM定时器,还包含标准和先进的通信接口:多达2个I2C和SPI、3个USART、一个USB和一个CAN。STM32F103xx增强型系列工作于-40℃至+105℃

[1]的温度范围,供电电压2.0V至3.6V,一系列的省电模式保证低功耗应用的要求。该设计选用STM32F103VB

处理器主要考虑其高速可靠、资源丰富、工作温度宽和供电电压宽、功耗低、性价比高的特点,尤其是其内部集成双路AD转换器,16通道,12位精度,1μs转换时间。

2.蓄电池组电压和电流采样处理过程

设计的蓄电池组工作状态实时检测系统如图1所示,功能上包括独立的两部分:电压检测和电流检测。其中电压检测实现较为简单。

基于STM32F103控制器的蓄电池双向电流检测设计

图1 信号采集和处理的工作原理图

2.1电压检测

电压信号量的检测采用双电阻分压模式,取两个合适阻值的电阻串联分压,分压后的电压信号送入STM32F103处理器的AD转换引脚。本设计中,控制器基准电压采用+2.5V,故电压信号输入范围须小于等于

2.5V。而分压电阻R1和R2的关系有公式(1)开确定,即

(1)

其中Vbat为蓄电池组电压值,实际变化范围:20V~28V,取Vbat最大值28V,R1=102kΩ,R2=10Ω,均选用精度为1%的金属膜电阻。R1和R2的串联电阻达到112 kΩ,消耗的电量对装备工作不会产生过大的影响。

2.2充放电电流双向采样与处理

系统充放电电流的实时检测选用瑞士LEM公司LA28-NP电流传感器,该传感器是利用霍尔原理的闭环(补偿)电流传感器,原边回路和副边回路之间绝缘,可用于测量直交流脉冲和混合型电流,供电电压±15V。系统中采用1000:5的匝比,原边充放电±5A电流对应副边额定电流Is有效值为±25mA。在应用中,感应电流Is串联精密电阻Rm,取得电压量V1,电阻Rm的取值取决于AD转换器对于V2的要求。

电流传感器输出电流为双向,即±25mA的电流信号,在实际工况中,放电时输出最大+25mA电流,而充电时,输出为-25mA电流,由此而取得的电压信号V1相对于地电平也为相应的正负电压。STM32F103控制器ADC输入范围为:Vref-≤Vin≤Vref+,应用中Vref-接模拟地,Vref+接2.5V电压基准,故ADC输入范围:0~2.5V。目前存在的问题是:STM32F103控制器采用单3.3V工作,模拟量输入无法处理方向电压。在传统的方式下,如果电阻Rm基准电平端接入地,当充电工况下,感应电流V1为负电压,控制器无能为力。针对这个问题,本文设计了如图2所示的累加升压、跟随方向信号预处理电路,解决了双向电流的AD采样问题。

基于STM32F103控制器的蓄电池双向电流检测设计

图2 电压累加升压、跟随反向转换电路

该设计的基本思想是将双向电流的电压变化范围均控制在0~Vref+范围,是以牺牲AD转换的精度为代价的,详细过程如下:

(1)串入电阻Rm=50Ω,取得模拟量电压输出V1范围:-1.25V~+1.25V;

(2)利用两门运算放大器构建求和电路,实现V1和+1.25V电压基准累加,将V1升压至0~-2.5V。在做一次反向跟随放大,实现电压反向功能,输出电压V2范围0~+2.5V。

图2中电压Vmid = 。

取R3=R4=R5=10kΩ,Vmid = -(1.25+Vin),故Vmin电压范围取值:0~-2.5V。

在第二级的反相放大电路中Vout=。

取R6=R7=10kΩ,则Vout = -Vmid,Vout取值范围:0~+2.5V。

运算放大器选用通用运放LM324,供电电压±15V,和电流传感器LA28-NP采用同一供电电路。

(3)STM32F103控制器AD转换为12位精度,理论上对应数字量范围0~4096。实际情况下,由于接插件、线缆、PCB和器件的综合影响,求得放充电流计算公式为:y=kx-5.046,k=0.00244,在实际的程序编制中,k定义为float数据类型,至少取3位有效数字,才能保证0.01A的电流精度。x表示控制器AD转换得到的数字量,y表示实际电流值,负数表示充电电流,正数表示放电电流。

图3 充放电电流和AD数字量的曲线关系

3.软件编制

3.1软件设计基本思路

监控系统软件的开发采用ARM公司的RealView MDK开发工具,统一采用C语言编程。为提高开发效率,ST公司推出了针对STM32控制器的固件函数库,目前可用的最新版本为STM32F10x_StdPeriph_Lib_V3.2.0。电压和电流检测AD转换软件设置及工作过程较为简单。

(1)配置模拟量输入的GPIO口,STM32控制器有个很大的优点,在于其ADC转换输入引脚可以是任意GPIO,,只要GPIO配置为GPIO_Mode_AIN模式,即可以实现模拟量输入,STM32F103共有16个外部通道,该设计中将PC4好PC6作为电压量和电流量的ADC输入端;

(2)设置ADC,将ADC设置为连续转换模式、右对齐、非外部触发;

(3)启动ADC,开始采样转换和处理。

3.2主要程序片段

STM32的ADC主要程序片段如下:

/*配置GPIO口程序*/

基于STM32F103控制器的蓄电池双向电流检测设计

void GPIO_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

……

//配置PC4和PC6为模拟量输入

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_6 ;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

GPIO_Init(GPIOC, &GPIO_InitStructure);

……

}

/*电压电流配置、工作采样主程序*/

int main(void)

{

……

RCC_Configuration();

GPIO_Configuration();

DMA_Configuration();

……

//ADC1 configuration

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_InitStructure.ADC_NbrOfChannel = 1;

ADC_Init(ADC1, &ADC_InitStructure);

//DC1 regular channel14 configuration

ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_55Cycles5);

ADC_DMACmd(ADC1, ENABLE); //Enable ADC1 DMA

ADC_Cmd(ADC1, ENABLE); // Enable ADC1

// Enable ADC1 reset calibaration register

ADC_ResetCalibration(ADC1);

// Check the end of ADC1 reset calibration register

while(ADC_GetResetCalibrationStatus(ADC1));

// Start ADC1 calibaration

ADC_StartCalibration(ADC1);

// Check the end of ADC1 calibration

while(ADC_GetCalibrationStatus(ADC1));

// Start ADC1 Software Conversion

ADC_SoftwareStartConvCmd(ADC1, ENABLE);

while(1)

{

AD_value=ADC_GetConversionValue(ADC1);

}

}

基于STM32F103控制器的蓄电池双向电流检测设计

3.3软件滤波措施

该应用中考虑电压量和电流量为变化较缓的信号,故软件采取防脉冲干扰平均滤波算法。连续采样N个数据,去掉一个最大值和一个最小值,然后计算N-2个数据的算术平均值。通过实验N取值5,即可达到满意的效果。该算法能够剔除偶然出现的脉冲性干扰,消除由于脉冲干扰所引起的采样值偏差。

4.提高信号检测精度的措施

为提高ADC处理的精度和系统抗干扰能力,该设计从控制器ADC使用、电压基准和供电、滤波及元器件的选择等方面采取了系列的措施。

4.1控制器ADC使用

在STM32F103控制器的ADC使用中,考虑了两个方面,一是两个模拟量输入口临近的管脚不安排数字量IO,因为I/O脚之间的耦合电容,I/O端口的翻转可能对ADC的模拟输入产生一些噪声。可能会因为PCB走线过于靠近,或互相交叉而产生这样的串扰影响。内部数字信号和I/O脚的翻转会产生高频的噪声;二是温度会对ADC的精度产生较大的影响,主要有2项误差:偏移误差和增益误差。这些误差可以通过微控制器的固件程序补偿。一个方法是根据不同的温度范围,测量出完整的偏移和增益变化,再在存储器中建立一个对照表。这样的方式需要额外的费用和时间。另一个方式是当温度达到某个数值时,使用内部的温度传感器和ADC看门狗功能,重新校准。

4.2电压基准芯片和独立电源供电

在该设计中为保证信号的质量,重要的电平信号采用专用芯片来实现,如使用REF2912和REF2925电压基准芯片产生+1.25V和+2.5V两个电压基准源,+1.25V基准信号用于放大器累加电路,+2.5V基准信号提供给STM32F103控制器Vref+;其次,模拟电路、控制器模拟供电和数字电路供电采用独立电源,由专用DC/DC提供±15V电源,为LA-28P电流传感器及LM324运算放大器供电,STM32控制器模拟部分VDDA和数字部分VDD使用独立的+3.3V供电。最后三种独立电源于一点共地,尽可能地减少电源间的互扰。这样做的好处是避免了很多的I/O端口翻转操作在直流电源上产生的大量噪声干扰。

4.3其它抗干扰措施

另外,该设计还采取了其它的一些抗干扰措施,如在STM32F103控制器的VDDA和Vref+管脚连接到2个外部的去藕电容器(10nF瓷介电容+1μF的钽电容);模拟电路中的所有电阻采用1%精度的金属膜电阻;在PCB的布置中,模拟电路部分远离数字部分,避免了在模拟电路底下通过数字信号线。

5.结语

该设计实现了充放电电流信号的累加升压、跟随反向,利用STM32F103控制器片内12位AD实现了实时监测,最终电压检测实际精度达到0.005V,电流实际精度达到0.005A,效果稳定、可靠,实现了设计目的,满足了设计要求。需进一步改进之处在于处理系统温漂问题,即温度对电路的影响。

参考文献:

[1]李宁.基于MDK的STM32处理器开发应用[M].北京:北京航空航天大学出版社.2008.

[2]STMicroelectronics.How to get the best ADC accuracy in STM32F10xxx devices V1.0 .2008.

本文来源:https://www.bwwdw.com/article/fqe4.html

Top