中颖SH367309锂电池保护板方案代码功能说明
中颖SH367309锂电池保护板方案基于STM32F10x系列微控制器,围绕锂电池的安全保护、参数监测、状态管理等核心需求构建。该方案通过硬件驱动层、核心功能层、数据存储层的分层设计,实现了电池电压/电流采集、过充/过放/过流/过温保护、参数配置存储、LCD显示等完整功能,适用于多串锂电池组的保护场景,具备高可靠性、可配置性强的特点。
锂电池 保护板方案 中颖SH367309方案 原理图 PCB 源代码 保护板方案 中颖SH367309方案 原理图 PCB 源代码 锂电池、保护板方案、中颖SH367309方案、原理图和PCB源代码。 锂电池是一种常见的可充电电池,由锂离子在正负极之间的迁移来储存和释放电能。它们具有高能量密度、长寿命和较低的自放电率等优点,因此在许多电子设备中得到广泛应用。 保护板方案是用于保护锂电池的电路设计方案。它的主要功能是监测电池的电压、电流和温度等参数,并在必要时采取措施来防止电池过充、过放、过流或过温。保护板方案可以提高锂电池的安全性和可靠性。 中颖SH367309方案是一种特定的保护板方案。该方案可能包括特定的电路设计、元件选择和算法等,以实现对锂电池的保护功能。 原理图是电子设备设计中的一种图表,用于展示电路的连接方式和元件之间的关系。它是设计师用来理解和实现电路功能的重要工具。 PCB(Printed Circuit Board,印刷电路板)是电子设备中的一种基础组件,用于支持和连接电子元件。它由一层或多层导电材料构成,通过印刷、蚀刻和穿孔等工艺制成。PCB上的导线和连接点可以实现电路的连接和信号传输。
一、方案概述
中颖SH367309锂电池保护板方案基于STM32F10x系列微控制器,围绕锂电池的安全保护、参数监测、状态管理等核心需求构建。该方案通过硬件驱动层、核心功能层、数据存储层的分层设计,实现了电池电压/电流采集、过充/过放/过流/过温保护、参数配置存储、LCD显示等完整功能,适用于多串锂电池组的保护场景,具备高可靠性、可配置性强的特点。
二、代码结构总览
方案代码按功能模块划分为核心层、硬件驱动层、功能应用层三大层级,共包含135个相关文件,核心文件结构如下:
| 层级 | 目录/文件 | 核心功能 |
|---|---|---|
| 核心层 | CORE\core_cm3.c/.h | Cortex-M3内核底层驱动,含寄存器操作、中断控制、堆栈管理 |
| 核心层 | CORE\startupstm32f10xhd.s/.md.s | 启动文件,负责堆栈初始化、中断向量表定义 |
| 硬件驱动层 | HARDWARE\ADC | 模数转换驱动,采集电池电压、电流等模拟信号 |
| 硬件驱动层 | HARDWARE\EXTI | 外部中断驱动,处理唤醒、故障触发等中断事件 |
| 硬件驱动层 | HARDWARE\KEY | 按键驱动,支持参数配置、功能切换输入 |
| 硬件驱动层 | HARDWARE\LCD | 液晶显示驱动,展示电池状态、参数信息 |
| 功能应用层 | HARDWARE\CPU_TX | 核心参数管理,含电流/电压阈值配置、数据存储 |
| 功能应用层 | HARDWARE\CPU_TX\flash.c/.h | Flash存储驱动,实现参数掉电保存 |
三、核心模块功能详解
(一)Cortex-M3内核驱动模块(CORE目录)
该模块是整个系统的底层基础,基于CMSIS(Cortex Microcontroller Software Interface Standard)标准实现,为上层应用提供内核级操作接口。
1. 核心文件:core_cm3.c/.h
- 功能定位:封装Cortex-M3内核核心寄存器操作、中断控制、堆栈管理等底层功能,适配ARM Compiler、IAR Compiler、GNU Compiler等主流编译器。
- 关键功能:
- 堆栈管理:提供
getPSP()/setPSP()(进程堆栈指针操作)、getMSP()/setMSP()(主堆栈指针操作),支持线程模式与 Handler 模式的堆栈切换。 - 中断与异常控制:通过
getBASEPRI()/setBASEPRI()(基础优先级配置)、getPRIMASK()/setPRIMASK()(中断屏蔽控制)等函数,实现中断优先级管理与中断屏蔽。 - 内核状态控制:提供
getCONTROL()/setCONTROL()(控制寄存器操作)、WFI()(等待中断)、WFE()(等待事件)等函数,优化内核运行状态。 - 数据操作指令:封装
REV()(字节反转)、RBIT()(位反转)、LDREX()/STREX()(独占访问)等指令,满足底层数据处理需求。
2. 启动文件:startup_stm32f10x_hd.s/.md.s
- 功能定位:负责微控制器上电初始化,为应用程序运行搭建基础环境,区分高密度(HD)和中密度(MD)STM32F10x芯片。
- 关键流程:
- 堆栈初始化:定义
StackSize(堆栈大小,HD默认0x800字节,MD默认0x400字节)和HeapSize(堆大小,默认0x200字节),初始化栈顶指针initial_sp。 - 中断向量表:包含复位handler、NMIhandler、HardFault_handler等内核异常处理函数,以及EXTI、ADC、TIM等外设中断入口,映射中断服务函数地址。
- 启动流程:上电后执行
ResetHandler,调用SystemInit()(系统时钟初始化)和_main()(C库入口,最终调用应用层main()函数)。
(二)硬件驱动层模块
硬件驱动层直接操作外设硬件,为上层功能提供标准化的硬件访问接口,涵盖ADC、EXTI、KEY、LCD四大核心外设。
1. ADC模块(HARDWARE\ADC)
- 功能定位:采集锂电池组的电压、电流等模拟信号,为保护逻辑和状态监测提供数据支撑。
- 核心文件:adc.c/.h
- 关键功能:
- ADC初始化:
Adc_Init()配置GPIOA的0、1、4引脚为模拟输入模式,初始化ADC1为独立模式、单次转换、右对齐数据格式,并执行ADC校准流程。 - 单通道采集:
Get_Adc(u8 ch)指定ADC通道(0/1/4),启动软件转换并返回转换结果,采样时间配置为239.5周期,保证采样精度。 - 多通道轮询采集:
TIMEtoCAdc()通过定时器触发,每20ms轮询采集3路信号(电压、电流等),将数据存入cadtemp1/cadtemp2/cad_temp3缓冲区,支持后续滤波处理。 - 平均滤波:
GetAdcAverage(u8 ch,u8 times)对指定通道进行多次采样并求平均值,减少信号噪声干扰。
2. EXTI模块(HARDWARE\EXTI)
- 功能定位:处理外部中断事件,实现设备唤醒、故障报警等功能。
- 核心文件:exti.c/.h
- 关键功能:
- 中断初始化:
EXTIXInit()配置GPIOB的0引脚为上拉输入,映射为EXTILine0中断,设置下降沿触发,配置中断优先级(抢占优先级2,子优先级2)。 - 中断处理:
EXTI0_IRQHandler()中断服务函数,响应外部唤醒信号(如AFE芯片报警),设置bAFEFlg标志位,触发上层保护逻辑。
3. KEY模块(HARDWARE\KEY)
- 功能定位:提供用户输入接口,支持参数配置、功能切换等操作。
- 核心文件:key.c/.h
- 关键功能:
- 按键初始化:
KEY_Init()配置GPIOC的0-3引脚为上拉输入,关闭JTAG接口,使能SWD调试。 - 按键状态读取:通过
KEY4/KEY1/KEY2/KEY3宏定义,直接读取对应引脚电平状态,支持多按键输入检测。
4. LCD模块(HARDWARE\LCD)
- 功能定位:显示电池组状态(电压、电流、容量)、保护状态、参数配置等信息,提供可视化交互界面。
- 核心文件:lcd.c/.h、FONT.h
- 关键功能:
- LCD初始化:
LCD_Init()自动识别LCD驱动IC(支持ILI9341、6804、NT35310、NT35510等),配置GPIO为输出模式,执行对应IC的初始化序列(电源配置、Gamma校正、显示模式设置)。 - 显示控制:支持画点(
LCDDrawPoint())、字符显示(基于FONT.h中的12x12/16x16/24x24点阵字体)、横竖屏切换(LCDDisplayDir())、窗口设置(LCDSet_Window())等功能。 - 数据交互:
LCDReadPoint()读取指定坐标像素颜色,LCDWriteRAM()写入显示数据,支持16位RGB颜色格式。
(三)功能应用层模块
功能应用层基于硬件驱动层,实现锂电池保护板的核心业务逻辑,包括参数管理、数据存储、保护控制等。
1. 核心参数管理模块(HARDWARE\CPU_TX)
- 功能定位:管理锂电池保护的关键参数(电压阈值、电流阈值、保护延时等),协调采集、保护、存储等功能。
- 核心文件:CPU_TX.h、flash.c、stmflash.c
- 关键数据结构:
c
typedef struct {
u16 data; // 数据标识
u16 usesetmaH/usesetmaL; // 电流阈值(高/低)
u16 adcmaH/adcmaL; // 电流采集校准值(高/低)
u16 usesetINVH/usesetINVL; // 输入电压阈值(高/低)
u16 adcINVH/adcINVL; // 输入电压采集校准值(高/低)
u16 useOUTVH/useOUTVL; // 输出电压阈值(高/低)
u16 adcOUTVH/adcOUTVL; // 输出电压采集校准值(高/低)
u16 ctrdianliu; // 电流控制值
} MYCPU; - 关键功能:
- 参数读取:
readsensorset()从Flash中读取配置参数(阈值、校准值、传感器ID等),若未存储则加载默认值(如电流阈值默认700mA)。 - 参数保存:
save_CPUset()将当前配置参数写入Flash,实现掉电不丢失。 - Flash操作:
stmflash.c封装STM32 Flash的读写接口,STMFLASHRead()/STMFLASHWrite()支持半字(16位)数据的擦除、写入和读取,处理扇区溢出问题。
2. 保护逻辑隐含实现
方案通过ADC采集数据与MY_CPU配置参数的对比,实现锂电池核心保护功能,隐含逻辑如下:
- 过充保护:当采集的电池电压超过
use_setINVH阈值,且持续时间达到配置延时,触发充电路径关断。 - 过放保护:当电池电压低于
use_setINVL阈值,触发放电路径关断。 - 过流保护:通过ADC采集的电流值与
usesetmaH/usesetmaL对比,区分充电/放电过流,执行保护动作。 - 过温保护:结合传感器采集的温度数据(隐含在ADC采集或扩展外设中),超过阈值时触发保护。
四、关键工作流程
(一)系统启动流程
- 上电复位:STM32F10x芯片上电,执行启动文件
startupstm32f10xhd.s中的Reset_Handler。 - 初始化准备:调用
SystemInit()配置系统时钟(默认72MHz),初始化堆栈和堆空间。 - 应用入口:进入
main(),初始化C库环境后调用main()函数。 - 模块初始化:在
main()中依次初始化ADC、EXTI、KEY、LCD、Flash等模块,加载配置参数。 - 进入主循环:启动数据采集、状态监测、保护逻辑判断、LCD显示更新。
(二)数据采集与保护流程
- 数据采集:通过
TIMEtoCAdc()每20ms轮询采集3路ADC信号(电压、电流),存入缓冲区并进行平均滤波。 - 数据校准:结合Flash中存储的
adcmaH/adcINVH等校准值,对采集数据进行校准,提高精度。 - 保护判断:将校准后的数据与
usesetmaH/usesetINVH等阈值参数对比,判断是否触发过充、过放、过流等保护条件。 - 保护执行:若满足保护条件,设置对应保护标志位,控制硬件关断充放电回路,并通过LCD显示保护状态。
- 状态更新:定期更新LCD显示内容,包括当前电压、电流、容量、保护状态等信息。
(三)参数配置与存储流程
- 参数输入:通过KEY模块读取用户按键操作,进入参数配置模式,修改电压阈值、电流阈值等参数。
- 参数临时保存:修改后的参数存入
my_cpuset结构体(RAM中),实时生效。 - 参数持久化:调用
saveCPUset()函数,将mycpuset中的参数写入STM32 Flash指定扇区,覆盖原有数据。 - 上电加载:下次系统启动时,
readsensorset()从Flash中读取参数,初始化my_cpuset,恢复配置。
五、方案特点与适配场景
(一)核心特点
- 高兼容性:支持多种LCD驱动IC、STM32F10x高密度/中密度芯片,适配不同硬件方案。
- 高可靠性:通过ADC多次采样滤波、Flash参数备份、多级别保护阈值设置,提升系统稳定性。
- 可扩展性强:模块化设计,支持新增传感器(如温度传感器)、通信接口(如UART、I2C)等功能。
- 易用性:提供可视化LCD界面和按键配置,支持参数掉电保存,无需重复配置。
(二)适配场景
- 多串锂电池组:适用于3-10串锂电池的保护场景(如动力电池、储能电池)。
- 便携式设备:支持低功耗设计(通过
WFI()/WFE()优化内核状态),适配便携式电子产品。 - 工业设备:具备过充、过放、过流、过温全方位保护,满足工业级可靠性要求。
六、注意事项
- 硬件匹配:ADC采集通道(GPIOA0/1/4)需与硬件电路中的电压/电流采样电路对应,否则会导致采集数据异常。
- Flash操作:Flash写入前需先擦除扇区,且每次写入数据长度需为半字(16位),避免破坏其他存储区域。
- 中断优先级:EXTI中断优先级需合理配置,避免与系统核心中断(如SysTick)冲突。
- 校准参数:首次使用时需通过实际测试校准ADC采集值(
adcmaH/adcINVH等),确保保护阈值的准确性。
通过以上分层设计与功能实现,中颖SH367309锂电池保护板方案为锂电池组提供了完整的监测与保护解决方案,兼顾可靠性、可扩展性和易用性,适用于多种锂电池应用场景。





更多推荐



所有评论(0)