ZDBMS/output/Calibrate.lst

208 lines
9.0 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

C51 COMPILER V9.01 CALIBRATE 02/08/2025 15:18:20 PAGE 1
C51 COMPILER V9.01, COMPILATION OF MODULE CALIBRATE
OBJECT MODULE PLACED IN .\output\Calibrate.obj
COMPILER INVOKED BY: D:\Tool\Keil\C51\BIN\C51.EXE code_drv\Calibrate.c LARGE OPTIMIZE(7,SIZE) REGFILE(.\output\MCUCore_L
-oad.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\Calibrate.lst) OBJECT(.\output
-\Calibrate.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 BOOL bCaliFlg; //上位机发送校准命令后置位该标志
13 U16 xdata ulExtVPack;
14 S32 xdata slExtCur;
15 U16 xdata uiExtTemp1;
16 U16 xdata uiExtTemp2;
17 U8 xdata ucExtRTC[7];
18 U8 xdata ucExtcaliSwitch1;
19
20 /*************************************************************************************************
21 * 函数名: CaliVoltage
22 * 参 数: 无
23 * 返回值: 无
24 * 描 述: 校准总电压更新E2uiVPackGain增益
25 *************************************************************************************************/
26 void CaliVoltage(void)
27 {
28 1 U8 i;
29 1 U16 VPackTemp = 0;
30 1
31 1 for(i=ucCellNumOffset; i<(ucCellNumOffset+ucCellNum); i++)
32 1 {
33 2 VPackTemp += AFE.uiCell[i];
34 2 }
35 1
36 1 E2uiVPackGain = (U32)CALIPACKVOL*VPackTemp/ulExtVPack;
37 1 }
38
39
40 /*************************************************************************************************
41 * 函数名: CaliCurrentGain
42 * 参 数: 无
43 * 返回值: 无
44 * 描 述: 校准电流增益E2siCadcGain连续两次采集的电流求平均后再校准更新
45 *************************************************************************************************/
46 void CaliCurrentGain(void)
47 {
48 1 S16 TempGain;
49 1
50 1 TempGain = (S32)CALICUR*(AFE.siCurr-E2siCadcOffset)/slExtCur;
51 1 if(TempGain != 0)
52 1 {
C51 COMPILER V9.01 CALIBRATE 02/08/2025 15:18:20 PAGE 2
53 2 E2siCadcGain = TempGain;
54 2 }
55 1 }
56
57
58 /*************************************************************************************************
59 * 函数名: CaliCurZero
60 * 参 数: 无
61 * 返回值: 无
62 * 描 述: 校准零电流
63 *************************************************************************************************/
64 void CaliCurZero(void)
65 {
66 1 E2siCadcOffset = AFE.siCurr;
67 1 }
68
69
70 /*************************************************************************************************
71 * 函数名: CaliTS1、CaliTS2
72 * 参 数: 无
73 * 返回值: 无
74 * 描 述: 校准温度温度偏差小于15℃才允许校准
75 *************************************************************************************************/
76 void CaliTS1(void)
77 {
78 1 S16 Tempe;
79 1
80 1 Tempe = uiExtTemp1 - CalcuTemp(AFE.uiTS[0]);
81 1 if(((Tempe-E2siTS0Offset)<150) && ((Tempe-E2siTS0Offset)>-150))
82 1 {
83 2 E2siTS0Offset = Tempe;
84 2 }
85 1 }
86
87 void CaliTS2(void)
88 {
89 1 S16 Tempe;
90 1
91 1 Tempe = uiExtTemp2 - CalcuTemp(AFE.uiTS[1]);
92 1 if(((Tempe-E2siTS1Offset)<150) && ((Tempe-E2siTS1Offset)>-150))
93 1 {
94 2 E2siTS1Offset = Tempe;
95 2 }
96 1 }
97
98
99
100 /*************************************************************************************************
101 * 函数名: CaliRTCTime
102 * 参 数: 无
103 * 返回值: 无
104 * 描 述: 校准RTC
105 *************************************************************************************************/
106 void CaliRTCTime(void)
107 {
108 1 RTC.Second = ucExtRTC[0];
109 1 RTC.Minute = ucExtRTC[1];
110 1 RTC.Hour = ucExtRTC[2];
111 1 RTC.Date = ucExtRTC[3];
112 1 RTC.Month = ucExtRTC[4];
113 1 RTC.Year = ucExtRTC[5];
114 1 RTC.Week = ucExtRTC[6];
C51 COMPILER V9.01 CALIBRATE 02/08/2025 15:18:20 PAGE 3
115 1
116 1 RTCModifyTime(&RTC);
117 1
118 1 bE2PProcessFlg = 1; //校准RTC之后需要保存RTC数据至外部EEP
119 1 bE2PBKRtc = 1;
120 1 }
121
122
123
124 /*************************************************************************************************
125 * 函数名: CaliProcess
126 * 参 数: 无
127 * 返回值: 无
128 * 描 述: 处理校准,通讯中断会置位当前需要校准模块对应的标志。
129 校准结束后将校准参数写入Flash
130 *************************************************************************************************/
131 void CaliProcess(void)
132 {
133 1 if(bCaliFlg)
134 1 {
135 2 bCaliFlg = 0;
136 2
137 2 if((ucExtcaliSwitch1 & 0x01) != 0) //校准总电压
138 2 {
139 3 CaliVoltage();
140 3 }
141 2
142 2 if((ucExtcaliSwitch1 & 0x10) != 0) //校准电流增益
143 2 {
144 3 CaliCurrentGain();
145 3 }
146 2
147 2 if((ucExtcaliSwitch1 & 0x20) != 0) //校准零电流
148 2 {
149 3 CaliCurZero();
150 3 }
151 2
152 2 if((ucExtcaliSwitch1 & 0x04) != 0) //校准TS1
153 2 {
154 3 CaliTS1();
155 3 }
156 2
157 2 if((ucExtcaliSwitch1 & 0x08) != 0) //校准TS2
158 2 {
159 3 CaliTS2();
160 3 }
161 2
162 2 if((ucExtcaliSwitch1 & 0x80) != 0) //校准RTC
163 2 {
164 3 CaliRTCTime();
165 3 }
166 2
167 2 ucExtcaliSwitch1 = 0;
168 2 bMcuFlashWrWaitFlg = 1; //更新Flash参数
169 2 bMcuFlashWrWaitCnt = MCU_FLASH_WATI_DELAY; //立即写
170 2 }
171 1 }
172
173
174
175
C51 COMPILER V9.01 CALIBRATE 02/08/2025 15:18:20 PAGE 4
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 469 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 18 2
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)