Index: firmware/App/Controllers/BoostPump.c =================================================================== diff -u -r60693bf21a8a0277eae54cbfcb6cfd68176b079a -r4626638b758c6673c0a8a3cc8d008bb4a898cea9 --- firmware/App/Controllers/BoostPump.c (.../BoostPump.c) (revision 60693bf21a8a0277eae54cbfcb6cfd68176b079a) +++ firmware/App/Controllers/BoostPump.c (.../BoostPump.c) (revision 4626638b758c6673c0a8a3cc8d008bb4a898cea9) @@ -22,7 +22,7 @@ #include "Messaging.h" #include "MessageSupport.h" #include "PersistentAlarm.h" -#include "PIControllers.h" +#include "PIDControllers.h" #include "Pressure.h" #include "SafetyShutdown.h" #include "TaskGeneral.h" @@ -41,8 +41,9 @@ #define BOOST_FLOW_CONTROL_P_COEFFICIENT 0.15F ///< P term for Boost pump flow control. #define BOOST_FLOW_CONTROL_I_COEFFICIENT 0.65F ///< I term for Boost pump flow control. -#define BOOST_PRESSURE_CONTROL_P_COEFFICIENT 0.01F ///< P term for Boost pump pressure control. -#define BOOST_PRESSURE_CONTROL_I_COEFFICIENT 0.01F ///< I term for Boost pump pressure control. +#define BOOST_PRESSURE_CONTROL_P_COEFFICIENT 0.5F ///< P term for Boost pump pressure control. +#define BOOST_PRESSURE_CONTROL_I_COEFFICIENT 0.5F ///< I term for Boost pump pressure control. +#define BOOST_PRESSURE_CONTROL_D_COEFFICIENT 0.0F ///< D term for Boost pump pressure control. #define BOOST_FLOW_TO_PWM_SLOPE 0.5F ///< Slope of flow to PWM line equation. #define BOOST_FLOW_TO_PWM_INTERCEPT 0.0F ///< Intercept of flow to PWM line equation. @@ -92,13 +93,9 @@ { initFluidPump(); - // Initialize Boost pump PI controller to flow - initializePIController( PI_CONTROLLER_ID_BOOST_PUMP_FLOW, MIN_FLUID_PUMP_DUTY_CYCLE_PCT, BOOST_FLOW_CONTROL_P_COEFFICIENT, BOOST_FLOW_CONTROL_I_COEFFICIENT, - MIN_FLUID_PUMP_DUTY_CYCLE_PCT, MAX_P40_FLUID_PUMP_DUTY_CYCLE_PCT, FALSE, 0 ); - // Initialize Boost pump PI controller to target pressure - initializePIController( PI_CONTROLLER_ID_BOOST_PUMP_PRES, MIN_FLUID_PUMP_DUTY_CYCLE_PCT, BOOST_PRESSURE_CONTROL_P_COEFFICIENT, BOOST_PRESSURE_CONTROL_I_COEFFICIENT, - MIN_FLUID_PUMP_DUTY_CYCLE_PCT, MAX_P40_FLUID_PUMP_DUTY_CYCLE_PCT, FALSE, 0 ); + initializePIDController( PID_CONTROLLER_ID_BOOST_PUMP_PRES, MIN_FLUID_PUMP_DUTY_CYCLE_PCT, BOOST_PRESSURE_CONTROL_P_COEFFICIENT, BOOST_PRESSURE_CONTROL_I_COEFFICIENT, + BOOST_PRESSURE_CONTROL_D_COEFFICIENT, MIN_FLUID_PUMP_DUTY_CYCLE_PCT, MAX_P40_FLUID_PUMP_DUTY_CYCLE_PCT, FALSE, 0 ); boostPumpState = BOOST_PUMP_OFF_STATE; isBoostPumpOn = FALSE; @@ -189,7 +186,7 @@ // Set pump to on isBoostPumpOn = TRUE; boostPumpDutyCyclePctSet = boostPumpPresToPWM( getTargetBoostPumpPressure() ); - resetPIController( PI_CONTROLLER_ID_BOOST_PUMP_PRES, boostPumpDutyCyclePctSet, 0.0F ); + resetPIDController( PID_CONTROLLER_ID_BOOST_PUMP_PRES, boostPumpDutyCyclePctSet, 0.0F ); setFluidPumpPctToPWMDutyCycle( P40_PUMP, boostPumpDutyCyclePctSet ); state = BOOST_PUMP_CONTROL_TO_TARGET_PRESSURE_STATE; } @@ -200,7 +197,7 @@ // Set pump to on isBoostPumpOn = TRUE; boostPumpDutyCyclePctSet = boostPumpFlowToPWM( getTargetBoostPumpFlowRateMLPM() ); - resetPIController( PI_CONTROLLER_ID_BOOST_PUMP_FLOW, boostPumpDutyCyclePctSet, 0.0F ); + resetPIDController( PID_CONTROLLER_ID_BOOST_PUMP_FLOW, boostPumpDutyCyclePctSet, 0.0F ); setFluidPumpPctToPWMDutyCycle( P40_PUMP, boostPumpDutyCyclePctSet ); state = BOOST_PUMP_CONTROL_TO_TARGET_FLOW_STATE; } @@ -239,15 +236,15 @@ if ( getTargetBoostPumpPressure() > 0.0F ) { // Transition to closed loop - resetPIController( PI_CONTROLLER_ID_BOOST_PUMP_PRES, boostPumpDutyCyclePctSet, 0.0F ); + resetPIDController( PID_CONTROLLER_ID_BOOST_PUMP_PRES, boostPumpDutyCyclePctSet, 0.0F ); state = BOOST_PUMP_CONTROL_TO_TARGET_PRESSURE_STATE; } // If there is a target flow set, transition to the PI controller and control to flow else if ( getTargetBoostPumpFlowRateMLPM() > 0 ) { ///transition to closed loop - resetPIController( PI_CONTROLLER_ID_BOOST_PUMP_FLOW, boostPumpDutyCyclePctSet, 0.0F ); + resetPIDController( PID_CONTROLLER_ID_BOOST_PUMP_FLOW, boostPumpDutyCyclePctSet, 0.0F ); state = BOOST_PUMP_CONTROL_TO_TARGET_FLOW_STATE; } else if ( (F32)getTargetBoostPumpDutyCyclePCT() == 0.0F ) @@ -274,7 +271,7 @@ if ( getTargetBoostPumpPressure() > 0.0F ) { // Transition to target pressure - resetPIController( PI_CONTROLLER_ID_BOOST_PUMP_PRES, boostPumpDutyCyclePctSet, 0 ); + resetPIDController( PID_CONTROLLER_ID_BOOST_PUMP_PRES, boostPumpDutyCyclePctSet, 0 ); state = BOOST_PUMP_CONTROL_TO_TARGET_PRESSURE_STATE; } else if ( getTargetBoostPumpDutyCyclePCT() > 0.0F ) @@ -291,7 +288,7 @@ } else if ( ++boostControlTimerCounter >= BOOST_CONTROL_INTERVAL ) { - boostPumpDutyCyclePctSet = runPIController( PI_CONTROLLER_ID_BOOST_PUMP_FLOW, (F32)getTargetBoostPumpFlowRateMLPM(), getFilteredFlow( P7_FLOW ) ); + boostPumpDutyCyclePctSet = runPIDController( PID_CONTROLLER_ID_BOOST_PUMP_FLOW, (F32)getTargetBoostPumpFlowRateMLPM(), getFilteredFlow( P7_FLOW ) ); boostPumpDutyCyclePctSet = MIN( boostPumpDutyCyclePctSet, ( MAX_P40_FLUID_PUMP_PWM_DUTY_CYCLE * MAX_P40_FLUID_PUMP_DUTY_CYCLE_PCT ) ); setFluidPumpPctToPWMDutyCycle( P40_PUMP, boostPumpDutyCyclePctSet ); boostControlTimerCounter = 0; @@ -316,7 +313,7 @@ if ( getTargetBoostPumpFlowRateMLPM() > 0.0F ) { ///transition to target flow - resetPIController( PI_CONTROLLER_ID_BOOST_PUMP_FLOW, boostPumpDutyCyclePctSet, 0.0F ); + resetPIDController( PID_CONTROLLER_ID_BOOST_PUMP_FLOW, boostPumpDutyCyclePctSet, 0.0F ); state = BOOST_PUMP_CONTROL_TO_TARGET_FLOW_STATE; } else if ( getTargetBoostPumpDutyCyclePCT() > 0.0F ) @@ -333,7 +330,7 @@ } else if ( ++boostControlTimerCounter >= BOOST_CONTROL_INTERVAL ) { - boostPumpDutyCyclePctSet = runPIController( PI_CONTROLLER_ID_BOOST_PUMP_PRES, getTargetBoostPumpPressure(), getFilteredPressure( M3_PRES ) ); + boostPumpDutyCyclePctSet = runPIDController( PID_CONTROLLER_ID_BOOST_PUMP_PRES, getTargetBoostPumpPressure(), getFilteredPressure( M3_PRES ) ); setFluidPumpPctToPWMDutyCycle( P40_PUMP, boostPumpDutyCyclePctSet ); boostControlTimerCounter = 0; } @@ -617,13 +614,13 @@ if( targetBoostPumpFlowRate.data > 0.0F ) { targetBoostPumpFlowRate.data = 0.0F; - resetPIController( PI_CONTROLLER_ID_BOOST_PUMP_FLOW, MIN_FLUID_PUMP_DUTY_CYCLE_PCT, 0 ); + resetPIDController( PID_CONTROLLER_ID_BOOST_PUMP_FLOW, MIN_FLUID_PUMP_DUTY_CYCLE_PCT, 0 ); } if( targetBoostPumpPressure.data > 0.0F ) { targetBoostPumpPressure.data = 0.0F; - resetPIController( PI_CONTROLLER_ID_BOOST_PUMP_PRES, MIN_FLUID_PUMP_DUTY_CYCLE_PCT, 0 ); + resetPIDController( PID_CONTROLLER_ID_BOOST_PUMP_PRES, MIN_FLUID_PUMP_DUTY_CYCLE_PCT, 0 ); } boostPumpState = BOOST_PUMP_OFF_STATE;