Index: firmware/App/Controllers/BoostPump.c =================================================================== diff -u -r5e5ece62c01bc4576acd936fb4b200e8a336f2c2 -r2506bb824f04982d4cf6ad3d81853f863b2f9c11 --- firmware/App/Controllers/BoostPump.c (.../BoostPump.c) (revision 5e5ece62c01bc4576acd936fb4b200e8a336f2c2) +++ firmware/App/Controllers/BoostPump.c (.../BoostPump.c) (revision 2506bb824f04982d4cf6ad3d81853f863b2f9c11) @@ -247,7 +247,7 @@ // If there is a target pressure set, transition to the PI controller and control to pressure. if ( ( getTargetBoostPumpPressure() > 0.0F ) && ( PUMP_CONTROL_MODE_CLOSED_LOOP == boostPumpControlMode ) ) { - //transition to closed loop + // Transition to closed loop resetPIController( PI_CONTROLLER_ID_BOOST_PUMP_PRES, boostPumpDutyCyclePctSet, 0.0F ); state = BOOST_PUMP_CONTROL_TO_TARGET_PRESSURE_STATE; } @@ -275,11 +275,24 @@ { BOOST_PUMP_STATE_T state = BOOST_PUMP_CONTROL_TO_TARGET_FLOW_STATE; + // Check if need to switch control modes + if ( getTargetROPumpPressure() > 0.0F && ( PUMP_CONTROL_MODE_CLOSED_LOOP == boostPumpControlMode ) ) + { + // Transition to target pressure + resetPIController( PI_CONTROLLER_ID_BOOST_PUMP_PRES, boostPumpDutyCyclePctSet, 0 ); + state = BOOST_PUMP_CONTROL_TO_TARGET_PRESSURE_STATE; + } + else if ( boostPumpOpenLoopTargetDutyCycle > 0.0F && ( PUMP_CONTROL_MODE_OPEN_LOOP == boostPumpControlMode ) ) + { + setFluidPumpPctToPWMDutyCycle( P40_PUMP, boostPumpOpenLoopTargetDutyCycle ); + boostPumpDutyCyclePctSet = boostPumpOpenLoopTargetDutyCycle; + state = BOOST_PUMP_OPEN_LOOP_STATE; + } // Control at set interval - if ( ( ++boostControlTimerCounter >= BOOST_CONTROL_INTERVAL ) && ( PUMP_CONTROL_MODE_CLOSED_LOOP == boostPumpControlMode ) ) + else if ( ( ++boostControlTimerCounter >= BOOST_CONTROL_INTERVAL ) && ( PUMP_CONTROL_MODE_CLOSED_LOOP == boostPumpControlMode ) ) { boostPumpDutyCyclePctSet = runPIController( PI_CONTROLLER_ID_BOOST_PUMP_FLOW, getTargetBoostPumpFlowRateLPM(), getFlowRate( P7_FLOW ) ); - setFluidPumpPctToPWMDutyCycle( P12_PUMP, boostPumpDutyCyclePctSet ); + setFluidPumpPctToPWMDutyCycle( P40_PUMP, boostPumpDutyCyclePctSet ); boostControlTimerCounter = 0; } @@ -298,11 +311,23 @@ { BOOST_PUMP_STATE_T state = BOOST_PUMP_CONTROL_TO_TARGET_PRESSURE_STATE; + if ( ( getTargetBoostPumpFlowRateLPM() > 0.0F ) && ( PUMP_CONTROL_MODE_CLOSED_LOOP == boostPumpControlMode ) ) + { + ///transition to target flow + resetPIController( PI_CONTROLLER_ID_BOOST_PUMP_FLOW, boostPumpDutyCyclePctSet, 0.0F ); + state = BOOST_PUMP_CONTROL_TO_TARGET_FLOW_STATE; + } + else if ( boostPumpOpenLoopTargetDutyCycle > 0.0F && ( PUMP_CONTROL_MODE_OPEN_LOOP == boostPumpControlMode ) ) + { + setFluidPumpPctToPWMDutyCycle( P40_PUMP, boostPumpOpenLoopTargetDutyCycle ); + boostPumpDutyCyclePctSet = boostPumpOpenLoopTargetDutyCycle; + state = BOOST_PUMP_OPEN_LOOP_STATE; + } // Control at set interval - if ( ( ++boostControlTimerCounter >= BOOST_CONTROL_INTERVAL ) && ( PUMP_CONTROL_MODE_CLOSED_LOOP == boostPumpControlMode ) ) + else if ( ( ++boostControlTimerCounter >= BOOST_CONTROL_INTERVAL ) && ( PUMP_CONTROL_MODE_CLOSED_LOOP == boostPumpControlMode ) ) { boostPumpDutyCyclePctSet = runPIController( PI_CONTROLLER_ID_BOOST_PUMP_PRES, getTargetBoostPumpPressure(), getFilteredPressure( M3_PRES ) ); - setFluidPumpPctToPWMDutyCycle( P12_PUMP, boostPumpDutyCyclePctSet ); + setFluidPumpPctToPWMDutyCycle( P40_PUMP, boostPumpDutyCyclePctSet ); boostControlTimerCounter = 0; } @@ -418,7 +443,7 @@ status = TRUE; // Set the new duty cycle of the pump - setFluidPumpPctToPWMDutyCycle( P12_PUMP, boostPumpOpenLoopTargetDutyCycle ); + setFluidPumpPctToPWMDutyCycle( P40_PUMP, boostPumpOpenLoopTargetDutyCycle ); // Clear previous target data if ( getTargetBoostPumpFlowRateLPM() > 0.0F ) { 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 ); }