Index: firmware/App/Controllers/BoostPump.c =================================================================== diff -u -r6c4b1bb9d485e9ab634c7775b707af0614e11788 -r9b970fd909c38f64f034cda1ffa793b9e1c8c365 --- firmware/App/Controllers/BoostPump.c (.../BoostPump.c) (revision 6c4b1bb9d485e9ab634c7775b707af0614e11788) +++ firmware/App/Controllers/BoostPump.c (.../BoostPump.c) (revision 9b970fd909c38f64f034cda1ffa793b9e1c8c365) @@ -41,20 +41,26 @@ #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.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_P_COEFFICIENT 0.00072F ///< P term for Boost pump pressure control. +#define BOOST_PRESSURE_CONTROL_I_COEFFICIENT 0.0004F ///< I term for Boost pump pressure control. +//#define BOOST_PRESSURE_CONTROL_P_COEFFICIENT 0.0024F ///< P term for Boost pump pressure control. +//#define BOOST_PRESSURE_CONTROL_I_COEFFICIENT 0.0008F ///< 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. -#define BOOST_PRESSURE_TO_PWM_SLOPE 0.5F ///< Slope of pressure to PWM line equation. -#define BOOST_PRESSURE_TO_PWM_INTERCEPT 0.0F ///< Intercept of pressure to PWM line equation. +#define BOOST_PRESSURE_TO_PWM_SLOPE 27.389F ///< Slope of pressure to PWM line equation. +#define BOOST_PRESSURE_TO_PWM_INTERCEPT -146.93F ///< Intercept of pressure to PWM line equation. #define DATA_PUBLISH_COUNTER_START_COUNT 10 ///< Data publish counter start count. /// PWM line equation for pressure. converted to percentage. -#define ROP_PRESSURE_TO_PWM_PCT(pres) ( ( BOOST_PRESSURE_TO_PWM_SLOPE * pres + BOOST_PRESSURE_TO_PWM_INTERCEPT ) / MAX_P40_FLUID_PUMP_PWM_DUTY_CYCLE ) +#define BOOST_PRESSURE_TO_PWM_PCT(pres) ( ( BOOST_PRESSURE_TO_PWM_SLOPE * pres + BOOST_PRESSURE_TO_PWM_INTERCEPT ) / MAX_P40_FLUID_PUMP_PWM_DUTY_CYCLE ) +/// PWM line equation for flow. converted to percentage. +#define BOOST_FLOW_TO_PWM_PCT(pres) ( ( BOOST_FLOW_TO_PWM_SLOPE * pres + BOOST_FLOW_TO_PWM_INTERCEPT ) / MAX_P40_FLUID_PUMP_PWM_DUTY_CYCLE ) +#define MIN_CONTROL_P40_FLUID_PUMP_DUTY_CYCLE_PCT 0.02F +#define MAX_CONTROL_P40_FLUID_PUMP_DUTY_CYCLE_PCT 0.9F // ********** private data ********** static BOOST_PUMP_STATE_T boostPumpState; ///< Current state of pump controller state machine. @@ -289,7 +295,7 @@ else if ( ++boostControlTimerCounter >= BOOST_CONTROL_INTERVAL ) { 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; } @@ -330,7 +336,8 @@ } else if ( ++boostControlTimerCounter >= BOOST_CONTROL_INTERVAL ) { - boostPumpDutyCyclePctSet = runPIDController( PID_CONTROLLER_ID_BOOST_PUMP_PRES, getTargetBoostPumpPressure(), getFilteredPressure( M3_PRES ) ); + boostPumpDutyCyclePctSet = runPIDController( PID_CONTROLLER_ID_BOOST_PUMP_PRES, getTargetBoostPumpPressure(), getFilteredPressure( P8_PRES ) ); + boostPumpDutyCyclePctSet = RANGE( boostPumpDutyCyclePctSet, MIN_CONTROL_P40_FLUID_PUMP_DUTY_CYCLE_PCT, MAX_CONTROL_P40_FLUID_PUMP_DUTY_CYCLE_PCT ); setFluidPumpPctToPWMDutyCycle( P40_PUMP, boostPumpDutyCyclePctSet ); boostControlTimerCounter = 0; } @@ -434,6 +441,7 @@ boostPumpDutyCyclePctSet = boostPumpPresToPWM( getTargetBoostPumpPressure() ); boostControlTimerCounter = 0; isBoostPumpOn = TRUE; + result = TRUE; } } @@ -580,7 +588,7 @@ static F32 boostPumpPresToPWM( F32 targetPressure ) { - F32 dutyCyclePct = BOOST_PRESSURE_TO_PWM( targetPressure ); + F32 dutyCyclePct = BOOST_PRESSURE_TO_PWM_PCT( targetPressure ); return dutyCyclePct; } @@ -596,7 +604,7 @@ *************************************************************************/ static F32 boostPumpFlowToPWM( U32 targetFlow ) { - F32 dutyCyclePct = BOOST_FLOW_TO_PWM( targetFlow ); + F32 dutyCyclePct = BOOST_FLOW_TO_PWM_PCT( targetFlow ); return dutyCyclePct; } @@ -673,15 +681,25 @@ { BOOST_PUMP_DATA_T pumpData; +// pumpData.p40PumpState = (U32)boostPumpState; +// pumpData.p40PumpDutyCycle = (U32)getFluidPumpPWMDutyCycle( P40_PUMP ); +// pumpData.p40PumpFBDutyCycle = (U32)getFluidPumpReadPWMDutyCycle( P40_PUMP ); +// pumpData.p40PumpSpeed = getFluidPumpRPM( P40_PUMP ); +// pumpData.p40TargetPressure = getTargetBoostPumpPressure(); +// pumpData.p40TargetFlow = getTargetBoostPumpFlowRateMLPM(); +// pumpData.p40TargetDutyCycle = getTargetBoostPumpDutyCyclePCT(); +// pumpData.p40PumpDutyCyclePct = convertDutyCycleCntToPct( P40_PUMP, (U32)getFluidPumpPWMDutyCycle( P40_PUMP ) ); +// pumpData.p40PumpFBDutyCyclePct = convertDutyCycleCntToPct( P40_PUMP, (U32)getFluidPumpReadPWMDutyCycle( P40_PUMP ) ); + pumpData.p40PumpState = (U32)boostPumpState; pumpData.p40PumpDutyCycle = (U32)getFluidPumpPWMDutyCycle( P40_PUMP ); - pumpData.p40PumpFBDutyCycle = (U32)getFluidPumpReadPWMDutyCycle( P40_PUMP ); - pumpData.p40PumpSpeed = getFluidPumpRPM( P40_PUMP ); - pumpData.p40TargetPressure = getTargetBoostPumpPressure(); - pumpData.p40TargetFlow = getTargetBoostPumpFlowRateMLPM(); - pumpData.p40TargetDutyCycle = getTargetBoostPumpDutyCyclePCT(); - pumpData.p40PumpDutyCyclePct = convertDutyCycleCntToPct( P40_PUMP, (U32)getFluidPumpPWMDutyCycle( P40_PUMP ) ); - pumpData.p40PumpFBDutyCyclePct = convertDutyCycleCntToPct( P40_PUMP, (U32)getFluidPumpReadPWMDutyCycle( P40_PUMP ) ); + pumpData.p40PumpFBDutyCycle = getPIDControllerSignals(PID_CONTROLLER_ID_BOOST_PUMP_PRES, CONTROLLER_SIGNAL_PID_DERIVATIVE_OUTPUT ); + pumpData.p40PumpSpeed = getPIDControllerSignals(PID_CONTROLLER_ID_BOOST_PUMP_PRES, CONTROLLER_SIGNAL_PID_MEASURED ); + pumpData.p40TargetPressure = getPIDControllerSignals(PID_CONTROLLER_ID_BOOST_PUMP_PRES, CONTROLLER_SIGNAL_PID_ERROR ); + pumpData.p40TargetFlow = getPIDControllerSignals(PID_CONTROLLER_ID_BOOST_PUMP_PRES, CONTROLLER_SIGNAL_PID_ERROR_SUM ); + pumpData.p40TargetDutyCycle = getPIDControllerSignals(PID_CONTROLLER_ID_BOOST_PUMP_PRES, CONTROLLER_SIGNAL_PID_PROPORTIONAL_OUTPUT ); + pumpData.p40PumpDutyCyclePct = getPIDControllerSignals(PID_CONTROLLER_ID_BOOST_PUMP_PRES, CONTROLLER_SIGNAL_PID_INTEGRAL_OUTPUT ); + pumpData.p40PumpFBDutyCyclePct = getPIDControllerSignals(PID_CONTROLLER_ID_BOOST_PUMP_PRES, CONTROLLER_SIGNAL_PID_CONTROL ); broadcastData( MSG_ID_FP_BOOST_PUMP_DATA, COMM_BUFFER_OUT_CAN_FP_BROADCAST, (U08*)&pumpData, sizeof( BOOST_PUMP_DATA_T ) ); boostPumpDataPublicationTimerCounter = 0; Index: firmware/App/Controllers/BoostPump.h =================================================================== diff -u -r9f1f5a95111b55ee99bbdcd60a2c8b4cc088237c -r9b970fd909c38f64f034cda1ffa793b9e1c8c365 --- firmware/App/Controllers/BoostPump.h (.../BoostPump.h) (revision 9f1f5a95111b55ee99bbdcd60a2c8b4cc088237c) +++ firmware/App/Controllers/BoostPump.h (.../BoostPump.h) (revision 9b970fd909c38f64f034cda1ffa793b9e1c8c365) @@ -35,11 +35,8 @@ #define MAX_BOOST_FLOWRATE_MLPM 1500 ///< Maximum target Boost flow rate in mL/min. #define MIN_BOOST_FLOWRATE_MLPM 0 ///< Minimum target Boost flow rate in mL/min. #define MAX_BOOST_PRESSURE_PSI 40.0F ///< Maximum allowed pressure that the Boost pump can go to. -#define MIN_BOOST_PRESSURE_PSI 10.0F ///< Minimum allowed pressure that the Boost pump can go to. +#define MIN_BOOST_PRESSURE_PSI 0.0F ///< Minimum allowed pressure that the Boost pump can go to. -#define BOOST_FLOW_TO_PWM(flow) ( BOOST_FLOW_TO_PWM_SLOPE * flow + BOOST_FLOW_TO_PWM_INTERCEPT ) ///< PWM line equation for flow. -#define BOOST_PRESSURE_TO_PWM(pres) ( BOOST_PRESSURE_TO_PWM_SLOPE * pres + BOOST_PRESSURE_TO_PWM_INTERCEPT ) ///< PWM line equation for pressure. - /// Boost pump data record. typedef struct { Index: firmware/App/Controllers/ROPump.c =================================================================== diff -u -r6c4b1bb9d485e9ab634c7775b707af0614e11788 -r9b970fd909c38f64f034cda1ffa793b9e1c8c365 --- firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 6c4b1bb9d485e9ab634c7775b707af0614e11788) +++ firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 9b970fd909c38f64f034cda1ffa793b9e1c8c365) @@ -40,11 +40,11 @@ // ********** 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 ( ( MS_PER_SECOND ) / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the RO pump is controlled. -#define RO_LAG_TIMER ( MS_PER_SECOND *4 ) +#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_FLOW_CONTROL_P_COEFFICIENT 0.00005F ///< P term for RO pump flow control. -#define ROP_FLOW_CONTROL_I_COEFFICIENT 0.000002F +#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_PRESSURE_CONTROL_P_COEFFICIENT 0.15F ///< P term for RO pump pressure control. Index: firmware/App/Drivers/FluidPump.h =================================================================== diff -u -r60693bf21a8a0277eae54cbfcb6cfd68176b079a -r9b970fd909c38f64f034cda1ffa793b9e1c8c365 --- firmware/App/Drivers/FluidPump.h (.../FluidPump.h) (revision 60693bf21a8a0277eae54cbfcb6cfd68176b079a) +++ firmware/App/Drivers/FluidPump.h (.../FluidPump.h) (revision 9b970fd909c38f64f034cda1ffa793b9e1c8c365) @@ -32,12 +32,14 @@ // ********** public definitions ********** -#define MAX_P40_FLUID_PUMP_PWM_DUTY_CYCLE 5000 ///< Maximum settable pump duty cycle magnitude for P40. +#define MAX_P40_FLUID_PUMP_PWM_DUTY_CYCLE 4900 ///< Maximum settable pump duty cycle magnitude for P40. #define MAX_P12_FLUID_PUMP_PWM_DUTY_CYCLE 500 ///< Maximum settable pump duty cycle magnitude for P12. #define MIN_FLUID_PUMP_PWM_DUTY_CYCLE 0 ///< Minimum settable pump duty cycle magnitude. +#define MIN_P40_FLUID_PUMP_PWM_DUTY_CYCLE 100 ///< Minimum settable pump duty cycle magnitude. #define MAX_P40_FLUID_PUMP_DUTY_CYCLE_PCT 0.98F ///< Max duty cycle for P40 in percentage #define MAX_P12_FLUID_PUMP_DUTY_CYCLE_PCT 0.90F ///< Max duty cycle for P12 in percentage. +#define MIN_P40_FLUID_PUMP_DUTY_CYCLE_PCT 0.02F ///< Min duty cycle in percentage. #define MIN_FLUID_PUMP_DUTY_CYCLE_PCT 0.0F ///< Min duty cycle in percentage. /// Enumerations of fluid pumps.