ZDBMS/code_drv/Calibrate.c

176 lines
4.1 KiB
C
Raw Normal View History

2025-02-06 07:35:32 +00:00
/********************************************************************************
Copyright (C), Sinowealth Electronic. Ltd.
Author: Sino
Version: V0.0
Date: 2020/04/26
History:
V2.0 2020/04/26 Preliminary
********************************************************************************/
#include "Main.h"
BOOL bCaliFlg; //<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У׼<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ñ<EFBFBD>־
U16 xdata ulExtVPack;
S32 xdata slExtCur;
U16 xdata uiExtTemp1;
U16 xdata uiExtTemp2;
U8 xdata ucExtRTC[7];
U8 xdata ucExtcaliSwitch1;
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: CaliVoltage
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: У׼<EFBFBD>ܵ<EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>E2uiVPackGain<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*************************************************************************************************/
void CaliVoltage(void)
{
U8 i;
U16 VPackTemp = 0;
for(i=ucCellNumOffset; i<(ucCellNumOffset+ucCellNum); i++)
{
VPackTemp += AFE.uiCell[i];
}
E2uiVPackGain = (U32)CALIPACKVOL*VPackTemp/ulExtVPack;
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: CaliCurrentGain
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: У׼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>E2siCadcGain<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>
*************************************************************************************************/
void CaliCurrentGain(void)
{
S16 TempGain;
TempGain = (S32)CALICUR*(AFE.siCurr-E2siCadcOffset)/slExtCur;
if(TempGain != 0)
{
E2siCadcGain = TempGain;
}
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: CaliCurZero
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: У׼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*************************************************************************************************/
void CaliCurZero(void)
{
E2siCadcOffset = AFE.siCurr;
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: CaliTS1<EFBFBD><EFBFBD>CaliTS2
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: У׼<EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><EFBFBD>С<EFBFBD><EFBFBD>15<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У׼
*************************************************************************************************/
void CaliTS1(void)
{
S16 Tempe;
Tempe = uiExtTemp1 - CalcuTemp(AFE.uiTS[0]);
if(((Tempe-E2siTS0Offset)<150) && ((Tempe-E2siTS0Offset)>-150))
{
E2siTS0Offset = Tempe;
}
}
void CaliTS2(void)
{
S16 Tempe;
Tempe = uiExtTemp2 - CalcuTemp(AFE.uiTS[1]);
if(((Tempe-E2siTS1Offset)<150) && ((Tempe-E2siTS1Offset)>-150))
{
E2siTS1Offset = Tempe;
}
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: CaliRTCTime
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: У׼RTC
*************************************************************************************************/
void CaliRTCTime(void)
{
RTC.Second = ucExtRTC[0];
RTC.Minute = ucExtRTC[1];
RTC.Hour = ucExtRTC[2];
RTC.Date = ucExtRTC[3];
RTC.Month = ucExtRTC[4];
RTC.Year = ucExtRTC[5];
RTC.Week = ucExtRTC[6];
RTCModifyTime(&RTC);
bE2PProcessFlg = 1; //У׼RTC֮<43><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>RTC<54><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿEEP
bE2PBKRtc = 1;
}
/*************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: CaliProcess
* <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>ҪУ׼ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ı<EFBFBD>־<EFBFBD><EFBFBD>
У׼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󣬽<EFBFBD>У׼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>Flash
*************************************************************************************************/
void CaliProcess(void)
{
if(bCaliFlg)
{
bCaliFlg = 0;
if((ucExtcaliSwitch1 & 0x01) != 0) //У׼<D0A3>ܵ<EFBFBD>ѹ
{
CaliVoltage();
}
if((ucExtcaliSwitch1 & 0x10) != 0) //У׼<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
CaliCurrentGain();
}
if((ucExtcaliSwitch1 & 0x20) != 0) //У׼<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
CaliCurZero();
}
if((ucExtcaliSwitch1 & 0x04) != 0) //У׼TS1
{
CaliTS1();
}
if((ucExtcaliSwitch1 & 0x08) != 0) //У׼TS2
{
CaliTS2();
}
if((ucExtcaliSwitch1 & 0x80) != 0) //У׼RTC
{
CaliRTCTime();
}
ucExtcaliSwitch1 = 0;
bMcuFlashWrWaitFlg = 1; //<2F><><EFBFBD><EFBFBD>Flash<73><68><EFBFBD><EFBFBD>
bMcuFlashWrWaitCnt = MCU_FLASH_WATI_DELAY; //<2F><><EFBFBD><EFBFBD>д
}
}