Index: firmware/App/Controllers/ROPump.c =================================================================== diff -u -r138efd92a8645e0d2fe422409ef5a33dd2929a25 -r68fc03b5a22f14190146fc9069f022c109682b63 --- firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 138efd92a8645e0d2fe422409ef5a33dd2929a25) +++ firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 68fc03b5a22f14190146fc9069f022c109682b63) @@ -39,15 +39,12 @@ #define MIN_RO_PUMP_PWM_DUTY_CYCLE 0.00 ///< min duty cycle #define ROP_CONTROL_INTERVAL ( 1000 / TASK_GENERAL_INTERVAL ) ///< interval (ms/task time) at which the RO pump is controlled -#define ROP_P_COEFFICIENT 0.00005 ///< P term for RO pump control +#define ROP_P_COEFFICIENT 0.005 ///< P term for RO pump control #define ROP_I_COEFFICIENT 0.00015 ///< I term for RO pump control #define ROP_SPEED_ADC_TO_RPM_FACTOR 1.0 ///< conversion factor from ADC counts to RPM for RO pump +#define ROP_PSI_TO_PWM_DC(p) ( 0.2 + ( (F32)((p) - 100) * 0.01 ) ) ///< conversion factor from target PSI to PWM duty cycle estimate TODO - this is a place holder for real conversion -#define RO_PUMP_ADC_FULL_SCALE_V 3.0 ///< RO pump analog signals are 0-3V (while int. ADC ref may be different) -#define RO_PUMP_ADC_ZERO ( (F32)( INT_ADC_ZERO ) * ( RO_PUMP_ADC_FULL_SCALE_V / INT_ADC_REF_V ) ) -#define SIGN_FROM_12_BIT_VALUE(v) ( (S16)(v) - (S16)RO_PUMP_ADC_ZERO ) - typedef enum ROPump_States { RO_PUMP_OFF_STATE = 0, @@ -118,9 +115,9 @@ * @details * Inputs : none * Outputs : targetROPumpPressure, roPumpPWMDutyCyclePct - * @param roPressure : new target ro pressure + * @param roPressure : new target RO pressure * @param mode : new control mode - * @return TRUE if new pressure & dir are set, FALSE if not + * @return TRUE if new target pressure is set, FALSE if not *************************************************************************/ BOOL setROPumpTargetPressure( U32 roPressure, PUMP_CONTROL_MODE_T mode ) { @@ -132,7 +129,7 @@ targetROPumpPressure.data = roPressure; roPumpControlMode = mode; // set PWM duty cycle target to an estimated initial target based on target pressure - then we'll control to pressure going forward - roPumpPWMDutyCyclePct = 0; // TODO - determine formula for estimating target PWM + roPumpPWMDutyCyclePct = ROP_PSI_TO_PWM_DC( roPressure ); result = TRUE; } @@ -180,7 +177,11 @@ roPumpSpeedRPM.data = (F32)((S16)roRPM); measuredROPumpPressure.data = (F32)((S16)roPressure); - // TODO - check pressure + // check pressure +// if ( roPressure < MIN_RO_PRESSURE || roPressure > MAX_RO_PRESSURE ) +// { +// SET_ALARM_WITH_1_F32_DATA( ALARM_ID_RO_PUMP_OUT_PRESSURE_OUR_OF_RANGE, roPressure ) +// } // publish RO flow data on interval publishROPumpData();