基于STM32的嵌入式系统电源管理设计
周郑+黄斐+苏丹+郭汉明
摘要:
如何让嵌入式设备在保持体积不变的情况下为其提供稳定可靠的电源,是嵌入式设备使用中面临的重要问题之一。基于此,设计了一种功耗低、体积小、性能稳定的电源管理系统。首先介绍了基于单片机STM32F4的管理系统的设计框架,然后分别阐述各个子模块的工作原理与设计,最后介绍了系统电量测量以及开关机的软件设计,并对电源管理系统进行测试。实验结果表明,该电源管理系统达到了预期的设计要求。
关键词:
电源管理;锂电池;电路设计;供电稳定性
DOIDOI:10.11907/rjdk.172213
中图分类号:TP319
文献标识码:A文章编号文章编号:1672-7800(2018)001-0105-03
Abstract:It is must to face the important issues that how to make the embedded device to keep the volume of the case to provide a stable and reliable power supply, embedded devices in the use and market development. Based on this, a low power consumption, small size, stable performance of the power management system is designed in the article. Firstly, the hardware design framework of management system based on STM32F4 is introduced, and on this basis, introduced the work of each sub-module principle and design. Finally, its introduced the overall software design of the system, test the power management system. The experimental results show that the design of the power management system to achieve the desired design requirements.
Key Words:power management; lithium battery; circuit design; stability of power supply
0引言
電源管理系统是嵌入式系统中不可缺少的一部分,在实际使用中由于使用场地限制等一些不可避免的因素,使得给设备接入固定电源非常困难。在实际应用中,一般使用锂离子电池为嵌入式系统供电。锂电池因具有体积小、容量大等特点,在嵌入式设备领域得到了广泛应用[1-3]。但锂离子电池能量密度较大,过充、过放、温度过高都会影响锂离子电池的安全性和使用寿命[4]。传统充电器一般采用全模拟控制电路,无法保证充电过程的安全[5]。因此,为了使嵌入式系统的持续工作时间更长、电池的充放电更加安全可靠,电源管理系统在其中发挥着重要作用[6]。
本文提出一种适用于嵌入式系统的小型化、通用型锂电池电源管理系统,可以非常稳定地为微型光谱仪系统持续供电。该系统正常情况下使用可充电锂电池供电,也可以利用外部直流电源适配器供电,并能自动识别当前的供电模式;具有电量测量功能,能够实时检测电池剩余电量,提醒用户充电及保存测量数据,以防电量突然耗尽导致数据丢失;具有电压转换功能,能够将单一的输入电压转换为系统工作时需要的不同电压值,保证系统正常运行。
1系统总体设计
本文提出的电源管理系统总体设计框架如图1所示,该系统以单片机STM32F4为主控制器,可以通过软件实现系统的开关机与电量查询,同时外部集成了锂电池充放电管理模块、电池电量检测模块、DCDC升压模块与单键开关控制模块。
其中BQ24266和BQ2970构成了电源切换电路和充放电保护模块。STM32F4单片机则通过DS2781对锂电池进行电压采集,再通过A/D转换实现对电池电量的测量,而且STM32F4单片机拥有标准库函数,可以非常轻松地对芯片驱动进行开发。最后通过TPS63051实现直流电压的升压过程,完成对后继设备的供电。
2电路设计
2.1电量检测模块
本文以单片机STM32F4为核心,设计了一种基于DS2781的电池电量测量电路,利用库伦计数法进行电量测量。DS2781是美信半导体公司的单片式电量计,可用于单节或两节电池的电量测量,电路如图2所示。
芯片内部集成了精密电压、温度和电流测量系统,通过测量精密采样电阻R17两端的电压差,测量出入电池的电流并进行电量累计,电池电压为VIN端相对于VSS端的电压。芯片根据以上测量的值和存储器中描述电池组的工作特性参数,计算当前温度下电池的绝对电量和相对电量等结果。MCU通过DQ端与芯片进行通讯,读取电池组电量的相关信息。
2.2电池充放电管理模块
电池充放电管理模块主要由电源切换模块和电源保护模块组成。电源切换模块以芯片BQ24266为主体,当外部直流充电电源接入系统后,会将系统由锂电池供电转变为外部电源供电,并且可以设置充电电流的最大值;充放电保护模块主要用于预防过充、过放对锂电池造成损坏,当电池电压处于2.8V~4.3V之间时,系统能够正常运行,当低于或高于该范围时,保护模块会切断供电以防出现意外。
2.3DC/DC电压转换模块
根据电池参数可知,在电池电量充足的情况下,电池的输出电压范围一般在3.7~4.3V之间。但目前常见的嵌入式系统中,MCU供电电压主要为3.3V。若电压过高很可能导致芯片损坏,所以为了保证嵌入式系统正常工作,需要将电池电压转变为所需的工作电压。
考虑到设备的空间以及转换效率等因素,在设计中采用DC/DC转换电路。DC/DC转换电路具有转换效率高、输出电流高、静态电流低等特点。所设计的稳压电路可将3.7~5.0V的电压下降到3.3V,其外围电路非常简单,仅由几个滤波电容和电感组成。
2.4单键开关控制模块
开关控制电路主要是实现对嵌入式设备的供电控制,同时使系统在关机状态下也可以对电池充电。按下KEY1后,系统软件会根据按下的持续时间判断是误触还是开机动作,并通过PMOS管F2为系统供电,电路如图3所示。本文设计的电路不仅可以实现单一按键开关机功能,还可以通过软件实现关机功能。
3软件设计
3.1整体流程
该电源管理的系统软件采用C语言编写,系统采用模块化设计,主要包括:STM32F4单片机模块、定时器模块、电池电量与电压检测模块。程序流程如图4所示。
当充电管理系统接入电源后,打开开关,系统进行初始化,之后系统会判断是由电池供电还是外部直流电源供电。当只有电池供电时,系统每隔1min进行一次电量测量,当电量低于10%时,系统将发送电量过低信息提醒使用者;当接入外部直流电源时,也会每隔10min进行一次电量检测,当检测到电池电量充满时,将提醒使用者结束充电。如果期间再次按下开关不超过3s,系统进入待机状态;如果超过3s,系统则自动关机。
3.2电量测量驱动程序设计
系统中的电量测量程序通过Keil软件开发,利用芯片DS2781的DQ端与STM32F4的串口通信进行数据的接收与发送。芯片拥有16字节的EEPROM存储器供主机系统使用,可将温度、电压、电流等一系列信息以16位二进制形式通过串口发送到主机上进行综合判断处理。
STM32F4的所有开发功能均封装在库中,嵌入式系统的整个初始化功能通过user_main.c文件实现。在对电量测量的驱动程序中,首先需要通过配置STM32F4的端口使能IO端口,接下来读取DS2781数据,通过void DS2781_Write_Byte(u8 dat)函数对传输进行设置,STM32F4每次从DS2781中读取的数据长度为一个字节;接下来读取DS2781中的电压值,首先写入DS2781的寄存器地址,接着写入STM32F4中用于存储电压值的寄存器地址,最后发送16位电压值。以下为传输函数配置:
u8 j; u8 testb;
DS2781_IO_OUT();
for (j=1;j<=8;j++)
{
testb=dat&0x01; dat=dat>>1;
if (testb)
{
DS2781_DQ_OUT_Reset;
for(timedelay=0;timedelay<65;timedelay++);
DS2781_DQ_OUT_Set;
for(timedelay=0;timedelay<2100;timedelay++);
}
else
{
DS2781_DQ_OUT_Reset;
for(timedelay=0;timedelay<1100;timedelay++);
DS2781_DQ_OUT_Set;
for(timedelay=0;timedelay<65;timedelay++);
}
}
当系统开机运行后,系统会每隔10min通过u16 Read_Voltage (void)函数向系统发送当前的电压信息,通过u16 Read_Temperature(void)函数向系统发送温度信息,以及通过u16 Read_Current (void)函数向系统发送电流信息,系统会通过这些信息综合判断当前电池的剩余电量。以下为电压测量函数:
u16 MSB, LSB,Temp,Voltage;
DS2781_Rst();
DS2781_Check();//If a presence is detected, continue to read
DS2781_Write_Byte(0xCC); // Skip Net Address Command
DS2781_Write_Byte(0x69); // Read Registers Command
DS2781_Write_Byte(0x0C); // Voltage Register Address
MSB = DS2781_Read_Byte(); // Read msb
LSB = DS2781_Read_Byte() & 0xE0; // Read lsb and mask off lower 5 bits
Temp = (MSB<<8) + LSB;
Voltage = ((Temp>>5) * 976) / 100; //Voltage in Volts
return Voltage; //返回电压值
3.3电源开关驱动程序设计
系统软件會在系统上电KEY1键松开后的512ms后检测KILL端的电平状态,如果KILL端保持高电平,则也会让芯片的EN端维持高电平,否则EN端变为低电平。因此,系统上电后,STM32F4需要将KILL端置高,使EN维持置高,完成开机过程。
为了防止误触系统造成开机,在程序中设计了当开机键按下后,STM32F4上电对按下的时间进行计时,当计时超过1.5s时使能EN端,为系统供电并报告STM32F4系统已开启。系统同时也设置了软件关机功能,STM2F4通过上位机让使用者选择是否关机,若选择关机,则STM32F4将KILL端置低,EN端也会随之降低电平,完成关机。
4测试結果与分析
为了测试设计的充放电管理电路的实际应用效果,采用5V直流电源对电路供电,外接单节4.3V锂离子充电电池,每隔10min测量一次电池的充电电流,如图5所示。
从表1和图5中可以看出,电池在充电过程中分为电流增大阶段、电流平稳阶段、电流减小阶段。电池开始充电时,充电电流迅速增大;充到一定程度后,电流会平稳在500mA左右;当电池电量快充满时,充电电流减小。整个过程符合预期的充电情况,充电过程平稳。
为了测试充放电管理系统的放电功能,将其接入到电子负载中进行电量释放,每隔5min测量一次电池电压,得到该模块功耗如图6所示。
在系统的实际应用中,当电池电压不足2.6V时,系统供电非常不稳定,此时BQ29707会切断电源。通过表2可以看到,电池的电压下降速度非常平稳,证明设计的电源管理系统供电非常稳定,达到了设计要求。
5结语
本文设计的光谱仪电源管理系统经过实际的PCB制板调试,测试结果表明,系统运行稳定,能够很好地进行电量检测,且测量误差非常小,基本上达到了嵌入式设备对电源管理系统的要求,并且电源利用效率高,具有较高的实用价值。该系统完全可以移植到各类嵌入式设备中,以提升设备的续航能力。
参考文献:
[1]谢卓,赵朋斌.一种锂电池电量监测电路设计方法[J].现代电子技术,2012,35(1):192-194.
[2]倪健华,谈恩民,姚普粮.基于ATT7022E与STM32多功能电力监测仪设计[J].国外电子测量技术,2015,34(5):48-51.
[3]闫俊美,杨金贤,贾永忠.锂电池的发展与前景[J].盐湖研究,2001,9(4):58-63.
[4]刘晓宇.锂电池充电器芯片的设计与研究[D].上海:复旦大学,2012.
[5]朱旋,欧阳名三.锂离子电池通用充电器的设计[J].煤矿机电,2006(3):10-12.
[6]高俊.低功耗锂电池充放电保护芯片的设计[D].武汉:华中科技大学,2006.
[7]王志强.开关电源设计[M].北京:电子工业出版社,2005.
[8]石璞,董再励.基于EKF的AMR锂电池SOC动态估计研究[J].仪器仪表学报,2006,27(6):1-3.
[9]李申飞,易菊兰.电池电量精确测量方法的研究与实现[J].计算机工程与应用,2009,45(17):244-248.
[10]刘霞,邹彦艳,金梅,等.锂电池电量的动态预测[J].大庆石油学院学报,2004,28(2):81-83.
[11]李真芳,李世雄.MC34063在嵌入式电源设计中的应用[J].国外电子元器件,2005(6):73-74.
[12]孟祥旭,于忠得.采用MC34063芯片的DC-DC电源变换控制器电源电路[J].大连轻工业学院学报,2005(4):300-302.
(责任编辑:黄健)
摘要:
如何让嵌入式设备在保持体积不变的情况下为其提供稳定可靠的电源,是嵌入式设备使用中面临的重要问题之一。基于此,设计了一种功耗低、体积小、性能稳定的电源管理系统。首先介绍了基于单片机STM32F4的管理系统的设计框架,然后分别阐述各个子模块的工作原理与设计,最后介绍了系统电量测量以及开关机的软件设计,并对电源管理系统进行测试。实验结果表明,该电源管理系统达到了预期的设计要求。
关键词:
电源管理;锂电池;电路设计;供电稳定性
DOIDOI:10.11907/rjdk.172213
中图分类号:TP319
文献标识码:A文章编号文章编号:1672-7800(2018)001-0105-03
Abstract:It is must to face the important issues that how to make the embedded device to keep the volume of the case to provide a stable and reliable power supply, embedded devices in the use and market development. Based on this, a low power consumption, small size, stable performance of the power management system is designed in the article. Firstly, the hardware design framework of management system based on STM32F4 is introduced, and on this basis, introduced the work of each sub-module principle and design. Finally, its introduced the overall software design of the system, test the power management system. The experimental results show that the design of the power management system to achieve the desired design requirements.
Key Words:power management; lithium battery; circuit design; stability of power supply
0引言
電源管理系统是嵌入式系统中不可缺少的一部分,在实际使用中由于使用场地限制等一些不可避免的因素,使得给设备接入固定电源非常困难。在实际应用中,一般使用锂离子电池为嵌入式系统供电。锂电池因具有体积小、容量大等特点,在嵌入式设备领域得到了广泛应用[1-3]。但锂离子电池能量密度较大,过充、过放、温度过高都会影响锂离子电池的安全性和使用寿命[4]。传统充电器一般采用全模拟控制电路,无法保证充电过程的安全[5]。因此,为了使嵌入式系统的持续工作时间更长、电池的充放电更加安全可靠,电源管理系统在其中发挥着重要作用[6]。
本文提出一种适用于嵌入式系统的小型化、通用型锂电池电源管理系统,可以非常稳定地为微型光谱仪系统持续供电。该系统正常情况下使用可充电锂电池供电,也可以利用外部直流电源适配器供电,并能自动识别当前的供电模式;具有电量测量功能,能够实时检测电池剩余电量,提醒用户充电及保存测量数据,以防电量突然耗尽导致数据丢失;具有电压转换功能,能够将单一的输入电压转换为系统工作时需要的不同电压值,保证系统正常运行。
1系统总体设计
本文提出的电源管理系统总体设计框架如图1所示,该系统以单片机STM32F4为主控制器,可以通过软件实现系统的开关机与电量查询,同时外部集成了锂电池充放电管理模块、电池电量检测模块、DCDC升压模块与单键开关控制模块。
其中BQ24266和BQ2970构成了电源切换电路和充放电保护模块。STM32F4单片机则通过DS2781对锂电池进行电压采集,再通过A/D转换实现对电池电量的测量,而且STM32F4单片机拥有标准库函数,可以非常轻松地对芯片驱动进行开发。最后通过TPS63051实现直流电压的升压过程,完成对后继设备的供电。
2电路设计
2.1电量检测模块
本文以单片机STM32F4为核心,设计了一种基于DS2781的电池电量测量电路,利用库伦计数法进行电量测量。DS2781是美信半导体公司的单片式电量计,可用于单节或两节电池的电量测量,电路如图2所示。
芯片内部集成了精密电压、温度和电流测量系统,通过测量精密采样电阻R17两端的电压差,测量出入电池的电流并进行电量累计,电池电压为VIN端相对于VSS端的电压。芯片根据以上测量的值和存储器中描述电池组的工作特性参数,计算当前温度下电池的绝对电量和相对电量等结果。MCU通过DQ端与芯片进行通讯,读取电池组电量的相关信息。
2.2电池充放电管理模块
电池充放电管理模块主要由电源切换模块和电源保护模块组成。电源切换模块以芯片BQ24266为主体,当外部直流充电电源接入系统后,会将系统由锂电池供电转变为外部电源供电,并且可以设置充电电流的最大值;充放电保护模块主要用于预防过充、过放对锂电池造成损坏,当电池电压处于2.8V~4.3V之间时,系统能够正常运行,当低于或高于该范围时,保护模块会切断供电以防出现意外。
2.3DC/DC电压转换模块
根据电池参数可知,在电池电量充足的情况下,电池的输出电压范围一般在3.7~4.3V之间。但目前常见的嵌入式系统中,MCU供电电压主要为3.3V。若电压过高很可能导致芯片损坏,所以为了保证嵌入式系统正常工作,需要将电池电压转变为所需的工作电压。
考虑到设备的空间以及转换效率等因素,在设计中采用DC/DC转换电路。DC/DC转换电路具有转换效率高、输出电流高、静态电流低等特点。所设计的稳压电路可将3.7~5.0V的电压下降到3.3V,其外围电路非常简单,仅由几个滤波电容和电感组成。
2.4单键开关控制模块
开关控制电路主要是实现对嵌入式设备的供电控制,同时使系统在关机状态下也可以对电池充电。按下KEY1后,系统软件会根据按下的持续时间判断是误触还是开机动作,并通过PMOS管F2为系统供电,电路如图3所示。本文设计的电路不仅可以实现单一按键开关机功能,还可以通过软件实现关机功能。
3软件设计
3.1整体流程
该电源管理的系统软件采用C语言编写,系统采用模块化设计,主要包括:STM32F4单片机模块、定时器模块、电池电量与电压检测模块。程序流程如图4所示。
当充电管理系统接入电源后,打开开关,系统进行初始化,之后系统会判断是由电池供电还是外部直流电源供电。当只有电池供电时,系统每隔1min进行一次电量测量,当电量低于10%时,系统将发送电量过低信息提醒使用者;当接入外部直流电源时,也会每隔10min进行一次电量检测,当检测到电池电量充满时,将提醒使用者结束充电。如果期间再次按下开关不超过3s,系统进入待机状态;如果超过3s,系统则自动关机。
3.2电量测量驱动程序设计
系统中的电量测量程序通过Keil软件开发,利用芯片DS2781的DQ端与STM32F4的串口通信进行数据的接收与发送。芯片拥有16字节的EEPROM存储器供主机系统使用,可将温度、电压、电流等一系列信息以16位二进制形式通过串口发送到主机上进行综合判断处理。
STM32F4的所有开发功能均封装在库中,嵌入式系统的整个初始化功能通过user_main.c文件实现。在对电量测量的驱动程序中,首先需要通过配置STM32F4的端口使能IO端口,接下来读取DS2781数据,通过void DS2781_Write_Byte(u8 dat)函数对传输进行设置,STM32F4每次从DS2781中读取的数据长度为一个字节;接下来读取DS2781中的电压值,首先写入DS2781的寄存器地址,接着写入STM32F4中用于存储电压值的寄存器地址,最后发送16位电压值。以下为传输函数配置:
u8 j; u8 testb;
DS2781_IO_OUT();
for (j=1;j<=8;j++)
{
testb=dat&0x01; dat=dat>>1;
if (testb)
{
DS2781_DQ_OUT_Reset;
for(timedelay=0;timedelay<65;timedelay++);
DS2781_DQ_OUT_Set;
for(timedelay=0;timedelay<2100;timedelay++);
}
else
{
DS2781_DQ_OUT_Reset;
for(timedelay=0;timedelay<1100;timedelay++);
DS2781_DQ_OUT_Set;
for(timedelay=0;timedelay<65;timedelay++);
}
}
当系统开机运行后,系统会每隔10min通过u16 Read_Voltage (void)函数向系统发送当前的电压信息,通过u16 Read_Temperature(void)函数向系统发送温度信息,以及通过u16 Read_Current (void)函数向系统发送电流信息,系统会通过这些信息综合判断当前电池的剩余电量。以下为电压测量函数:
u16 MSB, LSB,Temp,Voltage;
DS2781_Rst();
DS2781_Check();//If a presence is detected, continue to read
DS2781_Write_Byte(0xCC); // Skip Net Address Command
DS2781_Write_Byte(0x69); // Read Registers Command
DS2781_Write_Byte(0x0C); // Voltage Register Address
MSB = DS2781_Read_Byte(); // Read msb
LSB = DS2781_Read_Byte() & 0xE0; // Read lsb and mask off lower 5 bits
Temp = (MSB<<8) + LSB;
Voltage = ((Temp>>5) * 976) / 100; //Voltage in Volts
return Voltage; //返回电压值
3.3电源开关驱动程序设计
系统软件會在系统上电KEY1键松开后的512ms后检测KILL端的电平状态,如果KILL端保持高电平,则也会让芯片的EN端维持高电平,否则EN端变为低电平。因此,系统上电后,STM32F4需要将KILL端置高,使EN维持置高,完成开机过程。
为了防止误触系统造成开机,在程序中设计了当开机键按下后,STM32F4上电对按下的时间进行计时,当计时超过1.5s时使能EN端,为系统供电并报告STM32F4系统已开启。系统同时也设置了软件关机功能,STM2F4通过上位机让使用者选择是否关机,若选择关机,则STM32F4将KILL端置低,EN端也会随之降低电平,完成关机。
4测试結果与分析
为了测试设计的充放电管理电路的实际应用效果,采用5V直流电源对电路供电,外接单节4.3V锂离子充电电池,每隔10min测量一次电池的充电电流,如图5所示。
从表1和图5中可以看出,电池在充电过程中分为电流增大阶段、电流平稳阶段、电流减小阶段。电池开始充电时,充电电流迅速增大;充到一定程度后,电流会平稳在500mA左右;当电池电量快充满时,充电电流减小。整个过程符合预期的充电情况,充电过程平稳。
为了测试充放电管理系统的放电功能,将其接入到电子负载中进行电量释放,每隔5min测量一次电池电压,得到该模块功耗如图6所示。
在系统的实际应用中,当电池电压不足2.6V时,系统供电非常不稳定,此时BQ29707会切断电源。通过表2可以看到,电池的电压下降速度非常平稳,证明设计的电源管理系统供电非常稳定,达到了设计要求。
5结语
本文设计的光谱仪电源管理系统经过实际的PCB制板调试,测试结果表明,系统运行稳定,能够很好地进行电量检测,且测量误差非常小,基本上达到了嵌入式设备对电源管理系统的要求,并且电源利用效率高,具有较高的实用价值。该系统完全可以移植到各类嵌入式设备中,以提升设备的续航能力。
参考文献:
[1]谢卓,赵朋斌.一种锂电池电量监测电路设计方法[J].现代电子技术,2012,35(1):192-194.
[2]倪健华,谈恩民,姚普粮.基于ATT7022E与STM32多功能电力监测仪设计[J].国外电子测量技术,2015,34(5):48-51.
[3]闫俊美,杨金贤,贾永忠.锂电池的发展与前景[J].盐湖研究,2001,9(4):58-63.
[4]刘晓宇.锂电池充电器芯片的设计与研究[D].上海:复旦大学,2012.
[5]朱旋,欧阳名三.锂离子电池通用充电器的设计[J].煤矿机电,2006(3):10-12.
[6]高俊.低功耗锂电池充放电保护芯片的设计[D].武汉:华中科技大学,2006.
[7]王志强.开关电源设计[M].北京:电子工业出版社,2005.
[8]石璞,董再励.基于EKF的AMR锂电池SOC动态估计研究[J].仪器仪表学报,2006,27(6):1-3.
[9]李申飞,易菊兰.电池电量精确测量方法的研究与实现[J].计算机工程与应用,2009,45(17):244-248.
[10]刘霞,邹彦艳,金梅,等.锂电池电量的动态预测[J].大庆石油学院学报,2004,28(2):81-83.
[11]李真芳,李世雄.MC34063在嵌入式电源设计中的应用[J].国外电子元器件,2005(6):73-74.
[12]孟祥旭,于忠得.采用MC34063芯片的DC-DC电源变换控制器电源电路[J].大连轻工业学院学报,2005(4):300-302.
(责任编辑:黄健)