差异
This commit is contained in:
406
user/Core/DP2201_D9V2_V5000_Compute.c
Normal file
406
user/Core/DP2201_D9V2_V5000_Compute.c
Normal file
@@ -0,0 +1,406 @@
|
||||
#include "../main/SystemInclude.h"
|
||||
|
||||
//##############################################################################
|
||||
#if(DP2201_CORE_V5000)
|
||||
//##############################################################################
|
||||
// for compute buffer
|
||||
u32 compareBaseCounter;
|
||||
u16 compareBaseValue;
|
||||
|
||||
//u16 VDUGXHigh, VDUGXRoom, VDUGXLow, sampleSwitchThreshold;
|
||||
float RhExtGain, RRExtGain;
|
||||
|
||||
|
||||
/**************************************************************************************/
|
||||
/**
|
||||
* @brief 电路计算参数初始化
|
||||
* @note
|
||||
* @warning
|
||||
*/
|
||||
void RHCircuitParameterInit(void)
|
||||
{
|
||||
// A type external gain res
|
||||
// RhExtGainRes = ReadShortParameterFromEEPROM(RH_GAINRES, RH_GAINRES_WIDTH, RH_GAINRES_DEFAULT);
|
||||
// RhExtGain = 1.0/(float)RhExtGainRes;
|
||||
|
||||
//RRExtGainRes = ReadShortParameterFromEEPROM(RR_GAINRES, RR_GAINRES_WIDTH, RR_GAINRES_DEFAULT);
|
||||
// RRExtGain = (float)RRExtGainRes;
|
||||
// RRExtGain *= (float)VREF_VDC;
|
||||
|
||||
//sampleSwitchThreshold = ReadShortParameterFromEEPROM(SAMPLE_THRESHOLD, SAMPLE_THRESHOLD_WIDTH, SAMPLE_THRESHOLD_DEFAULT);
|
||||
}
|
||||
|
||||
/**************************************************************************************/
|
||||
/**
|
||||
* @brief 校准零点
|
||||
* @note
|
||||
* @warning
|
||||
*/
|
||||
void CalibrateOffset(void)
|
||||
{
|
||||
tempL.Word[0] = voltageDetected[NIDX];
|
||||
offsetAir = WriteShortParameterToMemory(GET_WORD_ADDR(offsetAir));
|
||||
//tempL.Word[0] += 30;
|
||||
offsetGas = WriteShortParameterToMemory(GET_MBWORD_ADDR(offsetGas));
|
||||
|
||||
tempL.Word[0] = voltageDetected[VDUGX];
|
||||
offsetAirGainx = WriteShortParameterToMemory(GET_WORD_ADDR(offsetAirGainx));
|
||||
offsetGasGainx = WriteShortParameterToMemory(GET_WORD_ADDR(offsetGasGainx));
|
||||
}
|
||||
|
||||
/**************************************************************************************/
|
||||
/**
|
||||
* @brief 校准曲线前需要进行的操作:如校零及必要的参数保存等
|
||||
* @note
|
||||
* @warning
|
||||
*/
|
||||
void PreCalibrationParameterWriting(void)
|
||||
{
|
||||
//===========================================================================
|
||||
tempL.Word[0] = voltageDetected[NIDX];
|
||||
offsetAir = WriteShortParameterToMemory(GET_WORD_ADDR(offsetAir));
|
||||
//tempL.Word[0] += 30;
|
||||
offsetGas = WriteShortParameterToMemory(GAS_OFFSET);
|
||||
|
||||
tempL.Word[0] = voltageDetected[VDUGX];
|
||||
offsetAirGainx = WriteShortParameterToMemory(GET_WORD_ADDR(offsetAirGainx));
|
||||
offsetGasGainx = WriteShortParameterToMemory(GET_WORD_ADDR(offsetGasGainx));
|
||||
//---------------------------------------------------------------------------
|
||||
tempL.Word[0] = voltageDetected[RRRES];
|
||||
RRRoom = WriteShortParameterToMemory(GET_WORD_ADDR(RRRoom));
|
||||
|
||||
tempL.Word[0] = voltageDetected[IVHDX];
|
||||
VHHRoom = WriteShortParameterToMemory(GET_WORD_ADDR(VHHRoom));
|
||||
//---------------------------------------------------------------------------
|
||||
#ifndef TEMP_CORR_USE_TA
|
||||
#pragma message("[undefined] TEMP_CORR_USE_TA")
|
||||
#elif(TEMP_CORR_USE_TA)
|
||||
tempL.Word[0] = voltageDetected[TPCB];
|
||||
#else
|
||||
#ifndef ENABLE_GAS_RECOGNITION
|
||||
#pragma message("[undefined] ENABLE_GAS_RECOGNITION")
|
||||
#elif(ENABLE_GAS_RECOGNITION)
|
||||
tempL.Word[0] = voltageDetected[TGAS];
|
||||
#else
|
||||
tempL.Word[0] = voltageDetected[TPCB];
|
||||
#endif
|
||||
#endif
|
||||
//---------------------------------------------------------------------------
|
||||
calibTemperature = WriteShortParameterToMemory(GET_WORD_ADDR(calibTemperature));
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
currentMode.Bit.PreCalibEnd = 1;
|
||||
}
|
||||
|
||||
/**************************************************************************************/
|
||||
/**
|
||||
* @brief 高低温标定程序:低温参数保存功能
|
||||
* @note
|
||||
* @warning
|
||||
*/
|
||||
void LowTemperatureParameterWriting(void)
|
||||
{
|
||||
if(voltageDetected[TPCB] >= ENABLE_WRITE_TA_LOW)
|
||||
{
|
||||
// calibType = ('E'<<8)+'R';
|
||||
return;
|
||||
}
|
||||
|
||||
tempL.Word[0] = voltageDetected[TPCB];
|
||||
staticLowTemperature = WriteShortParameterToMemory(GET_WORD_ADDR(staticLowTemperature));
|
||||
|
||||
tempL.Word[0] = voltageDetected[RRRES];
|
||||
RRLow = WriteShortParameterToMemory(GET_WORD_ADDR(RRLow));
|
||||
|
||||
tempL.Word[0] = voltageDetected[IVHDX];
|
||||
VHHLow = WriteShortParameterToMemory(GET_WORD_ADDR(VHHLow));
|
||||
|
||||
// for AType FlowRate Compute
|
||||
//tempL.Word[0] = ReadDataFromMovingAverage(PDRH);
|
||||
//---------------------------------------------------------------------------
|
||||
tempL.Word[0] = voltageDetected[PORH];
|
||||
P0RhLow = WriteShortParameterToMemory(GET_WORD_ADDR(P0RhLow));
|
||||
|
||||
tempL.Word[0] = voltageDetected[RHRES];
|
||||
RHLowTa = WriteShortParameterToMemory(GET_WORD_ADDR(RHLowTa));
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
tempL.Word[0] = voltageDetected[NIDX];
|
||||
OffsetLow = WriteShortParameterToMemory(GET_WORD_ADDR(OffsetLow));
|
||||
|
||||
tempL.Word[0] = voltageDetected[VDUGX];
|
||||
VDUGXLow = WriteShortParameterToMemory(GET_WORD_ADDR(VDUGXLow));
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// tempL.Word[0] = ReadShortParameterFromMemory(ZEROCAL_STATE, 0);
|
||||
// tempL.Word[0] &= 0xff00;
|
||||
// tempL.Word[0] |= 'L';
|
||||
// WriteShortParameterToMemory(ZEROCAL_STATE);
|
||||
// currentMode.Bit.LowCalibEnd = 1;
|
||||
// if(tempL.Word[0] == INTCMD_CALIB_TEMP_END) EnterUserMode();
|
||||
|
||||
// tempL.Word[0] = ReadShortParameterFromMemory(SYS_COMMAND, SYS_COMMAND_WIDTH, 0);
|
||||
// if(tempL.Word[0] == INTCMD_ZERO_CALIB_MODE) EnterZeroCalibMode();
|
||||
// else EnterUserMode();
|
||||
|
||||
currentMode.Bit.LowCalibEnd = 1;
|
||||
if( currentMode.Bit.HighCalibEnd && currentMode.Bit.LowCalibEnd ) EnterUserMode();
|
||||
tempL.Word[0] = currentMode.Word;
|
||||
WriteShortParameterToMemory(SYS_COMMAND);
|
||||
|
||||
//calibType = ('L'<<8)+'D';
|
||||
// calibType &= 0xff00;
|
||||
// calibType |= 'L';
|
||||
//
|
||||
// zeroCalibType &= 0xff00;
|
||||
// zeroCalibType |= 'L';
|
||||
// currentMode.Bit.LowCalibEnd = 1;
|
||||
// if(zeroCalibType == (('H'<<8)+'L'))
|
||||
// {
|
||||
// tempL.Word[0] = 0;
|
||||
// // tempL.Word[0] = WriteShortParameterToMemory(GET_WORD_ADDR());
|
||||
// EnterUserMode();
|
||||
// }
|
||||
}
|
||||
|
||||
/**************************************************************************************/
|
||||
/**
|
||||
* @brief 高低温标定程序:高温参数保存功能
|
||||
* @note
|
||||
* @warning
|
||||
*/
|
||||
void HighTemperatureParameterWriting(void)
|
||||
{
|
||||
if(voltageDetected[TPCB] <= ENABLE_WRITE_TA_HIGH)
|
||||
{
|
||||
// calibType = ('E'<<8)+'R';
|
||||
return;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------------------------------
|
||||
tempL.Word[0] = voltageDetected[TPCB];
|
||||
staticHighTemperature = WriteShortParameterToMemory(GET_WORD_ADDR(staticHighTemperature));
|
||||
|
||||
tempL.Word[0] = voltageDetected[RRRES];
|
||||
RRHigh = WriteShortParameterToMemory(GET_WORD_ADDR(RRHigh));
|
||||
|
||||
tempL.Word[0] = voltageDetected[IVHDX];
|
||||
VHHHigh = WriteShortParameterToMemory(GET_WORD_ADDR(VHHHigh));
|
||||
|
||||
// for AType FlowRate Compute
|
||||
tempL.Word[0] = voltageDetected[PORH];
|
||||
P0RhHigh = WriteShortParameterToMemory(GET_WORD_ADDR(P0RhHigh));
|
||||
|
||||
tempL.Word[0] = voltageDetected[RHRES];
|
||||
RHHighTa = WriteShortParameterToMemory(GET_WORD_ADDR(RHHighTa));
|
||||
|
||||
//------------------------------------------------------------------------------------------------------
|
||||
tempL.Word[0] = voltageDetected[NIDX];
|
||||
OffsetHigh = WriteShortParameterToMemory(GET_WORD_ADDR(OffsetHigh));
|
||||
|
||||
tempL.Word[0] = voltageDetected[VDUGX];
|
||||
VDUGXHigh = WriteShortParameterToMemory(GET_WORD_ADDR(VDUGXHigh));
|
||||
//calibType = ('H'<<8)+'D';
|
||||
// calibType &= 0x00ff;
|
||||
// calibType |= ('H'<<8);
|
||||
// zeroCalibType &= 0x00ff;
|
||||
// zeroCalibType |= 'H'<<8;
|
||||
|
||||
//------------------------------------------------------------------------------------------------------
|
||||
// tempL.Word[0] = ReadShortParameterFromMemory(ZEROCAL_STATE, 0);
|
||||
// tempL.Word[0] &= 0x00ff;
|
||||
// tempL.Word[0] |= ('H'<<8);
|
||||
// WriteShortParameterToMemory(ZEROCAL_STATE);
|
||||
|
||||
currentMode.Bit.HighCalibEnd = 1;
|
||||
if( currentMode.Bit.HighCalibEnd && currentMode.Bit.LowCalibEnd ) EnterUserMode();
|
||||
tempL.Word[0] = currentMode.Word;
|
||||
WriteShortParameterToMemory(SYS_COMMAND);
|
||||
|
||||
// if(tempL.Word[0] == INTCMD_CALIB_TEMP_END) EnterUserMode();
|
||||
//currentMode.Bit.ZeroCalib
|
||||
// if(zeroCalibType == (('H'<<8)+'L'))
|
||||
// {
|
||||
// tempL.Word[0] = 0;
|
||||
// tempL.Word[0] = WriteShortParameterToMemory(GET_WORD_ADDR());
|
||||
// EnterUserMode();
|
||||
// }
|
||||
}
|
||||
|
||||
/**************************************************************************************/
|
||||
/**
|
||||
* @brief 高低温标定程序,判断温度是否稳定,是否可以进行参数保存
|
||||
* @note
|
||||
* @warning
|
||||
*/
|
||||
void SaveVHHAndNRHInTempretureMode(void)
|
||||
{
|
||||
if(!currentMode.Bit.ZeroCalib) return;
|
||||
if(samplingInterval > EXT_POWER_PERIOD_TIME) return;
|
||||
|
||||
if((voltageDetected[TPCB] > ENABLE_WRITE_TA_LOW) && (voltageDetected[TPCB] < ENABLE_WRITE_TA_HIGH))
|
||||
{
|
||||
compareBaseCounter = 0;
|
||||
compareBaseValue = voltageDetected[TPCB];
|
||||
return;
|
||||
}
|
||||
|
||||
compareBaseCounter += (u32)timePeriod;
|
||||
if((voltageDetected[TPCB] > compareBaseValue + ENABLE_WRITE_TA_SCALE) || (voltageDetected[TPCB] < compareBaseValue - ENABLE_WRITE_TA_SCALE))
|
||||
{
|
||||
compareBaseCounter = 0;
|
||||
compareBaseValue = voltageDetected[TPCB];
|
||||
}
|
||||
else
|
||||
{
|
||||
//compareBaseCounter += (unsigned long int)timePeriod;
|
||||
if(compareBaseCounter < (unsigned long int)EXIT_5400S) return; // 1hours // 1hours
|
||||
if(voltageDetected[TPCB] >= ENABLE_WRITE_TA_HIGH) HighTemperatureParameterWriting();
|
||||
else if(voltageDetected[TPCB] <= ENABLE_WRITE_TA_LOW) LowTemperatureParameterWriting();
|
||||
compareBaseCounter=0;
|
||||
}
|
||||
}
|
||||
|
||||
/**************************************************************************************/
|
||||
/**
|
||||
* @brief RH参数计算函数
|
||||
* @note
|
||||
* @warning
|
||||
*/
|
||||
void ComputeRHParameter(void)
|
||||
{
|
||||
float tmpIH, tmpRH;
|
||||
s32 tempCode;
|
||||
|
||||
// comput normal RH
|
||||
//==============================================================================
|
||||
// compute RH Voltage
|
||||
tempCode = (s32)voltageDetected[VRHX];
|
||||
tempCode -= 32768;
|
||||
tmpRH = (float)tempCode;
|
||||
tmpRH *= (float)VRH_VREF;
|
||||
voltageDetected[RHVOL] = (u16)tmpRH;
|
||||
|
||||
// compute IRH
|
||||
//===========================================================================
|
||||
tempCode = (s32)voltageDetected[IVHDX];
|
||||
tempCode -= 32768;
|
||||
tmpIH = (float)tempCode;
|
||||
tmpIH = tmpIH * (float)IRH_VREF + (float)IRH_VDC;
|
||||
tmpIH /= (float)IRH_RC;
|
||||
tmpRH = tmpRH /tmpIH - (float)IRH_RC;
|
||||
tmpRH *= 10;
|
||||
voltageDetected[RHRES] = (u16)tmpRH;
|
||||
|
||||
// compute RH power
|
||||
//===========================================================================
|
||||
tmpIH *= tmpIH;
|
||||
tmpIH *= tmpRH;
|
||||
voltageDetected[PORH] = (u16)tmpIH;
|
||||
|
||||
//==============================================================================
|
||||
//voltageDetected[PORH] = MovingAverage(computePower, 5, PORH);
|
||||
}
|
||||
|
||||
/**************************************************************************************/
|
||||
/**
|
||||
* @brief RR参数计算函数
|
||||
* @note
|
||||
* @warning
|
||||
*/
|
||||
void ComputeRRParameter(void)
|
||||
{
|
||||
float tmpVol;
|
||||
s32 tempCode;
|
||||
disable_interrupts();
|
||||
// comput normal (VRR)
|
||||
//==============================================================================
|
||||
tempCode = (s32)voltageDetected[VRRX];
|
||||
tempCode -= 32768;
|
||||
tmpVol = (float)tempCode;
|
||||
tmpVol *= (float)VRR_VREF;
|
||||
tmpVol += (float)VRR_VDC;
|
||||
voltageDetected[RRVOL] = (u16)(tmpVol + VCOM);
|
||||
|
||||
// comput normal RR resistance
|
||||
//==============================================================================
|
||||
tmpVol = VRR_BRIDGE_VOL/tmpVol - 1.0;
|
||||
tmpVol = VRR_RA/tmpVol;
|
||||
|
||||
voltageDetected[RRRES] = (u16)tmpVol;
|
||||
}
|
||||
|
||||
/**************************************************************************************/
|
||||
/**
|
||||
* @brief InterCurveProcess
|
||||
* @note
|
||||
* @warning
|
||||
*/
|
||||
void InterCurveProcess(void)
|
||||
{
|
||||
calibType = 0;
|
||||
if(tempL.Word[0] == INTCMD_PRESET_OFFSET) PreCalibrationParameterWriting();
|
||||
else if(tempL.Word[0] == INTCMD_CALIB_HTEMP) HighTemperatureParameterWriting();
|
||||
else if(tempL.Word[0] == INTCMD_CALIB_LTEMP) LowTemperatureParameterWriting();
|
||||
else if(tempL.Word[0] == INTCMD_CTYPE_CURVE) calibType = INTCMD_CTYPE_CURVE;
|
||||
else if(tempL.Word[0] == INT_2ND_CURVE_CMD) calibType = INT_2ND_CURVE_CMD;
|
||||
else if(tempL.Word[0] == INT_3RD_CURVE_CMD) calibType = INT_3RD_CURVE_CMD;
|
||||
else if(tempL.Word[0] == INTCMD_1ST_TABLE) calibType = INTCMD_1ST_TABLE;
|
||||
else if(tempL.Word[0] == INTCMD_2ND_TABLE) calibType = INTCMD_2ND_TABLE;
|
||||
else MBBuf.BusError = SLAVE_DEVICE_FAILURE;
|
||||
}
|
||||
/**************************************************************************************/
|
||||
/**
|
||||
* @brief InterControlProcess
|
||||
* @note
|
||||
* @warning
|
||||
*/
|
||||
void InterControlProcess(void)
|
||||
{
|
||||
if(tempL.Word[0] == INTCMD_USER_MODE) EnterUserMode();
|
||||
//else if(tempL.Word[0] == INTCMD_EXCALIB_MODE) EnterExtCalibMode(); // calibration mode
|
||||
else if(tempL.Word[0] == INTCMD_CALIB_MODE) EnterCalibMode(); // calibration mode
|
||||
else if(tempL.Word[0] == INTCMD_ZERO_CALIB_MODE) {
|
||||
EnterZeroCalibMode(); // calibration mode
|
||||
tempL.Word[0] = currentMode.Word;
|
||||
WriteShortParameterToMemory(SYS_COMMAND);
|
||||
tempL.Word[0] = INTCMD_ZERO_CALIB_MODE;
|
||||
}
|
||||
//------------------------------------------------------------------------
|
||||
else if(tempL.Word[0] == INTCMD_DEBUG_MODE) EnterDebugMode(); // debug mode
|
||||
else if(tempL.Word[0] == INTCMD_BATTERY_MODE) EnterBatteryMode(); // battery mode
|
||||
else if(tempL.Word[0] == INTCMD_GCF_TEST_MODE) EnterGcfTestMode(); // GCF 测试 mode
|
||||
//else if(tempL.Word[0] == INTCMD_SAVE_SETUP) SaveFactorySetting(); // Save the factory setting
|
||||
//else if(tempL.Word[0] == INTCMD_RESTORE) RestoreFactorySetting(); // Restore factory settings
|
||||
else if(tempL.Word[0] == INTCMD_RESET_CORR) DefaultDevCoef(); // Restore
|
||||
else MBBuf.BusError = SLAVE_DEVICE_FAILURE;
|
||||
}
|
||||
|
||||
/**************************************************************************************/
|
||||
/**
|
||||
* @brief InterControlProcess
|
||||
* @note
|
||||
* @warning
|
||||
*/
|
||||
void InterClearProcess(void)
|
||||
{
|
||||
if(tempL.Word[0] == ('B'<<8)+'J') ClearAlarmRecord();
|
||||
else if(tempL.Word[0] == ('L'<<8)+'S') ClearHistoryRecord();
|
||||
else if(tempL.Word[0] == ('R'<<8)+'Z') ClearDateRecord();
|
||||
}
|
||||
|
||||
/**************************************************************************************/
|
||||
/**
|
||||
* @brief InterControlProcess
|
||||
* @note
|
||||
* @warning
|
||||
*/
|
||||
void CalibSystemOffset(void )
|
||||
{
|
||||
tempL.Word[0] = voltageDetected[NIDX]; // ReadDataFromMovingAverage(NIDX);
|
||||
if(CMDComPassword == ('K'<<8)+'Q') offsetAir = WriteShortParameterToMemory(GET_WORD_ADDR(offsetAir));
|
||||
else if(CMDComPassword == ('J'<<8)+'Z') offsetGas = WriteShortParameterToMemory(GAS_OFFSET);
|
||||
}
|
||||
//##############################################################################
|
||||
#endif
|
||||
//##############################################################################
|
||||
Reference in New Issue
Block a user