156 lines
10 KiB
C
156 lines
10 KiB
C
#ifndef __GAS_GAUGE_H
|
||
#define __GAS_GAUGE_H
|
||
|
||
|
||
#define mAhVALUE 3600
|
||
|
||
|
||
//************容量统计的接口变量,在调用容量计函数前须将系统变量全部赋值给输入类型的接口变量,调用完成后将输出类型的接口变量赋值回系统变量**************
|
||
//************也可以直接用接口变量作为系统变量,但数值恒定不变的系统/接口变量须在每次调用容量计前重新赋值一次**************
|
||
//************接口变量的名称、类型、所属RAM区块不可改变************
|
||
//对外Uart输出显示(若部分参数不需要显示可以不将其赋值给系统的uart输出变量)
|
||
extern U16 xdata Info_uiRSOC; //对外显示的电量(%),变量类型:U16 xdata(输出)
|
||
extern U32 xdata Info_ulFCC; //对外显示的满充容量(mAh),变量类型:U32 xdata(输出)
|
||
extern U32 xdata Info_ulRC; //对外显示的剩余容量(mAh),变量类型:U32 xdata(输出)
|
||
extern U16 xdata Info_uiCycleCount; //对外显示的放电循环次数(次),变量类型:U16 xdata(输出)
|
||
|
||
extern U32 xdata Info_ulDfilterRC; //滤波前的剩余容量值对外显示,变量类型:U32(输出)
|
||
extern U32 xdata Info_ulTempDsgFcc; //计算的可放电容量值对外显示,变量类型:U32(输出)
|
||
extern U16 xdata Info_uiSocDecTime; //剩余电量百分比(%)的变化率对外显示,变量类型:U16(输出)
|
||
extern U16 xdata Info_uiRsocCnt; //剩余电量百分比(%)变化计时对外显示,变量类型:U16(输出)
|
||
|
||
//保护标志
|
||
extern BOOL bOCD1; //放电过流1标志,变量类型:BOOL(输入)
|
||
extern BOOL bOCD2; //放电过流2标志,变量类型:BOOL(输入)
|
||
extern BOOL bOCC; //充电过流标志,变量类型:BOOL(输入)
|
||
extern BOOL bAFE_SC; //短路标志,变量类型:BOOL(输入)
|
||
extern BOOL bUV; //单节电芯欠压标志,变量类型:BOOL(输入)
|
||
extern BOOL bOV; //单节电芯过压标志,变量类型:BOOL(输入)
|
||
|
||
//存入E2或者赋值为常量的参数
|
||
extern U16 xdata E2uiVOC[10]; //OCV电压数组,分别对应静置时10%容量~100%容量共10个电压点,且E2uiVOC_D[0]对应10%、E2uiVOC_D[9]对应100%,变量类型:U16 xdata(输入)
|
||
extern U32 xdata E2ulDesignCapacity; //设计容量,变量类型:U32 xdata(输入)
|
||
extern U32 xdata E2ulFCC; //满充容量,变量类型:U32 xdata(输入\输出存入E2)
|
||
extern U32 xdata E2ulDfRC; //RSOC滤波前的剩余容量,变量类型:U32 xdata(输入\输出存入E2)
|
||
extern U8 xdata E2ucSOC; //滤波后用于对外显示的RSOC,变量类型:U8 xdata(输入\输出存入E2)
|
||
|
||
extern U16 xdata E2uiChgEndVol; //充电截止电压,变量类型:U16 xdata(输入)
|
||
extern S16 xdata E2siChgEndCurr; //充电截止电流,变量类型:S16 xdata(输入)
|
||
extern U8 xdata E2ucChgEndDelay; //充电截止延时,变量类型:U8 xdata(输入)
|
||
extern U16 xdata E2uiDsgEndVol; //放电截止电压,变量类型:U16 xdata(输入)
|
||
extern S32 xdata E2slDsgEndCurr; //放电截止电流,变量类型:S32 xdata(输入)
|
||
extern U8 xdata E2ucDsgEndDelay; //放电截止延时,变量类型:U8 xdata(输入)
|
||
extern U8 xdata E2ucDsgEndFlg; //放电截止标志,变量类型:U8 xdata(输入\输出存入E2)
|
||
extern U16 xdata E2uiOVvol; //单节过压阈值,变量类型:U16 xdata(输入)
|
||
extern U16 xdata E2uiUVvol; //单节欠压阈值,变量类型:U16 xdata(输入)
|
||
|
||
extern U32 xdata E2ulCycleThreshold; //循环次数更新阈值,变量类型:U32 xdata(输入)
|
||
extern U32 xdata E2ulCycleThresholdCount;//循环电量计数,变量类型:U32 xdata(输入\输出存入E2)
|
||
extern U16 xdata E2uiCycleCount; //循环次数,变量类型:U16 xdata(输入\输出存入E2)
|
||
extern U16 xdata E2uiLastCCount; //上次更新容量时的循环次数 ,变量类型:U16 xdata(输入\输出存入E2)
|
||
extern S16 xdata E2siDfilterCur; //零电流窗口,变量类型:S16 xdata(输入)
|
||
|
||
extern U16 xdata E2uiDsgAdjLowTemp; //放电末端调节的最低温度,数值 = 温度(度)×10 + 2731,变量类型:U16 xdata(输入)
|
||
extern S32 xdata E2slDsgAdjMaxCurr; //放电末端调节的最大放电电流(mA),变量类型:S32 xdata(输入)
|
||
extern U8 xdata E2ucDsgAdjLowFlg; //低温或大电流放电欠压时允许SOC跳至1%的标志(1:允许,0:禁止),变量类型:U8 xdata(输入)
|
||
extern U8 xdata E2ucDsgAdjLowSoc; //低温或大电流放电欠压时允许SOC跳至1%的阈值(%),变量类型:U8 xdata(输入)
|
||
|
||
extern U8 xdata E2ucFullDsgDelay; //静置时判断满放的延时(S),变量类型:U8 xdata(输入)
|
||
extern U32 xdata E2ulLoadEndVol; //负载或电芯总压截止总电压(mV),变量类型:U32 xdata(输入)
|
||
extern U32 xdata E2ulChgerEndVol; //充电器或电芯总压截止总电压(mV),变量类型:U32 xdata(输入)
|
||
extern U8 xdata E2ucChgerEndDelay; //充电器或电芯总压截止延时(S),变量类型:U8 xdata(输入)
|
||
extern U32 xdata E2ulIdleSocTimes; //需要调节SOC的自唤醒次数,变量类型:U32 xdata(输入)
|
||
|
||
extern U8 xdata E2ucInitSocDif; //第一次上电容量条件差值30%,一般不用修改,变量类型:U8 xdata(输入)
|
||
extern U8 xdata E2ucInitUpSoc; //第一次上电上调容量的OCV容量阈值,变量类型:U8 xdata(输入)
|
||
extern U8 xdata E2ucChgAdjRatio; //充电末端调节的比例系数,约等于充电时电压从OCV 100%电压~充电截止电压充进的电量百分比(%)(暂定),变量类型:U8 xdata(输入)
|
||
extern U16 xdata E2uiTempFCC_K1; //根据温度调节FCC一阶系数,变量类型:U16 xdata(输入)
|
||
extern U16 xdata E2uiTempFCC_K2; //根据温度调节FCC二阶系数,变量类型:U16 xdata(输入)
|
||
extern U16 xdata E2uiTempFCC_B; //根据温度调节FCC偏移量,变量类型:U16 xdata(输入)
|
||
extern U16 xdata E2uiDsgCorrectVol; //开始放电末端修调的电压(mV),变量类型:U16 xdata(输入)
|
||
extern U8 xdata E2ucDsgCorrectSOC; //开始放电末端修调的容量(%),变量类型:U8 xdata(输入)
|
||
|
||
extern U8 xdata E2ucDsgVolDet; //放电末端电压检测幅度(mV),变量类型:U8 xdata(输入)
|
||
|
||
extern U16 xdata E2uiChgCorrectVol; //开始充电末端修调的电压(mV),变量类型:U16 xdata(输入)
|
||
extern U8 xdata E2ucChgCorrectSOC; //开始充电末端修调的容量(%),变量类型:U8 xdata(输入)
|
||
extern U8 xdata E2ucChg100Ratio; //满足满充条件后上调1%间隔时间(S),变量类型:U8 xdata(输入)
|
||
extern U8 xdata E2ucChgCurRatio; //充电时调节滤波前剩余容量的充电倍率(单位:0.1C),变量类型:U8 xdata(输入)
|
||
extern U8 xdata E2ucChgChangeSocDif; //充电时修改滤波前剩余容量的容量差值(%),变量类型:U8 xdata(输入)
|
||
extern U8 xdata E2ucChgChangeSocRatio; //充电时在CHGCUR_RATIO充电倍率下OCV容量上抬的大致幅度(%),变量类型:U8 xdata(输入)
|
||
|
||
extern U8 xdata E2ucFccUpdatePercent; //单次容量学习更新的最大百分比(%),变量类型:U8 xdata(输入)
|
||
extern U16 xdata E2uiChgEndTemp; //充电截止温度,数值 = X(度)×10 + 2731,变量类型:U16 xdata(输入)
|
||
extern U16 xdata E2uiDsgEndTemp; //放电截止温度,数值 = X(度)×10 + 2731,变量类型:U16 xdata(输入)
|
||
|
||
extern U16 xdata E2ui_CYCLECOUNTA; //根据循环次数调节FCC的衰减阶段一:起始循环次数,变量类型:U16 xdata(输入)
|
||
extern U16 xdata E2ui_CYCLECOUNTA_K; //根据循环次数调节FCC的衰减阶段一:衰减斜率=(CYCLECOUNTB - CYCLECOUNTA)/10,变量类型:U16 xdata(输入)
|
||
extern U16 xdata E2ui_CYCLECOUNTA_B; //根据循环次数调节FCC的衰减阶段一:衰减截距=(CYCLECOUNTB *100 -CYCLECOUNTA *95) / (CYCLECOUNTB - CYCLECOUNTA),变量类型:U16 xdata(输入)
|
||
extern U16 xdata E2ui_CYCLECOUNTB; //调节FCC的衰减阶段二:起始循环次数,变量类型:U16 xdata(输入)
|
||
extern U16 xdata E2ui_CYCLECOUNTB_K; //调节FCC的衰减阶段二:衰减斜率=(CYCLECOUNTC -CYCLECOUNTB)/10,变量类型:U16 xdata(输入)
|
||
extern U16 xdata E2ui_CYCLECOUNTB_B; //调节FCC的衰减阶段二:衰减截距=(CYCLECOUNTC *95 -CYCLECOUNTB *85) /(CYCLECOUNTC -CYCLECOUNTB),变量类型:U16 xdata(输入)
|
||
extern U16 xdata E2ui_CYCLECOUNTC; //调节FCC的衰减阶段三:起始循环次数,变量类型:U16 xdata(输入)
|
||
extern U16 xdata E2uiUpdateCycleCount; //上次更新容量后,需再次更新容量的循环次数,变量类型:U16 xdata(输入)
|
||
|
||
//其他输入的系统全局变量
|
||
extern S32 xdata Info_slCurr; //经零电流窗口过滤后用于判断充放电状态的主控回路电流(mA),变量类型:S32 xdata(输入)
|
||
extern U16 xdata Info_uiTemp; //对外显示的电芯温度,数值 = X(度)×10 + 2731,变量类型:U16 xdata(输入)
|
||
extern U32 xdata Info_ulVoltage; //电芯总电压:U32 xdata(输入)
|
||
|
||
extern U16 data uiCellVmaxG; //当前电压最高的电芯电压,变量类型:U16 data(输入)
|
||
extern U16 data uiCellVminG; //当前电压最低的电芯电压,变量类型:U16 data(输入)
|
||
extern U8 data ucCellNum; //电芯串数,变量类型:U8 data(输入)
|
||
//extern S32 xdata slCadcCurAverage; //用于库伦积分的平均电流(主控充放电回路),变量类型:S32 xdata(输入)
|
||
extern S32 xdata slAdcCur2; //用于库伦积分的平均电流(辅控放电回路,如没有可以恒为0),变量类型:S32 xdata(输入)
|
||
extern S16 xdata siCurCompens; //系统功耗电流补偿(预留),可以恒为0,变量类型:U16 xdata(输入)
|
||
//*****************************************************************
|
||
|
||
//************************容量统计的接口函数,每次调用功能函数时,就会分别调用一次接口函数输入、输出容量计相关的变量值*********************************
|
||
//**********************根据开发的需求不同,可直接使用容量计的变量作为系统全局变量**********************
|
||
//**********************或者重新自定义全局变量,并编写接口函数将自定义的数值输入给容量计变量**********************
|
||
extern void GasGaugeVarIn(void); //变量值输入容量计,每个容量计功能函数执行时均在第一步调用该接口函数
|
||
extern void GasGaugeVarOut(void); //容量计变量值输出,每个容量计功能函数执行时均在最后一步调用该接口函数
|
||
//*******************************************************************************
|
||
|
||
//************************容量统计的功能实现函数*********************************
|
||
extern void GasGaugeInit(void); //上电/开机初始化和欠压低功耗(MCU不断电)下唤醒时调用
|
||
extern void GasGaugeIdle(void); //静置低功耗(MCU不断电)下自唤醒时调用
|
||
extern void GasGaugeWkUp(void); //静置低功耗(MCU不断电)下唤醒准备正常工作前调用
|
||
extern void GasGaugeManage(void); //工作功耗状态下的容量管理
|
||
//*******************************************************************************
|
||
|
||
//**********************容量统计的内部变量,仅作参考,无需作任何处理***********************
|
||
extern BOOL bCHGEndFlg; //充电截止标志
|
||
extern BOOL bCHG100Flg; //充电显示100标志
|
||
extern BOOL bVDQFlg; //容量学习标志
|
||
extern BOOL bFCCUpdateFlg; //容量更新标志
|
||
extern U16 idata uiRCCharge; //充电容量统计
|
||
extern U16 idata uiRCDischarge; //放电容量统计
|
||
extern U16 idata uiTempBK; //温度备份
|
||
//extern U16 idata uiChgVolBK; //充电电压备份
|
||
extern U16 idata uiDsgVolBK; //放电电压备份
|
||
extern U32 idata ulTotalVolBK; //总电压备份
|
||
extern U16 xdata uiVolSpeedCnt; //充放电末端电压变化率
|
||
extern U16 xdata uiDfRSOC; //滤波前RSOC
|
||
extern U8 xdata ucDSGEndDelay1;
|
||
extern U8 xdata ucDSGEndDelay2;
|
||
extern U8 xdata ucCHG100Delay;
|
||
extern U8 xdata ucCHGEndDelay;
|
||
extern U16 xdata uiDfRSOCBK; //滤波前RSOC的上一秒备份
|
||
extern U16 xdata uiFullDSGDelay;
|
||
extern U16 xdata uiRSOCCnt;
|
||
extern S32 xdata slCur; //充/放电总电流
|
||
extern S32 xdata slCurBK; //充/放电总电流的上一秒备份
|
||
extern U32 xdata ulFccCount; //累计充电电量
|
||
extern U32 xdata ulCurAdjSpeed;
|
||
extern U32 xdata ultempfcc;
|
||
extern BOOL bCHGFlg;
|
||
extern U8 xdata ucCHGFlgCounter;
|
||
extern U8 xdata flashcode[6];
|
||
extern U8 code flashcheck[6];
|
||
extern BOOL bCHGRcVolFlg;
|
||
extern U8 xdata ucCHGRcVolFlgCounter;
|
||
extern U32 xdata ulIdleCnt;
|
||
//*****************************************************************************************
|
||
|
||
#endif |