Index: firmware/App/Controllers/ROPump.c =================================================================== diff -u -re66245baae86e539e8470aa9739a99a2146d5f17 -r738afd1d72ec8da1c5bd347b9263a2c3ca2d8a61 --- firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision e66245baae86e539e8470aa9739a99a2146d5f17) +++ firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 738afd1d72ec8da1c5bd347b9263a2c3ca2d8a61) @@ -54,6 +54,8 @@ #define ROP_P_COEFFICIENT 0.005 ///< P term for RO pump control #define ROP_I_COEFFICIENT 0.0025 ///< I term for RO pump control +#define FLOW_SENSOR_ZERO_READING 0xFFFF ///< Flow sensor reading indicates zero flow (or flow lower than can be detected by sensor) + #define FLOW_SAMPLES_TO_AVERAGE (250 / TASK_PRIORITY_INTERVAL) ///< Averaging flow data over 250 ms intervals. #define FLOW_AVERAGE_MULTIPLIER (1.0 / (F32)FLOW_SAMPLES_TO_AVERAGE) ///< Optimization - multiplying is faster than dividing. @@ -155,7 +157,11 @@ 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 +#ifdef EMC_TEST_BUILD + roPumpPWMDutyCyclePct = 1.0; +#else roPumpPWMDutyCyclePct = ROP_PSI_TO_PWM_DC( roPressure ); +#endif result = TRUE; } @@ -195,7 +201,8 @@ *************************************************************************/ void execROPumpMonitor( void ) { - S32 roFlow = (S32)getFPGAROPumpFlowRate(); + U16 roFlowReading = getFPGAROPumpFlowRate(); + S32 roFlow = (S32)roFlowReading; // update sum for flow average calculation measuredFlowReadingsSum += roFlow; @@ -204,7 +211,14 @@ { F32 avgROFlow = (F32)measuredFlowReadingsSum * FLOW_AVERAGE_MULTIPLIER; - measuredROFlowRateLPM.data = ( measuredFlowReadingsSum == 0 ? 0.0 : RO_FLOW_ADC_TO_LPM_FACTOR / avgROFlow ); + if ( ( avgROFlow == FLOW_SENSOR_ZERO_READING ) || ( measuredFlowReadingsSum == 0 ) ) + { + measuredROFlowRateLPM.data = 0.0; + } + else + { + measuredROFlowRateLPM.data = RO_FLOW_ADC_TO_LPM_FACTOR / avgROFlow; + } measuredFlowReadingsSum = 0; flowFilterCounter = 0; } @@ -336,9 +350,11 @@ F32 actPres = measuredROPumpPressure; F32 newPWM; +#ifndef EMC_TEST_BUILD newPWM = runPIController( PI_CONTROLLER_ID_RO_PUMP, tgtPres, actPres ); roPumpPWMDutyCyclePctSet = newPWM; setROPumpControlSignalPWM( newPWM ); +#endif } roControlTimerCounter = 0; }