在这里插入图片描述

一、項目介绍

摘 要
随着便携式电子设备的普及,锂电池由于具有能量密度大、循环寿命长等特点成为了主流电源方案,但是锂电池对充放电条件比较敏感,缺少有效的保护很容易造成电池损坏甚至发生安全事故。因此本设计开发了以ST STM32 单片机为平台的简易充电器充放电保护系统。系统使用STM32F103C8T6作为主控芯片,用TP4056进行锂电池的恒流恒压充电,用INA219电流电压监视器来定时取电池的放电电压、电流和功率,利用电压映射的办法来估算电池还有多少电量。系统具有低电量保护、欠压保护、过流保护三种安全措施,在出现异常情况的时候自动切断负载,并发出声音和灯光报警。负载控制采用PWM调光方式完成多档位亮度的调节,具有OLED显示屏和按键的本地人机交互功能,并且带有ESP8266模块可以实现远程监控以及控制功能。经过系统的调试和测试,结果表明本系统运行稳定、保护响应及时,各项功能都达到了设计要求,具有一定的实用价值和推广意义。

关键词 STM32;锂电池;充放电保护;INA219;PWM调光;WiFi通信

主要研究内容
本设计以锂电池充放电保护为核心,对锂电池充放电保护系统做了一整套的嵌入式系统开发工作。研究内容主要分为以下几个方面:
系统总体方案设计出系统的功能需求、总体结构以及工作流程,并且确定主要的性能指标。
硬件电路设计为以STM32单片机为主控制电路的电源、锂电池充放电、电压电流检测、负载控制、人机交互、无线通信等组成的系统。
软件程序设计在Keil开发环境下使用C语言进行主控程序的编写,完成数据采集、保护逻辑判断、负载PWM控制、OLED显示、按键处理、WiFi无线通信等各项功能。
系统调试与测试是对硬件和软件进行分模块调试之后,再对系统进行联调,检验各项保护功能是否可靠、人机交互是否流畅。
经过以上研究内容之后,可以得到一台完整、稳定、方便操作的锂电池充放电保护样机。

系统功能需求分析
本系统主要解决锂电池安全管理系统所面临的所有问题,具体功能有如下几点。锂电池的状态应该得到实时的监测,在系统中可以对锂电池的电压、电流、功率、剩余电量等参数进行收集并展示给用户。由于大部分电池损坏、安全事故都是由于用户对电池状态不了解所造成的,因此用户能够及时得知电池状况并做出正确的决定,从而减少事故的发生。第二就是充放电保护功能,这是本系统的主要功能要求。当锂电池电量小于设定的阈值时,系统会自动切断负载,并发出声光报警来防止电池过度放电,当电压低于欠压阈值时也会做出同样的保护动作;当出现过流情况的时候,系统会发出持续的报警,但是会等待用户手动操作或者通过APP关闭,不同的保护方式考虑到过流和负载特性之间的联系。
系统还要具有负载控制、信息显示和远程交互等各方面的功能。在负载控制上,用户可以通过按键来调节输出功率,从而对连接负载的亮度或者档位进行调节。系统需利用液晶屏把所有的电量、电压、电流、功率、状态信息和各种设置阈值等信息集中呈现出来。远程交互部分系统应具有WiFi无线通信功能,用户可以通过手机APP远程观察所有的数据并发出控制指令,从而达到智能化操作的目的。人机交互上还有按键输入、蜂鸣器报警反馈等,使用户可以方便操作并且能及时获取到系统的状态信息。综合以上功能需求,本文设计出一个比较完整的锂电池管理系统,使用方便。

系统总体结构设计
本系统采用模块化的设计思想,把STM32F103C8T6单片机当作整个系统的控制中心,外围电路按功能分成若干个独立的模块。模块化设计的优点就是各个模块之间的耦合度小,利于分步调试和故障定位,也给功能扩展留有余地。系统整体是由单片机核心板、电源电路、锂电池充放电管理电路、检测电路、负载控制电路、人机交互电路和无线通信电路七部分组成。单片机核心板完成数据运算和逻辑控制的工作,它是各个模块之间的协调中枢,读取各个传感器的数据,对保护逻辑做出判断,并且发出控制指令到执行机构。采用单片机作为核心架构,灵活、可编程,可以满足各种各样的应用场合。
电源电路由5V直流输入电路和USB升压电路组成,给整个系统提供稳定的可靠的能量来源。锂电池充放电管理电路使用TP4056充电模块来实现恒流恒压充电,可以安全、高效的对锂电池进行充电。检测电路使用INA219模块,用I2C接口把电压、电流和功率数据传送给单片机。负载控制电路采用PWM调光的方式驱动高亮USB灯,从而达到不同的亮度调节功能。人机交互电路由OLED显示屏显示数据、四个按键为用户操作、蜂鸣器和LED为声光报警组成。无线通信电路使用ESP8266模块和手机APP进行数据交换。各个模块之间用合理的电气连接来形成一个完整的系统,结构清楚明了,具有较强的工程性。

