Index: firmware/App/Controllers/DrainPump.c =================================================================== diff -u -r8f95cb0d5ca434bdaf3e157e399e017d12212d3d -rd3671cad1447db7ad496ad6282324ef7570c5625 --- firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 8f95cb0d5ca434bdaf3e157e399e017d12212d3d) +++ firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision d3671cad1447db7ad496ad6282324ef7570c5625) @@ -52,8 +52,8 @@ #define DRP_SPEED_ADC_TO_RPM_FACTOR 12.94 ///< conversion factor from ADC counts to RPM for Drain pump #define DRP_SPEED_RPM_TO_ADC_FACTOR ( 1.0 / DRP_SPEED_ADC_TO_RPM_FACTOR ) ///< conversion factor from RPM to ADC counts for Drain pump -#define DRAIN_PUMP_P_COEFFICIENT 0.005 ///< P term for drain pump delta pressure control -#define DRAIN_PUMP_I_COEFFICIENT 0.0015 ///< I term for drain pump delta pressure control +#define DRAIN_PUMP_P_COEFFICIENT 0.5 ///< P term for drain pump delta pressure control +#define DRAIN_PUMP_I_COEFFICIENT 1.0 ///< I term for drain pump delta pressure control /// Enumeration of drain pump states. typedef enum DrainPump_States @@ -288,18 +288,17 @@ // is open loop, set the drain pump to open loop if ( getTargetDrainPumpSpeed() > 0 && drainPumpControlMode == PUMP_CONTROL_MODE_OPEN_LOOP ) { - // set drain pump enable pin + // Set drain pump enable pin SET_DRAIN_PUMP_ENABLE(); - // set drain pump DAC + // Set drain pump DAC drainPumpDACSet = drainPumpDAC; setFPGADrainPumpSpeed( drainPumpDACSet ); result = DRAIN_PUMP_OPEN_LOOP_STATE; } // If the drain pump is set to closed loop, call the proper state - // It is checked for the value of delta pressure because it can be anything - // including 0 + // It is checked for the value of delta pressure because it can be anything including 0 else if ( drainPumpControlMode == PUMP_CONTROL_MODE_CLOSED_LOOP && hasClosedLoopBeenRequested ) { // set drain pump enable pin @@ -335,9 +334,9 @@ { F32 inletDrainPressure = getMeasuredDGPressure ( PRESSURE_SENSOR_DRAIN_PUMP_INLET ); F32 outletDrainPressure = getMeasuredDGPressure ( PRESSURE_SENSOR_DRAIN_PUMP_OUTLET ); - F32 pressureDiff = inletDrainPressure - outletDrainPressure; - F32 rpm = runPIController( PI_CONTROLLER_ID_DRAIN_PUMP, targetDrainPumpDeltaPressure.data, pressureDiff ); - drainPumpDACSet = (U32)(rpm * DRP_SPEED_RPM_TO_ADC_FACTOR + FLOAT_TO_INT_ROUNDUP_OFFSET); + F32 pressureDiff = outletDrainPressure - inletDrainPressure; + F32 dac = runPIController( PI_CONTROLLER_ID_DRAIN_PUMP, targetDrainPumpDeltaPressure.data, pressureDiff ); //TODO use get for delta pressure + drainPumpDACSet = (U32)(dac + FLOAT_TO_INT_ROUNDUP_OFFSET); setFPGADrainPumpSpeed( drainPumpDACSet ); // From a merge from master @@ -352,13 +351,6 @@ } // From a merge from master - if ( 0 == getTargetDrainPumpSpeed() ) - { - signalDrainPumpHardStop(); - - result = DRAIN_PUMP_OFF_STATE; - } - #ifdef DEBUG_ENABLED #ifdef ENABLE_DIP_SWITCHES // TODO - test code - remove later @@ -390,6 +382,12 @@ *************************************************************************/ static DRAIN_PUMP_STATE_T handleDrainPumpOpenLoopState( void ) { + /*if ( 0 == getTargetDrainPumpSpeed() ) + { + signalDrainPumpHardStop(); + + result = DRAIN_PUMP_OFF_STATE; + }*/ //TODO clean up return DRAIN_PUMP_OPEN_LOOP_STATE; }