锂电池 保护板方案 中颖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; // 电流控制值
    } MY
    CPU;
  • 关键功能
  • 参数读取: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采集或扩展外设中),超过阈值时触发保护。

四、关键工作流程

(一)系统启动流程

  1. 上电复位:STM32F10x芯片上电,执行启动文件startupstm32f10xhd.s中的Reset_Handler
  2. 初始化准备:调用SystemInit()配置系统时钟(默认72MHz),初始化堆栈和堆空间。
  3. 应用入口:进入main(),初始化C库环境后调用main()函数。
  4. 模块初始化:在main()中依次初始化ADC、EXTI、KEY、LCD、Flash等模块,加载配置参数。
  5. 进入主循环:启动数据采集、状态监测、保护逻辑判断、LCD显示更新。

(二)数据采集与保护流程

  1. 数据采集:通过TIMEtoCAdc()每20ms轮询采集3路ADC信号(电压、电流),存入缓冲区并进行平均滤波。
  2. 数据校准:结合Flash中存储的adcmaH/adcINVH等校准值,对采集数据进行校准,提高精度。
  3. 保护判断:将校准后的数据与usesetmaH/usesetINVH等阈值参数对比,判断是否触发过充、过放、过流等保护条件。
  4. 保护执行:若满足保护条件,设置对应保护标志位,控制硬件关断充放电回路,并通过LCD显示保护状态。
  5. 状态更新:定期更新LCD显示内容,包括当前电压、电流、容量、保护状态等信息。

(三)参数配置与存储流程

  1. 参数输入:通过KEY模块读取用户按键操作,进入参数配置模式,修改电压阈值、电流阈值等参数。
  2. 参数临时保存:修改后的参数存入my_cpuset结构体(RAM中),实时生效。
  3. 参数持久化:调用saveCPUset()函数,将mycpuset中的参数写入STM32 Flash指定扇区,覆盖原有数据。
  4. 上电加载:下次系统启动时,readsensorset()从Flash中读取参数,初始化my_cpuset,恢复配置。

五、方案特点与适配场景

(一)核心特点

  1. 高兼容性:支持多种LCD驱动IC、STM32F10x高密度/中密度芯片,适配不同硬件方案。
  2. 高可靠性:通过ADC多次采样滤波、Flash参数备份、多级别保护阈值设置,提升系统稳定性。
  3. 可扩展性强:模块化设计,支持新增传感器(如温度传感器)、通信接口(如UART、I2C)等功能。
  4. 易用性:提供可视化LCD界面和按键配置,支持参数掉电保存,无需重复配置。

(二)适配场景

  • 多串锂电池组:适用于3-10串锂电池的保护场景(如动力电池、储能电池)。
  • 便携式设备:支持低功耗设计(通过WFI()/WFE()优化内核状态),适配便携式电子产品。
  • 工业设备:具备过充、过放、过流、过温全方位保护,满足工业级可靠性要求。

六、注意事项

  1. 硬件匹配:ADC采集通道(GPIOA0/1/4)需与硬件电路中的电压/电流采样电路对应,否则会导致采集数据异常。
  2. Flash操作:Flash写入前需先擦除扇区,且每次写入数据长度需为半字(16位),避免破坏其他存储区域。
  3. 中断优先级:EXTI中断优先级需合理配置,避免与系统核心中断(如SysTick)冲突。
  4. 校准参数:首次使用时需通过实际测试校准ADC采集值(adcmaH/adcINVH等),确保保护阈值的准确性。

通过以上分层设计与功能实现,中颖SH367309锂电池保护板方案为锂电池组提供了完整的监测与保护解决方案,兼顾可靠性、可扩展性和易用性,适用于多种锂电池应用场景。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