ZDBMS/output/GasGauge.lst

309 lines
14 KiB
Plaintext
Raw Normal View History

2025-02-06 07:35:32 +00:00
C51 COMPILER V9.00 GASGAUGE 03/13/2023 18:09:38 PAGE 1
C51 COMPILER V9.00, COMPILATION OF MODULE GASGAUGE
OBJECT MODULE PLACED IN .\output\GasGauge.obj
COMPILER INVOKED BY: C:\Keil_v5\C51\BIN\C51.EXE code_gasguage\GasGauge.c LARGE OPTIMIZE(7,SIZE) REGFILE(.\output\MCUCore
-_Load.ORC) BROWSE INTVECTOR(0X1000) INCDIR(.\header_app;.\header_drv;.\code_gasguage) DEBUG OBJECTEXTEND PRINT(.\output\
-GasGauge.lst) OBJECT(.\output\GasGauge.obj)
line level source
1 /********************************************************************************
2 Copyright (C), Sinowealth Electronic. Ltd.
3 Author: Sino
4 Version: V0.0
5 Date: 2020/05/30
6 History:
7 V0.0 2020/05/30 Preliminary
8 ********************************************************************************/
9 #include "Main.h"
10 #include "math.h"
11
12
13 //<2F><><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD><EFBFBD>صı<D8B5><C4B1><EFBFBD>
14 BOOL bDsgEndFlg;
15 BOOL bCHGEndFlg;
16 BOOL bRSOCSlow; //SOC<4F><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>
17 BOOL bRSOCFast; //SOC<4F><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼӿ<CABC>
18
19 U16 idata uiRCCharge; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3>
20 U16 idata uiRCDischarge; //<2F>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3>
21 U16 idata uiTempBK; //<2F>¶ȱ<C2B6><C8B1><EFBFBD>
22 U8 idata ucCycleGain; //<2F><><EFBFBD>ݷŵ<DDB7><C5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٷֱ<D9B7>
23 U16 xdata uiDfFCC; //<2F>˲<EFBFBD>ǰ<EFBFBD><C7B0>FCC
24 U16 xdata uiDfRC; //<2F>˲<EFBFBD>ǰRC
25 U16 xdata uiDfRSOC; //<2F>˲<EFBFBD>ǰRSOC
26 U8 xdata ucDSGEndDelay;
27 U8 xdata ucCHGEndDelay;
28 U8 xdata ucDSGDelay1;
29 U8 xdata ucDSGDelay2;
30 U8 xdata ucRSOCCnt;
31 S32 xdata slCur;
32
33
34 /*************************************************************************************************
35 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: GasGaugeInit
36 * <20><> <20><>: <20><>
37 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
38 * <20><> <20><>: <20><>һ<EFBFBD><D2BB><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>ݵ<EFBFBD>ѹ<EFBFBD><D1B9>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
39 *************************************************************************************************/
40 void GasGaugeInit(void)
41 {
42 1 U8 i;
43 1 U16 RSOCtemp = 100;
44 1
45 1 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
46 1 bDsgEndFlg = 0;
47 1 uiRCCharge = 0;
48 1 uiRCDischarge = 0;
49 1 uiTempBK = 0;
50 1 ucCycleGain = 0;
51 1 uiDfFCC = 0;
52 1 uiDfRC = 0;
53 1 uiDfRSOC = 0;
C51 COMPILER V9.00 GASGAUGE 03/13/2023 18:09:38 PAGE 2
54 1 ucDSGEndDelay = 0;
55 1 ucCHGEndDelay = 0;
56 1 ucDSGDelay1 = 0;
57 1 ucDSGDelay2 = 0;
58 1 bRSOCSlow = 0;
59 1 bRSOCFast = 0;
60 1 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
61 1 for(i=0; i<10; i++) //Prejudge capacity according to initial voltage
62 1 {
63 2 if(uiCellVmax < E2uiVOC[i])
64 2 {
65 3 if(i == 0)
66 3 {
67 4 if((uiCellVmax<E2uiDsgEndVol)||bUV)
68 4 {
69 5 RSOCtemp =0;
70 5 }
71 4 else
72 4 {
73 5 RSOCtemp = (U32)(uiCellVmax-E2uiDsgEndVol)*10/(E2uiVOC[0]-E2uiDsgEndVol);
74 5 }
75 4 break;
76 4 }
77 3 else
78 3 {
79 4 RSOCtemp = 10*i + (U32)(uiCellVmax-E2uiVOC[i-1])*10/(E2uiVOC[i]-E2uiVOC[i-1]);
80 4 break;
81 4 }
82 3 }
83 2 }
84 1
85 1 if(uiCellVmax >= E2uiVOC[7]) //<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶϵ<D9B6><CFB5>ϵ磬RSOC<4F><43><EFBFBD>ı<EFBFBD>
86 1 {
87 2 RSOCtemp = 100;
88 2 }
89 1
90 1 if(RSOCtemp>E2ucSOC)
91 1 {
92 2 RSOCtemp = E2ucSOC;
93 2 }
94 1 else
95 1 {
96 2 if((E2ucSOC-RSOCtemp) > INTSOCDIF)
97 2 {
98 3 E2ucSOC = RSOCtemp;
99 3 }
100 2 else
101 2 {
102 3 RSOCtemp = E2ucSOC;
103 3 }
104 2 }
105 1
106 1 Info.uiRSOC = RSOCtemp;
107 1 Info.ulFCC = E2ulLastFCC;
108 1 Info.ulRC = (U32)Info.ulFCC*Info.uiRSOC/100;
109 1
110 1 uiDfFCC = Info.ulFCC; //uiDfFCC/uiDfRC/uiDfRSOCΪ<43>˲<EFBFBD>ǰ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
-<2D>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1>û<EFBFBD><C3BB><EFBFBD>˲<EFBFBD>
111 1 uiDfRC = Info.ulRC;
112 1 uiDfRSOC = Info.uiRSOC *10;
113 1
114 1 if(E2uiCycleCount>CYCLECOUNTC) //<2F><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FCC<43>޵<EFBFBD>ϵ<EFBFBD><CFB5>
C51 COMPILER V9.00 GASGAUGE 03/13/2023 18:09:38 PAGE 3
115 1 {
116 2 ucCycleGain=75;
117 2 }
118 1 else if(E2uiCycleCount>CYCLECOUNTB)
119 1 {
120 2 ucCycleGain=95 - E2uiCycleCount/5;
121 2 }
122 1 else if(E2uiCycleCount>CYCLECOUNTA)
123 1 {
124 2 ucCycleGain=105 - E2uiCycleCount/10;
125 2 }
126 1 else
127 1 {
128 2 ucCycleGain=100;
129 2 }
130 1
131 1 uiTempBK = 0; //<2F><>֤<EFBFBD>ŵ<EFBFBD><C5B5>ͼ<EFBFBD><CDBC><EFBFBD>һ<EFBFBD><D2BB>FCC
132 1 ucDSGEndDelay = 0;
133 1 ucDSGDelay1 = 0;
134 1 ucDSGDelay2 = 0;
135 1 bDsgEndFlg = 0;
136 1 ucCHGEndDelay = 0;
137 1 }
138
139
140 /*************************************************************************************************
141 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: GasGaugeManage
142 * <20><> <20><>: <20><>
143 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
144 * <20><> <20><>: <20><><EFBFBD>ݳ<EFBFBD><DDB3>ŵ<EFBFBD>״̬ͳ<CCAC><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
145 *************************************************************************************************/
146 void GasGaugeManage(void)
147 {
148 1 U16 xdata chgdffcc = 0;
149 1
150 1 slCur=0;
151 1
152 1 if(Info.slCurr > E2siDfilterCur) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
153 1 {
154 2 ucDSGEndDelay = 0;
155 2 ucDSGDelay1 = 0;
156 2 ucDSGDelay2 = 0;
157 2 bDsgEndFlg = 0;
158 2
159 2 chgdffcc = E2ulChgFCC*ucCycleGain/100; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FCCһֱ<D2BB><D6B1><EFBFBD>ֲ<EFBFBD><D6B2>ı<EFBFBD>
160 2
161 2 if(chgdffcc != uiDfFCC) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
162 2 {
163 3 uiDfRC = (U16)(chgdffcc*Info.uiRSOC/100);
164 3 IrqUartDis();
165 3 Info.ulRC = uiDfRC;
166 3 IrqUartEn();
167 3 }
168 2 uiDfFCC = chgdffcc;
169 2
170 2 uiRCCharge += slCadcCurAverage; //ÿ1S<31><53><EFBFBD><EFBFBD>һ<EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>μ<EFBFBD><CEBC>ϵ<EFBFBD><CFB5><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ
-1S<31>ĵ<EFBFBD><C4B5><EFBFBD>mAS
171 2 while(uiRCCharge >= mAhVALUE) //<2F><><EFBFBD>ۼӵ<DBBC><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3600mAS<41><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1mAh
172 2 {
173 3 uiRCCharge -= mAhVALUE;
174 3 if(uiDfRC < uiDfFCC)
175 3 {
C51 COMPILER V9.00 GASGAUGE 03/13/2023 18:09:38 PAGE 4
176 4 uiDfRC++; //ʣ<><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1mAh
177 4 }
178 3 else
179 3 {
180 4 uiDfRC = uiDfFCC; //<2F><>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
181 4 uiRCCharge = 0;
182 4 }
183 3 }
184 2
185 2 if(uiDfRC < uiDfFCC)
186 2 {
187 3 uiDfRSOC = (U32)uiDfRC*1000/uiDfFCC;
188 3 }
189 2 else
190 2 {
191 3 uiDfRSOC = 1000;
192 3 }
193 2
194 2 if(slCadcCurAverage < E2siChgEndCurr) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>С<EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD><EFBFBD>ֹ
-<2D><><EFBFBD><EFBFBD>
195 2 {
196 3 if(uiCellVmax>E2uiChgEndVol) //<2F><>ʱ<EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9>ѹ
197 3 {
198 4 if(++ucCHGEndDelay>=E2ucChgEndDelay)
199 4 {
200 5 ucCHGEndDelay = E2ucChgEndDelay;
201 5 bCHGEndFlg = 1;
202 5 }
203 4 }
204 3 }
205 2
206 2 CorrectCHGSOC(); //<2F><><EFBFBD><EFBFBD>EEPROM<4F>еĵ<D0B5>ѹ<EFBFBD><EFBFBD><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>SO
-C,ͬʱ<CDAC><CAB1>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>uiDfRC
207 2
208 2 }
209 1 else if(Info.slCurr < -E2siDfilterCur) //<2F>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
210 1 {
211 2 ucCHGEndDelay = 0;
212 2 bCHGEndFlg = 0;
213 2
214 2 slCur = slCadcCurAverage /*+ slAdcCur2*/; //<2F>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD>·<EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>
215 2 if(slCur<0)
216 2 {
217 3 uiRCDischarge -= slCur;
218 3 }
219 2 if(uiRCDischarge >= mAhVALUE)
220 2 {
221 3 while(uiRCDischarge >= mAhVALUE) //<2F>ۼӵķŵ<C4B7><C5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3600mAS<41><53>ͬ<EFBFBD><CDAC>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1mAh
222 3 {
223 4 uiRCDischarge -= mAhVALUE;
224 4 E2ulCycleThresholdCount++; //<2F>ۼ<EFBFBD>
225 4 if(uiDfRC > 1)
226 4 {
227 5 uiDfRC --;
228 5 }
229 4 }
230 3 if(E2ulCycleThresholdCount >= E2ulCycleThreshold) //cyclecount
231 3 {
232 4 E2ulCycleThresholdCount -= E2ulCycleThreshold;
233 4 E2uiCycleCount++;
234 4 }
235 3 }
C51 COMPILER V9.00 GASGAUGE 03/13/2023 18:09:38 PAGE 5
236 2
237 2 CorrectDSGSOC();
238 2 }
239 1
240 1 if(bOV) //Charge end
241 1 {
242 2 IrqUartDis();
243 2 uiDfRC = uiDfFCC;
244 2 Info.ulRC = uiDfRC;
245 2 Info.ulFCC = Info.ulRC;
246 2 Info.uiRSOC = 100;
247 2 IrqUartEn();
248 2 }
249 1
250 1 if(uiDfRC>uiDfFCC)
251 1 {
252 2 uiDfRC = uiDfFCC;
253 2 }
254 1 else if(uiDfRC <(uiDfFCC*2/100))
255 1 {
256 2 uiDfRC = uiDfFCC*2/100;
257 2 }
258 1 uiDfRSOC=(U32)uiDfRC*1000/uiDfFCC;
259 1
260 1 DataFilter();
261 1
262 1 IrqUartDis();
263 1 E2ucSOC = Info.uiRSOC;
264 1 E2ulLastFCC = Info.ulFCC;
265 1 Info.uiCycleCount = E2uiCycleCount;
266 1 IrqUartEn();
267 1 }
268
269
270
271
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1410 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 15 3
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = 7 ----
BIT SIZE = 4 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)