Index: firmware/App/Drivers/TemperatureSensors.c =================================================================== diff -u -re7fe0454b5b2d39009dc784dc8c156856df8bc86 -red39129abdca4ec343369d83494530b23621e052 --- firmware/App/Drivers/TemperatureSensors.c (.../TemperatureSensors.c) (revision e7fe0454b5b2d39009dc784dc8c156856df8bc86) +++ firmware/App/Drivers/TemperatureSensors.c (.../TemperatureSensors.c) (revision ed39129abdca4ec343369d83494530b23621e052) @@ -34,11 +34,16 @@ // ********** private definitions ********** +#define USE_PT_100 1 ///< flag to check PT100 use in calculations + #define PRIMARY_HEATER_TEMP_SENSORS_GAIN 8U ///< Primary heater temperature sensors gain. #define PRIMARY_HEATER_TEMP_SENSORS_REF_RESISTANCE 20000 ///< Primary heater temperature sensors reference resistance. #define PRIMARY_HEATER_TEMP_SENSORS_0_DEGREE_RESISTANCE 1000U ///< Primary heater temperature sensors zero degree resistance. -#define PRIMARY_HEATER_TEMP_SENSORS_V3_REF_RESISTANCE 19600 ///< Primary heater temperature sensors V3 reference resistance. +#define PT100_TEMP_SENSORS_GAIN 8U ///< PT100 temperature sensors gain. +#define PT100_TEMP_SENSORS_REF_RESISTANCE 4700 ///< PT100 temperature sensors reference resistance. +#define PT100_TEMP_SENSORS_0_DEGREE_RESISTANCE 100U ///< PT100 temperature sensors zero degree resistance. + #define TEMP_SENSORS_ADC_BITS 24U ///< External temperature sensors ADC bits. #define MAX_NUM_OF_RAW_ADC_SAMPLES 4U ///< Number of ADC reads for moving average calculations. #define SHIFT_BITS_BY_2 2U ///< Shift bits by 2 to create a 4 for averaging 4 samples. @@ -77,7 +82,6 @@ S32 rawADCReads[ MAX_NUM_OF_RAW_ADC_SAMPLES ]; ///< Raw ADC reads array S32 adcNextIndex; ///< Next ADC read index S32 adcRunningSum; ///< ADC running sum - OVERRIDE_F32_T temperatureValue; ///< Temperature values with override F32 maxAllowedTemp; ///< Maximum allowed temperature of the sensor S32 baroTempSnsrDiff; ///< Barometric sensor temperature difference } TEMP_SENSOR_T; @@ -108,6 +112,7 @@ // ********** private data ********** static TEMP_SENSOR_T tempSensors [ NUM_OF_TEMPERATURE_SENSORS ]; ///< Temperature sensors' data structure. +static OVERRIDE_F32_T temperatureValue[ NUM_OF_TEMPERATURE_SENSORS ]; ///< Temperature values with override static OVERRIDE_U32_T lastTemperatureReadCounter; ///< Temperature sensors read count from FPGA. static OVERRIDE_U32_T lastBaroTempReadCounter; ///< Barometric sensor read count from FPGA. static BARO_SENSOR_CONSTS_T baroConvConsts; ///< Barometric sensor conversion constants. @@ -149,32 +154,56 @@ memset( &baroConvConsts, 0x0, sizeof( BARO_SENSOR_CONSTS_T ) ); // Initialize TH1 (primary heater), TH2(outlet Heat Exchanger), TAUX ( Inlet Heat exchanger), - // TH3 ( Trim Heater) constants. For now, assume same gain across all sensors. - tempSensors[ TEMPSENSORS_INLET_HEAT_EXCHANGER ].gain = PRIMARY_HEATER_TEMP_SENSORS_GAIN; - tempSensors[ TEMPSENSORS_INLET_HEAT_EXCHANGER ].refResistance = PRIMARY_HEATER_TEMP_SENSORS_REF_RESISTANCE; - tempSensors[ TEMPSENSORS_INLET_HEAT_EXCHANGER ].zeroDegreeResistance = PRIMARY_HEATER_TEMP_SENSORS_0_DEGREE_RESISTANCE; - tempSensors[ TEMPSENSORS_INLET_HEAT_EXCHANGER ].maxAllowedTemp = TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; + // TH3 ( Trim Heater) constants. + // Based on the PT100/PT1000,define the constants for all temperature sensors +#ifdef USE_PT_100 + tempSensors[ D1_TEMP ].gain = PT100_TEMP_SENSORS_GAIN; + tempSensors[ D1_TEMP ].refResistance = PT100_TEMP_SENSORS_REF_RESISTANCE; + tempSensors[ D1_TEMP ].zeroDegreeResistance = PT100_TEMP_SENSORS_0_DEGREE_RESISTANCE; + tempSensors[ D1_TEMP ].maxAllowedTemp = TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; - tempSensors[ TEMPSENSORS_OUTLET_HEAT_EXCHANGER ].gain = PRIMARY_HEATER_TEMP_SENSORS_GAIN; - tempSensors[ TEMPSENSORS_OUTLET_HEAT_EXCHANGER ].refResistance = PRIMARY_HEATER_TEMP_SENSORS_REF_RESISTANCE; - tempSensors[ TEMPSENSORS_OUTLET_HEAT_EXCHANGER ].zeroDegreeResistance = PRIMARY_HEATER_TEMP_SENSORS_0_DEGREE_RESISTANCE; - tempSensors[ TEMPSENSORS_OUTLET_HEAT_EXCHANGER ].maxAllowedTemp = TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; + tempSensors[ X6_TEMP ].gain = PT100_TEMP_SENSORS_GAIN; + tempSensors[ X6_TEMP ].refResistance = PT100_TEMP_SENSORS_REF_RESISTANCE; + tempSensors[ X6_TEMP ].zeroDegreeResistance = PT100_TEMP_SENSORS_0_DEGREE_RESISTANCE; + tempSensors[ X6_TEMP ].maxAllowedTemp = TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; - tempSensors[ TEMPSENSORS_HYDRAULICS_PRIMARY_HEATER ].gain = PRIMARY_HEATER_TEMP_SENSORS_GAIN; - tempSensors[ TEMPSENSORS_HYDRAULICS_PRIMARY_HEATER ].refResistance = PRIMARY_HEATER_TEMP_SENSORS_REF_RESISTANCE; - tempSensors[ TEMPSENSORS_HYDRAULICS_PRIMARY_HEATER ].zeroDegreeResistance = PRIMARY_HEATER_TEMP_SENSORS_0_DEGREE_RESISTANCE; - tempSensors[ TEMPSENSORS_HYDRAULICS_PRIMARY_HEATER ].maxAllowedTemp = HEATERS_INTERNAL_TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; + tempSensors[ D4_TEMP ].gain = PT100_TEMP_SENSORS_GAIN; + tempSensors[ D4_TEMP ].refResistance = PT100_TEMP_SENSORS_REF_RESISTANCE; + tempSensors[ D4_TEMP ].zeroDegreeResistance = PT100_TEMP_SENSORS_0_DEGREE_RESISTANCE; + tempSensors[ D4_TEMP ].maxAllowedTemp = HEATERS_INTERNAL_TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; - tempSensors[ TEMPSENSORS_TRIMMER_HEATER ].gain = PRIMARY_HEATER_TEMP_SENSORS_GAIN; - tempSensors[ TEMPSENSORS_TRIMMER_HEATER ].refResistance = PRIMARY_HEATER_TEMP_SENSORS_REF_RESISTANCE; - tempSensors[ TEMPSENSORS_TRIMMER_HEATER ].zeroDegreeResistance = PRIMARY_HEATER_TEMP_SENSORS_0_DEGREE_RESISTANCE; - tempSensors[ TEMPSENSORS_TRIMMER_HEATER ].maxAllowedTemp = TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; + tempSensors[ D50_TEMP ].gain = PT100_TEMP_SENSORS_GAIN; + tempSensors[ D50_TEMP ].refResistance = PT100_TEMP_SENSORS_REF_RESISTANCE; + tempSensors[ D50_TEMP ].zeroDegreeResistance = PT100_TEMP_SENSORS_0_DEGREE_RESISTANCE; + tempSensors[ D50_TEMP ].maxAllowedTemp = TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; +#else + tempSensors[ D1_TEMP ].gain = PRIMARY_HEATER_TEMP_SENSORS_GAIN; + tempSensors[ D1_TEMP ].refResistance = PRIMARY_HEATER_TEMP_SENSORS_REF_RESISTANCE; + tempSensors[ D1_TEMP ].zeroDegreeResistance = PRIMARY_HEATER_TEMP_SENSORS_0_DEGREE_RESISTANCE; + tempSensors[ D1_TEMP ].maxAllowedTemp = TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; + tempSensors[ X6_TEMP ].gain = PRIMARY_HEATER_TEMP_SENSORS_GAIN; + tempSensors[ X6_TEMP ].refResistance = PRIMARY_HEATER_TEMP_SENSORS_REF_RESISTANCE; + tempSensors[ X6_TEMP ].zeroDegreeResistance = PRIMARY_HEATER_TEMP_SENSORS_0_DEGREE_RESISTANCE; + tempSensors[ X6_TEMP ].maxAllowedTemp = TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; + + tempSensors[ D4_TEMP ].gain = PRIMARY_HEATER_TEMP_SENSORS_GAIN; + tempSensors[ D4_TEMP ].refResistance = PRIMARY_HEATER_TEMP_SENSORS_REF_RESISTANCE; + tempSensors[ D4_TEMP ].zeroDegreeResistance = PRIMARY_HEATER_TEMP_SENSORS_0_DEGREE_RESISTANCE; + tempSensors[ D4_TEMP ].maxAllowedTemp = HEATERS_INTERNAL_TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; + + tempSensors[ D50_TEMP ].gain = PRIMARY_HEATER_TEMP_SENSORS_GAIN; + tempSensors[ D50_TEMP ].refResistance = PRIMARY_HEATER_TEMP_SENSORS_REF_RESISTANCE; + tempSensors[ D50_TEMP ].zeroDegreeResistance = PRIMARY_HEATER_TEMP_SENSORS_0_DEGREE_RESISTANCE; + tempSensors[ D50_TEMP ].maxAllowedTemp = TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; +#endif + + // Board temperature sensors conversion coefficient - tempSensors[ TEMPSENSORS_BOARD_TEMPERATURE ].conversionCoeff = conversionCoeff; - tempSensors[ TEMPSENSORS_BOARD_TEMPERATURE ].maxAllowedTemp = NON_FLUID_PATH_TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; + tempSensors[ BRD_TEMP ].conversionCoeff = conversionCoeff; + tempSensors[ BRD_TEMP ].maxAllowedTemp = NON_FLUID_PATH_TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; - tempSensors[ TEMPSENSORS_BAROMETRIC_TEMP_SENSOR ].maxAllowedTemp = NON_FLUID_PATH_TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; + tempSensors[ BARO_TEMP ].maxAllowedTemp = NON_FLUID_PATH_TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; // Persistent alarm for the temperature sensors range check initPersistentAlarm( ALARM_ID_DD_TEMPERATURE_SENSOR_OUT_OF_RANGE, TEMP_SENSORS_OUT_OF_RANGE_TIME_OUT_MS, TEMP_SENSORS_OUT_OF_RANGE_TIME_OUT_MS ); @@ -201,7 +230,7 @@ if ( sensorIndex < NUM_OF_TEMPERATURE_SENSORS ) { - temperature = getF32OverrideValue( &tempSensors[ sensorIndex ].temperatureValue ); + temperature = getF32OverrideValue( &temperatureValue[ sensorIndex ] ); } else { @@ -222,7 +251,7 @@ *************************************************************************/ S32 getBaroSensorTemperatureDiff( void ) { - return tempSensors[ TEMPSENSORS_BAROMETRIC_TEMP_SENSOR ].baroTempSnsrDiff; + return tempSensors[ BARO_TEMP ].baroTempSnsrDiff; } /*********************************************************************//** @@ -252,10 +281,10 @@ lastTemperatureReadCounter.data = (U32)getFPGARTDReadCount(); //Read temperature sensors - processTempSnsrsADCRead( TEMPSENSORS_INLET_HEAT_EXCHANGER, getFPGAInletHeatExchangerTemp() ); - processTempSnsrsADCRead( TEMPSENSORS_OUTLET_HEAT_EXCHANGER, getFPGAOutletHeatExchangerTemp() ); - processTempSnsrsADCRead( TEMPSENSORS_HYDRAULICS_PRIMARY_HEATER, getFPGAHydraulicsPrimaryHeaterTemp() ); - processTempSnsrsADCRead( TEMPSENSORS_TRIMMER_HEATER, getFPGATrimmerHeaterTemp() ); + processTempSnsrsADCRead( D1_TEMP, getFPGAD1Temp() ); + processTempSnsrsADCRead( X6_TEMP, getFPGAX6Temp() ); + processTempSnsrsADCRead( D4_TEMP, getFPGAD4Temp() ); + processTempSnsrsADCRead( D50_TEMP, getFPGAD50Temp() ); //TODO: Read Board temperture //processTempSnsrsADCRead( TEMPSENSORS_INTERNAL_COND_TEMP_SENSOR, getFPGACondSnsrInternalTemp() ); @@ -270,7 +299,7 @@ baroConvConsts.temperatureCoeff = getFPGABaroTempCoeffOfTemperature(); lastBaroTempReadCounter.data = (U32)getFPGABaroReadCount(); - processTempSnsrsADCRead( TEMPSENSORS_BAROMETRIC_TEMP_SENSOR, getFPGABaroTemperature() ); + processTempSnsrsADCRead( BARO_TEMP, getFPGABaroTemperature() ); } } @@ -413,19 +442,19 @@ // Different sensors have different ADC to temperature conversion methods switch( sensorIndex ) { - case TEMPSENSORS_INLET_HEAT_EXCHANGER: - case TEMPSENSORS_OUTLET_HEAT_EXCHANGER: - case TEMPSENSORS_HYDRAULICS_PRIMARY_HEATER: - case TEMPSENSORS_TRIMMER_HEATER: + case D1_TEMP: + case X6_TEMP: + case D4_TEMP: + case D50_TEMP: temperature = getADC2TempConversion( avgADCReads, (U32)tempSensors [ sensorIndex ].gain, (U32)tempSensors [ sensorIndex ].refResistance, (U32)tempSensors [ sensorIndex ].zeroDegreeResistance, tempSensors [ sensorIndex ].conversionCoeff ); break; - case TEMPSENSORS_BOARD_TEMPERATURE: + case BRD_TEMP: //TODO : Need details on calculations. break; - case TEMPSENSORS_BAROMETRIC_TEMP_SENSOR: + case BARO_TEMP: { S32 baroTempSensorsDiff = (S32)avgADCReads - ( baroConvConsts.refTemperature * TWO_TO_POWER_OF_8 ); S64 differenceTimesCoefficient = (S64)baroTempSensorsDiff * (S64)baroConvConsts.temperatureCoeff; @@ -446,7 +475,7 @@ getCalibrationAppliedTemperatureValue( sensorIndex, &temperature ); // Update the temperature - tempSensors[ sensorIndex ].temperatureValue.data = temperature; + temperatureValue[ sensorIndex ].data = temperature; } @@ -553,23 +582,23 @@ switch( sesnorIndex ) { - case TEMPSENSORS_INLET_HEAT_EXCHANGER: + case D1_TEMP: //calId = CAL_DATA_INLET_HEAT_EXCHANGER_TEMP; break; - case TEMPSENSORS_OUTLET_HEAT_EXCHANGER: + case X6_TEMP: //calId = CAL_DATA_OUTLET_HEAT_EXCHANGER_TEMP; break; - case TEMPSENSORS_HYDRAULICS_PRIMARY_HEATER: + case D4_TEMP: //calId = CAL_DATA_HYD_PRIMARY_HEATER_TEMP; break; - case TEMPSENSORS_TRIMMER_HEATER: + case D50_TEMP: //calId = CAL_DATA_TRIM_HEATER_TEMP; break; - case TEMPSENSORS_BAROMETRIC_TEMP_SENSOR: + case BARO_TEMP: //calId = CAL_DATA_BARMOTERIC_TEMP; break; @@ -607,7 +636,7 @@ *************************************************************************/ BOOL testMeasuredTemperatureOverride( MESSAGE_T *message ) { - BOOL result = f32ArrayOverride( message, &tempSensors[0].temperatureValue, NUM_OF_TEMPERATURE_SENSORS - 1 ); + BOOL result = f32ArrayOverride( message, &temperatureValue[0], NUM_OF_TEMPERATURE_SENSORS - 1 ); return result; }