在这里插入图片描述
系统工作流程设计
系统上电后会先执行一次完整的初始化工作,它是系统能够正常工作的先决条件。初始化内容有单片机系统时钟设置、IO口初始化、串口初始化、OLED显示屏初始化、INA219检测模块初始化、PWM输出初始化等。各个模块的初始化顺序经过精心设计,保证主循环之前所有的外设都是准备好的。初始化完成之后,系统会发出一个简单的提示音,表示一切就绪,然后开始运行主循环程序。主循环用循环扫描加中断响应的方式实现系统实时响应的能力。系统以定时器所设置的节拍周期为单位,在主循环中对数据进行周期性的采集,读取得到电压、电流以及功率数值,再利用电压映射的方法来求得锂电池的剩余电量百分比。
采集到的数据一方面用在OLED屏幕上及时显示电池状态,另一方面用来做保护逻辑的判断。系统将当前电量值同设定的电量阈值进行比较,将电压值同欠压阈值比较,将电流值同过流阈值比较,一旦出现异常,立刻发出对应的保护动作。低电量、欠压时保护动作断开负载、蜂鸣器报警;过流时系统一直报警直至用户手动清除。与此同时系统根据按键扫描的结果来处理用户档位调节、参数设置的命令。对无线通信部分系统从串口接收到ESP8266模块转发来的手机APP指令,进行解析后执行相应的操作。整个工作过程中数据采集、无线发送依靠定时中断来驱动,按键响应以及显示刷新都在主循环里完成,各个任务有条理地配合着一起工作。

关键性能指标确定
系统总体方案设计阶段中明确各个关键性能指标对后面硬件选择以及软件开发有很重要的指导作用。根据本设计应用环境及功能定位,从检测范围和精度、保护响应时间和无线通信能力、显示效果等各方面确定出系统的各项关键性能指标。这些指标的确定既考虑到锂电池本身的特性,又考虑了工程上和经济上可行性的要求。合理确定性能指标可以避免由于过度设计造成的资源浪费,并保证系统基本性能达到预期的使用要求。单个锂电池的满电电压大约为4.2V,放电终止电压约为2.75V,所以检测范围设为0到5V即可完全覆盖实际工作范围,检测精度要控制在小范围内来保证电量估算的准确性。
本设计典型的负载为高亮LED灯,正常工作电流在几百毫安左右,考虑过流保护,电流检测范围为0~2A,检测分辨率应达到毫安级别。就保护响应时间而言,当检测到异常情况的时候,系统应当尽快执行负载切除以及发出报警的动作,保护响应的快慢直接影响到电池的安全。无线通信中WiFi模块支持AP模式,可以独立搭建局域网,在一般的室内环境中满足数据传输稳定的要求。OLED屏幕应该可以清楚地显示出所有的关键数据,并且具有良好的可视角度以及高对比度,在光线较亮的时候也可以正常地阅读。以上性能指标的确定,给后面硬件选择、电路设计、软件开发提供明确的量化依据,使整个设计工作有清楚的评价标准。

二、文档介绍

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

三、項目设计

