Index: firmware/App/Controllers/ConcentratePumps.c =================================================================== diff -u -rd0d24b086ffdfa00838570e24ffdf2194beb1e17 -rc4e1d97e73dd863ddffe895833d209e172b5ae4a --- firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision d0d24b086ffdfa00838570e24ffdf2194beb1e17) +++ firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision c4e1d97e73dd863ddffe895833d209e172b5ae4a) @@ -266,10 +266,14 @@ //Monitor Pump Park status monitorPumpParkStatus(); - //Monitor Pump Speed - monitorPumpSpeed( D11_PUMP, ALARM_ID_DD_D11_PUMP_SPEED_CONTROL_ERROR ); - monitorPumpSpeed( D10_PUMP, ALARM_ID_DD_D10_PUMP_SPEED_CONTROL_ERROR ); - monitorPumpSpeed( D76_PUMP, ALARM_ID_DD_D76_PUMP_SPEED_CONTROL_ERROR ); + //TODO: Uncomment once done. + // Temporarily disable concentrate pump speed mismatch alarms + // monitorPumpSpeed( D11_PUMP, ALARM_ID_DD_D11_PUMP_SPEED_CONTROL_ERROR ); + // monitorPumpSpeed( D10_PUMP, ALARM_ID_DD_D10_PUMP_SPEED_CONTROL_ERROR ); + // monitorPumpSpeed( D76_PUMP, ALARM_ID_DD_D76_PUMP_SPEED_CONTROL_ERROR ); + resetPersistentAlarmTimer( ALARM_ID_DD_D11_PUMP_SPEED_CONTROL_ERROR ); + resetPersistentAlarmTimer( ALARM_ID_DD_D10_PUMP_SPEED_CONTROL_ERROR ); + resetPersistentAlarmTimer( ALARM_ID_DD_D76_PUMP_SPEED_CONTROL_ERROR ); checkPersistentAlarm( ALARM_ID_DD_CONCENTRATE_PUMP_FAULT, isConcPumpFault, fpgaConcPumpsFault, CONCENTRATE_PUMP_FAULT_PERSISTENCE_PERIOD ); @@ -513,6 +517,8 @@ { concentratePumps[ pumpId ].hasTurnOnPumpsBeenRequested = FALSE; hasParkBeenRequested[ pumpId ].data = park; + stopConcentratePump( pumpId ); + concentratePumps[ pumpId ].execState = CONCENTRATE_PUMP_OFF_STATE; } else { @@ -846,6 +852,8 @@ concentratePumps[ pumpId ].currentPumpSpeed = 0.0F; // set target rate to zero pumpTargetSpeed[ pumpId ].data = 0.0F; pumpTargetRevCnt[ pumpId ].data = 0; + measuredPumpSpeed[ pumpId ].data = 0.0F; + concentratePumps[ pumpId ].pulseWidthUS = 0.0F; isDosingCompleted [ pumpId ] = TRUE; // Disable the motor when stopping, to take next revolution count @@ -1111,16 +1119,26 @@ pulseWidthInMicroSeconds = pulseWidthCount * CONCENTRATE_PUMP_HALL_SENSE_PERIOD_RESOLUTION; concentratePumps[ pumpId ].pulseWidthUS = pulseWidthInMicroSeconds; - isPumpPulseWidthOut = ( pulseWidthInMicroSeconds <= (F32)CONCENTRATE_PUMP_MIN_ALLOWED_HALL_SENSOR_COUNT ? TRUE : FALSE ); + isPumpPulseWidthOut = FALSE; // Determine measured speed for the pump - if ( CONCENTRATE_PUMP_ZERO_FLOW_RATE == pulseWidthCount ) + if ( ( concentratePumps[ pumpId ].currentPumpSpeed <= NEARLY_ZERO ) || + ( CONCENTRATE_PUMP_ZERO_FLOW_RATE == pulseWidthCount ) ) { measuredPumpSpeed[ pumpId ].data = 0.0F; } - else if ( FALSE == isPumpPulseWidthOut ) + else { - measuredPumpSpeed[ pumpId ].data = ( US_PER_SECOND / pulseWidthInMicroSeconds ) * CONCENTRATE_PUMP_VOLUME_PER_PULSE_DIENER * SEC_PER_MIN; + isPumpPulseWidthOut = ( pulseWidthInMicroSeconds <= (F32)CONCENTRATE_PUMP_MIN_ALLOWED_HALL_SENSOR_COUNT ? TRUE : FALSE ); + + if ( FALSE == isPumpPulseWidthOut ) + { + measuredPumpSpeed[ pumpId ].data = ( US_PER_SECOND / pulseWidthInMicroSeconds ) * CONCENTRATE_PUMP_VOLUME_PER_PULSE_DIENER * SEC_PER_MIN; + } + else + { + measuredPumpSpeed[ pumpId ].data = 0.0F; + } } // If pulse width is out of range capture pump out of range, pumpId and pulse width