508 lines
23 KiB
Plaintext
508 lines
23 KiB
Plaintext
C51 COMPILER V9.01 PROTECT 02/07/2025 10:36:15 PAGE 1
|
||
|
||
|
||
C51 COMPILER V9.01, COMPILATION OF MODULE PROTECT
|
||
OBJECT MODULE PLACED IN .\output\Protect.obj
|
||
COMPILER INVOKED BY: D:\Tool\Keil\C51\BIN\C51.EXE code_drv\Protect.c LARGE OPTIMIZE(7,SIZE) REGFILE(.\output\MCUCore_Loa
|
||
-d.ORC) BROWSE INTVECTOR(0X1000) INCDIR(.\header_app;.\header_drv;.\code_gasguage;.\code_classb\iec60730_lib\include;.\co
|
||
-de_classb\iec60730_proc\Include;.\code_classb\config) DEBUG OBJECTEXTEND PRINT(.\output\Protect.lst) OBJECT(.\output\Pro
|
||
-tect.obj)
|
||
|
||
line level source
|
||
|
||
1 /********************************************************************************
|
||
2 Copyright (C), Sinowealth Electronic. Ltd.
|
||
3 Author: Sino
|
||
4 Version: V0.0
|
||
5 Date: 2020/04/26
|
||
6 History:
|
||
7 V2.0 2020/04/26 Preliminary
|
||
8 ********************************************************************************/
|
||
9 #include "Main.h"
|
||
10
|
||
11
|
||
12 //保护相关的参数
|
||
13 BOOL bUVLock; //负载锁定,当欠压恢复后,置位该标志,而不是直接清零bUV,当负载释放后<E694BE>
|
||
-<2D>偾辶鉨UV
|
||
14 BOOL bOVLock; //充电器锁定,当过压恢复后,置位该标志,而不是直接清零bOV,当充电器释<E599A8>
|
||
-藕螅<E89795>偾辶鉨OV
|
||
15 U16 xdata uiOVDelayCnt;
|
||
16 U16 xdata uiOVRDelayCnt;
|
||
17 U16 xdata uiUVDelayCnt;
|
||
18 U16 xdata uiUVRDelayCnt;
|
||
19 U16 xdata uiOTCDelayCnt;
|
||
20 U16 xdata uiOTCRDelayCnt;
|
||
21 U16 xdata uiUTCDelayCnt;
|
||
22 U16 xdata uiUTCRDelayCnt;
|
||
23 U16 xdata uiOTDDelayCnt;
|
||
24 U16 xdata uiOTDRDelayCnt;
|
||
25 U16 xdata uiUTDDelayCnt;
|
||
26 U16 xdata uiUTDRDelayCnt;
|
||
27 U16 xdata uiOCCDelayCnt;
|
||
28 U16 xdata uiOCD1DelayCnt;
|
||
29 U16 xdata uiOCD2DelayCnt;
|
||
30 U16 xdata uiOCCRcnt;
|
||
31 U16 xdata uiOCDRcnt;
|
||
32
|
||
33 /*************************************************************************************************
|
||
34 * 函数名: ProtectOV
|
||
35 * 参 数: 无
|
||
36 * 返回值: 无
|
||
37 * 描 述: 单节电池过压保护检测,过压后置位bOV为1
|
||
38 *************************************************************************************************/
|
||
39 void ProtectOV(void)
|
||
40 {
|
||
41 1 if(!(bOV||bAFE_OV))
|
||
42 1 {
|
||
43 2 if(uiCellVmax > E2uiOVvol)
|
||
44 2 {
|
||
45 3 if(++uiOVDelayCnt >= OV_DELAY_CNT)
|
||
46 3 {
|
||
47 4 bOV = 1;
|
||
48 4 bOVLock = 0;
|
||
49 4 uiOVDelayCnt = 0;
|
||
50 4 uiOVRDelayCnt = 0;
|
||
C51 COMPILER V9.01 PROTECT 02/07/2025 10:36:15 PAGE 2
|
||
|
||
51 4 }
|
||
52 3 }
|
||
53 2 else if(uiCellVmax < E2uiOVRvol)
|
||
54 2 {
|
||
55 3 uiOVDelayCnt = 0;
|
||
56 3 }
|
||
57 2 }
|
||
58 1 else if(!bOVLock)
|
||
59 1 {
|
||
60 2 if(uiCellVmax < E2uiOVRvol)
|
||
61 2 {
|
||
62 3 if(++uiOVRDelayCnt >= OVR_DELAY_CNT)
|
||
63 3 {
|
||
64 4 if(bChgerLock)
|
||
65 4 {
|
||
66 5 bOVLock = 1; //过压阈值恢复,但是还需检测负载释放释放
|
||
67 5 bChgerStartCheckFlg = 1; //开启充电器
|
||
68 5 }
|
||
69 4 else
|
||
70 4 {
|
||
71 5 bOV = 0;
|
||
72 5 bAFE_OV = 0;
|
||
73 5 AFEClrFlg();
|
||
74 5 }
|
||
75 4 uiOVDelayCnt = 0;
|
||
76 4 uiOVRDelayCnt = 0;
|
||
77 4 }
|
||
78 3 }
|
||
79 2 else if(uiCellVmax > E2uiOVvol)
|
||
80 2 {
|
||
81 3 uiOVRDelayCnt = 0;
|
||
82 3 }
|
||
83 2 }
|
||
84 1 }
|
||
85
|
||
86 /*************************************************************************************************
|
||
87 * 函数名: ProtectUV
|
||
88 * 参 数: 无
|
||
89 * 返回值: 无
|
||
90 * 描 述: 单节电芯欠压保护检测,保护后置位bUV为1
|
||
91 *************************************************************************************************/
|
||
92 void ProtectUV(void)
|
||
93 {
|
||
94 1 if(!bUV)
|
||
95 1 {
|
||
96 2 if(uiCellVmin < E2uiUVvol)
|
||
97 2 {
|
||
98 3 if(++uiUVDelayCnt >= UV_DELAY_CNT)
|
||
99 3 {
|
||
100 4 bUV = 1;
|
||
101 4 bUVLock = 0;
|
||
102 4 uiUVDelayCnt = 0;
|
||
103 4 uiUVRDelayCnt = 0;
|
||
104 4 }
|
||
105 3 }
|
||
106 2 else if(uiCellVmin > E2uiUVRvol)
|
||
107 2 {
|
||
108 3 uiUVDelayCnt = 0;
|
||
109 3 }
|
||
110 2 }
|
||
111 1 else if(!bUVLock)
|
||
112 1 {
|
||
C51 COMPILER V9.01 PROTECT 02/07/2025 10:36:15 PAGE 3
|
||
|
||
113 2 if(uiCellVmin > E2uiUVRvol)
|
||
114 2 {
|
||
115 3 if(++uiUVRDelayCnt >= UVR_DELAY_CNT)
|
||
116 3 {
|
||
117 4 if(bLoadLock) //如果支持负载锁定,则不立刻清UV标志,需要负载释放后再清零
|
||
118 4 {
|
||
119 5 bUVLock = 1; //欠压阈值恢复,但是还需检测负载释放释放
|
||
120 5 bLoadStartCheckFlg = 1; //开启负载检测
|
||
121 5 }
|
||
122 4 else
|
||
123 4 {
|
||
124 5 bUV = 0;
|
||
125 5 }
|
||
126 4 uiUVDelayCnt = 0;
|
||
127 4 uiUVRDelayCnt = 0;
|
||
128 4 }
|
||
129 3 }
|
||
130 2 else if(uiCellVmin < E2uiUVvol)
|
||
131 2 {
|
||
132 3 uiUVRDelayCnt = 0;
|
||
133 3 }
|
||
134 2 }
|
||
135 1 }
|
||
136
|
||
137 /*************************************************************************************************
|
||
138 * 函数名: ProtectOTC
|
||
139 * 参 数: 无
|
||
140 * 返回值: 无
|
||
141 * 描 述: 充电高温保护检测,保护后置位bOTC为1
|
||
142 *************************************************************************************************/
|
||
143 void ProtectOTC(void)
|
||
144 {
|
||
145 1 if(!bOTC)
|
||
146 1 {
|
||
147 2 if(uiTempeMax > E2uiTempOTC)
|
||
148 2 {
|
||
149 3 if(++uiOTCDelayCnt >= TEMPE_DELAY_CNT)
|
||
150 3 {
|
||
151 4 bOTC = 1;
|
||
152 4 uiOTCDelayCnt = 0;
|
||
153 4 uiOTCRDelayCnt = 0;
|
||
154 4 }
|
||
155 3 }
|
||
156 2 else if(uiTempeMax < E2uiTempOTCR)
|
||
157 2 {
|
||
158 3 uiOTCDelayCnt = 0;
|
||
159 3 }
|
||
160 2 }
|
||
161 1 else
|
||
162 1 {
|
||
163 2 if(uiTempeMax < E2uiTempOTCR)
|
||
164 2 {
|
||
165 3 if(++uiOTCRDelayCnt >= TEMPER_DELAY_CNT)
|
||
166 3 {
|
||
167 4 bOTC = 0;
|
||
168 4 uiOTCDelayCnt = 0;
|
||
169 4 uiOTCRDelayCnt = 0;
|
||
170 4 }
|
||
171 3 }
|
||
172 2 else if(uiTempeMax > E2uiTempOTC)
|
||
173 2 {
|
||
174 3 uiOTCRDelayCnt = 0;
|
||
C51 COMPILER V9.01 PROTECT 02/07/2025 10:36:15 PAGE 4
|
||
|
||
175 3 }
|
||
176 2 }
|
||
177 1 }
|
||
178
|
||
179
|
||
180 /*************************************************************************************************
|
||
181 * 函数名: ProtectUTC
|
||
182 * 参 数: 无
|
||
183 * 返回值: 无
|
||
184 * 描 述: 充电低温保护检测,保护后置位bUTC为1
|
||
185 *************************************************************************************************/
|
||
186 void ProtectUTC(void)
|
||
187 {
|
||
188 1 if(!bUTC)
|
||
189 1 {
|
||
190 2 if(uiTempeMin < E2uiTempUTC)
|
||
191 2 {
|
||
192 3 if(++uiUTCDelayCnt >= TEMPE_DELAY_CNT)
|
||
193 3 {
|
||
194 4 bUTC = 1;
|
||
195 4 uiUTCDelayCnt = 0;
|
||
196 4 uiUTCRDelayCnt = 0;
|
||
197 4 }
|
||
198 3 }
|
||
199 2 else if(uiTempeMin > E2uiTempUTCR)
|
||
200 2 {
|
||
201 3 uiUTCDelayCnt = 0;
|
||
202 3 }
|
||
203 2 }
|
||
204 1 else
|
||
205 1 {
|
||
206 2 if(uiTempeMin > E2uiTempUTCR)
|
||
207 2 {
|
||
208 3 if(++uiUTCRDelayCnt >= TEMPER_DELAY_CNT)
|
||
209 3 {
|
||
210 4 bUTC = 0;
|
||
211 4 uiUTCDelayCnt = 0;
|
||
212 4 uiUTCRDelayCnt = 0;
|
||
213 4 }
|
||
214 3 }
|
||
215 2 else if(uiTempeMin < E2uiTempUTC)
|
||
216 2 {
|
||
217 3 uiUTCRDelayCnt = 0;
|
||
218 3 }
|
||
219 2 }
|
||
220 1 }
|
||
221
|
||
222
|
||
223 /*************************************************************************************************
|
||
224 * 函数名: ProtectOTD
|
||
225 * 参 数: 无
|
||
226 * 返回值: 无
|
||
227 * 描 述: 放电高温保护检测,保护后置位bOTD为1
|
||
228 *************************************************************************************************/
|
||
229 void ProtectOTD(void)
|
||
230 {
|
||
231 1 if(!bOTD)
|
||
232 1 {
|
||
233 2 if(uiTempeMax > E2uiTempOTD)
|
||
234 2 {
|
||
235 3 if(++uiOTDDelayCnt >= TEMPE_DELAY_CNT)
|
||
236 3 {
|
||
C51 COMPILER V9.01 PROTECT 02/07/2025 10:36:15 PAGE 5
|
||
|
||
237 4 bOTD = 1;
|
||
238 4 uiOTDDelayCnt = 0;
|
||
239 4 uiOTDRDelayCnt = 0;
|
||
240 4 }
|
||
241 3 }
|
||
242 2 else if(uiTempeMax < E2uiTempOTDR)
|
||
243 2 {
|
||
244 3 uiOTDDelayCnt = 0;
|
||
245 3 }
|
||
246 2 }
|
||
247 1 else
|
||
248 1 {
|
||
249 2 if(uiTempeMax < E2uiTempOTDR)
|
||
250 2 {
|
||
251 3 if(++uiOTDRDelayCnt >= TEMPER_DELAY_CNT)
|
||
252 3 {
|
||
253 4 bOTD = 0;
|
||
254 4 uiOTDDelayCnt = 0;
|
||
255 4 uiOTDRDelayCnt = 0;
|
||
256 4 }
|
||
257 3 }
|
||
258 2 else if(uiTempeMax > E2uiTempOTD)
|
||
259 2 {
|
||
260 3 uiOTDRDelayCnt = 0;
|
||
261 3 }
|
||
262 2 }
|
||
263 1 }
|
||
264
|
||
265
|
||
266 /*************************************************************************************************
|
||
267 * 函数名: ProtectUTD
|
||
268 * 参 数: 无
|
||
269 * 返回值: 无
|
||
270 * 描 述: 放电低温保护检测,保护后置位bUTD为1
|
||
271 *************************************************************************************************/
|
||
272 void ProtectUTD(void)
|
||
273 {
|
||
274 1 if(!bUTD)
|
||
275 1 {
|
||
276 2 if(uiTempeMin < E2uiTempUTD)
|
||
277 2 {
|
||
278 3 if(++uiUTDDelayCnt >= TEMPE_DELAY_CNT)
|
||
279 3 {
|
||
280 4 bUTD = 1;
|
||
281 4 uiUTDDelayCnt = 0;
|
||
282 4 uiUTDRDelayCnt = 0;
|
||
283 4 }
|
||
284 3 }
|
||
285 2 else if(uiTempeMin > E2uiTempUTDR)
|
||
286 2 {
|
||
287 3 uiUTDDelayCnt = 0;
|
||
288 3 }
|
||
289 2 }
|
||
290 1 else
|
||
291 1 {
|
||
292 2 if(uiTempeMin > E2uiTempUTDR)
|
||
293 2 {
|
||
294 3 if(++uiUTDRDelayCnt >= TEMPER_DELAY_CNT)
|
||
295 3 {
|
||
296 4 bUTD = 0;
|
||
297 4 uiUTDDelayCnt = 0;
|
||
298 4 uiUTDRDelayCnt = 0;
|
||
C51 COMPILER V9.01 PROTECT 02/07/2025 10:36:15 PAGE 6
|
||
|
||
299 4 }
|
||
300 3 }
|
||
301 2 else if(uiTempeMin < E2uiTempUTD)
|
||
302 2 {
|
||
303 3 uiUTDRDelayCnt = 0;
|
||
304 3 }
|
||
305 2 }
|
||
306 1 }
|
||
307
|
||
308
|
||
309
|
||
310 /*************************************************************************************************
|
||
311 * 函数名: ProtectOCC
|
||
312 * 参 数: 无
|
||
313 * 返回值: 无
|
||
314 * 描 述: 充电过流保护检测,保护后置位bOCC为1
|
||
315 *************************************************************************************************/
|
||
316 void ProtectOCC(void)
|
||
317 {
|
||
318 1 if(!bOCC)
|
||
319 1 {
|
||
320 2 if(slCadcCurrent > E2slOCCCurrent)
|
||
321 2 {
|
||
322 3 if(++uiOCCDelayCnt >= OCC_DELAY_CNT)
|
||
323 3 {
|
||
324 4 bOCC = 1;
|
||
325 4 bChgerStartCheckFlg = 1; //设置充电器开始检测标志
|
||
326 4 uiOCCDelayCnt = 0;
|
||
327 4 }
|
||
328 3 }
|
||
329 2 else if(!bChgerChkingFlg)
|
||
330 2 {
|
||
331 3 if(uiOCCDelayCnt > 0)
|
||
332 3 {
|
||
333 4 uiOCCDelayCnt--;
|
||
334 4 }
|
||
335 3 }
|
||
336 2 }
|
||
337 1 }
|
||
338
|
||
339
|
||
340 /*************************************************************************************************
|
||
341 * 函数名: ProtectOCD1
|
||
342 * 参 数: 无
|
||
343 * 返回值: 无
|
||
344 * 描 述: 放电过流1保护检测,保护后置位bOCD1为1
|
||
345 *************************************************************************************************/
|
||
346 void ProtectOCD1(void)
|
||
347 {
|
||
348 1 if(!bOCD1)
|
||
349 1 {
|
||
350 2 if(slCadcCurrent < E2slOCD1Current)
|
||
351 2 {
|
||
352 3 if(++uiOCD1DelayCnt >= OCD1_DELAY_CNT)
|
||
353 3 {
|
||
354 4 uiOCD1DelayCnt = 0;
|
||
355 4 bOCD1 = 1;
|
||
356 4 bLoadStartCheckFlg = 1; //开启负载检测
|
||
357 4 }
|
||
358 3 }
|
||
359 2 else if(!bLoadChkingFlg)
|
||
360 2 {
|
||
C51 COMPILER V9.01 PROTECT 02/07/2025 10:36:15 PAGE 7
|
||
|
||
361 3 if(uiOCD1DelayCnt > 0)
|
||
362 3 {
|
||
363 4 uiOCD1DelayCnt--;
|
||
364 4 }
|
||
365 3 }
|
||
366 2 }
|
||
367 1 }
|
||
368
|
||
369
|
||
370 /*************************************************************************************************
|
||
371 * 函数名: ProtectOCD2
|
||
372 * 参 数: 无
|
||
373 * 返回值: 无
|
||
374 * 描 述: 放电过流2保护检测,保护后置位bOCD2为1
|
||
375 *************************************************************************************************/
|
||
376 void ProtectOCD2(void)
|
||
377 {
|
||
378 1 if(!bOCD2)
|
||
379 1 {
|
||
380 2 if(slCadcCurrent < E2slOCD2Current)
|
||
381 2 {
|
||
382 3 if(++uiOCD2DelayCnt > OCD2_DELAY_CNT)
|
||
383 3 {
|
||
384 4 uiOCD2DelayCnt = 0;
|
||
385 4 bOCD2 = 1;
|
||
386 4 bLoadStartCheckFlg = 1; //开启负载检测
|
||
387 4 }
|
||
388 3 }
|
||
389 2 else if(!bLoadChkingFlg)
|
||
390 2 {
|
||
391 3 if(uiOCD2DelayCnt > 0)
|
||
392 3 {
|
||
393 4 uiOCD2DelayCnt--;
|
||
394 4 }
|
||
395 3 }
|
||
396 2 }
|
||
397 1 }
|
||
398
|
||
399
|
||
400 /*************************************************************************************************
|
||
401 * 函数名: ProtectProcess
|
||
402 * 参 数: 无
|
||
403 * 返回值: 无
|
||
404 * 描 述: 各种保护检测
|
||
405 *************************************************************************************************/
|
||
406 void ProtectProcess(void)
|
||
407 {
|
||
408 1 if(!bPorSelfTestFlg) //如果是上电1s自检过程中,则不检测正常保护
|
||
409 1 {
|
||
410 2 ProtectOV(); //检测过压保护及其释放
|
||
411 2 ProtectUV(); //检测欠压保护及其释放
|
||
412 2
|
||
413 2 ProtectOTC(); //检测充电高温保护及其释放
|
||
414 2 ProtectUTC(); //检测充电低温保护及其释放
|
||
415 2 ProtectOTD(); //检测放电高温保护及其释放
|
||
416 2 ProtectUTD(); //检测放电低温保护及其释放
|
||
417 2
|
||
418 2 ProtectOCC(); //充电过流保护
|
||
419 2 ProtectOCD1(); //放电过流1保护
|
||
420 2 ProtectOCD2(); //放电过流2保护
|
||
421 2 }
|
||
422 1 }
|
||
C51 COMPILER V9.01 PROTECT 02/07/2025 10:36:15 PAGE 8
|
||
|
||
423
|
||
424
|
||
425 /*************************************************************************************************
|
||
426 * 函数名: ProtectOCRecover
|
||
427 * 参 数: 无
|
||
428 * 返回值: 无
|
||
429 * 描 述: 电流保护自恢复
|
||
430 *************************************************************************************************/
|
||
431 void ProtectOCRecover(void)
|
||
432 {
|
||
433 1 if(bOCRC_EN)
|
||
434 1 {
|
||
435 2 if(bOCD1 || bOCD2 || bAFE_SC)
|
||
436 2 {
|
||
437 3 if(++uiOCDRcnt >= OCDR_DELAY_CNT)
|
||
438 3 {
|
||
439 4 ucLoadRCnt = 0;
|
||
440 4 uiOCDRcnt = 0;
|
||
441 4 bOCD1 = 0;
|
||
442 4 bOCD2 = 0;
|
||
443 4 bLoadStartCheckFlg = 0;
|
||
444 4 bLoadChkingFlg = 0;
|
||
445 4 if(bAFE_SC)
|
||
446 4 {
|
||
447 5 bAFE_SC = 0;
|
||
448 5 AFEClrFlg();
|
||
449 5 }
|
||
450 4 }
|
||
451 3 }
|
||
452 2
|
||
453 2 if(bOCC)
|
||
454 2 {
|
||
455 3 if(++uiOCCRcnt > OCCR_DELAY_CNT)
|
||
456 3 {
|
||
457 4 uiOCCRcnt = 0;
|
||
458 4 bOCC = 0;
|
||
459 4 ucChgerRCnt = 0;
|
||
460 4 bChgerChkingFlg = 0;
|
||
461 4 }
|
||
462 3 }
|
||
463 2 }
|
||
464 1 }
|
||
465
|
||
|
||
|
||
MODULE INFORMATION: STATIC OVERLAYABLE
|
||
CODE SIZE = 1552 ----
|
||
CONSTANT SIZE = ---- ----
|
||
XDATA SIZE = 34 ----
|
||
PDATA SIZE = ---- ----
|
||
DATA SIZE = ---- ----
|
||
IDATA SIZE = ---- ----
|
||
BIT SIZE = 2 ----
|
||
END OF MODULE INFORMATION.
|
||
|
||
|
||
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|