309 lines
14 KiB
Plaintext
309 lines
14 KiB
Plaintext
|
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)
|