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"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
U8 xdata ucChgingCheckCnt;
|
|
|
|
|
U8 xdata ucDsgingCheckCnt;
|
|
|
|
|
|
|
|
|
|
/*************************************************************************************************
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: CalcuTemp
|
|
|
|
|
* <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>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>*10
|
|
|
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD>25<EFBFBD>㣬<EFBFBD>¶ȱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪ2731+250
|
|
|
|
|
*************************************************************************************************/
|
|
|
|
|
U16 CalcuTemp(U16 getdata)
|
|
|
|
|
{
|
|
|
|
|
U8 i;
|
|
|
|
|
U16 Temperature;
|
|
|
|
|
U32 Tempcalcu;
|
|
|
|
|
|
|
|
|
|
#if (AFE_ID == 0x34)
|
|
|
|
|
Tempcalcu = (U32)getdata*REF_RES_VAL/(32768-getdata);
|
|
|
|
|
#else
|
|
|
|
|
Tempcalcu= (U32)getdata*REF_RES_VAL/(4096-getdata); //calculte the resistance value of 103AT
|
|
|
|
|
if(Tempcalcu > 10)
|
|
|
|
|
{
|
|
|
|
|
Tempcalcu -= 10;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
if(Tempcalcu >= NTC103AT[0]) //look up table to find the resieter correspond temp
|
|
|
|
|
{
|
|
|
|
|
Temperature = 2731+(TEMP_LOWER_LIMIT *10);
|
|
|
|
|
}
|
|
|
|
|
else if(Tempcalcu <= NTC103AT[NTC103AT_ARRAY_LEN-1])
|
|
|
|
|
{
|
|
|
|
|
Temperature = 2731+(TEMP_UPPER_LIMIT *10);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
i = ucTempeMiddle; //the ucTempeMiddle must be initialized in InitVar()
|
|
|
|
|
if(Tempcalcu > NTC103AT[i])
|
|
|
|
|
{
|
|
|
|
|
for(i=ucTempeMiddle-1; i>=0; i--)
|
|
|
|
|
{
|
|
|
|
|
if(Tempcalcu <= NTC103AT[i]) //NTC103AT[i+1]<resis<NTC103AT[i]
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
for(i=ucTempeMiddle+1; i<NTC103AT_ARRAY_LEN-1; i++)
|
|
|
|
|
{
|
|
|
|
|
if(Tempcalcu > NTC103AT[i]) //NTC103AT[i-1]<resis<NTC103AT[i]
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
i--;
|
|
|
|
|
}
|
|
|
|
|
ucTempeMiddle = i;
|
2025-02-08 07:27:19 +00:00
|
|
|
|
#if NTC_SL //SL<53><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
Temperature = (U16)(ucTempeMiddle-20)*10+(NTC103AT[i]-Tempcalcu)*10/(NTC103AT[i]-NTC103AT[i+1])+2731;
|
|
|
|
|
#else
|
|
|
|
|
Temperature = (U16)(ucTempeMiddle-50)*10+(NTC103AT[i]-Tempcalcu)*10/(NTC103AT[i]-NTC103AT[i+1])+2731;
|
|
|
|
|
#endif
|
2025-02-06 07:35:32 +00:00
|
|
|
|
}
|
|
|
|
|
return Temperature;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************************************
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AfeGetVol<EFBFBD><EFBFBD>AfeGetTempe
|
|
|
|
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
|
|
|
|
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>AFE<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD>¶Ȳɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*************************************************************************************************/
|
|
|
|
|
BOOL AfeGetVol(void)
|
|
|
|
|
{
|
|
|
|
|
U8 i;
|
|
|
|
|
BOOL Result=1;
|
|
|
|
|
|
|
|
|
|
for(i=ucCellNumOffset; i<(ucCellNum+ucCellNumOffset); i++)
|
|
|
|
|
{
|
|
|
|
|
if(!AFEReadReg(AFE_CELL1H+2*i, 2, (U8 xdata *)(&AFE.uiCell[i]))) //ͨ<><CDA8>TWI<57><49>ȡVADC<44>ɼ<EFBFBD><C9BC>ĵ<EFBFBD>ѹֵ()
|
|
|
|
|
{
|
|
|
|
|
Result = 0;
|
|
|
|
|
return Result;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return Result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL AfeGetTempe(void)
|
|
|
|
|
{
|
|
|
|
|
BOOL Result=1;
|
|
|
|
|
|
|
|
|
|
if(!AFEReadReg(AFE_TS1H, 2, (U8 xdata *)&AFE.uiTS[0]))
|
|
|
|
|
{
|
|
|
|
|
Result = 0;
|
|
|
|
|
}
|
|
|
|
|
if(!AFEReadReg(AFE_TS2H, 2, (U8 xdata *)&AFE.uiTS[1]))
|
|
|
|
|
{
|
|
|
|
|
Result = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(!AFEReadReg(AFE_TEMP1H, 2, (U8 xdata *)&AFE.uiICTempe[0]))
|
|
|
|
|
{
|
|
|
|
|
Result = 0;
|
|
|
|
|
}
|
|
|
|
|
if(ucCellNum > 5) //6~10<31><30>Ӧ<EFBFBD><D3A6>ʱ
|
|
|
|
|
{
|
|
|
|
|
if(!AFEReadReg(AFE_TEMP2H, 2, (U8 xdata *)&AFE.uiICTempe[1]))
|
|
|
|
|
{
|
|
|
|
|
Result = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return Result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************************************
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AfeCalcuTempe
|
|
|
|
|
* <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>uiTempeMax<EFBFBD><EFBFBD>uiTempeMin
|
|
|
|
|
*************************************************************************************************/
|
|
|
|
|
void AfeCalcuTempe(void)
|
|
|
|
|
{
|
|
|
|
|
U16 TempeData;
|
|
|
|
|
|
|
|
|
|
if(AfeGetTempe())
|
|
|
|
|
{
|
|
|
|
|
TempeData = CalcuTemp(AFE.uiTS[0]) + E2siTS0Offset; //<2F><><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD>¶<EFBFBD>1
|
|
|
|
|
#if (UART0_DEFINE != 0)
|
|
|
|
|
IrqUart0Dis();
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART1_DEFINE != 0)
|
|
|
|
|
IrqUart1Dis();
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART2_DEFINE != 0)
|
|
|
|
|
IrqUart2Dis();
|
|
|
|
|
#endif
|
|
|
|
|
Info.uiTS[0] = TempeData;
|
|
|
|
|
#if (UART0_DEFINE != 0)
|
|
|
|
|
IrqUart0En(); //<2F><><EFBFBD><EFBFBD>uart0<74>ж<EFBFBD>
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART1_DEFINE != 0)
|
|
|
|
|
IrqUart1En(); //<2F><><EFBFBD><EFBFBD>uart1<74>ж<EFBFBD>
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART2_DEFINE != 0)
|
|
|
|
|
IrqUart2En(); //<2F><>ʼ<EFBFBD><CABC>UART2<54>ж<EFBFBD>ʹ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD>ʹ<EFBFBD><CAB9>UARTģ<54><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
|
|
|
|
|
#endif
|
|
|
|
|
TempeData = (U32)AFE.uiICTempe[0]*17/10+31; //<2F><><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2>¶<EFBFBD>1
|
|
|
|
|
#if (UART0_DEFINE != 0)
|
|
|
|
|
IrqUart0Dis();
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART1_DEFINE != 0)
|
|
|
|
|
IrqUart1Dis();
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART2_DEFINE != 0)
|
|
|
|
|
IrqUart2Dis();
|
|
|
|
|
#endif
|
|
|
|
|
Info.uiICTempe[0] = TempeData;
|
|
|
|
|
|
|
|
|
|
#if (UART0_DEFINE != 0)
|
|
|
|
|
IrqUart0En(); //<2F><><EFBFBD><EFBFBD>uart0<74>ж<EFBFBD>
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART1_DEFINE != 0)
|
|
|
|
|
IrqUart1En(); //<2F><><EFBFBD><EFBFBD>uart1<74>ж<EFBFBD>
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART2_DEFINE != 0)
|
|
|
|
|
IrqUart2En(); //<2F><>ʼ<EFBFBD><CABC>UART2<54>ж<EFBFBD>ʹ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD>ʹ<EFBFBD><CAB9>UARTģ<54><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
if(ucCellNum > 5) //6~10<31><30>Ӧ<EFBFBD><D3A6>ʱ
|
|
|
|
|
{
|
|
|
|
|
TempeData = (U32)AFE.uiICTempe[1]*17/10+31; //<2F><><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2>¶<EFBFBD>2
|
|
|
|
|
#if (UART0_DEFINE != 0)
|
|
|
|
|
IrqUart0Dis();
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART1_DEFINE != 0)
|
|
|
|
|
IrqUart1Dis();
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART2_DEFINE != 0)
|
|
|
|
|
IrqUart2Dis();
|
|
|
|
|
#endif
|
|
|
|
|
Info.uiICTempe[1] = TempeData;
|
|
|
|
|
#if (UART0_DEFINE != 0)
|
|
|
|
|
IrqUart0En(); //<2F><><EFBFBD><EFBFBD>uart0<74>ж<EFBFBD>
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART1_DEFINE != 0)
|
|
|
|
|
IrqUart1En(); //<2F><><EFBFBD><EFBFBD>uart1<74>ж<EFBFBD>
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART2_DEFINE != 0)
|
|
|
|
|
IrqUart2En(); //<2F><>ʼ<EFBFBD><CABC>UART2<54>ж<EFBFBD>ʹ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD>ʹ<EFBFBD><CAB9>UARTģ<54><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
uiTempeMin = Info.uiTS[0];
|
|
|
|
|
uiTempeMax = Info.uiTS[0];
|
|
|
|
|
if(bTempNum)
|
|
|
|
|
{
|
|
|
|
|
TempeData = CalcuTemp(AFE.uiTS[1]) + E2siTS1Offset; //<2F><><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD>¶<EFBFBD>2
|
|
|
|
|
#if (UART0_DEFINE != 0)
|
|
|
|
|
IrqUart0Dis();
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART1_DEFINE != 0)
|
|
|
|
|
IrqUart1Dis();
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART2_DEFINE != 0)
|
|
|
|
|
IrqUart2Dis();
|
|
|
|
|
#endif
|
|
|
|
|
Info.uiTS[1] = TempeData;
|
|
|
|
|
#if (UART0_DEFINE != 0)
|
|
|
|
|
IrqUart0En(); //<2F><><EFBFBD><EFBFBD>uart0<74>ж<EFBFBD>
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART1_DEFINE != 0)
|
|
|
|
|
IrqUart1En(); //<2F><><EFBFBD><EFBFBD>uart1<74>ж<EFBFBD>
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART2_DEFINE != 0)
|
|
|
|
|
IrqUart2En(); //<2F><>ʼ<EFBFBD><CABC>UART2<54>ж<EFBFBD>ʹ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD>ʹ<EFBFBD><CAB9>UARTģ<54><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
if(TempeData < uiTempeMin)
|
|
|
|
|
{
|
|
|
|
|
uiTempeMin = TempeData;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
uiTempeMax = TempeData;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************************************
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AfeCalcuVol
|
|
|
|
|
* <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>СֵuiVadcVmax<EFBFBD><EFBFBD>uiVadcVmin<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|
|
|
|
<EFBFBD><EFBFBD>û<EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><EFBFBD><EFBFBD>uiCellVmax<EFBFBD><EFBFBD>uiCellVmin<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|
|
|
|
*************************************************************************************************/
|
|
|
|
|
void AfeCalcuVol(void)
|
|
|
|
|
{
|
|
|
|
|
U8 i;
|
|
|
|
|
U32 TempPackVol=0, TempCellVol=0;
|
|
|
|
|
uiVadcVmax = 0;
|
|
|
|
|
uiVadcVmin = 6000;
|
|
|
|
|
|
|
|
|
|
if(AfeGetVol())
|
|
|
|
|
{
|
|
|
|
|
for(i=ucCellNumOffset; i<(ucCellNum+ucCellNumOffset); i++)
|
|
|
|
|
{
|
|
|
|
|
TempCellVol = (U32)AFE.uiCell[i]*CALIVOL/E2uiVPackGain;
|
|
|
|
|
|
|
|
|
|
if(TempCellVol > uiVadcVmax) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ&<26><>Сֵ
|
|
|
|
|
{
|
|
|
|
|
uiVadcVmax = TempCellVol;
|
|
|
|
|
}
|
|
|
|
|
if(TempCellVol < uiVadcVmin)
|
|
|
|
|
{
|
|
|
|
|
uiVadcVmin = TempCellVol;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(!bBalancingFlg) //if bCellOpenDecFlag this data will throw away
|
|
|
|
|
{
|
|
|
|
|
#if (UART0_DEFINE != 0)
|
|
|
|
|
IrqUart0Dis();
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART1_DEFINE != 0)
|
|
|
|
|
IrqUart1Dis();
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART2_DEFINE != 0)
|
|
|
|
|
IrqUart2Dis();
|
|
|
|
|
#endif
|
|
|
|
|
Info.uiVCell[i] = TempCellVol;
|
|
|
|
|
#if (UART0_DEFINE != 0)
|
|
|
|
|
IrqUart0En(); //<2F><><EFBFBD><EFBFBD>uart0<74>ж<EFBFBD>
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART1_DEFINE != 0)
|
|
|
|
|
IrqUart1En(); //<2F><><EFBFBD><EFBFBD>uart1<74>ж<EFBFBD>
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART2_DEFINE != 0)
|
|
|
|
|
IrqUart2En(); //<2F><>ʼ<EFBFBD><CABC>UART2<54>ж<EFBFBD>ʹ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD>ʹ<EFBFBD><CAB9>UARTģ<54><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
|
|
|
|
|
#endif
|
|
|
|
|
TempPackVol += TempCellVol;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(!bBalancingFlg)
|
|
|
|
|
{
|
|
|
|
|
uiCellVmax = uiVadcVmax;
|
|
|
|
|
uiCellVmin = uiVadcVmin;
|
|
|
|
|
|
|
|
|
|
#if (UART0_DEFINE != 0)
|
|
|
|
|
IrqUart0Dis();
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART1_DEFINE != 0)
|
|
|
|
|
IrqUart1Dis();
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART2_DEFINE != 0)
|
|
|
|
|
IrqUart2Dis();
|
|
|
|
|
#endif
|
|
|
|
|
Info.ulVoltage = TempPackVol; //Calculate the total voltage
|
|
|
|
|
#if (UART0_DEFINE != 0)
|
|
|
|
|
IrqUart0En(); //<2F><><EFBFBD><EFBFBD>uart0<74>ж<EFBFBD>
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART1_DEFINE != 0)
|
|
|
|
|
IrqUart1En(); //<2F><><EFBFBD><EFBFBD>uart1<74>ж<EFBFBD>
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART2_DEFINE != 0)
|
|
|
|
|
IrqUart2En(); //<2F><>ʼ<EFBFBD><CABC>UART2<54>ж<EFBFBD>ʹ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD>ʹ<EFBFBD><CAB9>UARTģ<54><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************************************
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: CurTempOffset
|
|
|
|
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
|
|
|
|
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>ͬоƬ<EFBFBD>¶<EFBFBD><EFBFBD><EFBFBD>ADC<EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
*************************************************************************************************/
|
|
|
|
|
S16 code siCurTempOffset[2][13]=
|
|
|
|
|
{ /**0****1****2****3***4***5***6***7***8***9**10**11**12**/
|
|
|
|
|
{-40, -30, -20, -10, 0, 10, 25, 35, 45, 55, 65, 75, 85},
|
|
|
|
|
{ -5, -4, -3, -2, -1, -1, 0, 1, 1, 2, 3, 4, 5},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/*************************************************************************************************
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: OffsetCalculate()
|
|
|
|
|
* <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>0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶ȶ<EFBFBD>ADC<EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><EFBFBD>
|
|
|
|
|
*************************************************************************************************/
|
|
|
|
|
S16 OffsetCalculate(void)
|
|
|
|
|
{
|
|
|
|
|
S16 xdata siCadcTempOffset=0; //20220620
|
|
|
|
|
U8 xdata i;
|
|
|
|
|
|
|
|
|
|
for(i=0; i<12; i++)
|
|
|
|
|
{
|
|
|
|
|
if(Info.uiICTempe[0] <= (((S32)siCurTempOffset[0][i] + siCurTempOffset[0][i+1]) / 2 * 10 + 2731))
|
|
|
|
|
{
|
|
|
|
|
siCadcTempOffset = siCurTempOffset[1][i];
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return siCadcTempOffset;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*************************************************************************************************
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AfeCalcuCurr
|
|
|
|
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
|
|
|
|
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>CADC<EFBFBD>ɼ<EFBFBD><EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*************************************************************************************************/
|
|
|
|
|
void AfeCalcuCurr(void)
|
|
|
|
|
{
|
|
|
|
|
U8 i;
|
|
|
|
|
S32 Tempdata=0;
|
|
|
|
|
|
|
|
|
|
AFEReadReg(AFE_CURH, 2, (U8 xdata *)&AFE.siCurr); //ͨ<><CDA8>TWI<57><49>ȡCADC<44>ɼ<EFBFBD><C9BC>ĵ<EFBFBD><C4B5><EFBFBD>ֵ
|
|
|
|
|
|
|
|
|
|
if((AFE.siCurr&0x1000) != 0) //<2F><><EFBFBD><EFBFBD>bit12<31>ж<EFBFBD><D0B6>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>(<28>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ֵ)<29><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ֵ<EFBFBD><D6B5>λ<EFBFBD><CEBB>0
|
|
|
|
|
{
|
|
|
|
|
AFE.siCurr|=0xE000;
|
|
|
|
|
}
|
|
|
|
|
slCadcCurrent = (S32)CALICUR*(AFE.siCurr-E2siCadcOffset+OffsetCalculate())/E2siCadcGain;
|
|
|
|
|
|
|
|
|
|
slCadcCurBuf[ucCadcCnt] = slCadcCurrent; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD>16<31>ε<EFBFBD><CEB5><EFBFBD>ȡƽ<C8A1><C6BD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
if(++ucCadcCnt >= 16)
|
|
|
|
|
{
|
|
|
|
|
ucCadcCnt = 0;
|
|
|
|
|
}
|
|
|
|
|
for(i=0; i<16; i++)
|
|
|
|
|
{
|
|
|
|
|
Tempdata += slCadcCurBuf[i];
|
|
|
|
|
}
|
|
|
|
|
slCadcCurAverage = Tempdata/16;
|
|
|
|
|
|
|
|
|
|
bDSGING = 0; //<2F><><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ŵ<EFBFBD>״̬
|
|
|
|
|
bCHGING = 0;
|
|
|
|
|
if(slCadcCurAverage < (-E2siDfilterCur))
|
|
|
|
|
{
|
|
|
|
|
if(++ucDsgingCheckCnt >= TIME_50MS_500MS) //<2F><><EFBFBD>ŵ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ10*50mS
|
|
|
|
|
{
|
|
|
|
|
ucDsgingCheckCnt = TIME_50MS_500MS;
|
|
|
|
|
bDSGING = 1;
|
|
|
|
|
#if (UART0_DEFINE != 0)
|
|
|
|
|
IrqUart0Dis();
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART1_DEFINE != 0)
|
|
|
|
|
IrqUart1Dis();
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART2_DEFINE != 0)
|
|
|
|
|
IrqUart2Dis();
|
|
|
|
|
#endif
|
|
|
|
|
Info.slCurr = slCadcCurAverage;
|
|
|
|
|
#if (UART0_DEFINE != 0)
|
|
|
|
|
IrqUart0En(); //<2F><><EFBFBD><EFBFBD>uart0<74>ж<EFBFBD>
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART1_DEFINE != 0)
|
|
|
|
|
IrqUart1En(); //<2F><><EFBFBD><EFBFBD>uart1<74>ж<EFBFBD>
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART2_DEFINE != 0)
|
|
|
|
|
IrqUart2En(); //<2F><>ʼ<EFBFBD><CABC>UART2<54>ж<EFBFBD>ʹ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD>ʹ<EFBFBD><CAB9>UARTģ<54><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(slCadcCurAverage > E2siDfilterCur)
|
|
|
|
|
{
|
|
|
|
|
if(++ucChgingCheckCnt >= TIME_50MS_500MS) //<2F><><EFBFBD>ŵ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ10*50mS
|
|
|
|
|
{
|
|
|
|
|
ucChgingCheckCnt = TIME_50MS_500MS;
|
|
|
|
|
bCHGING = 1;
|
|
|
|
|
McuPWM2Set(4000, 100);
|
|
|
|
|
#if (UART0_DEFINE != 0)
|
|
|
|
|
IrqUart0Dis();
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART1_DEFINE != 0)
|
|
|
|
|
IrqUart1Dis();
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART2_DEFINE != 0)
|
|
|
|
|
IrqUart2Dis();
|
|
|
|
|
#endif
|
|
|
|
|
Info.slCurr = slCadcCurAverage;
|
|
|
|
|
#if (UART0_DEFINE != 0)
|
|
|
|
|
IrqUart0En(); //<2F><><EFBFBD><EFBFBD>uart0<74>ж<EFBFBD>
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART1_DEFINE != 0)
|
|
|
|
|
IrqUart1En(); //<2F><><EFBFBD><EFBFBD>uart1<74>ж<EFBFBD>
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART2_DEFINE != 0)
|
|
|
|
|
IrqUart2En(); //<2F><>ʼ<EFBFBD><CABC>UART2<54>ж<EFBFBD>ʹ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD>ʹ<EFBFBD><CAB9>UARTģ<54><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#if (UART0_DEFINE != 0)
|
|
|
|
|
IrqUart0Dis();
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART1_DEFINE != 0)
|
|
|
|
|
IrqUart1Dis();
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART2_DEFINE != 0)
|
|
|
|
|
IrqUart2Dis();
|
|
|
|
|
#endif
|
|
|
|
|
Info.slCurr = 0;
|
|
|
|
|
#if (UART0_DEFINE != 0)
|
|
|
|
|
IrqUart0En(); //<2F><><EFBFBD><EFBFBD>uart0<74>ж<EFBFBD>
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART1_DEFINE != 0)
|
|
|
|
|
IrqUart1En(); //<2F><><EFBFBD><EFBFBD>uart1<74>ж<EFBFBD>
|
|
|
|
|
#endif
|
|
|
|
|
#if (UART2_DEFINE != 0)
|
|
|
|
|
IrqUart2En(); //<2F><>ʼ<EFBFBD><CABC>UART2<54>ж<EFBFBD>ʹ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD>ʹ<EFBFBD><CAB9>UARTģ<54><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************************************
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: AFEInfoProcess
|
|
|
|
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ: <EFBFBD><EFBFBD>
|
|
|
|
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: ÿ50mS<EFBFBD><EFBFBD>ȡAFE<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 AFEInfoProcess(void)
|
|
|
|
|
{
|
|
|
|
|
AFERdFlg();
|
|
|
|
|
|
|
|
|
|
bVADCFlg = 0;
|
|
|
|
|
AfeCalcuVol();
|
|
|
|
|
AfeCalcuTempe();
|
|
|
|
|
|
|
|
|
|
if(bCADCFlg) //<2F><>CADCת<43><D7AA><EFBFBD><EFBFBD><EFBFBD>ɺŶ<F3A3ACB2>ȡAFE<46><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
bCADCFlg = 0;
|
|
|
|
|
AfeCalcuCurr();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|