Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -ra1cce9bd6eaa93435e55d7328e24b39d521a266f -r3fc7575057616cba1efb317d41ded824a8a74eb4 --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision a1cce9bd6eaa93435e55d7328e24b39d521a266f) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 3fc7575057616cba1efb317d41ded824a8a74eb4) @@ -27,6 +27,7 @@ #include "TemperatureSensors.h" #include "SystemCommMessages.h" #include "PIControllers.h" +#include "TaskGeneral.h" /** * @addtogroup Heaters @@ -47,6 +48,8 @@ #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 ) // TODO add to AE + /// Heaters self test enums typedef enum heaters_self_test_states { @@ -100,6 +103,9 @@ static BOOL isPrimaryHeaterOn; ///< Flag to show if the primary heater is on static BOOL isTrimmerHeaterOn; ///< Flag to show if the trimmer heater is on +static OVERRIDE_U32_T heatersDataPublishInterval = { HEATERS_DATA_PUBLISH_INTERVAL, + HEATERS_DATA_PUBLISH_INTERVAL, 0, 0 }; // TODO add to AE + // private functions prototypes static PRIMARY_HEATERS_EXEC_STATES_T handlePrimaryHeaterStateOff ( void ); @@ -112,15 +118,16 @@ static void setSmallPrimaryHeaterPWM ( F32 pwm ); static void setTrimmerHeaterPWM ( F32 pwm ); static void resetHeaterState ( NAME_OF_HEATER_T heater ); -static void publishTemperatureData ( void ); +static void publishHeatersData ( void ); +static DATA_GET_PROTOTYPE( U32, getPublishHeatersDataInterval ); //TODO add to AE // TODO: Remove the below code. FOR TESTING ONLY #define PRIMARY_HEATER_MIBSPI1_PORT_MASK 0x00000002 // (CS1 - re-purposed as input GPIO) #define TOGGLEPRIMAYHEATER() (( mibspiREG1->PC2 & PRIMARY_HEATER_MIBSPI1_PORT_MASK ) != 0) -static void temporaryStartROPump ( void ); +/*static void temporaryStartROPump ( void ); static void temporaryStopROPump ( void ); static void temporaryStartFan ( void ); -static void temporaryStopFan ( void ); +static void temporaryStopFan ( void );*/ //TODO: Remove the above code. FOR TESTING ONLY // Public functions @@ -400,16 +407,20 @@ PRIMARY_HEATERS_EXEC_STATES_T state = PRIMARY_HEATERS_EXEC_STATE_OFF; // TODO for testing only. remove +#ifdef DEBUG_ENABLED +#ifdef ENABLE_DIP_SWITCHES if ( TOGGLEPRIMAYHEATER() ) { setPrimaryHeaterTargetTemperature ( 37 ); - //if ( getTemperatureValue ( TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR ) > 0 ) - { - startPrimaryHeater(); - temporaryStartROPump(); - temporaryStartFan(); - } + startPrimaryHeater(); + F32 pumpPWM = 1; + etpwmSetCmpB( etpwmREG2, (U32)( (S32)( ( pumpPWM * (F32)(etpwmREG2->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); + F32 fanPWM = 0.25; + etpwmSetCmpA( etpwmREG6, (U32)( (S32)( ( fanPWM * (F32)(etpwmREG6->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); + etpwmSetCmpB( etpwmREG6, (U32)( (S32)( ( fanPWM * (F32)(etpwmREG6->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); } +#endif +#endif // TODO remove this code for testing if ( isPrimaryHeaterOn ) @@ -460,15 +471,22 @@ } primaryHeaterTimerCounter = 0; } - publishTemperatureData(); + publishHeatersData(); // TODO remove this code +#ifdef DEBUG_ENABLED +#ifdef ENABLE_DIP_SWITCHES if ( !TOGGLEPRIMAYHEATER() ) { stopPrimaryHeater(); - temporaryStopROPump(); - temporaryStopFan(); + F32 pumpPWM = 0; + etpwmSetCmpB( etpwmREG2, (U32)( (S32)( ( pumpPWM * (F32)(etpwmREG2->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); + F32 fanPWM = 0; + etpwmSetCmpA( etpwmREG6, (U32)( (S32)( ( fanPWM * (F32)(etpwmREG6->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); + etpwmSetCmpB( etpwmREG6, (U32)( (S32)( ( fanPWM * (F32)(etpwmREG6->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); } +#endif +#endif // TODO Remove this code if ( ! isPrimaryHeaterOn ) @@ -494,17 +512,24 @@ TRIMMER_HEATER_EXEC_STATES_T state = TRIMMER_HEATER_EXEC_STATE_OFF; // TODO for testing only. remove +#ifdef DEBUG_ENABLED +#ifdef ENABLE_DIP_SWITCHES if ( TOGGLEPRIMAYHEATER() ) { setTrimmerHeaterTargetTemperature ( 38 ); - //if ( getTemperatureValue ( TEMPSENSORS_OUTLET_REDUNDANCY_TEMP_SENSOR ) > 0 ) - { - startTrimmerHeater(); - //temporaryStartROPump(); - //temporaryStartFan(); - } - //state = TRIMMER_HEATER_EXEC_STATE_CONTROL_TO_TARGET; + startTrimmerHeater(); + //F32 pumpPWM = 1; + //etpwmSetCmpB( etpwmREG2, (U32)( (S32)( ( pumpPWM * (F32)(etpwmREG2->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); + //temporaryStartROPump(); + //temporaryStartFan(); + //F32 fanPWM = 0.25; + //etpwmSetCmpA( etpwmREG6, (U32)( (S32)( ( fanPWM * (F32)(etpwmREG6->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); + //etpwmSetCmpB( etpwmREG6, (U32)( (S32)( ( fanPWM * (F32)(etpwmREG6->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); + //temporaryStartROPump(); + //temporaryStartFan(); } +#endif +#endif // TODO remove this code for testing if ( isTrimmerHeaterOn ) @@ -538,15 +563,26 @@ setTrimmerHeaterPWM ( trimmerHeaterDutyCycle ); trimmerHeaterTimerCounter = 0; } - publishTemperatureData(); + publishHeatersData(); // TODO remove this code +#ifdef DEBUG_ENABLED +#ifdef ENABLE_DIP_SWITCHES if ( !TOGGLEPRIMAYHEATER() ) { stopTrimmerHeater(); - temporaryStopROPump(); - temporaryStopFan(); + //F32 pumpPWM = 0; + //etpwmSetCmpB( etpwmREG2, (U32)( (S32)( ( pumpPWM * (F32)(etpwmREG2->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); + //temporaryStartROPump(); + //temporaryStartFan(); + //F32 fanPWM = 0; + //etpwmSetCmpA( etpwmREG6, (U32)( (S32)( ( fanPWM * (F32)(etpwmREG6->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); + //etpwmSetCmpB( etpwmREG6, (U32)( (S32)( ( fanPWM * (F32)(etpwmREG6->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); + //temporaryStopROPump(); + //temporaryStopFan(); } +#endif +#endif // TODO Remove this code if ( ! isTrimmerHeaterOn ) @@ -625,6 +661,28 @@ } } +/*********************************************************************//** + * @brief + * The getPublishHeatersDataInterval function set the publish interval + * either from override or from actual data + * @details + * Inputs : heatersDataPublishInterval + * Outputs : none + * @param : none + * @return result + *************************************************************************/ +U32 getPublishHeatersDataInterval ( void ) +{ + U32 result = heatersDataPublishInterval.data; + + if ( OVERRIDE_KEY == heatersDataPublishInterval.override ) + { + result = heatersDataPublishInterval.ovData; + } + + return result; +} + /************************************************************************* * @brief * The publishTemperatureData function publishes the temperature sensors @@ -635,10 +693,13 @@ * @param none * @return none *************************************************************************/ -static void publishTemperatureData ( void ) +static void publishHeatersData ( void ) { - if ( ++dataPublicationTimerCounter >= TEMP_SENSORS_INTERVAL_COUNT ) + if ( ++dataPublicationTimerCounter >= getPublishHeatersDataInterval() ) { + broadcastHeatersData ( (U32)(mainPrimaryHeaterDutyCycle*100), + (U32)(smallPrimaryHeaterDutyCycle*100), + (U32)(trimmerHeaterDutyCycle*100) ); #ifdef DEBUG_ENABLED { char debugTempStr[ 256 ]; @@ -690,8 +751,62 @@ } } +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + +/************************************************************************* + * @brief + * The testSetHeatersPublishIntervalOverride function overrides the heaters + * publish data time interval + * @details + * Inputs : heatersDataPublishInterval + * Outputs : heatersDataPublishInterval + * @param value + * @return result + *************************************************************************/ +BOOL testSetHeatersPublishIntervalOverride ( U32 value ) +{ + BOOL result = FALSE; + + if ( isTestingActivated() ) + { + U32 interval = value / TASK_GENERAL_INTERVAL; + + result = TRUE; + heatersDataPublishInterval.ovData = interval; + heatersDataPublishInterval.override = OVERRIDE_KEY; + } + + return result; +} + +/************************************************************************* + * @brief + * The testResetHeatersPublishIntervalOverride function resets the heaters + * publish time interval to its previous time interval + * @details + * Inputs : heatersDataPublishInterval + * Outputs : heatersDataPublishInterval + * @param none + * @return result + *************************************************************************/ +BOOL testResetHeatersPublishIntervalOverride ( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + heatersDataPublishInterval.override = OVERRIDE_RESET; + heatersDataPublishInterval.ovData = heatersDataPublishInterval.ovInitData; + } + + return result; +} + // TODO REMOVE THE CODE -static void temporaryStartROPump ( void ) +/*static void temporaryStartROPump ( void ) { F32 tempPWM = 1; etpwmSetCmpB( etpwmREG2, (U32)( (S32)( ( tempPWM * (F32)(etpwmREG2->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); @@ -711,7 +826,7 @@ { etpwmSetCmpA( etpwmREG6, 0 ); etpwmSetCmpB( etpwmREG6, 0 ); -} +}*/ // TODO REMOVE THE CODE /**@}*/ Index: firmware/App/Controllers/Heaters.h =================================================================== diff -u -r26c64288f4baab3707eb9555636b61c0e747f965 -r3fc7575057616cba1efb317d41ded824a8a74eb4 --- firmware/App/Controllers/Heaters.h (.../Heaters.h) (revision 26c64288f4baab3707eb9555636b61c0e747f965) +++ firmware/App/Controllers/Heaters.h (.../Heaters.h) (revision 3fc7575057616cba1efb317d41ded824a8a74eb4) @@ -47,4 +47,7 @@ void execTrimmerHeater ( void ); +BOOL testSetHeatersPublishIntervalOverride ( U32 value ); // TODO add to AE +BOOL testResetHeatersPublishIntervalOverride ( void ); //TODO add to AE + #endif Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -r7364468c47160aad7f912f710431345af35d21b7 -r3fc7575057616cba1efb317d41ded824a8a74eb4 --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 7364468c47160aad7f912f710431345af35d21b7) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 3fc7575057616cba1efb317d41ded824a8a74eb4) @@ -137,9 +137,9 @@ static S32 rawADCReads [ NUM_OF_TEMPERATURE_SENSORS ] [ MAX_NUM_OF_RAW_ADC_SAMPLES ]; ///< Raw ADC reads array static S32 runningSumAndIndex [ NUM_OF_TEMPERATURE_SENSORS ] - [ NUM_OF_RUNNING_SUM_AND_INDEX_ARRAY_COLUMNS ]; ///< Running sum and next ADC index array + [ NUM_OF_RUNNING_SUM_AND_INDEX_ARRAY_COLUMNS ]; ///< Running sum and next ADC index array static U32 tempSensorsConstants [ NUM_OF_TEMPERATURE_SENSORS ] - [ NUM_OF_TEMP_SENSORS_CONSTANTS_ARRAY_COLUMNS ];///< Temperature sensors constants array + [ NUM_OF_TEMP_SENSORS_CONSTANTS_ARRAY_COLUMNS ]; ///< Temperature sensors constants array static U32 readAndErrorCounts [ NUM_OF_TEMPERATURE_SENSORS ] [ NUM_OF_READ_AND_ERROR_ARRAY_COLUMNS ]; ///< Read and error counts from FPGA array //static F32 temperatureValues [ NUM_OF_TEMPERATURE_SENSORS ]; ///< Temperature values array //TODO Remove @@ -718,6 +718,10 @@ } /************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + +/************************************************************************* * @brief * The testSetMeasuredTemperatureOverride function sets the override value * for a specific temperature sensor @@ -728,7 +732,7 @@ * @return result *************************************************************************/ -BOOL testSetMeasuredTemperatureOverride ( TEMPERATURE_SENSORS_T sensor, F32 temperature ) +BOOL testSetMeasuredTemperatureOverride ( U32 sensor, F32 temperature ) { BOOL result = FALSE; @@ -737,7 +741,7 @@ if ( isTestingActivated() ) { result = TRUE; - temperatureValues [ sensor ].ovData = temperature; + temperatureValues [ sensor ].ovData = temperature; temperatureValues [ sensor ].override = OVERRIDE_KEY; } } @@ -755,7 +759,7 @@ * @param sensor * @return result *************************************************************************/ -BOOL testResetMeasuredTemperatureOverride ( TEMPERATURE_SENSORS_T sensor ) +BOOL testResetMeasuredTemperatureOverride ( U32 sensor ) { BOOL result = FALSE; @@ -765,7 +769,7 @@ { result = TRUE; temperatureValues [ sensor ].override = OVERRIDE_RESET; - temperatureValues [ sensor ].ovData = temperatureValues [ sensor ].ovInitData; + temperatureValues [ sensor ].ovData = temperatureValues [ sensor ].ovInitData; } } Index: firmware/App/Controllers/TemperatureSensors.h =================================================================== diff -u -r26c64288f4baab3707eb9555636b61c0e747f965 -r3fc7575057616cba1efb317d41ded824a8a74eb4 --- firmware/App/Controllers/TemperatureSensors.h (.../TemperatureSensors.h) (revision 26c64288f4baab3707eb9555636b61c0e747f965) +++ firmware/App/Controllers/TemperatureSensors.h (.../TemperatureSensors.h) (revision 3fc7575057616cba1efb317d41ded824a8a74eb4) @@ -54,7 +54,7 @@ DATA_ARRAY_GET_PROTOTYPE ( F32, getTemperatureValue, sensor ); -BOOL testSetMeasuredTemperatureOverride ( TEMPERATURE_SENSORS_T sensor, F32 temperature ); //Todo add to AE -BOOL testResetMeasuredTemperatureOverride ( TEMPERATURE_SENSORS_T sensor ); //TODO add to AE +BOOL testSetMeasuredTemperatureOverride ( U32 sensor, F32 temperature ); //Todo add to AE +BOOL testResetMeasuredTemperatureOverride ( U32 sensor ); //TODO add to AE #endif Index: firmware/App/DGCommon.h =================================================================== diff -u -r31b53220d894e272a8f9a8a49d3c9110150489db -r3fc7575057616cba1efb317d41ded824a8a74eb4 --- firmware/App/DGCommon.h (.../DGCommon.h) (revision 31b53220d894e272a8f9a8a49d3c9110150489db) +++ firmware/App/DGCommon.h (.../DGCommon.h) (revision 3fc7575057616cba1efb317d41ded824a8a74eb4) @@ -31,7 +31,7 @@ #ifndef _VECTORCAST_ // #define RM46_EVAL_BOARD_TARGET 1 // #define SIMULATE_UI 1 - + #define ENABLE_DIP_SWITCHES 1 #ifdef DEBUG_ENABLED #include #include Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -ra1cce9bd6eaa93435e55d7328e24b39d521a266f -r3fc7575057616cba1efb317d41ded824a8a74eb4 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision a1cce9bd6eaa93435e55d7328e24b39d521a266f) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 3fc7575057616cba1efb317d41ded824a8a74eb4) @@ -26,6 +26,7 @@ #include "RTC.h" #include "LoadCell.h" #include "TemperatureSensors.h" +#include "Heaters.h" // ********** private definitions ********** @@ -58,6 +59,13 @@ F32 loadCellB2inGram; } LOAD_CELL_DATA_T; +typedef struct +{ + U32 mainPrimayHeaterDC; + U32 smallPrimaryHeaterDC; + U32 trimmerHeaterDC; +} HEATERS_DATA_T; + #pragma pack(pop) // ********** private data ********** @@ -337,7 +345,7 @@ // create a message record blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_LOAD_CELL_READINGS; + msg.hdr.msgID = MSG_ID_DG_HEATERS_DATA; msg.hdr.payloadLen = sizeof( LOAD_CELL_DATA_T ); payload.loadCellA1inGram = loadCellA1; @@ -353,7 +361,41 @@ return result; } +/************************************************************************* + * @brief + * The broadcastHeatersData function sends out DG heaters data + * @details + * Inputs : heaters data + * Outputs : heatears data msg constructed and queued + * @param mainPrimaryDC : main primary heater duty cycle + * @param smallPrimaryDC : small primary heater duty cycle + * @param trimmerDC : trimmer heater duty cycle + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL broadcastHeatersData ( U32 mainPrimaryDC, U32 smallPrimaryDC, U32 trimmerDC ) +{ + BOOL result; + MESSAGE_T msg; + U08 *payloadPtr = msg.payload; + HEATERS_DATA_T payload; + // create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_DG_HEATERS_DATA; + msg.hdr.payloadLen = sizeof( HEATERS_DATA_T ); + + payload.mainPrimayHeaterDC = mainPrimaryDC; + payload.smallPrimaryHeaterDC = smallPrimaryDC; + payload.trimmerHeaterDC = trimmerDC; + + memcpy( payloadPtr, &payload, sizeof( HEATERS_DATA_T ) ); + + // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DG_BROADCAST, ACK_NOT_REQUIRED ); + + return result; +} + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ @@ -523,10 +565,23 @@ * @param message : a pointer to the message to handle * @return none *************************************************************************/ -DATA_ARRAY_OVERRIDE_HANDLER_FUNC_U32( BOOL, handleTestTemperatureSensorsOverrideRequest, +DATA_ARRAY_OVERRIDE_HANDLER_FUNC_F32( BOOL, handleTestTemperatureSensorsOverrideRequest, \ testSetMeasuredTemperatureOverride, testResetMeasuredTemperatureOverride ) /************************************************************************* + * @brief + * The handleTestHeatersDataPublishOverrideRequest function handles \n + * a request to override the publish interval of heaters data + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_OVERRIDE_HANDLER_FUNC_U32( BOOL, handleTestHeatersDataPublishOverrideRequest, \ + testSetHeatersPublishIntervalOverride, testResetHeatersPublishIntervalOverride ) + +/************************************************************************* * @brief handleSetRTCTimestamp * The handleSetRTCTimestamp function handles a request to write time and * date to RTC Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -ra1cce9bd6eaa93435e55d7328e24b39d521a266f -r3fc7575057616cba1efb317d41ded824a8a74eb4 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision a1cce9bd6eaa93435e55d7328e24b39d521a266f) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 3fc7575057616cba1efb317d41ded824a8a74eb4) @@ -38,6 +38,9 @@ // MSG_ID_LOAD_CELL_READINGS BOOL broadcastLoadCellData( F32 loadCellA1, F32 loadCellA2, F32 loadCellB1, F32 loadCellB2 ); +// MSG_ID_HEATERS_READINGS +BOOL broadcastHeatersData ( U32 mainPrimaryDC, U32 smallPrimaryDC, U32 trimmerDC ); + // *********** public test support message functions ********** #ifdef DEBUG_ENABLED @@ -64,6 +67,9 @@ // MSG_ID_TEMPERATURE_SENSORS_OVERRIDE void handleTestTemperatureSensorsOverrideRequest ( MESSAGE_T *message ); +// MSG_ID_PUBLSIH_HEATERS_DATA_OVERRIDE +void handleTestHeatersDataPublishOverrideRequest ( MESSAGE_T *message ); + // MSG_ID_SET_RTC_TIMESTAMP void handleSetRTCTimestamp( MESSAGE_T *message );