Index: firmware/App/Controllers/DrainPump.c =================================================================== diff -u -r93dc3570f6a7581dd82f7f76e256784be29d5530 -r3d8b84b8ce7ee9526fbabccb9e51d691a3df6305 --- firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 93dc3570f6a7581dd82f7f76e256784be29d5530) +++ firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 3d8b84b8ce7ee9526fbabccb9e51d691a3df6305) @@ -59,10 +59,10 @@ #define DRAIN_PUMP_P_COEFFICIENT 0.5 ///< P term for drain pump delta pressure control. #define DRAIN_PUMP_I_COEFFICIENT 1.0 ///< I term for drain pump delta pressure control. -#define MIN_ALLOWED_TARGET_DELTA_PRESSURE -10.0 ///< Minimum allowed delta pressure for closed loop control. -#define MAX_ALLOWED_TARGET_DELTA_PRESSURE 10.0 ///< Maximum allowed delta pressure for closed loop control. +#define MIN_ALLOWED_TARGET_OUTLET_PRESSURE -10.0 ///< Minimum allowed outlet pressure for closed loop control. +#define MAX_ALLOWED_TARGET_OUTLET_PRESSURE 10.0 ///< Maximum allowed outlet pressure for closed loop control. -#define MAX_ALLOWED_OPEN_LOOP_RPM_OUT_OF_RANGE 20 ///< Maximum allowed RPM out of range from target RPM in open loop. +#define OPEN_LOOP_RPM_OUT_OF_RANGE_PERCENT 0.1 ///< Maximum allowed RPM out of range from target RPM in open loop percent. #define OPEN_LOOP_RPM_OUT_OF_RANGE_TIME_OUT ( 5 * MS_PER_SECOND ) ///< Open loop RPM out of range time out in ms. /// Enumeration of drain pump states. @@ -100,7 +100,7 @@ DRAIN_PUMP_DATA_PUB_INTERVAL, 0, 0 }; ///< interval (in ms) at which to publish RO flow data to CAN bus static U32 targetDrainPumpRPM = 0; ///< Target drain pump RPM -static F32 targetDrainPumpDeltaPressure = 0.0; ///< Target delta pressure for the drain pump +static F32 targetDrainPumpOutletPressure = 0.0; ///< Target outlet pressure for the drain pump static U32 drainControlTimerCounter = 0; ///< Determines when to perform control on drain pump static BOOL hasClosedLoopBeenRequested = FALSE; ///< Closed loop pump control flag @@ -180,33 +180,33 @@ /*********************************************************************//** * @brief - * The setDrainPumpTargetDeltaPressure function sets the target delta - * pressure in between the PRd and PDr sensors. + * The setDrainPumpTargetOutletPressure function sets the target drain pump + * outlet pressure. * @details Inputs: targetDrainPumpDeltaPressure, hasClosedLoopBeenRequested, * drainPumpDAC, drainPumpControlMode, drainPumpControlModeSet * @details Outputs: targetDrainPumpDeltaPressure, hasClosedLoopBeenRequested, * drainPumpDAC, drainPumpControlMode, drainPumpControlModeSet - * @param deltaP new target drain pump delta pressure + * @param pressure new target drain pump outlet pressure * @return: TRUE if new target speed is set, FALSE if not *************************************************************************/ -BOOL setDrainPumpTargetDeltaPressure( F32 deltaP ) +BOOL setDrainPumpTargetOutletPressure( F32 pressure ) { BOOL result = FALSE; // Check the delta pressure is in range - if ( ( deltaP >= MIN_ALLOWED_TARGET_DELTA_PRESSURE ) && ( deltaP <= MAX_ALLOWED_TARGET_DELTA_PRESSURE ) ) + if ( ( pressure >= MIN_ALLOWED_TARGET_OUTLET_PRESSURE ) && ( pressure <= MAX_ALLOWED_TARGET_OUTLET_PRESSURE ) ) { // Set all the variables for closed loop mode - targetDrainPumpDeltaPressure = deltaP; - hasClosedLoopBeenRequested = TRUE; - drainPumpDAC = DRAIN_PUMP_MIN_DAC; - drainPumpControlMode = PUMP_CONTROL_MODE_CLOSED_LOOP; - drainPumpControlModeSet = drainPumpControlMode; - result = TRUE; + targetDrainPumpOutletPressure = pressure; + hasClosedLoopBeenRequested = TRUE; + drainPumpDAC = DRAIN_PUMP_MIN_DAC; + drainPumpControlMode = PUMP_CONTROL_MODE_CLOSED_LOOP; + drainPumpControlModeSet = drainPumpControlMode; + result = TRUE; } else { - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_DRAIN_PUMP_INVALID_DELTA_PRESSURE_SELECTED, deltaP ) + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_DRAIN_PUMP_INVALID_DELTA_PRESSURE_SELECTED, pressure ) } return result; @@ -252,11 +252,12 @@ // when the pump is turned on and it takes a while to ramp up to target RPM. if( drainPumpControlModeSet == PUMP_CONTROL_MODE_OPEN_LOOP ) { - // Check if RPM out of range. Using fabs since the read RPM can be above or below the target. - BOOL isRPMOutOfRange = fabs( getTargetDrainPumpRPM() - currentDrainPumpRPM ) > MAX_ALLOWED_OPEN_LOOP_RPM_OUT_OF_RANGE; + F32 threshold = OPEN_LOOP_RPM_OUT_OF_RANGE_PERCENT * getTargetDrainPumpRPM(); - checkPersistentAlarm( PERSISTENT_ALARM_DRAIN_PUMP_RPM_OUT_OF_RANGE, isRPMOutOfRange, currentDrainPumpRPM, - MAX_ALLOWED_OPEN_LOOP_RPM_OUT_OF_RANGE ); + // Check if RPM is out of range. Using fabs since the read RPM can be above or below the target. + BOOL isRPMOutOfRange = fabs( getTargetDrainPumpRPM() - currentDrainPumpRPM ) > threshold; + + checkPersistentAlarm( PERSISTENT_ALARM_DRAIN_PUMP_RPM_OUT_OF_RANGE, isRPMOutOfRange, currentDrainPumpRPM, threshold ); } // Publish drain pump data on interval @@ -328,13 +329,13 @@ * @brief * The getTargetDrainPumpDeltaP function gets the current target drain pump * delta pressure. - * @details Inputs: targetDrainPumpDeltaPressure + * @details Inputs: targetDrainPumpOutletPressure * @details Outputs: none - * @return: the current target drain pump delta pressure. + * @return: the current target drain pump outlet pressure. *************************************************************************/ -F32 getTargetDrainPumpDeltaP( void ) +F32 getTargetDrainPumpOutletP( void ) { - return targetDrainPumpDeltaPressure; + return targetDrainPumpOutletPressure; } /*********************************************************************//** @@ -397,10 +398,8 @@ // control at set interval if ( ++drainControlTimerCounter >= DRP_CONTROL_INTERVAL ) { - F32 inletDrainPressure = getMeasuredDGPressure ( PRESSURE_SENSOR_DRAIN_PUMP_INLET ); F32 outletDrainPressure = getMeasuredDGPressure ( PRESSURE_SENSOR_DRAIN_PUMP_OUTLET ); - F32 pressureDiff = outletDrainPressure - inletDrainPressure; - F32 dac = runPIController( PI_CONTROLLER_ID_DRAIN_PUMP, getTargetDrainPumpDeltaP(), pressureDiff ); + F32 dac = runPIController( PI_CONTROLLER_ID_DRAIN_PUMP, getTargetDrainPumpOutletP(), outletDrainPressure ); // The PI controller sends the DAC out and it is rounded to the nearest offset and is fed to the FPGA drainPumpDACSet = (U32)( dac + FLOAT_TO_INT_ROUNDUP_OFFSET ); @@ -573,16 +572,16 @@ * @param value override target drain pump delta pressure * @return TRUE if override successful, FALSE if not *************************************************************************/ -BOOL testSetTargetDrainPumpDeltaPressure( F32 value ) +BOOL testSetTargetDrainPumpOutletPressure( F32 value ) { BOOL result = FALSE; if ( TRUE == isTestingActivated() ) { // Check if delta pressure is in range - if ( value >= MIN_ALLOWED_TARGET_DELTA_PRESSURE && value <= MAX_ALLOWED_TARGET_DELTA_PRESSURE ) + if ( value >= MIN_ALLOWED_TARGET_OUTLET_PRESSURE && value <= MAX_ALLOWED_TARGET_OUTLET_PRESSURE ) { - result = setDrainPumpTargetDeltaPressure( value ); + result = setDrainPumpTargetOutletPressure( value ); } }