c2c网站建站的标准,天津网站搜索引擎优化,果洛电子商务网站建设哪家好,济南比较大的网站制作公司锂电池充放电管理-单片机通用 一、锂电池充放电检测的原理二、power.c的实现三、power.h的实现四、锂电池检测和充电电路 一、锂电池充放电检测的原理
①两节锂电池通过电阻分压检测ADC#xff0c;再根据电压划分电量等级#xff1b;②充电使用的是锂电池充电IC方案#xf… 锂电池充放电管理-单片机通用 一、锂电池充放电检测的原理二、power.c的实现三、power.h的实现四、锂电池检测和充电电路 一、锂电池充放电检测的原理
①两节锂电池通过电阻分压检测ADC再根据电压划分电量等级②充电使用的是锂电池充电IC方案可通过硬件电阻参数调节充电电流并可以通过STAT引脚检测充电和满电状态充电注意会抬高电压③放电根据ADC_BAT检测电池电量进行等级划分注意大负载电压骤降瞬间④充放电过程注意在电量划分等级临界值来回抖动现象
二、power.c的实现
#include power.h bit b_LowBat_Flag0; //低电进行关机
bit b_BatAdjust_Flag0; //电池电压补偿
bit b_BatChargeFir_Flag0; //第一次充电标志
u8 batChargeMode 0; //0 无外电 1 充电 2 满电
u8 powerMode0; //1绿色 2黄色 3红色 4红色闪烁 5充电 6满电
u8 powerChargeMode0; //充电当前电量u8 batChargeCnt0; //充电周期6次
u8 batChargeUp0; //上升次数
u8 batChargeFull0; //记录有6次上升表示充满u16 adcBackup0; //备份上一次ADC数据
u16 adcBatAdjust0; //补偿ADC数据//
//函数名称:checkCharge
//输 入:无
//输 出:无
//功 能:是否在接入5V充电
//
void checkCharge(void)
{if(IO_DC 1){b_PowerDis1;if(IO_CHRG0){batChargeMode 1;batChargeFull0;if(powerMode5)powerModepowerChargeMode;}else{//nopDelay(1000);if(IO_DC 0) return;if(IO_CHRG){if(batChargeFull6){batChargeMode 2;powerMode 4;powerChargeMode4;}else{batChargeFull;}}}}else {batChargeMode 0;batChargeFull0;}
}//
//函数名称:checkDCvol
//输 入:无
//输 出:无
//功 能:系统ADC采集外部供电
//
void checkDCvol(void)
{u16 DCadc0;u16 DCadcFrom0; //ADC变化区间DCadc getChannelVal(AD13); //Vcc对应的ADC值为4096 5v 锂电池放电范围3~4.2VBatLevelClo(); if(adcBackupDCadc){DCadcFrom adcBackup-DCadc; //计算电压骤减状态大于0.2V(92)/0.15(69) 0.1(46)if(DCadcFrom46){b_BatAdjust_Flag1;adcBatAdjustDCadcFrom; //备份骤减数据}}else{DCadcFrom DCadc-adcBackup;if(DCadcFrom16){adcBatAdjust0;b_BatAdjust_Flag0; //重新校准正常放电}}adcBackup DCadc; //备份上次ADC数据备份校准if(b_BatAdjust_Flag){DCadc DCadcadcBatAdjust;}if(DCadc 1753) //75%~100% 3.9~4.2V 8.4V 1938 1846 8v{if(powerMode4||Mode0)powerMode 4;}else if(DCadc 1661) //50%~74% 3.6~3.9V 7.8V 1799 1753 7.6v{if(powerMode3||Mode0)powerMode 3; //从第四格往下掉电}else if(DCadc 1603) //25%~49% 3.3~3.6V 7.2V 1661{if(powerMode2||Mode0)powerMode 2; //从第三格往下掉电}else if(DCadc 1499) //0%~24% 2.8~3.3V 6.6V 1523{if(powerMode1||Mode0)powerMode 1; //从第二格往下掉电} else if(sleepMode) //低于3.3V 上电复用{powerMode 1; //从第二格往下掉电if(DCadc 1476) return;powerMode 0;if(b_LowBat_Flag0){b_LowBat_Flag 1; //进入低电报警if(Mode0) return; //长按开机不报警 b_KeyTone_Flag1; //蜂鸣器响一声Mode 8;b_PowerDis1;b_Display_Flag 1; //刷新显示} }if(Mode 2Mode 5) //亮度立即显示电量b_PowerDis1; //刷新电量显示
}//
//函数名称:chargeAI
//输 入:无
//输 出:无
//功 能:30S内读6次有3次稳定说明充到了
//
static u8 chargeAI(void)
{batChargeUp;if(batChargeCnt6){batChargeCnt0;if(batChargeUp3) {batChargeUp0;return 0;}batChargeUp0;}return 1;
}//
//函数名称:chargeAI
//输 入:无
//输 出:无
//功 能:30S内读6次有3次稳定说明充到了
//
static void clearAIRam(void)
{batChargeCnt0;batChargeUp0;
}//
//函数名称:checkBatChargevol
//输 入:无
//输 出:无
//功 能:系统ADC采集电池充电电量
//
void checkBatChargevol(void)
{u16 DCadc0;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(powerChargeMode3){if(chargeAI()) return;}}powerChargeMode 3;}else if(DCadc 1707) //25%~49% 3.3~3.6V 7.2V{if((b_BatChargeFir_Flag1)(powerChargeMode2)) {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_Flag1)(powerChargeMode1)) {clearAIRam();return;}else if(b_BatChargeFir_Flag){if(chargeAI()) return;}powerChargeMode 1;}else{if((b_BatChargeFir_Flag1)(powerChargeMode0)){clearAIRam();return;}powerChargeMode 0;}
}//
//函数名称:getFirCharge
//输 入:无
//输 出:无
//功 能:更新第一次充电电量显示
//
void getFirCharge(void)
{if(b_BatChargeFir_Flag0batChargeMode1){IO_COTBAT 1;nopDelay(36000);checkBatChargevol(); //立即采集电池充电电量b_BatChargeFir_Flag1; //采集完第一次充电电量}
}//
//函数名称:openSyscheckDCvol
//输 入:无
//输 出:无
//功 能:开机时检测电池电压低于2.8V不开机
//
u8 openSyscheckDCvol(void)
{u16 DCadc0;IO_COTBAT 1;nopDelay(36000);DCadc getChannelVal(AD13); //Vcc对应的ADC值为4096 5vif(DCadc1476)return 0;elsereturn 1; //低于3.3V
}//
//函数名称:clearBatAdjust
//输 入:无
//输 出:无
//功 能:清除电池校准
//
void clearBatAdjust(void)
{b_BatAdjust_Flag0;adcBackup0;adcBatAdjust0;
}
根据外电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_COTBAT1) //控制检测电池电量
#define BatLevelClo() (IO_COTBAT0)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数据手册