Index: firmware/App/Controllers/ROPump.c =================================================================== diff -u -r19934ca6e36e2dcabd6a6083a9a1f15b1ed32189 -r7104ce1a12799c5a3dff10c94cb191d409bc8244 --- firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 19934ca6e36e2dcabd6a6083a9a1f15b1ed32189) +++ firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 7104ce1a12799c5a3dff10c94cb191d409bc8244) @@ -130,6 +130,18 @@ static F32 roPumpOpenLoopTargetDutyCycle; ///< Target RO pump open loop PWM. static F32 roVolumeL; ///< RO water generated in liters. + +static DG_OP_MODE_T lastDGOperationMode; +static DG_OP_MODE_T currentDGOperationMode; + +static PI_CONTROLLER_PROFILE_DATA_T roFlushPIProfile = { ROP_FLOW_CONTROL_P_COEFFICIENT, ROP_FLOW_CONTROL_I_COEFFICIENT, MIN_RO_PUMP_DUTY_CYCLE, MAX_RO_PUMP_DUTY_CYCLE }; +static PI_CONTROLLER_PROFILE_DATA_T roFillPIProfile = { ROP_FLOW_CONTROL_P_COEFFICIENT, ROP_FLOW_CONTROL_I_COEFFICIENT, MIN_RO_PUMP_DUTY_CYCLE, MAX_RO_PUMP_DUTY_CYCLE }; +static PI_CONTROLLER_PROFILE_DATA_T roDrainPIProfile = { ROP_FLOW_CONTROL_P_COEFFICIENT, ROP_FLOW_CONTROL_I_COEFFICIENT, MIN_RO_PUMP_DUTY_CYCLE, MAX_RO_PUMP_DUTY_CYCLE }; +static PI_CONTROLLER_PROFILE_DATA_T roHeatPIProfile = { ROP_FLOW_CONTROL_P_COEFFICIENT, ROP_FLOW_CONTROL_I_COEFFICIENT, MIN_RO_PUMP_DUTY_CYCLE, MAX_RO_PUMP_DUTY_CYCLE }; +static PI_CONTROLLER_PROFILE_DATA_T roGenIdlePIProfile = { ROP_FLOW_CONTROL_P_COEFFICIENT, ROP_FLOW_CONTROL_I_COEFFICIENT, MIN_RO_PUMP_DUTY_CYCLE, MAX_RO_PUMP_DUTY_CYCLE }; + + + // ********** private function prototypes ********** static RO_PUMP_STATE_T handleROPumpOffState( void ); @@ -404,6 +416,7 @@ *************************************************************************/ void execROPumpController( void ) { + currentDGOperationMode = getCurrentOperationMode(); // Handle pending delayed RO pump command if ( pendingROPumpCmdCountDown > 0 ) { @@ -451,6 +464,7 @@ roPumpState = RO_PUMP_OFF_STATE; break; } + lastDGOperationMode = currentDGOperationMode; } /*********************************************************************//** @@ -647,6 +661,30 @@ } else { + if(currentDGOperationMode != lastDGOperationMode) + { + switch( currentDGOperationMode ) + { + case DG_MODE_GENE: + setPIControlerProfile( PI_CONTROLLER_ID_RO_PUMP_FLOW, roPumpDutyCyclePctSet, roGenIdlePIProfile); + break; + case DG_MODE_FILL: + setPIControlerProfile( PI_CONTROLLER_ID_RO_PUMP_FLOW, roPumpDutyCyclePctSet, roFillPIProfile); + break; + case DG_MODE_DRAI: + setPIControlerProfile( PI_CONTROLLER_ID_RO_PUMP_FLOW, roPumpDutyCyclePctSet, roDrainPIProfile); + break; + case DG_MODE_FLUS: + setPIControlerProfile( PI_CONTROLLER_ID_RO_PUMP_FLOW, roPumpDutyCyclePctSet, roFlushPIProfile); + break; + case DG_MODE_HEAT: + setPIControlerProfile( PI_CONTROLLER_ID_RO_PUMP_FLOW, roPumpDutyCyclePctSet, roHeatPIProfile); + break; + default: + // Alarm? Fault? continue running? + break; + } + } roPumpDutyCyclePctSet = runPIController( PI_CONTROLLER_ID_RO_PUMP_FLOW, getTargetROPumpFlowRateLPM(), getMeasuredFlowRateLPM( RO_FLOW_SENSOR ) ); }