锂电池充放电管理-单片机通用

锂电池充放电管理-单片机通用

  • 一、锂电池充放电检测的原理
  • 二、power.c的实现
  • 三、power.h的实现
  • 四、锂电池检测和充电电路

一、锂电池充放电检测的原理

  • ①两节锂电池通过电阻分压检测ADC,再根据电压划分电量等级;
  • ②充电使用的是锂电池充电IC方案,可通过硬件电阻参数调节充电电流,并可以通过STAT引脚检测充电和满电状态(充电注意会抬高电压);
  • ③放电根据ADC_BAT检测电池电量进行等级划分(注意大负载电压骤降瞬间);
  • ④充放电过程注意在电量划分等级临界值来回抖动现象;

二、power.c的实现

#include "power.h"	bit b_LowBat_Flag=0;		//低电进行关机	
bit b_BatAdjust_Flag=0;		//电池电压补偿
bit b_BatChargeFir_Flag=0;	//第一次充电标志
u8 batChargeMode = 0;		//0 无外电 1 充电 2 满电
u8 powerMode=0;				//1:绿色 2:黄色 3:红色 4:红色闪烁 5:充电 6:满电
u8 powerChargeMode=0;		//充电当前电量u8 batChargeCnt=0;			//充电周期6次
u8 batChargeUp=0;			//上升次数
u8 batChargeFull=0;			//记录有6次上升表示充满u16 adcBackup=0;			//备份上一次ADC数据
u16 adcBatAdjust=0;			//补偿ADC数据//=============================================================================
//函数名称:checkCharge
//输	入:无
//输	出:无
//功	能:是否在接入5V充电
//=============================================================================
void checkCharge(void)
{if(IO_DC == 1){b_PowerDis=1;if(IO_CHRG==0){batChargeMode = 1;batChargeFull=0;if(++powerMode==5)powerMode=powerChargeMode;}else{//nopDelay(1000);if(IO_DC == 0)	return;if(IO_CHRG){if(batChargeFull>=6){batChargeMode = 2;powerMode = 4;powerChargeMode=4;}else{batChargeFull++;}}}}else {batChargeMode = 0;batChargeFull=0;}
}//=============================================================================
//函数名称:checkDCvol
//输	入:无
//输	出:无
//功	能:系统ADC采集外部供电
//=============================================================================
void checkDCvol(void)
{u16 DCadc=0;u16	DCadcFrom=0;				//ADC变化区间DCadc = getChannelVal(AD13); 	//Vcc对应的ADC值为4096 5v	锂电池放电范围3~4.2VBatLevelClo();	if(adcBackup>DCadc){DCadcFrom = adcBackup-DCadc;	//计算电压骤减状态大于0.2V(92)/0.15(69) 0.1(46)if(DCadcFrom>=46){b_BatAdjust_Flag=1;adcBatAdjust=DCadcFrom;		//备份骤减数据}}else{DCadcFrom = DCadc-adcBackup;if(DCadcFrom>16){adcBatAdjust=0;b_BatAdjust_Flag=0;		//重新校准(正常放电)}}adcBackup = DCadc;				//备份上次ADC数据(备份校准)if(b_BatAdjust_Flag){DCadc = DCadc+adcBatAdjust;}if(DCadc >1753)					//75%~100% 3.9~4.2V	8.4V 1938 1846 8v{if(powerMode>=4||Mode==0)powerMode = 4;}else if(DCadc >1661)			//50%~74% 3.6~3.9V	7.8V 1799 1753 7.6v{if(powerMode>=3||Mode==0)powerMode = 3;			//从第四格往下掉电}else if(DCadc >1603)			//25%~49% 3.3~3.6V  7.2V 1661{if(powerMode>=2||Mode==0)powerMode = 2;			//从第三格往下掉电}else if(DCadc >1499)			//0%~24% 2.8~3.3V	6.6V 1523{if(powerMode>=1||Mode==0)powerMode = 1;			//从第二格往下掉电}	else if(sleepMode)			    //低于3.3V (上电复用){powerMode = 1;			//从第二格往下掉电if(DCadc >1476)	return;powerMode = 0;if(b_LowBat_Flag==0){b_LowBat_Flag = 1;			//进入低电报警if(Mode==0)		return;		//长按开机不报警		b_KeyTone_Flag=1;			//蜂鸣器响一声Mode =8;b_PowerDis=1;b_Display_Flag = 1;			//刷新显示}		}if(Mode >=2&&Mode <=5)				//亮度立即显示电量b_PowerDis=1;				   //刷新电量显示
}//=============================================================================
//函数名称:chargeAI
//输	入:无
//输	出:无
//功	能:30S内读6次有3次稳定说明充到了
//=============================================================================
static u8 chargeAI(void)
{batChargeUp++;if(++batChargeCnt>=6){batChargeCnt=0;if(batChargeUp>=3)	{batChargeUp=0;return 0;}batChargeUp=0;}return 1;
}//=============================================================================
//函数名称:chargeAI
//输	入:无
//输	出:无
//功	能:30S内读6次有3次稳定说明充到了
//=============================================================================
static void clearAIRam(void)
{batChargeCnt=0;batChargeUp=0;
}//=============================================================================
//函数名称:checkBatChargevol
//输	入:无
//输	出:无
//功	能:系统ADC采集电池充电电量
//=============================================================================
void checkBatChargevol(void)
{u16 DCadc=0;if(Mode ==0)	return;			//不检测电量DCadc = getChannelVal(AD13); 	//Vcc对应的ADC值为4096 5v	锂电池放电范围3~4.2VIO_COTBAT = 0;					//关闭电池电量检测if(DCadc >1800)					//50%~74% 3.6~3.9V	8V 1846{	if(b_BatChargeFir_Flag){if(powerChargeMode<3){if(chargeAI())	return;}}powerChargeMode = 3;}else if(DCadc >1707)			//25%~49% 3.3~3.6V  7.2V{if((b_BatChargeFir_Flag==1)&&(powerChargeMode>2))	{clearAIRam();return;}else if(b_BatChargeFir_Flag){if(chargeAI())	return;}powerChargeMode = 2;}else if(DCadc >1673)			//0%~24% 2.8~3.3V	6.6V 有bug{if((b_BatChargeFir_Flag==1)&&(powerChargeMode>1))	{clearAIRam();return;}else if(b_BatChargeFir_Flag){if(chargeAI())	return;}powerChargeMode = 1;}else{if((b_BatChargeFir_Flag==1)&&(powerChargeMode>0)){clearAIRam();return;}powerChargeMode = 0;}
}//=============================================================================
//函数名称:getFirCharge
//输	入:无
//输	出:无
//功	能:更新第一次充电电量显示
//=============================================================================
void getFirCharge(void)
{if(b_BatChargeFir_Flag==0&&batChargeMode==1){IO_COTBAT = 1;nopDelay(36000);checkBatChargevol();	//立即采集电池充电电量b_BatChargeFir_Flag=1;	//采集完第一次充电电量}
}//=============================================================================
//函数名称:openSyscheckDCvol
//输	入:无
//输	出:无
//功	能:开机时检测电池电压低于2.8V不开机
//=============================================================================
u8 openSyscheckDCvol(void)
{u16 DCadc=0;IO_COTBAT = 1;nopDelay(36000);DCadc = getChannelVal(AD13); 	//Vcc对应的ADC值为4096 5vif(DCadc>=1476)return 0;elsereturn 1;					//低于3.3V
}//=============================================================================
//函数名称:clearBatAdjust
//输	入:无
//输	出:无
//功	能:清除电池校准
//=============================================================================
void clearBatAdjust(void)
{b_BatAdjust_Flag=0;adcBackup=0;adcBatAdjust=0;
}
  • 根据外电5.0V和STAT引脚判断锂电池是否进入充电或满电状态,判断满电临界可能有抖动额外添加2/6的比例进行满电判断处理;
  • 放电进行周期采集电量,判断出现骤减超0.1V进行补偿处理,防止显示电量立即减低;当电量上升超0.1V取消骤减补偿处理(充电和睡眠清除补偿操作);
  • 放电过程处于等级划分,进行只降不升 放电等级处理,防止电量不断升降闪烁显示。单个锂电池电量低于3.3V进行低电关机保护锂电池过放处理(根据实际负载微调);
  • 充电过程到达等级划分临界值,也会出现电量来回跳变的异常情况,进行了3/6周期判断电量上升处理,除第一次充电周期检测不对其进行。充电过程会把电池电压抬高进行充电,与放电电量划分的等级会不一样;
  • 开机过程检测电量低于6.6V继续关机保护锂电池过放;

三、power.h的实现

#ifndef	__POWER_H__
#define	__POWER_H__#include "board.h"#define BatLevelOpen()			(IO_COTBAT=1)		  //控制检测电池电量
#define BatLevelClo()		    (IO_COTBAT=0)sbit	IO_DC			=		P2^4;
sbit	IO_CHRG			=		P3^3;
sbit	IO_COTBAT		=		P2^3;extern bit b_RedSharp_Flag;
extern bit b_PowerDis;
extern bit b_LowBat_Flag;
extern bit b_BatChargeFir_Flag;		//第一次充电标志
extern u8 powerMode,powerChargeMode;
extern u8 batChargeMode;
extern u8 batChargeFull;
extern void checkDCvol(void);	//检测电源电压功能
extern void checkCharge(void);	//检测电池充电状态
extern u8 openSyscheckDCvol(void);
extern void checkBatChargevol(void);	//充电时检测电池电量	
extern void clearBatAdjust(void);		//清除校准
extern void checkBatChargevol(void);	//检测充电电量
extern void getFirCharge(void);			//充电立即进行充电#endif

四、锂电池检测和充电电路

电量检测电路

电量检测
两节锂电池充电电路
在这里插入图片描述
双节锂电池串联升压充电管理HE5080E数据手册

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/311911.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LangChain-Chatchat 开源知识库来了

LangChain-Chatchat 开源知识库来了 LangChain-Chatchat 架构设计LangChain-ChatChat 具体实现过程 一键本地离线部署软件环境硬件环境支持三种部署方式 LangChain-Chatchat 是基于 ChatGLM 等大语言模型与 LangChain 等应用框架实现&#xff0c;开源、可离线部署的 RAG 检索增…

Python赋能AI数据分析开启人工智能新时代

文章目录 一、Python是办公自动化的重要工具二、Python是提升职场竞争力的利器三、Python是企业数字化的重要平台四、Python是AI发展的重要通道之一《编程菜鸟学Python数据分析》编辑推荐内容简介作者简介目录前言为什么要写这本书读者对象如何阅读本书 随着我国企业数字化和信…

Python SQL解析和转换库之sqlglot使用详解

概要 Python SQLGlot是一个基于Python的SQL解析和转换库,可以帮助开发者更加灵活地处理和操作SQL语句。本文将介绍SQLGlot库的安装、特性、基本功能、高级功能、实际应用场景等方面。 安装 安装SQLGlot库非常简单,可以使用pip命令进行安装: pip install sqlglot安装完成后…

Rust面试宝典第4题:打家劫舍

题目 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统。如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个房屋存放金额的非负整…

跟TED演讲学英文:The dark side of competition in AI by Liv Boeree

The dark side of competition in AI Link: https://www.ted.com/talks/liv_boeree_the_dark_side_of_competition_in_ai Speaker:Liv Boeree Date: October 2023 文章目录 The dark side of competition in AIIntroductionVocabularyTranscriptSummary后记 Introduction Co…

Qt 实战(2)搭建开发环境 | 2.1、Windows下安装QT

一、Windows下安装QT 1、QT官网 QT官网&#xff1a;https://download.qt.io/&#xff0c;打开官网地址&#xff0c;如下&#xff1a; 目录结构介绍 目录说明snapshots预览版&#xff0c;最新的开发测试中的 Qt 库和开发工具onlineQt 在线安装源official_releases正式发布版&am…

HarmonyOS开发案例:【智能煤气检测】

样例简介 智能煤气检测系统通过实时监测环境中烟雾浓度&#xff0c;当一氧化碳浓度超标时&#xff0c;及时向用户发出警报。在连接网络后&#xff0c;配合数字管家应用&#xff0c;用户可以远程配置智能煤气检测系统的报警阈值&#xff0c;远程接收智能煤气检测系统报警信息。…

【考研数学】全年各阶段用书汇总+资料分享

我一战备考很迷茫&#xff0c;身边室友也都是&#xff0c;和室友一起去买资料&#xff0c;网上推荐的看到了就都买了 大家都不知道怎么样才能选对数学参考书然后快速进入备考状态&#xff0c;最后犹犹豫豫买了一堆资料都没有正式开始备考... 从小都算是身边人口中“偏科&…

HTML中div/span标签、音频标签、视频标签与特殊字符

目录 div/span标签 音频标签 视频标签 特殊字符 div/span标签 在HTML中&#xff0c;<div></div>和<span></span>是没有语义的&#xff0c;可以将两个标签当做两个盒子&#xff0c;里面可以容纳内容 两个标签有以下两个特点&#xff1a; 1. <…

Mybatis常用注解说明

MyBatisPlus 常用注解说明 TableName(opens new window) 描述&#xff1a;表名注解&#xff0c;标识实体类对应的表 使用位置&#xff1a;实体类 TableName("sys_user") public class User {private Long id;private String name;private Integer age;private Strin…

《系统架构设计师教程(第2版)》第9章-软件可靠性基础知识-05-软件可靠性测试

文章目录 1. 概述2. 定义软件运行剖面2.1 软件的使用行为建模2.2 输入域分层2.3 弧上的概率分配2.4 其他注意点 3. 可靠性测试用例设计4. 可靠性测试的实施4.1 测试前检查4.2 注意点4.2 可靠性测试的难点1&#xff09;失效判断的主观性2&#xff09;计算的错误结果不易被发现 4…

5_vscode+valgrind+gdb调试程序

需求 项目程序, 读取串口数据, 出现程序崩溃问题valgrind 可以调试定位内存问题: 内存泄漏,非法地址访问,越界访问等内存问题vscode gdb 可视化调试效果, 比命令行简单快捷很多期望使用vscode valgrind gdb 调试程序内存异常, 崩溃退出的问题 环境准备 sudo apt install v…

论文笔记:(INTHE)WILDCHAT:570K CHATGPT INTERACTION LOGS IN THE WILD

iclr 2024 spotlight reviewer 评分 5668 1 intro 由大型语言模型驱动的对话代理&#xff08;ChatGPT&#xff0c;Claude 2&#xff0c;Bard&#xff0c;Bing Chat&#xff09; 他们的开发流程通常包括三个主要阶段 预训练语言模型在被称为“指令调优”数据集上进行微调&…

Pytorch-张量形状操作

&#x1f606;&#x1f606;&#x1f606;感谢大家的观看&#x1f606;&#x1f606; &#x1f339; reshape 函数 transpose 和 permute 函数 view 和 contigous 函数 squeeze 和 unsqueeze 函数 在搭建网络模型时&#xff0c;掌握对张量形状的操作是非常重要的&#xff…

JVM虚拟机(九)如何开启 GC 日志

目录 一、引言二、开启 GC 日志三、解析 GC 日志四、优化建议 一、引言 在 Java 应用程序的运行过程中&#xff0c;垃圾收集&#xff08;Garbage Collection&#xff0c;简称 GC&#xff09;是一个非常重要的环节。GC 负责自动管理内存&#xff0c;回收不再使用的对象所占用的…

25 vs code配置

1.中文语言 搜索chinese&#xff0c;安装&#xff0c;等待重新打开 2.remote ssh 安装后F1打开&#xff0c;输入adduser 输入ssh [用户名][主机ip]&#xff0c;添加主机&#xff0c;然后选择保存配置文件 如果出现管道不存在&#xff0c;设置一下 如果出问题&#xff0c;也…

VBA脚本: excel隐藏和展开指定行 【图文】

打开开发工具功能 【文件】-》【选项】-》【自定义功能区】-》勾选【开发工具】-》【确定】 代开VBA编辑器 【开发工具】-》【Visual Basic】 插入模块 编写代码 所有sheet 关闭 Sub HideRowsInAllSheets()Dim ws As WorksheetDim i As Integer 循环遍历所有工作表For E…

YOLOv8改进 | 知识蒸馏 | 利用模型蒸馏改进YOLOv8进行无损涨点(在线蒸馏 + 离线蒸馏)

一、本文介绍 这篇文章给大家带来的是模型的蒸馏&#xff0c;利用教师模型指导学生模型从而进行模型的涨点&#xff0c;本文的内容不仅可以用于论文中&#xff0c;在目前的绝大多数的工作中模型蒸馏是一项非常重要的技术&#xff0c;所以大家可以仔细学习一下本文的内容&#…

Spring Boot 处理过滤器(filter )中抛出的异常

前言&#xff1a; 在改造老项目登录功能的时候&#xff0c;使用了过滤器对 token 进行有效性验证&#xff0c;验证通过继续进行业务请求&#xff0c;验证不通过则抛出校验异常。 过程&#xff1a; 技术方案拟定后&#xff0c;就着手开始改造&#xff0c;一切都很顺畅&#x…

大数据平台搭建2024(二)

二&#xff1a;Hive安装 只在node01上操作 1 安装MySQL 8.0 最小化安装需要安装这个 yum install -y wget1-1 下载MySQL的yum源 wget http://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm检查是否安装成功 rpm -qpl mysql80-community-release-el7-7.n…