NULL
This commit is contained in:
136
user/Compute/ATypeFlowRate.c
Executable file
136
user/Compute/ATypeFlowRate.c
Executable file
@@ -0,0 +1,136 @@
|
||||
#include "../main/SystemInclude.h"
|
||||
|
||||
unsigned short P0RhLow, P0RhHigh;
|
||||
float PHeater, P0Heater, A0Heater, B0Heater;
|
||||
unsigned short switchFIndex, ATypeIndexGain, GDCFactorAType;
|
||||
|
||||
/******************************************************************************/
|
||||
void ComputeABParameter(void)
|
||||
{
|
||||
float tempH, tempL;
|
||||
|
||||
// compute A0 AND b
|
||||
// P0_L = A*(1 + B*T0_L)*(TH_L - T0_L) --> 100 * P0_L = A*(10 + B*T0_L)*(TH_L - T0_L)
|
||||
// P0_H = A*(1 + B*T0_H)*(TH_H - T0_H)
|
||||
//---------------------------------------------------------------------------
|
||||
// <20><>H = TH_H - T0_H,
|
||||
// <20><>L = TH_L - T0_L
|
||||
// B = (P0_H * <20><>L - P0_L * <20><>H)/(P0_L * <20><>H * T0_H - P0_H * <20><>L * T0_L)
|
||||
//---------------------------------------------------------------------------
|
||||
// A = P0_L/( (1 + B * TO_L) * (TH_L - TO_L))
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// compute B
|
||||
// P0_H * <20><>L
|
||||
tmpSLA = (unsigned long int)ComputeRHTemperature(NRHLow);
|
||||
tmpSLA -= (unsigned long int)staticLowTemperature;
|
||||
tmpSLB = tmpSLA;
|
||||
tempH = (float)P0RhHigh;
|
||||
tempH *= (float)tmpSLA;
|
||||
|
||||
// P0_L * <20><>H
|
||||
tmpSLA = (unsigned long int)ComputeRHTemperature(NRHHigh);
|
||||
tmpSLA -= (unsigned long int)staticHighTemperature;
|
||||
tempL = (float)P0RhLow;
|
||||
tempL *= (float)tmpSLA;
|
||||
|
||||
// (P0_H * <20><>L - P0_L * <20><>H)
|
||||
B0Heater = tempH - tempL;
|
||||
|
||||
// P0_L * <20><>H * T0_H
|
||||
tmpSLA = (unsigned long int)staticHighTemperature;
|
||||
tmpSLA -= (unsigned long int)TEMPRETURE_OFFSET;
|
||||
tempL *= (float)tmpSLA;
|
||||
|
||||
// P0_H * <20><>L * T0_L
|
||||
tmpSLA = (unsigned long int)staticLowTemperature;
|
||||
tmpSLA -= (unsigned long int)TEMPRETURE_OFFSET;
|
||||
tempH *= (float)tmpSLA;
|
||||
|
||||
// B = (P0_H * <20><>L - P0_L * <20><>H)/(P0_L * <20><>H * T0_H - P0_H * <20><>L * T0_L)
|
||||
tempL -= tempH;
|
||||
B0Heater /= tempL;
|
||||
B0Heater *= 100;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// compute A
|
||||
// P0_L = A*(1 + B*T0_L)*(TH_L - T0_L)
|
||||
// 10000 * P0_L = A*(1 + B*T0_L)*(TH_L - T0_L)*100*100 // Tempreture 2 bit dot
|
||||
// 10000 * P0_L = A*(100 + B*T0_L)*(TH_L - T0_L)
|
||||
|
||||
// 1 + B * TO_L
|
||||
tmpSLA = (unsigned long int)staticLowTemperature;
|
||||
tmpSLA -= (unsigned long int)TEMPRETURE_OFFSET;
|
||||
tempH = B0Heater * (float)tmpSLA;
|
||||
tempH += 100;
|
||||
|
||||
// (100 + B*T0_L)*(TH_L - T0_L)
|
||||
tempH *= (float)tmpSLB;
|
||||
|
||||
// A = P0_L*10000/( (10 + B * TO_L) * (TH_L - TO_L) )
|
||||
A0Heater = (float)P0RhLow;
|
||||
//A0Heater *= 100;
|
||||
A0Heater /= (float)tempH;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void ATypeFlowRateInit(void)
|
||||
{
|
||||
P0RhLow = ReadShortParameterFromEEPROM(P0_0_RH, P0_0_RH_WIDTH, 32768);
|
||||
P0RhHigh = ReadShortParameterFromEEPROM(P0_50_RH, P0_50_RH_WIDTH, 32768);
|
||||
|
||||
offsetGasA = ReadShortParameterFromEEPROM(OFFSET_A, OFFSET_A_WIDTH, SDT_ZERO_OFFSET);
|
||||
switchFIndex = ReadShortParameterFromEEPROM(SWITCH_FR, SWITCH_FR_WIDTH, SWITCH_FR_DEFAULT);
|
||||
|
||||
ATypeIndexGain = ReadShortParameterFromEEPROM(ATYPE_INDEX_GAIN, ATYPE_INDEX_GAIN_WIDTH, ATYPE_INDEX_GAIN_DEFAULT);
|
||||
GDCFactorAType = ReadShortParameterFromEEPROM(GCF_ATYPE, GCF_ATYPE_WIDTH, GCF_ATYPE_DEFAULT);
|
||||
|
||||
ComputeABParameter();
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void ComputeATypeIndex(void)
|
||||
{
|
||||
voltageDetected[TRH] = MovingAverage(voltageDetected[TRH], 30, TRH);
|
||||
voltageDetected[TGAS] = MovingAverage(voltageDetected[TGAS], 30, TGAS);
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// compute P0Heater
|
||||
// P0Heater = A0Heater * (1 + B0Heater * T0) * (TH - T0)
|
||||
// 10000 * P0_L = A*(100 + B*T0_L)*(TH_L - T0_L)
|
||||
tmpSLA = (unsigned long int)voltageDetected[TGAS];
|
||||
tmpSLA -= (unsigned long int)TEMPRETURE_OFFSET;
|
||||
P0Heater = (float)tmpSLA;
|
||||
P0Heater *= B0Heater; // B0Heater * T0
|
||||
P0Heater += 100; // 100 + B0Heater*T0
|
||||
P0Heater *= A0Heater; // A*(100 + 100 + B0Heater*T0)
|
||||
|
||||
// (TH - T0)
|
||||
tmpSLA = (signed long int)voltageDetected[TRH];
|
||||
tmpSLA -= (signed long int)voltageDetected[TGAS];
|
||||
P0Heater *= (float)tmpSLA; // P0Heater = A0Heater * (1 + B0Heater * T0) * (TH - T0)
|
||||
//P0Heater /= 100;
|
||||
|
||||
voltageDetected[PORH] = (unsigned short)P0Heater; // <20><>ͷ<EFBFBD><CDB7>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>
|
||||
//---------------------------------------------------------------------------
|
||||
tmpSLB = (unsigned long int)voltageDetected[PDRH];
|
||||
tmpSLB -= (unsigned long int)voltageDetected[PORH];
|
||||
tmpSLB *= (unsigned long int)100;
|
||||
tmpSLB *= (unsigned long int)ATypeIndexGain;
|
||||
tmpSLB /= tmpSLA;
|
||||
tmpSLB += (unsigned long int)SDT_ZERO_OFFSET;
|
||||
voltageDetected[SDT] = (unsigned short)tmpSLB;
|
||||
//voltageDetected[SDT] = MovingAverage(voltageDetected[SDT], 10, SDT);
|
||||
|
||||
if(voltageDetected[SDT] > offsetGasA) flowRateIndex[ATYPE_FR] = voltageDetected[SDT] - offsetGasA;
|
||||
else flowRateIndex[ATYPE_FR] = 0;
|
||||
|
||||
// if(isCalibMode) return;
|
||||
//
|
||||
// // auto calibration VHH offset
|
||||
// if(voltageDetected[NVHH] > VHHRoom + (unsigned short)AUTO_OFFSET_NVHH) return;
|
||||
// if(voltageDetected[NIDX] > offsetGas + (unsigned short)AUTO_OFFSET_NIDX) return;
|
||||
// if(voltageDetected[NIDX] < offsetGas - (unsigned short)AUTO_OFFSET_NIDX) return;
|
||||
//
|
||||
// offsetA = voltageDetected[SDT];
|
||||
}
|
||||
Reference in New Issue
Block a user