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 ); } } Index: firmware/App/Controllers/DrainPump.h =================================================================== diff -u -r35246359c5a9080c704e0a6f1563e99a337e2e91 -r3d8b84b8ce7ee9526fbabccb9e51d691a3df6305 --- firmware/App/Controllers/DrainPump.h (.../DrainPump.h) (revision 35246359c5a9080c704e0a6f1563e99a337e2e91) +++ firmware/App/Controllers/DrainPump.h (.../DrainPump.h) (revision 3d8b84b8ce7ee9526fbabccb9e51d691a3df6305) @@ -53,22 +53,22 @@ BOOL setDrainPumpTargetRPM( U32 rpm ); -BOOL setDrainPumpTargetDeltaPressure( F32 deltaP ); +BOOL setDrainPumpTargetOutletPressure( F32 pressure ); void signalDrainPumpHardStop( void ); SELF_TEST_STATUS_T execDrainPumpSelfTest( void ); U32 getTargetDrainPumpRPM( void ); -F32 getTargetDrainPumpDeltaP( void ); +F32 getTargetDrainPumpOutletP( void ); BOOL testSetDrainPumpDataPublishIntervalOverride( U32 value ); BOOL testResetDrainPumpDataPublishIntervalOverride( void ); BOOL testSetTargetDrainPumpRPM( U32 value ); -BOOL testSetTargetDrainPumpDeltaPressure( F32 value ); +BOOL testSetTargetDrainPumpOutletPressure( F32 value ); /**@}*/ Index: firmware/App/Controllers/ROPump.c =================================================================== diff -u -r00b32a5dad2e136d31cfaf0de16f7767b9920fec -r3d8b84b8ce7ee9526fbabccb9e51d691a3df6305 --- firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 00b32a5dad2e136d31cfaf0de16f7767b9920fec) +++ firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 3d8b84b8ce7ee9526fbabccb9e51d691a3df6305) @@ -168,10 +168,10 @@ MIN_RO_PUMP_DUTY_CYCLE, MAX_RO_PUMP_DUTY_CYCLE ); // Initialize the persistent alarm for flow out of upper and lower range - initPersistentAlarm( PERSISTENT_ALARM_RO_FLOW_RATE_OUT_OF_UPPER_RANGE, ALARM_ID_FLOW_RATE_OUT_OF_RANGE, TRUE, + initPersistentAlarm( PERSISTENT_ALARM_RO_FLOW_RATE_OUT_OF_UPPER_RANGE, ALARM_ID_FLOW_RATE_OUT_OF_UPPER_RANGE, TRUE, FLOW_OUT_OF_RANGE_PERSISTENT_INTERVAL, FLOW_OUT_OF_RANGE_PERSISTENT_INTERVAL ); - initPersistentAlarm( PERSISTENT_ALARM_RO_FLOW_RATE_OUT_OF_LOWER_RANGE, ALARM_ID_FLOW_RATE_OUT_OF_RANGE, TRUE, + initPersistentAlarm( PERSISTENT_ALARM_RO_FLOW_RATE_OUT_OF_LOWER_RANGE, ALARM_ID_FLOW_RATE_OUT_OF_LOWER_RANGE, TRUE, FLOW_OUT_OF_RANGE_PERSISTENT_INTERVAL, FLOW_OUT_OF_RANGE_PERSISTENT_INTERVAL ); // Initialize the persistent alarm for max allowed pressure out of range Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r00b32a5dad2e136d31cfaf0de16f7767b9920fec -r3d8b84b8ce7ee9526fbabccb9e51d691a3df6305 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 00b32a5dad2e136d31cfaf0de16f7767b9920fec) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 3d8b84b8ce7ee9526fbabccb9e51d691a3df6305) @@ -1729,7 +1729,7 @@ memcpy( &payLoad, message->payload, sizeof( F32 ) ); - result = testSetTargetDrainPumpDeltaPressure( payLoad ); + result = testSetTargetDrainPumpOutletPressure( payLoad ); } /* respond to request */ sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result );