Index: firmware/App/Controllers/Fans.c =================================================================== diff -u -r07012e0a841e4b35049bd5aa4609a2b37978f65b -rb66dabe73c8418e0e4ee358ce787b6d9bd9e128e --- firmware/App/Controllers/Fans.c (.../Fans.c) (revision 07012e0a841e4b35049bd5aa4609a2b37978f65b) +++ firmware/App/Controllers/Fans.c (.../Fans.c) (revision b66dabe73c8418e0e4ee358ce787b6d9bd9e128e) @@ -51,6 +51,7 @@ typedef struct { F32 targetDutyCycle; ///< Fan's target duty cycle that was fed to the fans + F32 targetRPM; ///< Fan's target RPM OVERRIDE_F32_T rpm[ NUM_OF_FANS_NAMES ]; ///< Fan's current tachometers reading in RPM } FAN_STATUS_T; @@ -103,6 +104,8 @@ // Initialize the fans for ( fan = FAN_INLET_1; fan < NUM_OF_FANS_NAMES; fan++ ) { + fansStatus.targetDutyCycle = 0.0; + fansStatus.targetRPM = 0.0; fansStatus.rpm[ fan ].data = 0.0; fansStatus.rpm[ fan ].ovData = 0.0; fansStatus.rpm[ fan ].ovInitData = 0.0; @@ -287,6 +290,9 @@ } } + // Calculate the target RPM from the duty cycle. + fansStatus.targetRPM = fansStatus.targetDutyCycle * FANS_MAX_ALLOWED_RPM; + // Set the PWM to inlet and outlet fans setInletFansDutyCycle( fansStatus.targetDutyCycle ); @@ -380,13 +386,12 @@ *************************************************************************/ static void monitorFans( void ) { - FAN_NAMES_T fan; - if ( ++fansMonitorCounter >= FANS_MONITOR_INTERVAL_COUNT ) { if ( FALSE == hasAlarmBeenRaised ) { BOOL isFanRPMOutOfRange; + FAN_NAMES_T fan; // The RPM is expected to be 5500 @ 100% duty cycle // The nominal RPM = duty cycle * 5500 / 1.0 @@ -442,8 +447,9 @@ { FANS_DATA_T fansData; - fansData.fansTargetDutyCycle = fansStatus.targetDutyCycle * FRACTION_TO_PERCENT_FACTOR; - fansData.fanInlet1RPM = getMeasuredFanRPM( FAN_INLET_1 ); + fansData.fansDutyCycle = fansStatus.targetDutyCycle * FRACTION_TO_PERCENT_FACTOR; + fansData.fansTargetRPM = fansStatus.targetRPM; + fansData.fanInlet1RPM = getMeasuredFanRPM( FAN_INLET_1 ); broadcastFansData( &fansData );