STM32单片机核心电路设计
本设计使用的是STM32F103C8T6,它是基于ARM Cortex-M3内核的32位微控制器,性能好、功耗低、外设多。芯片的最高工作频率可达72MHz,可以满足本系统数据采集、逻辑判断、通信处理等各种运算的需求。就存储器来说,内部包含了64KFlash加上20KSRAM这样的两个存储器模块,可以装载完全部的系统代码和数据。该芯片集成了很多种通用定时器、高级定时器、USART串口、I2C接口和ADC模数转换器,为本设计提供大量的接口资源。STM32F103C8T6芯片使用的是48引脚封装,各个引脚都具有复用的功能,可以被软件设置成不同的工作模式。图5-4给出了该芯片各个引脚的排列及功能分布。
在这里插入图片描述
系统电源电路设计
系统电源是整个硬件平台正常工作所必须具备的基础,系统电源采用多级电源结构来满足各个模块不同的电压需求。系统总电源为5V直流电源,用直流电源插座连接,直流电源插座可以接上常见的USB电源线,可以用电脑的USB接口、充电宝或者手机充电器给系统提供电源。电源开关设在电源输入端口5V电源处,红色电源灯安装在电源输入端口,用以显示系统上电状态。为了消除电源中产生的纹波、噪声,在电源的输入端并联了一个滤波电容,从而使输出电压更加稳定。下图为5V电源电路原理图,给出了电源输入、开关控制、指示电路和滤波电路的连接方式。
在这里插入图片描述锂电池与充放电管理电路设计
本设计用的是18650型锂离子电池作为储能元件,该种电池技术成熟、容量大、安全性高、易得。18650电池的标称电压为3.7V,充满电时电压约为4.2V,放电终止电压一般在2.75V左右。电池充放电要控制好,过度充电会造成电池内部压力增大并有危险,过度放电会使电池内部结构被破坏,从而造成容量永久衰减。下图是锂电池接口电路原理图,给出了锂电池和充放电管理电路的连接方式。
在这里插入图片描述
电量、电压、电流检测电路设计
对锂电池电压、电流和电量准确检测,才能保证充放电保护功能。本系统使用了INA219零漂移双向电流电源监测模块来完成对各种参数的测量工作。INA219是由德州仪器公司推出的电源监测芯片,内部集成了高精度模数转换器以及I2C数字接口,可以同时测量分流电阻上压降以及总线电压,并且通过内部运算直接输出电流值和功率值。下图为INA219零漂移双向电流电源监控模块的原理图,给出了芯片引脚连接和外部电路的设计。
在这里插入图片描述
负载控制电路设计
本设计负载为USB高亮LED灯,改变LED灯亮度就可以直观反映系统对负载的调节情况。由于单片机IO口的驱动能力不足,不能直接驱动大功率LED灯,所以需要设计驱动电路来放大电流。本设计选用的8050型NPN三极管做开关器件,用PWM脉冲宽度调制的方法来调节亮度。下图为高亮LED灯照明电路原理图,给出了三极管驱动电路、LED灯和限流电阻的连接方式。
在这里插入图片描述人机交互电路设计
人机交互是用户同系统之间进行信息交流的桥梁,本设计使用OLED显示屏、按键、蜂鸣器这三个主要部分来完成交互功能。显示部分使用0.96英寸OLED液晶屏,分辨率为128*64像素,该屏幕具有自发光、不用背光源、对比度高、视角宽、功耗低等特点。OLED模块同单片机之间用I2C总线接口联系起来,只需两根数据线就可以实现通信。下图为OLED液晶显示模块接口电路原理图,该模块的引脚定义以及与单片机的连接方式都在图中有所体现。
在这里插入图片描述
PCB板图设计
系统原理图设计完成后,就要进行PCB板图设计和绘制,把所有的硬件模块集成到一块电路板上。PCB板图设计就是把原理图上电气回路的连接转化为实际的物理铜箔走线以及元件摆放的过程,设计的好坏直接关系到系统是否稳定以及抗干扰的能力。本系统的PCB板图使用的是双层板,顶层主要是用来走信号线,底层则是用作地平面,该种设计可以减少信号回路所占面积,抑制电磁干扰。元器件的布局以功能分区的原则,把STM32单片机核心板放在中央,电源电路、充电管理电路、检测电路、负载控制电路、人机交互电路和无线通信电路按功能模块围绕核心板排列,各模块之间有合理的间隔,利于散热和调试。
PCB布线时主要关注电源线和地线的处理。电源线按照电流大小来决定走线的宽窄,主电源线宽度设为50mil,保证负载电流足够大而且不会烧坏。地线采用大面积覆铜的形式,形成一个整体的电平地,从而减小地线阻抗、减小共模干扰。模拟信号线和数字信号线分开布置,防止数字信号高频噪声串入模拟信号中造成检测精度降低。INA219检测模块的分流电阻信号线用差分走线的方式走,两根线长度相等、平行靠在一起,提高抗共模干扰的能力。晶振电路下面不布置其他信号线,晶振外壳接地,减少高频辐射。I2C总线的SCL和SDA信号线平行走线,适当加粗以提高信号的完整性。
在这里插入图片描述
开发环境与编程语言
本系统软件开发使用的是Keil MDK集成开发环境,它是ARM微控制器开发领域最主流的工具之一,具有代码编辑、编译链接、程序下载、在线调试等功能。Keil MDK可以进行多文件模块化编程,并自带编译器、链接器,能快速生成高效的机器码。软件调试上Keil集成了仿真器驱动,并且可以和ST-Link下载器一起使用进行在线仿真,方便开发人员在不中断程序的情况下进行断点调试、变量查看、寄存器查看等操作,提高了程序的开发效率。本设计的主要开发语言为C语言。C语言比汇编语言更有可读性、可移植性,开发者不用了解处理器指令集也能写出复杂的程序。
C语言支持模块化编程,可以把不同的功能代码放在不同的文件里,程序结构清晰、易于维护。标准C库中有很多可以直接调用的函数,可以大大减少重复开发的工作量。除此之外,用C语言编写出来的程序也比较好地移植到了其它平台之上,这对于之后的项目升级以及功能扩充都有着积极的意义。本系统程序主要分为主程序、数据采集处理、保护逻辑控制、负载控制、人机交互和无线通信等模块,用C语言分层设计,底层驱动与上层应用分离,保证程序的可读性,便于后期调试和维护。

