C51 COMPILER V9.01 CALIBRATE 02/19/2025 10:42:27 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/19/2025 10:42:27 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/19/2025 10:42:27 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/19/2025 10:42:27 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)