Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -r611e805a6547ac922154e623a9d79adeae128e81 -rb00abccd173d0c989ab8d352366dba108f5e8827 --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 611e805a6547ac922154e623a9d79adeae128e81) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision b00abccd173d0c989ab8d352366dba108f5e8827) @@ -153,6 +153,20 @@ static U32 dataPublicationTimerCounter; ///< Temperature sensors data publish timer counter static F32 tempValuesForPublication [ NUM_OF_TEMPERATURE_SENSORS ]; ///< Temperature sensors data publication array +static const F32 positiveTCExpA0 = 0.118597600000E0; ///< K TC positive temperature exponent coefficient A0 +static const F32 positiveTCExpA1 = -0.118343200000E-3; ///< K TC positive temperature exponent coefficient A1 +static const F32 positiveTCExpA2 = 0.126968600000E3; ///< K TC positive temperature exponent coefficient A2 + +static const F32 positiveTCCoeffs [10] = { -0.176004136860E-1, 0.389212049750E-1, + 0.185587700320E-4, -0.994575928740E-7, + 0.318409457190E-9, -0.560728448890E-12, + 0.560750590590E-15, -0.320207200030E-18, + 0.971511471520E-22, -0.121047212750E-25 }; ///< Thermocouple correction coefficients for positive cold junction temperature + +static const F32 positiveTCInverserCoeffs [10] = { 0.0, 2.508355E1, 7.860106E-2, -2.503131E-1, 8.315270E-2, + -1.228034E-2, 9.804036E-4, -4.413030E-5, 1.057734E-6, + -1.052755E-8 }; ///< Thermcouple inverse coefficient for positive cold junction temperature + // Private functions prototypes static TEMPSENSORS_SELF_TEST_STATES_T handleSelfTestStart ( void ); @@ -393,20 +407,35 @@ *************************************************************************/ static void getHeaterInternalTemp ( U32 TCIndex, U32 CJIndex ) { + U08 i; F32 temperature; F32 equiVoltage; F32 correctedVoltage; F32 TCTemp = temperatureValues [ TCIndex ].data; F32 CJTemp = temperatureValues [ CJIndex ].data; - // TODO For testing only REMOVE - //F32 CJTemp = 29; - // Remove after testing // Value in milli-volts F32 rawVoltage = ( TCTemp - CJTemp ) * K_THERMOCOUPLE_TEMP_2_MILLI_VOLT_CONVERSION_COEFF; + if ( CJTemp > 0 ) + { + for ( i = 0; i < 10; i++ ) + { + equiVoltage = equiVoltage + ( positiveTCCoeffs [ i ] * pow(CJTemp, i) ); + } + + equiVoltage = equiVoltage + ( positiveTCExpA0 * ( exp(positiveTCExpA1 * pow((CJTemp - positiveTCExpA2), i)) ) ); + + correctedVoltage = rawVoltage + equiVoltage; + + for ( i = 0; i < 10; i++ ) + { + temperature = temperature + ( positiveTCInverserCoeffs [ i ] * pow(correctedVoltage, i) ); + } + } + // TODO add positive and negative check - equiVoltage = THERMOCOUPLE_POSITIVE_TEMP_C_0 * (pow(CJTemp, 0)) + + /*equiVoltage = THERMOCOUPLE_POSITIVE_TEMP_C_0 * (pow(CJTemp, 0)) + THERMOCOUPLE_POSITIVE_TEMP_C_1 * (pow(CJTemp, 1)) + THERMOCOUPLE_POSITIVE_TEMP_C_2 * (pow(CJTemp, 2)) + THERMOCOUPLE_POSITIVE_TEMP_C_3 * (pow(CJTemp, 3)) + @@ -430,7 +459,7 @@ THERMOCOUPLE_POSITIVE_TEMP_INVERSE_D_6 * (pow(correctedVoltage, 6)) + THERMOCOUPLE_POSITIVE_TEMP_INVERSE_D_7 * (pow(correctedVoltage, 7)) + THERMOCOUPLE_POSITIVE_TEMP_INVERSE_D_8 * (pow(correctedVoltage, 8)) + - THERMOCOUPLE_POSITIVE_TEMP_INVERSE_D_9 * (pow(correctedVoltage, 9)); + THERMOCOUPLE_POSITIVE_TEMP_INVERSE_D_9 * (pow(correctedVoltage, 9));*/ if ( TCIndex == TEMPSENSORS_PRIMARY_HEATER_THERMO_COUPLE_TEMP_SENSOR ) { @@ -522,6 +551,7 @@ static BOOL isADCReadValid ( U32 sensorIndex, U32 fpgaError, U32 fpgaCount ) { BOOL isADCValid = FALSE; + isADCValid = TRUE; // TODO remove this line. Temporary set to true until FPGA error count is fixed U32 previousReadCount = readAndErrorCounts [ sensorIndex ] [ READ_AND_ERROR_PREV_FPGA_COUNT_INDEX ]; if ( fpgaError != 0 ) @@ -683,7 +713,7 @@ } } - // TDOD Fix this + // TODO finalize the results tempSensorsSelfTestResult = SELF_TEST_STATUS_PASSED; return state; @@ -734,7 +764,6 @@ // Look at the error counter and the specific error flag to make sure the error is a temp sensor // Add a byte array to have bits for each sensor to find out exactly what sensor failed - //processADCRead_old( TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR, getFPGATPiTemp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); processTempSnsrsADCRead ( TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR, getFPGATPiTemp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); processTempSnsrsADCRead ( TEMPSENSORS_OUTLET_PRIMARY_HEATER_TEMP_SENSOR, getFPGATPoTemp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); processTempSnsrsADCRead ( TEMPSENSORS_CONDUCTIVITY_SENSOR_1_TEMP_SENSOR, getFPGACD1Temp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); @@ -747,20 +776,6 @@ processHtrsTempSnsrsADCRead ( TEMPSENSORS_PRIMARY_HEATER_COLD_JUNCTION_TEMP_SENSOR, getFPGAPRimaryColdJunctionTemp(), getFPGATrimmerHeaterFlags(), getFPGAPrimaryHeaterReadCount() ); processHtrsTempSnsrsADCRead ( TEMPSENSORS_TRIMMER_HEATER_COLD_JUNCTION_TEMP_SENSOR, getFPGATrimmerColdJunctionTemp(), getFPGATrimmerHeaterFlags(), getFPGATrimmerHeaterReadCount() ); - - // TODO Remove after testing - /*processADCRead_old( TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR, getFPGATPiTemp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); - processADCRead_old( TEMPSENSORS_OUTLET_PRIMARY_HEATER_TEMP_SENSOR, getFPGATPoTemp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); - processADCRead_old( TEMPSENSORS_CONDUCTIVITY_SENSOR_1_TEMP_SENSOR, getFPGACD1Temp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); - processADCRead_old( TEMPSENSORS_CONDUCTIVITY_SENSOR_2_TEMP_SENSOR, getFPGACD2Temp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); - processADCRead_old( TEMPSENSORS_OUTLET_REDUNDANCY_TEMP_SENSOR, getFPGATHDoTemp(), getFPGATHDoErrorCount(), getFPGATHDoReadCount() ); - processADCRead_old( TEMPSENSORS_INLET_DIALYSATE_TEMP_SENSOR, getFPGATDiTemp(), getFPGATDiErrorCount(), getFPGATDiReadCount() ); - processADCRead_old( TEMPSENSORS_PRIMARY_HEATER_THERMO_COUPLE_TEMP_SENSOR, getFPGAPrimaryHeaterTemp(), getFPGAPrimaryHeaterFlags(), getFPGAPrimaryHeaterReadCount() ); - processADCRead_old( TEMPSENSORS_TRIMMER_HEATER_THERMO_COUPLE_TEMP_SESNOR, getFPGATrimmerHeaterTemp(), getFPGATrimmerHeaterFlags(), getFPGATrimmerHeaterReadCount() ); - processADCRead_old( TEMPSENSORS_PRIMARY_HEATER_COLD_JUNCTION_TEMP_SENSOR, getFPGAPRimaryColdJunctionTemp(), getFPGATrimmerHeaterFlags(), getFPGAPrimaryHeaterReadCount() ); - processADCRead_old( TEMPSENSORS_TRIMMER_HEATER_COLD_JUNCTION_TEMP_SENSOR, getFPGATrimmerColdJunctionTemp(), getFPGATrimmerHeaterFlags(), getFPGATrimmerHeaterReadCount() );*/ - //TODO remove after testing - // Check the inlet water is within temperature range at the desired time interval if ( elapsedTime == 0 ) {