Index: firmware/App/Controllers/ConcentratePumps.c =================================================================== diff -u -r7d0fd5ed6b9db0479af90477e5108f6d3fa8df17 -r336c209c89879d63f7d2078124dcbbfb3f01cef9 --- firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 7d0fd5ed6b9db0479af90477e5108f6d3fa8df17) +++ firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 336c209c89879d63f7d2078124dcbbfb3f01cef9) @@ -953,16 +953,23 @@ } else if ( FALSE == isPumpPulseWidthOut ) { - concentratePumps[ pumpId ].measuredPumpSpeed.data = ( US_PER_SECOND / pulseWidthInMicroSeconds ) * CONCENTRATE_PUMP_VOLUME_PER_PULSE * SEC_PER_MIN; + F32 speedMLPM = ( US_PER_SECOND / pulseWidthInMicroSeconds ) * CONCENTRATE_PUMP_VOLUME_PER_PULSE * SEC_PER_MIN; + F32 speedMLPMWithCal = pow( speedMLPM, 4 ) * concentratePumpsCalRecord.concentratePumps[ (CAL_DATA_DG_PUMPS_T)pumpId ].fourthOrderCoeff + + pow( speedMLPM, 3 ) * concentratePumpsCalRecord.concentratePumps[ (CAL_DATA_DG_PUMPS_T)pumpId ].thirdOrderCoeff + + pow( speedMLPM, 2 ) * concentratePumpsCalRecord.concentratePumps[ (CAL_DATA_DG_PUMPS_T)pumpId ].secondOrderCoeff + + speedMLPM * concentratePumpsCalRecord.concentratePumps[ (CAL_DATA_DG_PUMPS_T)pumpId ].gain + + concentratePumpsCalRecord.concentratePumps[ (CAL_DATA_DG_PUMPS_T)pumpId ].offset; + + concentratePumps[ pumpId ].measuredPumpSpeed.data = speedMLPMWithCal; } // If pulse width is out of range capture pump out of range, pumpId and pulse width if ( TRUE == isPumpPulseWidthOut ) { // Pulse width for this concentrate pump is out of range - isPulseWidthOut = TRUE; - pumpInAlarm = pumpId; - pumpInAlarmPulseWidthInMicroSeconds = pulseWidthInMicroSeconds; + isPulseWidthOut = TRUE; + pumpInAlarm = pumpId; + pumpInAlarmPulseWidthInMicroSeconds = pulseWidthInMicroSeconds; } }