Index: firmware/App/Controllers/ConcentratePumps.c =================================================================== diff -u -r88fdd83b43ef9c2d2f06a51e555db1439b668921 -r62ee40b55ed96eb0de1c0f05455eb986f76c1842 --- firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 88fdd83b43ef9c2d2f06a51e555db1439b668921) +++ firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 62ee40b55ed96eb0de1c0f05455eb986f76c1842) @@ -31,17 +31,17 @@ #define CONCENTRATE_PUMP_ON_CONTROL 0x1A ///< Configuration to turn on concentrate pump with 8 microsteps. #define CONCENTRATE_PUMP_OFF_CONTROL 0x3A ///< Configuration to turn off concentrate pump. -#define CONCENTRATE_PUMP_SPEED_INCREAMENT 8.0 ///< Speed increase (mL/min) when controlling concentrate pump to target step speed. +#define CONCENTRATE_PUMP_SPEED_INCREMENT 8.0 ///< Speed increase (mL/min) when controlling concentrate pump to target step speed. #define CONCENTRATE_PUMP_MIN_SPEED 3.0 ///< Minimum speed for concentrate pump in mL per min. #define CONCENTRATE_PUMP_MAX_SPEED 49.0 ///< Maximum speed for concentrate pump in mL per min. #define CONCENTRATE_PUMP_VOLUME_PER_REV 0.15 ///< Volume output every revolution (mL). -#define CONCENTRATE_PUMP_PULSE_PER_REV 4 ///< Number of pulses generate for every revolution. -#define CONCENTRATE_PUMP_STEP_PER_REV 200 ///< Number of steps for every revolution. -#define CONCENTRATE_PUMP_HALL_SENSE_PERIOD_RESOLUTION 100 ///< Hall sense period resolution in microseconds. +#define CONCENTRATE_PUMP_PULSE_PER_REV 4.0 ///< Number of pulses generate for every revolution. +#define CONCENTRATE_PUMP_STEP_PER_REV 200.0 ///< Number of steps for every revolution. +#define CONCENTRATE_PUMP_HALL_SENSE_PERIOD_RESOLUTION 100.0 ///< Hall sense period resolution in microseconds. -#define CONCENTRATE_PUMP_MICRO_STEPS 8 ///< Number of micro-steps. -#define CONCENTRATE_PUMP_STEP_PERIOD_RESOLUTION ( 2 * 0.25 / ( US_PER_SECOND * SEC_PER_MIN ) ) ///< Step period resolution in minute. +#define CONCENTRATE_PUMP_MICRO_STEPS_PER_STEP 8.0 ///< Number of micro-steps ( fractions of step) per step. +#define CONCENTRATE_PUMP_STEP_PERIOD_RESOLUTION ( 0.5 / ( US_PER_SECOND * SEC_PER_MIN ) ) ///< Convert one step period (0.5 us) to minute. /// Volume output per pulse. #define CONCENTRATE_PUMP_VOLUME_PER_PULSE ( CONCENTRATE_PUMP_VOLUME_PER_REV / CONCENTRATE_PUMP_PULSE_PER_REV ) @@ -68,9 +68,9 @@ /// Concentrate pump data publish interval. static OVERRIDE_U32_T concentratePumpDataPublishInterval = { CONCENTRATE_PUMP_DATA_PUBLISH_INTERVAL, CONCENTRATE_PUMP_DATA_PUBLISH_INTERVAL, 0, 0 }; -static OVERRIDE_F32_T pumpTargetSpeed[ NUM_OF_CONCENTRATE_PUMPS ]; ///< Target concentrate pumps' speed (mL/min). +static F32 pumpTargetSpeed[ NUM_OF_CONCENTRATE_PUMPS ]; ///< Target concentrate pumps' speed (mL/min). static F32 currentPumpSpeed[ NUM_OF_CONCENTRATE_PUMPS ]; ///< Current controlled concentrate pumps' speed (mL/min). -static U16 convertedStepSpeed[ NUM_OF_CONCENTRATE_PUMPS ]; ///< Converted pump speed (mL/min) to step speed. +static U16 convertedStepSpeedPeriod[ NUM_OF_CONCENTRATE_PUMPS ]; ///< Converted pump speed (mL/min) to step speed period. // ********** private function prototypes ********** @@ -79,7 +79,6 @@ static void stepConcentratePumpToTargetSpeed( CONCENTRATE_PUMPS_T pumpId ); static CONCENTRATE_PUMP_STATE_T handleConcentratePumpOnState( void ); -static F32 getConcentratePumpTargetSpeed( CONCENTRATE_PUMPS_T pumpId ); static U32 getPublishConcentratePumpDataInterval( void ); /*********************************************************************//** @@ -120,9 +119,9 @@ F32 const cp1SpeedMlPerMin = ( 1 / cp1PulseWidthInSecond ) * CONCENTRATE_PUMP_VOLUME_PER_PULSE * SEC_PER_MIN; F32 const cp2SpeedMlPerMin = ( 1 / cp2PulseWidthInSecond ) * CONCENTRATE_PUMP_VOLUME_PER_PULSE * SEC_PER_MIN; - data.cp1TargetSpeed = getConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP1 ); + data.cp1TargetSpeed = pumpTargetSpeed[ CONCENTRATEPUMPS_CP1 ]; data.cp1MeasuredSpeed = cp1SpeedMlPerMin; - data.cp2TargetSpeed = getConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP2 ); + data.cp2TargetSpeed = pumpTargetSpeed[ CONCENTRATEPUMPS_CP2 ]; data.cp2MeasuredSpeed = cp2SpeedMlPerMin; broadcastConcentratePumpData( &data ); @@ -157,30 +156,30 @@ /*********************************************************************//** * @brief - * The requestConcentratePumpOn function requests the module to turn on + * The requestConcentratePumpsOn function requests the module to turn on * the concentrate pumps. * @details Inputs: none * @details Outputs: set flag isPumpOnRequested to TRUE * @return none *************************************************************************/ -void requestConcentratePumpOn( void ) +void requestConcentratePumpsOn( void ) { isPumpOnRequested = TRUE; } /*********************************************************************//** * @brief - * The requestConcentratePumpOff function requests the module to turn off + * The requestConcentratePumpsOff function requests the module to turn off * the concentrate pumps. * @details Inputs: none * @details Outputs: set flag isPumpOffRequested to TRUE * @return none *************************************************************************/ -void requestConcentratePumpOff( void ) +void requestConcentratePumpsOff( void ) { isPumpOffRequested = TRUE; - pumpTargetSpeed[ CONCENTRATEPUMPS_CP1 ].data = 0.0; - pumpTargetSpeed[ CONCENTRATEPUMPS_CP2 ].data = 0.0; + pumpTargetSpeed[ CONCENTRATEPUMPS_CP1 ] = 0.0; + pumpTargetSpeed[ CONCENTRATEPUMPS_CP2 ] = 0.0; } /*********************************************************************//** @@ -195,22 +194,21 @@ *************************************************************************/ void setConcentratePumpTargetSpeed( CONCENTRATE_PUMPS_T pumpId, F32 targetSpeed_ml_min ) { - if ( ( CONCENTRATE_PUMP_MIN_SPEED <= targetSpeed_ml_min ) && ( targetSpeed_ml_min <= CONCENTRATE_PUMP_MAX_SPEED ) && - ( pumpId < NUM_OF_CONCENTRATE_PUMPS ) ) + if ( pumpId < NUM_OF_CONCENTRATE_PUMPS ) { - pumpTargetSpeed[ pumpId ].data = targetSpeed_ml_min; - } - else - { - if ( pumpId >= NUM_OF_CONCENTRATE_PUMPS ) + if ( ( CONCENTRATE_PUMP_MIN_SPEED <= targetSpeed_ml_min ) && ( targetSpeed_ml_min <= CONCENTRATE_PUMP_MAX_SPEED ) ) { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_CONCENTRATE_PUMP_INVALID_PUMP_ID, pumpId ) + pumpTargetSpeed[ pumpId ] = targetSpeed_ml_min; } else { SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_CONCENTRATE_PUMP_SPEED_OUT_OF_RANGE, targetSpeed_ml_min ) } } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_CONCENTRATE_PUMP_INVALID_PUMP_ID, pumpId ); + } } /*********************************************************************//** @@ -227,11 +225,7 @@ for ( ii = 0; ii < NUM_OF_CONCENTRATE_PUMPS; ii++ ) { - pumpTargetSpeed[ ii ].data = 0.0; - pumpTargetSpeed[ ii ].ovData = 0.0; - pumpTargetSpeed[ ii ].ovInitData = 0.0; - pumpTargetSpeed[ ii ].override = OVERRIDE_RESET; - + pumpTargetSpeed[ ii ] = 0.0; currentPumpSpeed[ ii ] = 0.0; } @@ -276,32 +270,32 @@ *************************************************************************/ static void stepConcentratePumpToTargetSpeed( CONCENTRATE_PUMPS_T pumpId ) { - F32 const currentToTargetDiff = fabs( getConcentratePumpTargetSpeed( pumpId ) - currentPumpSpeed[ pumpId ] ); + F32 const currentToTargetDiff = fabs( pumpTargetSpeed[ pumpId ] - currentPumpSpeed[ pumpId ] ); F32 speedIncrease; if ( currentToTargetDiff > NEARLY_ZERO ) { - if ( currentToTargetDiff > CONCENTRATE_PUMP_SPEED_INCREAMENT ) + if ( currentToTargetDiff > CONCENTRATE_PUMP_SPEED_INCREMENT ) { - speedIncrease = CONCENTRATE_PUMP_SPEED_INCREAMENT; + speedIncrease = CONCENTRATE_PUMP_SPEED_INCREMENT; } else { speedIncrease = currentToTargetDiff; } // Subtract current speed when target speed is smaller - if ( getConcentratePumpTargetSpeed( pumpId ) < currentPumpSpeed[ pumpId ] ) + if ( pumpTargetSpeed[ pumpId ] < currentPumpSpeed[ pumpId ] ) { - speedIncrease *= -1; + speedIncrease *= -1.0; } currentPumpSpeed[ pumpId ] += speedIncrease; } F32 const timePerStep = CONCENTRATE_PUMP_VOLUME_PER_REV / ( currentPumpSpeed[ pumpId ] * CONCENTRATE_PUMP_STEP_PER_REV ) ; - F32 const stepPeriod = timePerStep / ( CONCENTRATE_PUMP_STEP_PERIOD_RESOLUTION * CONCENTRATE_PUMP_MICRO_STEPS ); - convertedStepSpeed[ pumpId ] = (U16)( stepPeriod ); + F32 const stepPeriod = timePerStep / ( CONCENTRATE_PUMP_STEP_PERIOD_RESOLUTION * CONCENTRATE_PUMP_MICRO_STEPS_PER_STEP ); + convertedStepSpeedPeriod[ pumpId ] = (U16)( stepPeriod + 0.5 ); } /*********************************************************************//** @@ -324,8 +318,8 @@ stepConcentratePumpToTargetSpeed( CONCENTRATEPUMPS_CP1 ); stepConcentratePumpToTargetSpeed( CONCENTRATEPUMPS_CP2 ); - setFPGACP1SetStepSpeed( convertedStepSpeed[ CONCENTRATEPUMPS_CP1 ] ); - setFPGACP2SetStepSpeed( convertedStepSpeed[ CONCENTRATEPUMPS_CP2 ] ); + setFPGACP1SetStepSpeed( convertedStepSpeedPeriod[ CONCENTRATEPUMPS_CP1 ] ); + setFPGACP2SetStepSpeed( convertedStepSpeedPeriod[ CONCENTRATEPUMPS_CP2 ] ); } if ( isPumpOffRequested ) @@ -345,31 +339,32 @@ * target speed for a given pump id. * @details Inputs: pumpTargetSpeed * @details Outputs: none + * @param pumpId concentrate pump id to increase current step speed * @return the current concentrate pump target speed. *************************************************************************/ -static F32 getConcentratePumpTargetSpeed( CONCENTRATE_PUMPS_T pumpId ) -{ - F32 result = 0.0; +//static F32 getConcentratePumpTargetSpeed( CONCENTRATE_PUMPS_T pumpId ) +//{ +// F32 result = 0.0; +// +// if ( pumpId < NUM_OF_CONCENTRATE_PUMPS ) +// { +// if ( OVERRIDE_KEY == pumpTargetSpeed[ pumpId ].override ) +// { +// result = pumpTargetSpeed[ pumpId ].ovData; +// } +// else +// { +// result = pumpTargetSpeed[ pumpId ].data; +// } +// } +// else +// { +// activateAlarmNoData( ALARM_ID_DG_SOFTWARE_FAULT ); +// } +// +// return result; +//} - if ( pumpId < NUM_OF_CONCENTRATE_PUMPS ) - { - if ( OVERRIDE_KEY == pumpTargetSpeed[ pumpId ].override ) - { - result = pumpTargetSpeed[ pumpId ].ovData; - } - else - { - result = pumpTargetSpeed[ pumpId ].data; - } - } - else - { - activateAlarmNoData( ALARM_ID_DG_SOFTWARE_FAULT ); - } - - return result; -} - /*********************************************************************//** * @brief * The getPublishConcentratePumpDataInterval function gets the concentrate pump @@ -462,35 +457,11 @@ if ( ( CONCENTRATE_PUMP_MIN_SPEED <= value ) && ( value <= CONCENTRATE_PUMP_MAX_SPEED ) ) { result = TRUE; - pumpTargetSpeed[ pumpId ].ovData = value; - pumpTargetSpeed[ pumpId ].override = OVERRIDE_KEY; + setConcentratePumpTargetSpeed( (CONCENTRATE_PUMPS_T)pumpId, value ); } } return result; } -/*********************************************************************//** - * @brief - * The testResetConcentratePumpTargetSpeedOverride function resets the override of the - * speed value of given concentrate pump id. - * @details Inputs: none - * @details Outputs: targetPumpSpeed[] - * @param pumpId concentrate pump id - * @return TRUE if override successful, FALSE if not - *************************************************************************/ -BOOL testResetConcentratePumpTargetSpeedOverride( U32 pumpId ) -{ - BOOL result = FALSE; - - if ( pumpId < NUM_OF_CONCENTRATE_PUMPS && isTestingActivated() ) - { - result = TRUE; - pumpTargetSpeed[ pumpId ].ovData = pumpTargetSpeed[ pumpId ].ovInitData; - pumpTargetSpeed[ pumpId ].override = OVERRIDE_RESET; - } - - return result; -} - /**@}*/