Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -r6dc826002a31e63d50ef7b3fced3cfe99b4394b8 -r406da4d5010b1ecab9035033121aeafad15b931d --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 6dc826002a31e63d50ef7b3fced3cfe99b4394b8) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 406da4d5010b1ecab9035033121aeafad15b931d) @@ -21,6 +21,8 @@ #include "SystemCommMessages.h" #include "Timers.h" #include "TaskPriority.h" +#include "TaskGeneral.h" +#include "Utilities.h" /** * @addtogroup TemperatureSensors @@ -29,46 +31,48 @@ // ********** private definitions ********** -#define PRIMARY_HEATER_EXT_TEMP_SENSORS_GAIN 16U ///< Primary heater external temperature sensors gain -#define PRIMARY_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE 19600U ///< Primary heater external temperature sensors reference resistance -#define PRIMARY_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE 1000U ///< Primary heater external temperature sensors zero degree resistance +#define PRIMARY_HEATER_EXT_TEMP_SENSORS_GAIN 16U ///< Primary heater external temperature sensors gain +#define PRIMARY_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE 19600U ///< Primary heater external temperature sensors reference resistance +#define PRIMARY_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE 1000U ///< Primary heater external temperature sensors zero degree resistance -#define COND_SENSORS_TEMP_SENSOR_GAIN 16U ///< Conductivity sensor gain -#define COND_SENSORS_TEMP_SENSOR_REF_RESISTANCE 19600U ///< Conductivity sensor reference resistance -#define COND_SENSORS_TEMP_SENSOR_0_DEGREE_RESISTANCE 1000U ///< Conductivity sensor zero degree resistance +#define COND_SENSORS_TEMP_SENSOR_GAIN 16U ///< Conductivity sensor gain +#define COND_SENSORS_TEMP_SENSOR_REF_RESISTANCE 19600U ///< Conductivity sensor reference resistance +#define COND_SENSORS_TEMP_SENSOR_0_DEGREE_RESISTANCE 1000U ///< Conductivity sensor zero degree resistance -#define TRIMMER_HEATER_EXT_TEMP_SENSORS_GAIN 32U ///< Trimmer heater external temperature sensors gain -#define TRIMMER_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE 5110U ///< Trimmer heater external temperature sensors reference resistance -#define TRIMMER_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE 100U ///< Trimmer heater external temperature sensors zero degree resistance +#define TRIMMER_HEATER_EXT_TEMP_SENSORS_GAIN 32U ///< Trimmer heater external temperature sensors gain +#define TRIMMER_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE 5110U ///< Trimmer heater external temperature sensors reference resistance +#define TRIMMER_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE 100U ///< Trimmer heater external temperature sensors zero degree resistance -#define TEMP_SENSORS_ADC_BITS 24U ///< External temperature sensors ADC bits -#define TEMP_SENSORS_ADC_MAX_COUNT (pow(2,TEMP_SENSORS_ADC_BITS)) ///< Temperature sensors max ADC count +#define TEMP_SENSORS_ADC_BITS 24U ///< External temperature sensors ADC bits +#define TEMP_SENSORS_ADC_MAX_COUNT (pow(2,TEMP_SENSORS_ADC_BITS)) ///< Temperature sensors max ADC count -#define TEMP_EQUATION_COEFF_A (3.9083 * pow(10,-3)) ///< ADC to temperature conversion coefficient A -#define TEMP_EQUATION_COEFF_B (-5.775 * pow(10,-7)) ///< ADC to temperature conversion coefficient B +#define TEMP_EQUATION_COEFF_A (3.9083 * pow(10,-3)) ///< ADC to temperature conversion coefficient A +#define TEMP_EQUATION_COEFF_B (-5.775 * pow(10,-7)) ///< ADC to temperature conversion coefficient B -#define ADC_FPGA_READ_DELAY 30U ///< Delay in ms before reading the ADC values from FPGA -#define MAX_NUM_OF_RAW_ADC_SAMPLES 32U ///< Number of ADC reads for moving average calculations -#define MAX_ALLOWED_TEMP_DELTA_BETWEEN_SENSORS 2U ///< Maximum allowed temperature delta between sensors -#define MAX_ALLOWED_UNCHANGED_ADC_READS 4U ///< Maximum number of times that the read of a sensor cannot change -#define SHIFT_BITS_BY_2 2U ///< Shift bits by 2 -#define SHIFT_BITS_BY_5_FOR_AVERAGING 5U ///< Shift the ADCs of the temperature sensors by 5 to average them -#define INLET_WATER_TEMPERATURE_PERSISTENCE_COUNT 1000 ///< Number of persistence count for temperature sensors out of range error +#define ADC_FPGA_READ_DELAY 30U ///< Delay in ms before reading the ADC values from FPGA +#define MAX_NUM_OF_RAW_ADC_SAMPLES 32U ///< Number of ADC reads for moving average calculations +#define MAX_ALLOWED_TEMP_DELTA_BETWEEN_SENSORS 2U ///< Maximum allowed temperature delta between sensors +#define MAX_ALLOWED_UNCHANGED_ADC_READS 4U ///< Maximum number of times that the read of a sensor cannot change +#define SHIFT_BITS_BY_2 2U ///< Shift bits by 2 +#define SHIFT_BITS_BY_5_FOR_AVERAGING 5U ///< Shift the ADCs of the temperature sensors by 5 to average them +#define INLET_WATER_TEMPERATURE_PERSISTENCE_COUNT (5 * MS_PER_SECOND / TASK_GENERAL_INTERVAL) ///< Number of persistence count for temperature sensors out of range error -#define MIN_WATER_INPUT_TEMPERATURE 10U ///< Minimum water input temperature -#define MAX_WATER_INPUT_TEMPERATURE 35U ///< Maximum water input temperature +#define MIN_WATER_INPUT_TEMPERATURE 10U ///< Minimum water input temperature +#define MAX_WATER_INPUT_TEMPERATURE 35U ///< Maximum water input temperature -#define HEATERS_INTERNAL_TEMPERTURE_CALCULATION_INTERVAL 20U ///< Time interval that is used to calculate the heaters internal temperature -#define HEATERS_INTERNAL_TC_ADC_TO_TEMP_CONVERSION_COEFF 0.25 ///< Heaters internal temperature sensors ADC to temperature conversion coefficient -#define HEATERS_COLD_JUNCTION_ADC_TO_TEMP_CONVERSION_COEFF 0.0625 ///< Heaters cold junction temperature sensors ADC to temperature conversion coefficient +#define HEATERS_INTERNAL_TEMPERTURE_CALCULATION_INTERVAL 20U ///< Time interval that is used to calculate the heaters internal temperature +#define HEATERS_INTERNAL_TC_ADC_TO_TEMP_CONVERSION_COEFF 0.25 ///< Heaters internal temperature sensors ADC to temperature conversion coefficient +#define HEATERS_COLD_JUNCTION_ADC_TO_TEMP_CONVERSION_COEFF 0.0625 ///< Heaters cold junction temperature sensors ADC to temperature conversion coefficient -#define K_THERMOCOUPLE_TEMP_2_MILLI_VOLT_CONVERSION_COEFF 0.041276 ///< K thermocouple temperature to millivolt conversion coefficient -#define SIZE_OF_THERMOCOUPLE_COEFFICIENTS 10U ///< Size of the thermocouple coefficients +#define K_THERMOCOUPLE_TEMP_2_MILLI_VOLT_CONVERSION_COEFF 0.041276 ///< K thermocouple temperature to millivolt conversion coefficient +#define SIZE_OF_THERMOCOUPLE_COEFFICIENTS 10U ///< Size of the thermocouple coefficients -#define EXTERNAL_TEMP_SENSORS_ERROR_VALUE 0x80 ///< External temperature sensors error value -#define HEATERS_INTERNAL_TEMP_SENSOR_FAULT 0x01 ///< Heaters internal temperature sensor fault +#define EXTERNAL_TEMP_SENSORS_ERROR_VALUE 0x80 ///< External temperature sensors error value +#define HEATERS_INTERNAL_TEMP_SENSOR_FAULT 0x01 ///< Heaters internal temperature sensor fault -#define TEMP_SENSORS_DATA_PUBLISH_INTERVAL (1000 / TASK_PRIORITY_INTERVAL) ///< Temperature sensors publish data time interval +#define TEMP_SENSORS_DATA_PUBLISH_INTERVAL (MS_PER_SECOND / TASK_PRIORITY_INTERVAL) ///< Temperature sensors publish data time interval +#define MAX_TEMPERATURE_SENSOR_FAILURES 10 ///< Maximum number of temperature sensor errors within window period before alarm +#define MAX_TEMPERATURE_SENSOR_FAILURE_WINDOW_MS (10 * MS_PER_SECOND) ///< Temperature sensor error window /// Temperature sensor self test states typedef enum tempSensors_Self_Test_States @@ -234,6 +238,10 @@ tempSensors [ TEMPSENSORS_TRIMMER_HEATER_COLD_JUNCTION ].conversionCoef = HEATERS_COLD_JUNCTION_ADC_TO_TEMP_CONVERSION_COEFF; // Initialize the heaters calculated internal temperature sensors. The constants are zero since they will not be used for conversion + + // Windowed time count for FPGA temperature sensor error + initTimeWindowedCount( TIME_WINDOWED_COUNT_FPGA_TEMPERATURE_SENSOR_ERROR, + MAX_TEMPERATURE_SENSOR_FAILURES, MAX_TEMPERATURE_SENSOR_FAILURE_WINDOW_MS ); } /************************************************************************* @@ -389,7 +397,7 @@ * @param gain : ADC gain * @param refResistance : ADC reference resistance * @param zeroDegResistance : ADC zero degree resistance - * #param adcConversionCoeff : ADC conversion coefficient + * @param adcConversionCoeff : ADC conversion coefficient * @return temperature *************************************************************************/ static F32 getADC2TempConversion ( F32 avgADC, U32 gain, U32 refResistance, U32 zeroDegResistance, F32 adcConversionCoeff ) @@ -578,7 +586,10 @@ } else { - SET_ALARM_WITH_1_U32_DATA( ALARM_ID_TEMPERATURE_SENSORS_FAULT, sensorIndex ); + if ( TRUE == incTimeWindowedCount( TIME_WINDOWED_COUNT_FPGA_TEMPERATURE_SENSOR_ERROR ) ) + { + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_TEMPERATURE_SENSORS_FAULT, sensorIndex ); + } } return isADCValid; @@ -841,13 +852,13 @@ { BOOL result = FALSE; - if ( sensor < NUM_OF_TEMPERATURE_SENSORS ) + if ( sensorIndex < NUM_OF_TEMPERATURE_SENSORS ) { if ( isTestingActivated() ) { result = TRUE; - tempSensors[ sensor ].temperatureValues.ovData = temperature; - tempSensors[ sensor ].temperatureValues.override = OVERRIDE_KEY; + tempSensors[ sensorIndex ].temperatureValues.ovData = temperature; + tempSensors[ sensorIndex ].temperatureValues.override = OVERRIDE_KEY; } } @@ -868,13 +879,13 @@ { BOOL result = FALSE; - if ( sensor < NUM_OF_TEMPERATURE_SENSORS ) + if ( sensorIndex < NUM_OF_TEMPERATURE_SENSORS ) { if ( isTestingActivated() ) { result = TRUE; - tempSensors[ sensor ].temperatureValues.override = OVERRIDE_RESET; - tempSensors[ sensor ].temperatureValues.ovData = tempSensors[ sensor ].temperatureValues.ovInitData; + tempSensors[ sensorIndex ].temperatureValues.override = OVERRIDE_RESET; + tempSensors[ sensorIndex ].temperatureValues.ovData = tempSensors[ sensorIndex ].temperatureValues.ovInitData; } }