Index: firmware/.launches/DG.launch =================================================================== diff -u -r5319f126f8dba1a758e78a53184e8eb0863437db -r3982a398c9c14a8f7688656b60055d4010328456 --- firmware/.launches/DG.launch (.../DG.launch) (revision 5319f126f8dba1a758e78a53184e8eb0863437db) +++ firmware/.launches/DG.launch (.../DG.launch) (revision 3982a398c9c14a8f7688656b60055d4010328456) @@ -2,7 +2,7 @@ - + Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -r97fd3b011a2cdafbeb960fd388b4548c02274a67 -r3982a398c9c14a8f7688656b60055d4010328456 --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 97fd3b011a2cdafbeb960fd388b4548c02274a67) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 3982a398c9c14a8f7688656b60055d4010328456) @@ -13,15 +13,34 @@ * @brief DG temperature sensors controller * **************************************************************************/ +#include #include "TemperatureSensors.h" #include "FPGA.h" // Private variables -//TODO sensor ADC ranges as #define -//TODO sensor ADC to conversion as #define +#define PRIMARY_HEATER_EXT_TEMP_SENSORS_GAIN 16U +#define PRIMARY_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE 19600U +#define PRIMARY_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE 1000U +#define COND_SENSORS_TEMP_SENSOR_GAIN 16U +#define COND_SENSORS_TEMP_SENSOR_REF_RESISTANCE 19600U +#define COND_SENSORS_TEMP_SENSOR_0_DEGREE_RESISTANCE 1000U + +#define TRIMMER_HEATER_EXT_TEMP_SENSORS_GAIN 32U +#define TRIMMER_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE 5110U +#define TRIMMER_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE 100U + + +#define TEMPERATURE_SENSORS_ADC_BITS 24U +#define TEMPERATURE_SENSORS_ADC_MAX_COUNT (pow(2,TEMPERATURE_SENSORS_ADC_BITS)) + +#define TEMP_EQUATION_COEFF_A (3.9083 * pow(10,-3)) +#define TEMP_EQUATION_COEFF_B (-5.775 * pow(10,-7)) + + +/// Temperature sensor self test states typedef enum tempSensors_Self_Test_States { TEMPSENSORS_SELF_TEST_START = 0, @@ -31,6 +50,7 @@ NUM_OF_TEMPSENSORS_SELF_TEST_STATES } TEMPSENSORS_SELF_TEST_STATES_T; +/// temperature sensor exec states typedef enum tempSensors_Exec_States { TEMPSENSORS_EXEC_STATE_WAIT_FOR_POST = 0, @@ -39,7 +59,7 @@ } TEMPSENSORS_EXEC_STATES_T; -static SELF_TEST_STATUS_T tempSensorsSelfTestResult = SELF_TEST_STATUS_IN_PROGRESS; ///< Self test result of the TemperatureSensors module +static SELF_TEST_STATUS_T tempSensorsSelfTestResult = SELF_TEST_STATUS_IN_PROGRESS; ///< Self test result of the TemperatureSensors module static TEMPSENSORS_SELF_TEST_STATES_T tempSensorsSelfTestState = TEMPSENSORS_SELF_TEST_START; ///< TemperatureSensor self test state static TEMPSENSORS_EXEC_STATES_T tempSensorsExecState = TEMPSENSORS_EXEC_STATE_WAIT_FOR_POST; ///< TemperatureSensor exec state @@ -52,6 +72,8 @@ static TEMPSENSORS_EXEC_STATES_T handleExecWaitForPost ( void ); static TEMPSENSORS_EXEC_STATES_T handleExecReadSensors ( void ); +static F32 getADC2TempConversion ( U32 adc, U32 gain, U32 refResistance, U32 zeroDegResistance ); + // Public functions /************************************************************************* @@ -109,7 +131,6 @@ //TODO add software fault tempSensorsSelfTestState = TEMPSENSORS_SELF_TEST_COMPLETE; } - return tempSensorsSelfTestResult; } @@ -128,16 +149,96 @@ { case TEMPSENSORS_EXEC_STATE_WAIT_FOR_POST: + tempSensorsExecState = handleExecWaitForPost(); break; case TEMPSENSROS_EXEC_STATE_READ_SENSORS: - // task priority + // overwrite structure for the sensors + tempSensorsExecState = handleExecReadSensors(); break; default: // TODO add software fault tempSensorsExecState = TEMPSENSROS_EXEC_STATE_READ_SENSORS; } +} +// Private functions + +/************************************************************************* + * @brief getADC2TempConversion + * The getADC2TempConversion calculates the temperature from ADC read from + * FPGA + * @details + * Inputs : U32 (adc, gain, refResistance) + * Outputs : F32 (temperature in deg C) + * @param none + * @return F32 (temperature in deg C) + *************************************************************************/ +static F32 getADC2TempConversion ( U32 adc, U32 gain, U32 refResistance, U32 zeroDegResistance ) +{ + //R(RTD) = R(ref) * (adc – 2^N-1) / (G *2^N-1); + F32 resistance = (refResistance * (adc - pow(2,(TEMPERATURE_SENSORS_ADC_BITS - 1)))) / (gain * pow(2,(TEMPERATURE_SENSORS_ADC_BITS - 1))); + + //T=(-A+√(A^2-4B(1-R_T/R_0 )))/2B + F32 secondSqrtPart = 4 * TEMP_EQUATION_COEFF_B * (1 - (resistance / zeroDegResistance)); + F32 temperature = (-TEMP_EQUATION_COEFF_A + sqrt(pow(TEMP_EQUATION_COEFF_A, 2) - secondSqrtPart)) / (2 * TEMP_EQUATION_COEFF_B); + + return temperature; } + +static TEMPSENSORS_SELF_TEST_STATES_T handleSelfTestStart ( void ) +{ + return TEMPSENSORS_SELF_TEST_ADC_CHECK; +} +static TEMPSENSORS_SELF_TEST_STATES_T handleSelfTestADCCheck ( void ) +{ + TEMPSENSORS_SELF_TEST_STATES_T state = TEMPSENSORS_SELF_TEST_ADC_CHECK; + // TODO: check ADC and stuff + + // REMOVE THIS CODE + state = TEMPSENSORS_SELF_TEST_CONSISTENCY_CHECK; + // REMOVE THIS CODEs + + return state; +} +static TEMPSENSORS_SELF_TEST_STATES_T handleSelfTestConsistencyCheck ( void ) +{ + TEMPSENSORS_SELF_TEST_STATES_T state = TEMPSENSORS_SELF_TEST_CONSISTENCY_CHECK; + //TODO steps to consistency check + + // REMOVE THIS CODE + state = TEMPSENSORS_SELF_TEST_COMPLETE; + // REMOVE THIS CODE + return state; +} + +static TEMPSENSORS_EXEC_STATES_T handleExecWaitForPost ( void ) +{ + TEMPSENSORS_EXEC_STATES_T state = TEMPSENSORS_EXEC_STATE_WAIT_FOR_POST; + + if ( tempSensorsSelfTestState == TEMPSENSORS_SELF_TEST_COMPLETE ) + { + // TODO FOR TESTING, REMOVE THIS CODE + U32 testADC = 16327313; + + //F32 temp = getADC2TempConversion ( testADC, TRIMMER_HEATER_EXT_TEMP_SENSORS_GAIN, TRIMMER_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE, + // TRIMMER_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE); + + F32 temp = getADC2TempConversion ( testADC, PRIMARY_HEATER_EXT_TEMP_SENSORS_GAIN, PRIMARY_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE, + PRIMARY_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE); + + // TODO REMOVE THE ABOVE CODE + + state = TEMPSENSROS_EXEC_STATE_READ_SENSORS; + } + return state; +} +static TEMPSENSORS_EXEC_STATES_T handleExecReadSensors ( void ) +{ + TEMPSENSORS_EXEC_STATES_T state = TEMPSENSROS_EXEC_STATE_READ_SENSORS; + + //TODO read the sensors + return state; +} Index: firmware/App/DGCommon.h =================================================================== diff -u -r8638b207699a3a48e3657e838e24ae838369c867 -r3982a398c9c14a8f7688656b60055d4010328456 --- firmware/App/DGCommon.h (.../DGCommon.h) (revision 8638b207699a3a48e3657e838e24ae838369c867) +++ firmware/App/DGCommon.h (.../DGCommon.h) (revision 3982a398c9c14a8f7688656b60055d4010328456) @@ -28,7 +28,7 @@ // ********** build switches ********** #ifndef _VECTORCAST_ -// #define RM46_EVAL_BOARD_TARGET 1 + #define RM46_EVAL_BOARD_TARGET 1 // #define SIMULATE_UI 1 #ifdef DEBUG_ENABLED Index: firmware/App/Modes/ModeInitPOST.c =================================================================== diff -u -r499e5de29e706d09f79ba22511068990c4044e84 -r3982a398c9c14a8f7688656b60055d4010328456 --- firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision 499e5de29e706d09f79ba22511068990c4044e84) +++ firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision 3982a398c9c14a8f7688656b60055d4010328456) @@ -17,6 +17,7 @@ #include "CPLD.h" #include "FPGA.h" #include "OperationModes.h" +#include "TemperatureSensors.h" #include "WatchdogMgmt.h" #include "ModeInitPOST.h" @@ -27,6 +28,7 @@ POST_STATE_START = 0, POST_STATE_FPGA, POST_STATE_WATCHDOG, + POST_STATE_TEMPERATURE_SENSORS, POST_STATE_COMPLETED, POST_STATE_FAILED, NUM_OF_POST_STATES @@ -92,13 +94,20 @@ { case POST_STATE_START: postState = POST_STATE_FPGA; + // FOR TESTING REMOVE + postState = POST_STATE_TEMPERATURE_SENSORS; break; case POST_STATE_FPGA: testStatus = execFPGATest(); postState = handlePOSTStatus( testStatus ); break; + case POST_STATE_TEMPERATURE_SENSORS: + testStatus = execTemperatureSensorsSelfTest(); + 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 -r8b56b0c617ac49536b8d53852b9621be873bade6 -r3982a398c9c14a8f7688656b60055d4010328456 --- firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision 8b56b0c617ac49536b8d53852b9621be873bade6) +++ firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision 3982a398c9c14a8f7688656b60055d4010328456) @@ -19,6 +19,7 @@ #include "FPGA.h" #include "InternalADC.h" #include "LoadCell.h" +#include "TemperatureSensors.h" #include "WatchdogMgmt.h" #include "TaskPriority.h" @@ -44,6 +45,9 @@ // 2nd pass for FPGA execFPGAOut(); + // Temperature sensors read + execTemperatureSensors(); + // check in with watchdog manager checkInWithWatchdogMgmt( TASK_PRIORITY );