Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -r2666279eebfdc11eb611219cb03ba2549f86e381 -rb00abccd173d0c989ab8d352366dba108f5e8827 --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 2666279eebfdc11eb611219cb03ba2549f86e381) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision b00abccd173d0c989ab8d352366dba108f5e8827) @@ -35,26 +35,26 @@ * @{ */ -#define MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE 0.89 ///< Main primary heater (heater A) max duty cycle (89%) -#define SMALL_PRIMAY_HEATER_MAX_DUTY_CYCLE 0.50 ///< Small Primary heater (heater B) max duty cycle (50%) -#define TRIMMER_HEATER_MAX_DUTY_CYCLE 0.50 ///< Trimmer heater max duty cycle (50%) -#define HEATERS_MIN_DUTY_CYCLE 0.00 ///< Primary and trimmer heaters minimum duty cycle (0.00%) +#define MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE 0.89 ///< Main primary heater (heater A) max duty cycle (89%) +#define SMALL_PRIMAY_HEATER_MAX_DUTY_CYCLE 0.50 ///< Small Primary heater (heater B) max duty cycle (50%) +#define TRIMMER_HEATER_MAX_DUTY_CYCLE 0.50 ///< Trimmer heater max duty cycle (50%) +#define HEATERS_MIN_DUTY_CYCLE 0.00 ///< Primary and trimmer heaters minimum duty cycle (0.00%) -#define PRIMARY_HEATERS_P_COEFFICIENT 0.02 ///< Primary heaters proportional coefficient -#define PRIMARY_HEATERS_I_COEFFICIENT 0.001 ///< Primary heaters integral coefficient +#define PRIMARY_HEATERS_P_COEFFICIENT 0.02 ///< Primary heaters proportional coefficient +#define PRIMARY_HEATERS_I_COEFFICIENT 0.001 ///< Primary heaters integral coefficient -#define TRIMMER_HEATER_P_COEFFICIENT 0.02 ///< Trimmer heater proportional coefficient -#define TRIMMER_HEATER_I_COEFFICIENT 0.001 ///< Trimmer heater integral coefficient +#define TRIMMER_HEATER_P_COEFFICIENT 0.02 ///< Trimmer heater proportional coefficient +#define TRIMMER_HEATER_I_COEFFICIENT 0.001 ///< Trimmer heater integral coefficient -#define CONTROLLER_CHECK_INTERVAL_COUNT 10U ///< Time interval count to check the PI controller -#define TEMP_SENSORS_INTERVAL_COUNT 10U ///< Temperature sensors interval count +#define CONTROLLER_CHECK_INTERVAL_COUNT 10U ///< Time interval count to check the PI controller +#define TEMP_SENSORS_INTERVAL_COUNT 10U ///< Temperature sensors interval count #define HEATERS_DATA_PUBLISH_INTERVAL (500 / TASK_GENERAL_INTERVAL ) ///< Heaters data publish interval #define SMALL_PRIMARY_AND_TRIMMER_HEATERS_POST_TARGET_TEMPERATURE 40U ///< Small primary and trimmer heaters target temperature during POST -#define MAIN_PRIMARY_HEATER_POST_TARGET_TEMPERATURE 35U ///< Main primary heater target temperature during POST -#define HEATERS_POST_HEAT_UP_TIME_SECONDS 50U ///< The time that the heaters are heated up to reach to the target temperature during POST -#define HEATERS_POST_TEMPERATURE_TOLERANCE 1U ///< Tolerance of the sensors to the target temperature during POST +#define MAIN_PRIMARY_HEATER_POST_TARGET_TEMPERATURE 35U ///< Main primary heater target temperature during POST +#define HEATERS_POST_HEAT_UP_TIME_SECONDS 50U ///< The time that the heaters are heated up to reach to the target temperature during POST +#define HEATERS_POST_TEMPERATURE_TOLERANCE 1U ///< Tolerance of the sensors to the target temperature during POST /// Heaters self test enums typedef enum heaters_self_test_states @@ -415,12 +415,15 @@ *************************************************************************/ static HEATERS_SELF_TEST_STATES_T handleHeatersSelfTestStart ( void ) { - heatersSelfTestResult = SELF_TEST_STATUS_IN_PROGRESS; + // Code temporarily disabled since POST is not tested yet + heatersSelfTestResult = SELF_TEST_STATUS_PASSED; + return HEATERS_SELF_TEST_COMPLETE; + /*heatersSelfTestResult = SELF_TEST_STATUS_IN_PROGRESS; setSmallPrimaryHeaterPWM ( SMALL_PRIMAY_HEATER_MAX_DUTY_CYCLE ); setTrimmerHeaterPWM ( TRIMMER_HEATER_MAX_DUTY_CYCLE ); selfTestElapsedTime = getMSTimerCount(); - return HEATERS_SELF_TEST_SMALL_PRIMARY_AND_TRIMMER_HEATERS; + return HEATERS_SELF_TEST_SMALL_PRIMARY_AND_TRIMMER_HEATERS;*/ } /*********************************************************************//** @@ -835,7 +838,7 @@ getTemperatureValue ( TEMPSENSORS_PRIMARY_HEATER_COLD_JUNCTION_TEMP_SENSOR ), getTemperatureValue ( TEMPSENSORS_TRIMMER_HEATER_COLD_JUNCTION_TEMP_SENSOR )) //(F32)(convertedPriJC*0.0625), - //(F32)(convertedTriJC*0.0625)); //TODO Remove flow reader later */ + //(F32)(convertedTriJC*0.0625)); //TODO Remove flow reader later sprintf( debugTempStr, "MPDC: %2d, SPDC: %2d, THDC: %2d, TPi: %6.2f, TPo: %6.2f, TRo: %6.2f, TPh: %6.2f, TTh: %6.2f, PCJ: %6.2f, TCJ: %6.2f," "TPI: %6.2f, TTI: %6.2f\r\n", (U32)(mainPrimaryHeaterDutyCycle*100), (U32)(smallPrimaryHeaterDutyCycle*100), (U32)(trimmerHeaterDutyCycle*100), @@ -847,17 +850,21 @@ getTemperatureValue ( TEMPSENSORS_PRIMARY_HEATER_COLD_JUNCTION_TEMP_SENSOR ), getTemperatureValue ( TEMPSENSORS_TRIMMER_HEATER_COLD_JUNCTION_TEMP_SENSOR ), getTemperatureValue ( TEMPSENSORS_PRIMARY_HEATER_THERMO_COUPLE_TEMP_SENSOR), - getTemperatureValue ( TEMPSENSORS_TRIMMER_HEATER_THERMO_COUPLE_TEMP_SENSOR)); + getTemperatureValue ( TEMPSENSORS_TRIMMER_HEATER_THERMO_COUPLE_TEMP_SENSOR));*/ - /*F32 Pthermo = getTemperatureValue ( TEMPSENSORS_PRIMARY_HEATER_INTERNAL_TEMP ); - sprintf( debugTempStr, "TPh: %6.2f, TTh: %6.2f, PCJ: %6.2f, TCJ: %6.2f, TPI: %6.2f, TTI: %6.2f\r\n", - getTemperatureValue ( TEMPSENSORS_PRIMARY_HEATER_INTERNAL_TEMP ), - getTemperatureValue ( TEMPSENSORS_TRIMMER_HEATER_INTERNAL_TEMP ), + + sprintf( debugTempStr, "TPo: %6.2f, PriCJ: %6.2f, PriTC: %6.2f, TpriInt: %6.2f, TRo: %6.2f, TriCJ: %6.2f, TriTC: %6.2f, TtriInt: %6.2f\r\n", + getTemperatureValue ( TEMPSENSORS_OUTLET_PRIMARY_HEATER_TEMP_SENSOR ), getTemperatureValue ( TEMPSENSORS_PRIMARY_HEATER_COLD_JUNCTION_TEMP_SENSOR ), - getTemperatureValue ( TEMPSENSORS_TRIMMER_HEATER_COLD_JUNCTION_TEMP_SENSOR ), getTemperatureValue ( TEMPSENSORS_PRIMARY_HEATER_THERMO_COUPLE_TEMP_SENSOR ), - getTemperatureValue ( TEMPSENSORS_TRIMMER_HEATER_THERMO_COUPLE_TEMP_SESNOR ));*/ + getTemperatureValue ( TEMPSENSORS_PRIMARY_HEATER_INTERNAL_TEMP ), + getTemperatureValue ( TEMPSENSORS_OUTLET_REDUNDANCY_TEMP_SENSOR ), + getTemperatureValue ( TEMPSENSORS_TRIMMER_HEATER_COLD_JUNCTION_TEMP_SENSOR ), + getTemperatureValue ( TEMPSENSORS_TRIMMER_HEATER_THERMO_COUPLE_TEMP_SENSOR ), + getTemperatureValue ( TEMPSENSORS_TRIMMER_HEATER_INTERNAL_TEMP ) + ); + sendDebugData ( (U08*)debugTempStr, strlen(debugTempStr) ); } #endif 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 ) { Index: firmware/App/Modes/ModeInitPOST.c =================================================================== diff -u -r4df3087b3b1944c60cd33c752a81c3fdba19189f -rb00abccd173d0c989ab8d352366dba108f5e8827 --- firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision 4df3087b3b1944c60cd33c752a81c3fdba19189f) +++ firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision b00abccd173d0c989ab8d352366dba108f5e8827) @@ -20,6 +20,7 @@ #include "TemperatureSensors.h" #include "WatchdogMgmt.h" #include "ModeInitPOST.h" +#include "Heaters.h" // ********** private definitions ********** @@ -29,6 +30,7 @@ POST_STATE_FPGA, POST_STATE_WATCHDOG, POST_STATE_TEMPERATURE_SENSORS, + POST_STATE_HEATERS, POST_STATE_COMPLETED, POST_STATE_FAILED, NUM_OF_POST_STATES @@ -109,6 +111,11 @@ postState = handlePOSTStatus( testStatus ); break; + case POST_STATE_HEATERS: + testStatus = execHeatersSelfTest(); + postState = handlePOSTStatus( testStatus ); + break; + case POST_STATE_WATCHDOG: testStatus = execWatchdogTest(); handlePOSTStatus( testStatus ); // ignoring return value because last test Index: firmware/App/Tasks/TaskPriority.c =================================================================== diff -u -r3982a398c9c14a8f7688656b60055d4010328456 -rb00abccd173d0c989ab8d352366dba108f5e8827 --- firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision 3982a398c9c14a8f7688656b60055d4010328456) +++ firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision b00abccd173d0c989ab8d352366dba108f5e8827) @@ -22,6 +22,7 @@ #include "TemperatureSensors.h" #include "WatchdogMgmt.h" #include "TaskPriority.h" +#include "Heaters.h" /************************************************************************* * @brief taskPriority @@ -48,6 +49,9 @@ // Temperature sensors read execTemperatureSensors(); + // Heaters monitor + execHeatersMonitor(); + // check in with watchdog manager checkInWithWatchdogMgmt( TASK_PRIORITY );