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 /**@}*/