299 lines
18 KiB
Plaintext
299 lines
18 KiB
Plaintext
C51 COMPILER V9.01 GASGAUGEINTER_V4_13 02/19/2025 10:42:28 PAGE 1
|
||
|
||
|
||
C51 COMPILER V9.01, COMPILATION OF MODULE GASGAUGEINTER_V4_13
|
||
OBJECT MODULE PLACED IN .\output\GasGaugeInter_V4_13.obj
|
||
COMPILER INVOKED BY: D:\Tool\Keil\C51\BIN\C51.EXE code_gasguage\GasGaugeInter_V4_13.c LARGE OPTIMIZE(7,SIZE) REGFILE(.\o
|
||
-utput\MCUCore_Load.ORC) BROWSE INTVECTOR(0X1000) INCDIR(.\header_app;.\header_drv;.\code_gasguage;.\code_classb\iec60730
|
||
-_lib\include;.\code_classb\iec60730_proc\Include;.\code_classb\config) DEBUG OBJECTEXTEND PRINT(.\output\GasGaugeInter_V
|
||
-4_13.lst) OBJECT(.\output\GasGaugeInter_V4_13.obj)
|
||
|
||
line level source
|
||
|
||
1 /********************************************************************************
|
||
2 Copyright (C), Sinowealth Electronic. Ltd.
|
||
3 Author: Sino
|
||
4 Version: V0.0
|
||
5 Date: 2022/12/08
|
||
6 History:
|
||
7 V0.0 2022/12/08 Preliminary
|
||
8 ********************************************************************************/
|
||
9 #include "Main.h"
|
||
10
|
||
11
|
||
12 //***************************容量计部分相关变量,可直接移动至其他.c文件,其他容量计变量也可以定义在此处,<E5A484>
|
||
-部梢栽谄渌<E8B084>募<EFBFBD>卸ㄒ<E58DB8>**************************************
|
||
13
|
||
14
|
||
15 U16 xdata Info_uiRSOC; //对外显示的电量(%),变量类型:U16 xdata(输出)
|
||
16 U32 xdata Info_ulFCC; //对外显示的满充容量(mAh),变量类型:U32 xdata(输出)
|
||
17 U32 xdata Info_ulRC; //对外显示的剩余容量(mAh),变量类型:U32 xdata(输出)
|
||
18 U16 xdata Info_uiCycleCount; //对外显示的放电循环次数(次),变量类型:U16 xdata(输出)
|
||
19
|
||
20 U32 xdata Info_ulDfilterRC; //滤波前的剩余容量值对外显示,变量类型:U32(输出)
|
||
21 U32 xdata Info_ulTempDsgFcc; //计算的可放电容量值对外显示,变量类型:U32(输出)
|
||
22 U16 xdata Info_uiSocDecTime; //剩余电量百分比(%)的变化率对外显示,变量类型:U16(输出)
|
||
23 U16 xdata Info_uiRsocCnt; //剩余电量百分比(%)变化计时对外显示,变量类型:U16(输出)
|
||
24
|
||
25 //BOOL bOCD1; //放电过流1标志,变量类型:BOOL(输入)
|
||
26 //BOOL bOCD2; //放电过流2标志,变量类型:BOOL(输入)
|
||
27 //BOOL bOCC; //充电过流标志,变量类型:BOOL(输入)
|
||
28 //BOOL bAFE_SC; //短路标志,变量类型:BOOL(输入)
|
||
29 //BOOL bUV; //单节电芯欠压标志,变量类型:BOOL(输入)
|
||
30 //BOOL bOV; //单节电芯过压标志,变量类型:BOOL(输入)
|
||
31
|
||
32 //U16 xdata E2uiVOC[10]; //OCV电压数组,分别对应静置时10%容量~100%容量共10个电压点,且E2uiVOC_D[0]对应10
|
||
-%、E2uiVOC_D[9]对应100%,变量类型:U16 xdata(输入)
|
||
33 //U32 xdata E2ulDesignCapacity; //设计容量,变量类型:U32 xdata(输入)
|
||
34 //U32 xdata E2ulFCC; //满充容量,变量类型:U32 xdata(输入\输出存入E2)
|
||
35 //U32 xdata E2ulDfRC; //RSOC滤波前的剩余容量,变量类型:U32 xdata(输入\输出存入E2)
|
||
36 //U8 xdata E2ucSOC; //滤波后用于对外显示的RSOC,变量类型:U8 xdata(输入\输出存入E2)
|
||
37
|
||
38 //U16 xdata E2uiChgEndVol; //充电截止电压,变量类型:U16 xdata(输入)
|
||
39 //S16 xdata E2siChgEndCurr; //充电截止电流,变量类型:S16 xdata(输入)
|
||
40 //U8 xdata E2ucChgEndDelay; //充电截止延时,变量类型:U8 xdata(输入)
|
||
41 //U16 xdata E2uiDsgEndVol; //放电截止电压,变量类型:U16 xdata(输入)
|
||
42 //S32 xdata E2slDsgEndCurr; //放电截止电流,变量类型:S32 xdata(输入)
|
||
43 //U8 xdata E2ucDsgEndDelay; //放电截止延时,变量类型:U8 xdata(输入)
|
||
44 //U8 xdata E2ucDsgEndFlg; //放电截止标志,变量类型:U8 xdata(输入\输出存入E2)
|
||
45 //U16 xdata E2uiOVvol; //单节过压阈值,变量类型:U16 xdata(输入)
|
||
46 //U16 xdata E2uiUVvol; //单节欠压阈值,变量类型:U16 xdata(输入)
|
||
47
|
||
48 //U32 xdata E2ulCycleThreshold; //循环次数更新阈值,变量类型:U32 xdata(输入)
|
||
49 //U32 xdata E2ulCycleThresholdCount;//循环电量计数,变量类型:U32 xdata(输入\输出存入E2)
|
||
50 //U16 xdata E2uiCycleCount; //循环次数,变量类型:U16 xdata(输入\输出存入E2)
|
||
C51 COMPILER V9.01 GASGAUGEINTER_V4_13 02/19/2025 10:42:28 PAGE 2
|
||
|
||
51 //U16 xdata E2uiLastCCount; //上次更新容量时的循环次数 ,变量类型:U16 xdata(输入\输出存入E2)
|
||
52 //S16 xdata E2siDfilterCur; //零电流窗口,变量类型:S16 xdata(输入)
|
||
53
|
||
54 U16 xdata E2uiDsgAdjLowTemp; //放电末端调节的最低温度,数值 = 温度(度)×10 + 2731,变量类型:U16 xdata<74>
|
||
-ㄊ淙耄<E6B799>
|
||
55 S32 xdata E2slDsgAdjMaxCurr; //放电末端调节的最大放电电流(mA),变量类型:S32 xdata(输入)
|
||
56 U8 xdata E2ucDsgAdjLowFlg; //低温或大电流放电欠压时允许SOC跳至1%的标志(1:允许,0:禁止),变量类型:U8
|
||
-xdata(输入)
|
||
57 U8 xdata E2ucDsgAdjLowSoc; //低温或大电流放电欠压时允许SOC跳至1%的阈值(%),变量类型:U8 xdata(输入)
|
||
58
|
||
59 U8 xdata E2ucFullDsgDelay; //静置时判断满放的延时(S),变量类型:U8 xdata(输入)
|
||
60 U32 xdata E2ulLoadEndVol; //负载或电芯总压截止总电压(mV),变量类型:U32 xdata(输入)
|
||
61 U32 xdata E2ulChgerEndVol; //充电器或电芯总压截止总电压(mV),变量类型:U32 xdata(输入)
|
||
62 U8 xdata E2ucChgerEndDelay; //充电器或电芯总压截止延时(S),变量类型:U8 xdata(输入)
|
||
63 U32 xdata E2ulIdleSocTimes; //需要调节SOC的自唤醒次数,变量类型:U32 xdata(输入)
|
||
64
|
||
65 U8 xdata E2ucInitSocDif; //第一次上电容量条件差值30%,一般不用修改,变量类型:U8 xdata(输入)
|
||
66 U8 xdata E2ucInitUpSoc; //第一次上电上调容量的OCV容量阈值,变量类型:U8 xdata(输入)
|
||
67 U8 xdata E2ucChgAdjRatio; //充电末端调节的比例系数,约等于充电时电压从OCV 100%电压~充电截止电压充进的电量
|
||
-百分比(%)(暂定),变量类型:U8 xdata(输入)
|
||
68 U16 xdata E2uiTempFCC_K1; //根据温度调节FCC一阶系数,变量类型:U16 xdata(输入)
|
||
69 U16 xdata E2uiTempFCC_K2; //根据温度调节FCC二阶系数,变量类型:U16 xdata(输入)
|
||
70 U16 xdata E2uiTempFCC_B; //根据温度调节FCC偏移量,变量类型:U16 xdata(输入)
|
||
71 U16 xdata E2uiDsgCorrectVol; //开始放电末端修调的电压(mV),变量类型:U16 xdata(输入)
|
||
72 U8 xdata E2ucDsgCorrectSOC; //开始放电末端修调的容量(%),变量类型:U8 xdata(输入)
|
||
73
|
||
74 U8 xdata E2ucDsgVolDet; //放电末端电压检测幅度(mV),变量类型:U8 xdata(输入)
|
||
75
|
||
76 U16 xdata E2uiChgCorrectVol; //开始充电末端修调的电压(mV),变量类型:U16 xdata(输入)
|
||
77 U8 xdata E2ucChgCorrectSOC; //开始充电末端修调的容量(%),变量类型:U8 xdata(输入)
|
||
78 U8 xdata E2ucChg100Ratio; //满足满充条件后上调1%间隔时间(S),变量类型:U8 xdata(输入)
|
||
79 U8 xdata E2ucChgCurRatio; //充电时调节滤波前剩余容量的充电倍率(单位:0.1C),变量类型:U8 xdata(输入)
|
||
80 U8 xdata E2ucChgChangeSocDif; //充电时修改滤波前剩余容量的容量差值(%),变量类型:U8 xdata(输入)
|
||
81 U8 xdata E2ucChgChangeSocRatio; //充电时在CHGCUR_RATIO充电倍率下OCV容量上抬的大致幅度(%),变量类型:U8 xda
|
||
-ta(输入)
|
||
82
|
||
83 U8 xdata E2ucFccUpdatePercent; //单次容量学习更新的最大百分比(%),变量类型:U8 xdata(输入)
|
||
84 U16 xdata E2uiChgEndTemp; //充电截止温度,数值 = X(度)×10 + 2731,变量类型:U16 xdata(输入)
|
||
85 U16 xdata E2uiDsgEndTemp; //放电截止温度,数值 = X(度)×10 + 2731,变量类型:U16 xdata(输入)
|
||
86
|
||
87 U16 xdata E2ui_CYCLECOUNTA; //根据循环次数调节FCC的衰减阶段一:起始循环次数,变量类型:U16 xdata(输入)
|
||
88 U16 xdata E2ui_CYCLECOUNTA_K; //根据循环次数调节FCC的衰减阶段一:衰减斜率=(CYCLECOUNTB - CYCLECOUNTA)/10<31>
|
||
-<2D>淞坷嘈停篣16 xdata(输入)
|
||
89 U16 xdata E2ui_CYCLECOUNTA_B; //根据循环次数调节FCC的衰减阶段一:衰减截距=(CYCLECOUNTB *100 -CYCLECOUN
|
||
-TA *95) / (CYCLECOUNTB - CYCLECOUNTA),变量类型:U16 xdata(输入)
|
||
90 U16 xdata E2ui_CYCLECOUNTB; //调节FCC的衰减阶段二:起始循环次数,变量类型:U16 xdata(输入)
|
||
91 U16 xdata E2ui_CYCLECOUNTB_K; //调节FCC的衰减阶段二:衰减斜率=(CYCLECOUNTC -CYCLECOUNTB)/10,变量类型<E7B1BB>
|
||
-篣16 xdata(输入)
|
||
92 U16 xdata E2ui_CYCLECOUNTB_B; //调节FCC的衰减阶段二:衰减截距=(CYCLECOUNTC *95 -CYCLECOUNTB *85) /(CYC
|
||
-LECOUNTC -CYCLECOUNTB),变量类型:U16 xdata(输入)
|
||
93 U16 xdata E2ui_CYCLECOUNTC; //调节FCC的衰减阶段三:起始循环次数,变量类型:U16 xdata(输入)
|
||
94 U16 xdata E2uiUpdateCycleCount; //上次更新容量后,需再次更新容量的循环次数,变量类型:U16 xdata(输入)
|
||
95
|
||
96 S32 xdata Info_slCurr; //经零电流窗口过滤后用于判断充放电状态的主控回路电流(mA),变量类型:S32 xdata(
|
||
-输入)
|
||
97 U16 xdata Info_uiTemp; //对外显示的电芯温度,数值 = X(度)×10 + 2731,变量类型:U16 xdata(输入)
|
||
98 U32 xdata Info_ulVoltage; //电芯总电压:U32 xdata(输入)
|
||
99
|
||
100 U16 data uiCellVmaxG; //当前电压最高的电芯电压,变量类型:U16 data(输入)
|
||
101 U16 data uiCellVminG; //当前电压最低的电芯电压,变量类型:U16 data(输入)
|
||
102 //U8 data ucCellNum; //电芯串数,变量类型:U8 data(输入)
|
||
103 //S32 xdata slCadcCurAverage; //用于库伦积分的平均电流(主控充放电回路),变量类型:S32 xdata(输入)
|
||
C51 COMPILER V9.01 GASGAUGEINTER_V4_13 02/19/2025 10:42:28 PAGE 3
|
||
|
||
104 S32 xdata slAdcCur2; //用于库伦积分的平均电流(辅控放电回路,如没有可以恒为0),变量类型:S32 xdata(输<EFBC88>
|
||
-耄<>
|
||
105 S16 xdata siCurCompens; //系统功耗电流补偿(预留),可以恒为0,变量类型:U16 xdata(输入)
|
||
106 //*****************************************************************
|
||
107
|
||
108 /*************************************************************************************************
|
||
109 * 函数名: GasGaugeVarIn
|
||
110 * 参 数: 无
|
||
111 * 返回值: 无
|
||
112 * 描 述: 外部值赋给容量计相关变量,每个容量计功能函数执行时均在第一步调用该接口函数
|
||
113 *************************************************************************************************/
|
||
114 void GasGaugeVarIn(void)
|
||
115 {
|
||
116 1 BOOL eabak;
|
||
117 1
|
||
118 1 eabak = EA;
|
||
119 1 IrqDis();
|
||
120 1 Info_uiRSOC = Info.uiRSOC;
|
||
121 1 Info_ulFCC = Info.ulFCC;
|
||
122 1 Info_ulRC = Info.ulRC;
|
||
123 1 Info_uiCycleCount = Info.uiCycleCount;
|
||
124 1 Info_slCurr = Info.slCurr;
|
||
125 1 Info_uiTemp = Info.uiTS[0];
|
||
126 1 Info_ulVoltage = Info.ulVoltage;
|
||
127 1 uiCellVmaxG = uiCellVmax;
|
||
128 1 uiCellVminG = uiCellVmin;
|
||
129 1
|
||
130 1 slAdcCur2 = 0;
|
||
131 1 siCurCompens = 0;
|
||
132 1
|
||
133 1 EA = eabak;
|
||
134 1
|
||
135 1 E2ucInitSocDif = 30;
|
||
136 1 E2ucInitUpSoc = 90;
|
||
137 1 E2uiDsgAdjLowTemp = (10*10 + 2731);
|
||
138 1 E2slDsgAdjMaxCurr = -35000;
|
||
139 1 E2ucDsgAdjLowFlg = 0;
|
||
140 1 E2ucDsgAdjLowSoc = 1;
|
||
141 1 E2ucChgAdjRatio = 20;
|
||
142 1 E2uiTempFCC_K1 = 16000;
|
||
143 1 E2uiTempFCC_K2 = 17;
|
||
144 1 E2uiTempFCC_B = 1570;
|
||
145 1 E2ucFullDsgDelay = 60;
|
||
146 1 E2uiDsgCorrectVol = E2uiVOC[0] - 200;
|
||
147 1 E2ucDsgCorrectSOC = 15;
|
||
148 1 E2ucDsgVolDet = 10;
|
||
149 1
|
||
150 1 E2uiChgCorrectVol = E2uiVOC[9];
|
||
151 1 E2ucChgCorrectSOC = 90;
|
||
152 1 E2ulChgerEndVol = 4500 * ucCellNum;
|
||
153 1 E2ulLoadEndVol = 3000 * ucCellNum;
|
||
154 1 E2ucChgerEndDelay = 60;
|
||
155 1 E2ucChg100Ratio = 20;
|
||
156 1
|
||
157 1 E2ucChgCurRatio = 15;
|
||
158 1 E2ucChgChangeSocDif = 20;
|
||
159 1 E2ucChgChangeSocRatio = 10;
|
||
160 1
|
||
161 1 E2ulIdleSocTimes = 40;
|
||
162 1
|
||
163 1 E2ucFccUpdatePercent = 30;
|
||
164 1 E2uiChgEndTemp = (15*10 + 2731);
|
||
C51 COMPILER V9.01 GASGAUGEINTER_V4_13 02/19/2025 10:42:28 PAGE 4
|
||
|
||
165 1 E2uiDsgEndTemp = (15*10 + 2731);
|
||
166 1
|
||
167 1 E2ui_CYCLECOUNTA = 50;
|
||
168 1 E2ui_CYCLECOUNTA_K = 5;
|
||
169 1 E2ui_CYCLECOUNTA_B = 105;
|
||
170 1 E2ui_CYCLECOUNTB = 100;
|
||
171 1 E2ui_CYCLECOUNTB_K = 30;
|
||
172 1 E2ui_CYCLECOUNTB_B = 98;
|
||
173 1 E2ui_CYCLECOUNTC = 400;
|
||
174 1 E2uiUpdateCycleCount = 75;
|
||
175 1
|
||
176 1
|
||
177 1 if( bOV )
|
||
178 1 {
|
||
179 2 E2ucSOC = 100;
|
||
180 2 E2ulDfRC = E2ulFCC;
|
||
181 2
|
||
182 2 Info_uiRSOC = 100;
|
||
183 2 Info_ulRC = E2ulFCC;
|
||
184 2
|
||
185 2 Info.uiRSOC = 100;
|
||
186 2 Info.ulRC = E2ulFCC;
|
||
187 2 }
|
||
188 1
|
||
189 1
|
||
190 1 if( bUV )
|
||
191 1 {
|
||
192 2 E2ucSOC = 0;
|
||
193 2 E2ulDfRC = 0;
|
||
194 2
|
||
195 2 Info_uiRSOC = 0;
|
||
196 2 Info_ulRC = 0;
|
||
197 2
|
||
198 2 Info.uiRSOC = 0;
|
||
199 2 Info.ulRC = 0;
|
||
200 2 }
|
||
201 1 //}
|
||
202 1 // bAFE_SC = bSC;
|
||
203 1 }
|
||
204
|
||
205 /*************************************************************************************************
|
||
206 * 函数名: GasGaugeVarOut
|
||
207 * 参 数: 无
|
||
208 * 返回值: 无
|
||
209 * 描 述: 容量计相关变量赋给外部值,每个容量计功能函数执行时均在最后一步调用该接口函数
|
||
210 *************************************************************************************************/
|
||
211 void GasGaugeVarOut(void)
|
||
212 {
|
||
213 1 BOOL eabak;
|
||
214 1
|
||
215 1 eabak = EA;
|
||
216 1 IrqDis();
|
||
217 1 Info.uiRSOC = Info_uiRSOC;
|
||
218 1 Info.ulFCC = Info_ulFCC;
|
||
219 1 Info.ulRC = Info_ulRC;
|
||
220 1 Info.uiCycleCount = Info_uiCycleCount;
|
||
221 1 bVDQ = bVDQFlg;
|
||
222 1 bFC = bCHGEndFlg;
|
||
223 1 bFD = E2ucDsgEndFlg;
|
||
224 1 EA = eabak;
|
||
225 1
|
||
226 1 if( bOV )
|
||
C51 COMPILER V9.01 GASGAUGEINTER_V4_13 02/19/2025 10:42:28 PAGE 5
|
||
|
||
227 1 {
|
||
228 2 E2ucSOC = 100;
|
||
229 2 E2ulDfRC = E2ulFCC;
|
||
230 2
|
||
231 2 Info_uiRSOC = 100;
|
||
232 2 Info_ulRC = E2ulFCC;
|
||
233 2
|
||
234 2 Info.uiRSOC = 100;
|
||
235 2 Info.ulRC = E2ulFCC;
|
||
236 2 }
|
||
237 1
|
||
238 1
|
||
239 1 if( bUV )
|
||
240 1 {
|
||
241 2 E2ucSOC = 0;
|
||
242 2 E2ulDfRC = 0;
|
||
243 2
|
||
244 2 Info_uiRSOC = 0;
|
||
245 2 Info_ulRC = 0;
|
||
246 2
|
||
247 2 Info.uiRSOC = 0;
|
||
248 2 Info.ulRC = 0;
|
||
249 2 }
|
||
250 1 //}
|
||
251 1 // bAFE_SC = bSC;
|
||
252 1 }
|
||
|
||
|
||
MODULE INFORMATION: STATIC OVERLAYABLE
|
||
CODE SIZE = 764 ----
|
||
CONSTANT SIZE = ---- ----
|
||
XDATA SIZE = 103 ----
|
||
PDATA SIZE = ---- ----
|
||
DATA SIZE = 4 ----
|
||
IDATA SIZE = ---- ----
|
||
BIT SIZE = ---- 2
|
||
END OF MODULE INFORMATION.
|
||
|
||
|
||
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|