系统主程序流程设计
系统主程序是顺序执行和中断响应并行的方式,使各个任务有条理地完成。程序的入口是main函数,进入主循环之前会先做一系列的初始化工作,包括系统时钟的配置、串口的初始化、按键IO的初始化、输出IO的初始化、PWM定时器的初始化、OLED显示屏的初始化和INA219检测模块的初始化。初始化过程中使用OLED屏幕的提示功能,告诉用户启动过程。初始化后程序进入主循环,主循环中主要做按键扫描处理、显示页面更新、保护状态检测等工作。为了达到定时采集的目的,在程序中设置了定时标志位,用系统定时器的周期性计数来完成。
当主循环检测到该标志位为真时,立刻开始数据采集工作,读取INA219模块返回的电压、电流、功率值,并对数据进行多次采样和均值滤波处理,得到锂电池的剩余电量百分比,最后将当前值与设定好的保护阈值进行比较,如果数值小于等于保护阈值,则触发保护动作。数据采集完毕之后,就去刷新OLED显示屏上所显示的内容。定时标志用来进行无线数据周期性的发送,保证手机APP可以一直接收到最新的数据。主循环当中还要对串口接收的指令进行及时处理,并对手机APP的控制请求做出回应。该流程体现出了前后台系统的思想,前台中断处理紧急事件,后台循环执行常规任务,保证系统实时响应的能力。

数据采集与处理模块
数据采集和处理模块为整个系统软件打下了基础,它会获得锂电池真实的运行状况。本系统使用INA219模块进行数据采集,INA219模块用I2C接口和单片机通信。软件首先要对INA219模块进行初始化,即配置校准寄存器以使外部分流电阻的阻值与实际相符,选定合适的量程及转换时间,设定采样平均次数等参数。配置好之后,单片机通过I2C总线发送读取命令,从INA219相应的寄存器中读取分流电压值、总线电压值和功率值。为消除单次采样产生的偶然误差,程序上采用了多次采样取平均值的滤波方式,连续采集几次数据之后求和再除以采样次数,得到比较稳定的一致性测量值。
电压值表示锂电池当前的端电压,是判定欠压、保护动作的主要依据。电流值是放电回路中负载所消耗的电量,用以判定过流保护是否动作以及功率计算。功率值是电压和电流之积所得到的,表示的是当前放电功率。电量计算用电压映射法来完成,按照锂电池放电曲线的特性,在满电电压和截止电压之间建立起线性映射关系,把测量到的电压值转变成剩余电量的百分比。该算法虽然简化了电池非线性特性,但是对于本应用场景已经可以给出一个比较准确的参考值,从而让用户可以大概判断出电池剩余容量的状态,进而做出合理充电的选择。

总 结
本文完成了基于STM32单片机的锂电池充放电保护系统全部开发工作。系统利用TP4056模块对锂电池进行充电管理,用INA219模块实时采集电压、电流、功率等数据,在此基础上实现低电量保护、欠压保护、过流保护这三个主要的安全功能。负载部分用PWM调光的方式控制高亮LED灯,用户可以手动或者通过手机APP进行多档位的亮度调节。人机交互上配备了OLED显示屏实时显示各项数据,蜂鸣器发出声音并且显示颜色,按键可以实现本地和远程的控制,WiFi无线通信既可以本地也可以远程操作。
经过硬件设计、软件编程、系统联调,最终得到一个可以稳定运行的样机。测试结果表明,本系统可以对锂电池的工作状态进行准确的监测,在出现异常的时候及时做出响应并执行相应的保护措施,并且可以把有关的信息直观地显示给用户,本地和远程这两种控制方式都能够正常使用。本设计结构合理、成本低、功能齐全,有一定实用价值和教学参考价值,可以给智能电源管理系统的开发提供一定的参考。

更多推荐