Index: firmware/App/Controllers/Fans.c =================================================================== diff -u -r0b17c6271cdc3c55697a74ecaadb477d9c8f5687 -rec15e94e1e51aceeceedf7398d648a8f4830fada --- firmware/App/Controllers/Fans.c (.../Fans.c) (revision 0b17c6271cdc3c55697a74ecaadb477d9c8f5687) +++ firmware/App/Controllers/Fans.c (.../Fans.c) (revision ec15e94e1e51aceeceedf7398d648a8f4830fada) @@ -33,6 +33,7 @@ #define FANS_SELF_TEST_TARGET_PWM 0.5 ///< Fans self test target PWM for testing the fans are running. #define FANS_MAX_ALLOWED_RPM_OUT_OF_RANGE_COUNT ( ( 3 * MS_PER_SECOND ) / TASK_GENERAL_INTERVAL ) ///< Fans max allowed RPM out of range count. #define FANS_MAX_ALLOWED_RPM 9000 ///< Fans max allowed RPM value. +#define FANS_MONITOR_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Fans monitor time interval in counts. /// Fans self test states typedef enum fans_Self_Test @@ -64,6 +65,7 @@ static FANS_EXEC_STATES_T fansExecState = FANS_EXEC_STATE_WAIT_FOR_POST_STATE; ///< Fans exec state static U32 fansControlCounter = 0; ///< Fans control interval counter static U32 fansPublishCounter = 0; ///< Fans data publish interval counter +static U32 fansMonitorCounter = 0; ///< Fans monitor interval counter /// Temperature to duty cycle conversion slope (duty cycle not in percent) static const F32 SLOPE = ( FANS_MAX_DUTY_CYCLE - FANS_MIN_DUTY_CYCLE ) / ( MAX_ALLOWED_AMBINET_TEMPERATURE - MIN_ALLOWED_AMBIENT_TEMPERATURE ); @@ -100,11 +102,12 @@ { // Initialize the variables fansExecState = FANS_EXEC_STATE_WAIT_FOR_POST_STATE; - fansSelfTestResult = SELF_TEST_STATUS_IN_PROGRESS; + fansSelfTestResult = SELF_TEST_STATUS_IN_PROGRESS; fansSelfTestState = FANS_SELF_TEST_START_STATE; fansExecState = FANS_EXEC_STATE_WAIT_FOR_POST_STATE; fansControlCounter = 0; fansPublishCounter = 0; + fansMonitorCounter = 0; // Initialize a persistent alarm for fans RPM out of range initPersistentAlarm( PERSISTENT_ALARM_FANS_RPM_OUT_RANGE, ALARM_ID_DG_FAN_RPM_OUT_OF_RANGE, @@ -153,6 +156,9 @@ *************************************************************************/ void execFans( void ) { + // Monitor the fans + monitorFans(); + switch ( fansExecState ) { case FANS_EXEC_STATE_WAIT_FOR_POST_STATE: @@ -330,9 +336,6 @@ // Check if it is time to check for the control if( ++fansControlCounter > FANS_CONTROL_INTERVAL ) { - // Monitor is called here to use the counter of the control - monitorFans(); - // Get the maximum temperature among all the thermistors and temperature sensors to run fan from the hottest temperature F32 temperature = getMaximumTemperature(); @@ -489,15 +492,20 @@ { FAN_NAMES_T fan; - convertTogglePeriod2RPM(); - - for ( fan = FAN_INLET_1; fan < NUM_OF_FANS_NAMES; fan++ ) + if ( ++fansMonitorCounter >= FANS_MONITOR_INTERVAL ) { - // Call persistent alarm if a fan's RPM is out of range - if ( fansStatus.rpm[ fan ] >= FANS_MAX_ALLOWED_RPM || fansStatus.rpm[ fan ] <= NEARLY_ZERO ) + convertTogglePeriod2RPM(); + + for ( fan = FAN_INLET_1; fan < NUM_OF_FANS_NAMES; fan++ ) { - checkPersistentAlarm( PERSISTENT_ALARM_FANS_RPM_OUT_RANGE, TRUE, fansStatus.rpm[ fan ] ); + // Call persistent alarm if a fan's RPM is out of range + if ( fansStatus.rpm[ fan ] >= FANS_MAX_ALLOWED_RPM || fansStatus.rpm[ fan ] <= NEARLY_ZERO ) + { + checkPersistentAlarm( PERSISTENT_ALARM_FANS_RPM_OUT_RANGE, TRUE, fansStatus.rpm[ fan ] ); + } } + + fansMonitorCounter = 0; } } @@ -535,23 +543,25 @@ FANS_DATA_T fansData; fansData.fansTargetDutyCycle = fansStatus.targetDutyCycle * FRACTION_TO_PERCENT_FACTOR; - fansData.fanInlet1RPM = fansStatus.rpm[ FAN_INLET_1 ]; - fansData.fanInlet2RPM = fansStatus.rpm[ FAN_INLET_2 ]; - fansData.fanInlet3RPM = fansStatus.rpm[ FAN_INLET_3 ]; - fansData.fanOutlet1RPM = fansStatus.rpm[ FAN_OUTLET_1 ]; - fansData.fanOutlet2RPM = fansStatus.rpm[ FAN_OUTLET_2 ]; - fansData.fanOutlet3RPM = fansStatus.rpm[ FAN_OUTLET_3 ]; + fansData.fanInlet1RPM = fansStatus.rpm[ FAN_INLET_1 ]; + fansData.fanInlet2RPM = fansStatus.rpm[ FAN_INLET_2 ]; + fansData.fanInlet3RPM = fansStatus.rpm[ FAN_INLET_3 ]; + fansData.fanOutlet1RPM = fansStatus.rpm[ FAN_OUTLET_1 ]; + fansData.fanOutlet2RPM = fansStatus.rpm[ FAN_OUTLET_2 ]; + fansData.fanOutlet3RPM = fansStatus.rpm[ FAN_OUTLET_3 ]; broadcastFansData( &fansData ); fansPublishCounter = 0; } } + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ + /*********************************************************************//** * @brief * The testSetFanPublishIntervalOverride function overrides the fans data