Index: firmware/App/Controllers/ROPump.c =================================================================== diff -u -r5e5ece62c01bc4576acd936fb4b200e8a336f2c2 -r2506bb824f04982d4cf6ad3d81853f863b2f9c11 --- firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 5e5ece62c01bc4576acd936fb4b200e8a336f2c2) +++ firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 2506bb824f04982d4cf6ad3d81853f863b2f9c11) @@ -274,8 +274,21 @@ { RO_PUMP_STATE_T state = RO_PUMP_CONTROL_TO_TARGET_FLOW_STATE; + // Check if need to switch control modes + if ( getTargetROPumpPressure() > 0.0F && ( PUMP_CONTROL_MODE_CLOSED_LOOP == roPumpControlMode ) ) + { + // Transition to target pressure + resetPIController( PI_CONTROLLER_ID_RO_PUMP_PRES, roPumpDutyCyclePctSet, 0 ); + state = RO_PUMP_CONTROL_TO_TARGET_PRESSURE_STATE; + } + else if ( roPumpOpenLoopTargetDutyCycle > 0.0F && ( PUMP_CONTROL_MODE_OPEN_LOOP == roPumpControlMode ) ) + { + setFluidPumpPctToPWMDutyCycle( P12_PUMP, roPumpOpenLoopTargetDutyCycle ); + roPumpDutyCyclePctSet = roPumpOpenLoopTargetDutyCycle; + state = RO_PUMP_OPEN_LOOP_STATE; + } // Control at set interval - if ( ( ++roControlTimerCounter >= ROP_CONTROL_INTERVAL ) && ( PUMP_CONTROL_MODE_CLOSED_LOOP == roPumpControlMode ) ) + else if ( ( ++roControlTimerCounter >= ROP_CONTROL_INTERVAL ) && ( PUMP_CONTROL_MODE_CLOSED_LOOP == roPumpControlMode ) ) { roPumpDutyCyclePctSet = runPIController( PI_CONTROLLER_ID_RO_PUMP_FLOW, getTargetROPumpFlowRateLPM(), getFlowRate( P16_FLOW ) ); setFluidPumpPctToPWMDutyCycle( P12_PUMP, roPumpDutyCyclePctSet ); @@ -297,8 +310,20 @@ { RO_PUMP_STATE_T state = RO_PUMP_CONTROL_TO_TARGET_PRESSURE_STATE; + if ( getTargetROPumpFlowRateLPM() > 0.0F && ( PUMP_CONTROL_MODE_CLOSED_LOOP == roPumpControlMode ) ) + { + // Transition to target flow + resetPIController( PI_CONTROLLER_ID_RO_PUMP_FLOW, roPumpDutyCyclePctSet, 0 ); + state = RO_PUMP_CONTROL_TO_TARGET_FLOW_STATE; + } + else if ( roPumpOpenLoopTargetDutyCycle > 0.0F && ( PUMP_CONTROL_MODE_OPEN_LOOP == roPumpControlMode ) ) + { + setFluidPumpPctToPWMDutyCycle( P12_PUMP, roPumpOpenLoopTargetDutyCycle ); + roPumpDutyCyclePctSet = roPumpOpenLoopTargetDutyCycle; + state = RO_PUMP_OPEN_LOOP_STATE; + } // Control at set interval - if ( ( ++roControlTimerCounter >= ROP_CONTROL_INTERVAL ) && ( PUMP_CONTROL_MODE_CLOSED_LOOP == roPumpControlMode ) ) + else if ( ( ++roControlTimerCounter >= ROP_CONTROL_INTERVAL ) && ( PUMP_CONTROL_MODE_CLOSED_LOOP == roPumpControlMode ) ) { roPumpDutyCyclePctSet = runPIController( PI_CONTROLLER_ID_RO_PUMP_PRES, getTargetROPumpPressure(), getFilteredPressure( P17_PRES ) ); setFluidPumpPctToPWMDutyCycle( P12_PUMP, roPumpDutyCyclePctSet ); @@ -520,10 +545,10 @@ resetPIController( PI_CONTROLLER_ID_RO_PUMP_PRES, MIN_FLUID_PUMP_DUTY_CYCLE_PCT, 0.0F ); } - roPumpState = RO_PUMP_OFF_STATE; roPumpDutyCyclePctSet = 0.0F; roControlTimerCounter = 0; roPumpOpenLoopTargetDutyCycle = 0; + stopPumpRequest = TRUE; stopROPump(); } @@ -537,7 +562,6 @@ static void stopROPump( void ) { isROPumpOn = FALSE; - roPumpDutyCyclePctSet = 0.0F; // Set the new duty cycle of the pump setFluidPumpPWMDutyCycle( P12_PUMP, 0 ); }