Index: firmware/App/Controllers/ROPump.c =================================================================== diff -u -r9b970fd909c38f64f034cda1ffa793b9e1c8c365 -r19e682bf3a5ad3593935db055af7b80bb9354ab4 --- firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 9b970fd909c38f64f034cda1ffa793b9e1c8c365) +++ firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 19e682bf3a5ad3593935db055af7b80bb9354ab4) @@ -40,13 +40,13 @@ // ********** private definitions ********** #define RO_PUMP_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the RO Pump data is published on the CAN bus. -#define ROP_CONTROL_INTERVAL ( ( 4* MS_PER_SECOND ) / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the RO pump is controlled. -#define RO_LAG_TIMER ( MS_PER_SECOND *8 ) +#define ROP_CONTROL_INTERVAL ( ( 4* MS_PER_SECOND ) / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the RO pump is controlled. +#define RO_LAG_TIMER ( MS_PER_SECOND *8 ) ///< Timer count to halt flow control. -#define ROP_FLOW_CONTROL_P_COEFFICIENT 0.0002F ///< P term for RO pump flow control. -#define ROP_FLOW_CONTROL_I_COEFFICIENT 0.000006F -#define ROP_FLOW_CONTROL_D_COEFFICIENT 0.0F ///< D term for RO pump flow control -#define ROP_MIN_FLOW_TO_CONTROL_PCT 0.8F +#define ROP_FLOW_CONTROL_P_COEFFICIENT 0.0002F ///< P term for RO pump flow control. +#define ROP_FLOW_CONTROL_I_COEFFICIENT 0.000006F ///< I term for RO pump flow control. +#define ROP_FLOW_CONTROL_D_COEFFICIENT 0.0F ///< D term for RO pump flow control +#define ROP_MIN_FLOW_TO_CONTROL_PCT 0.8F ///< Minimum percentage to start flow control to compensate for system lag. #define ROP_PRESSURE_CONTROL_P_COEFFICIENT 0.15F ///< P term for RO pump pressure control. #define ROP_PRESSURE_CONTROL_I_COEFFICIENT 0.65F ///< I term for RO pump pressure control. @@ -55,7 +55,7 @@ #define ROP_FLOW_TO_PWM_SLOPE_MED_RECOVERY 3.1417F ///< Slope of flow to PWM line equation for permeate flush. #define ROP_FLOW_TO_PWM_INTERCEPT_MED_RECOVERY -315.58F ///< Intercept of flow to PWM line equation for permeate flush. #define ROP_FLOW_TO_PWM_SLOPE_MAX_RECOVER 0.1794F ///< Slope of flow to PWM line equation for max RO recovery. -#define ROP_FLOW_TO_PWM_INTERCEPT_MAX_RECOVER 82.449F ///< Intercept of flow to PWM line equation for max RO recovery. +#define ROP_FLOW_TO_PWM_INTERCEPT_MAX_RECOVER 82.449F ///< Intercept of flow to PWM line equation for max RO recovery. #define ROP_PRESSURE_TO_PWM_SLOPE 0.5F ///< Slope of pressure to PWM line equation. #define ROP_PRESSURE_TO_PWM_INTERCEPT 0.0F ///< Intercept of pressure to PWM line equation. @@ -84,9 +84,8 @@ static OVERRIDE_F32_T targetROPumpPressure; ///< Target RO max allowed pressure (in PSI). static F32 roPumpDutyCyclePctSet; ///< Currently set RO pump PWM duty cycle. static OVERRIDE_F32_T roPumpOpenLoopTargetDutyCycle; ///< Target RO pump open loop PWM. -static BOOL roPumpStartControl; ///< boolean to determine when closed loop flow control starts static U32 timeSinceP12Started; ///< Time when RO pump is started from off state. -static U32 p12LagTimer; +static U32 p12LagTimer; ///< Time when RO pump tracks system lag. // ********** private function prototypes ********** @@ -121,7 +120,6 @@ stopPumpRequest = FALSE; roControlTimerCounter = 0; roPumpDutyCyclePctSet = 0.0F; - roPumpStartControl = FALSE; roPumpDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; roPumpDataPublishInterval.data = RO_PUMP_DATA_PUB_INTERVAL; roPumpDataPublishInterval.ovData = RO_PUMP_DATA_PUB_INTERVAL; @@ -208,7 +206,6 @@ roPumpDutyCyclePctSet = roPumpFlowToPWM( getTargetROPumpFlowRateMLPM() ); resetPIDController( PID_CONTROLLER_ID_RO_PUMP_FLOW, roPumpDutyCyclePctSet, 0.0F ); setFluidPumpPctToPWMDutyCycle( P12_PUMP, roPumpDutyCyclePctSet ); - roPumpStartControl = FALSE; p12LagTimer = getMSTimerCount(); state = RO_PUMP_CONTROL_TO_TARGET_FLOW_STATE; } @@ -300,7 +297,6 @@ { RO_PUMP_STATE_T state = RO_PUMP_CONTROL_TO_TARGET_FLOW_STATE; F32 currentFlowRate = 0.0F; - F32 minRequiredFlowRate = 0.0F; // Check if need to switch control modes if ( getTargetROPumpPressure() > 0.0F ) @@ -319,13 +315,10 @@ else if ( (F32)getTargetROPumpFlowRateMLPM() == 0.0F ) { signalROPumpHardStop(); - roPumpStartControl = FALSE; } else if ( ++roControlTimerCounter >= ROP_CONTROL_INTERVAL ) { - currentFlowRate = getFilteredFlow( P16_FLOW ); - minRequiredFlowRate = (F32)getTargetROPumpFlowRateMLPM() * ROP_MIN_FLOW_TO_CONTROL_PCT; // P16 flow seems to lag in current Leahi HW. We will wait before we start changing control. if ( TRUE == didTimeout( p12LagTimer, RO_LAG_TIMER ) ) @@ -771,25 +764,15 @@ { RO_PUMP_DATA_T pumpData; -// pumpData.p12PumpState = (U32)roPumpState; -// pumpData.p12PumpDutyCycle = (U32)getFluidPumpPWMDutyCycle( P12_PUMP ); -// pumpData.p12PumpFBDutyCycle = (U32)getFluidPumpReadPWMDutyCycle( P12_PUMP ); -// pumpData.p12PumpSpeed = getFluidPumpRPM( P12_PUMP ); -// pumpData.p12TargetPressure = getTargetROPumpPressure(); -// pumpData.p12TargetFlow = getTargetROPumpFlowRateMLPM(); -// pumpData.p12TargetDutyCycle = getTargetROPumpDutyCyclePCT(); -// pumpData.p12PumpDutyCyclePct = convertDutyCycleCntToPct( P12_PUMP, (U32)getFluidPumpPWMDutyCycle( P12_PUMP ) ); -// pumpData.p12PumpFBDutyCyclePct = convertDutyCycleCntToPct( P12_PUMP, (U32)getFluidPumpReadPWMDutyCycle( P12_PUMP ) ); - pumpData.p12PumpState = (U32)roPumpState; pumpData.p12PumpDutyCycle = (U32)getFluidPumpPWMDutyCycle( P12_PUMP ); - pumpData.p12PumpFBDutyCycle = getPIDControllerSignals(PID_CONTROLLER_ID_RO_PUMP_FLOW, CONTROLLER_SIGNAL_PID_DERIVATIVE_OUTPUT ); - pumpData.p12PumpSpeed = getPIDControllerSignals(PID_CONTROLLER_ID_RO_PUMP_FLOW, CONTROLLER_SIGNAL_PID_MEASURED ); - pumpData.p12TargetPressure = getPIDControllerSignals(PID_CONTROLLER_ID_RO_PUMP_FLOW, CONTROLLER_SIGNAL_PID_ERROR ); - pumpData.p12TargetFlow = getPIDControllerSignals(PID_CONTROLLER_ID_RO_PUMP_FLOW, CONTROLLER_SIGNAL_PID_ERROR_SUM ); - pumpData.p12TargetDutyCycle = getPIDControllerSignals(PID_CONTROLLER_ID_RO_PUMP_FLOW, CONTROLLER_SIGNAL_PID_PROPORTIONAL_OUTPUT ); - pumpData.p12PumpDutyCyclePct = getPIDControllerSignals(PID_CONTROLLER_ID_RO_PUMP_FLOW, CONTROLLER_SIGNAL_PID_INTEGRAL_OUTPUT ); - pumpData.p12PumpFBDutyCyclePct = getPIDControllerSignals(PID_CONTROLLER_ID_RO_PUMP_FLOW, CONTROLLER_SIGNAL_PID_CONTROL ); + pumpData.p12PumpFBDutyCycle = (U32)getFluidPumpReadPWMDutyCycle( P12_PUMP ); + pumpData.p12PumpSpeed = getFluidPumpRPM( P12_PUMP ); + pumpData.p12TargetPressure = getTargetROPumpPressure(); + pumpData.p12TargetFlow = getTargetROPumpFlowRateMLPM(); + pumpData.p12TargetDutyCycle = getTargetROPumpDutyCyclePCT(); + pumpData.p12PumpDutyCyclePct = convertDutyCycleCntToPct( P12_PUMP, (U32)getFluidPumpPWMDutyCycle( P12_PUMP ) ); + pumpData.p12PumpFBDutyCyclePct = convertDutyCycleCntToPct( P12_PUMP, (U32)getFluidPumpReadPWMDutyCycle( P12_PUMP ) ); broadcastData( MSG_ID_FP_RO_PUMP_DATA, COMM_BUFFER_OUT_CAN_FP_BROADCAST, (U08*)&pumpData, sizeof( RO_PUMP_DATA_T ) ); roPumpDataPublicationTimerCounter = 0;