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;