Index: firmware/App/Controllers/RinsePump.c =================================================================== diff -u -rb569bc796c56acd5d94d468386f5f42c350cad65 -r9ed40798a5f4779db8a07bb6e256f7de99660108 --- firmware/App/Controllers/RinsePump.c (.../RinsePump.c) (revision b569bc796c56acd5d94d468386f5f42c350cad65) +++ firmware/App/Controllers/RinsePump.c (.../RinsePump.c) (revision 9ed40798a5f4779db8a07bb6e256f7de99660108) @@ -36,7 +36,7 @@ #define RINSE_PUMP_OFF_COUNT 0U ///< Rinse Pump OFF value in count #define RINSE_PUMP_DEFAULT_PWM_PERCENT 10.0F ///< Initial Rinse pump PWM percentage #define RINSE_PUMP_MAX_PWM_PERCENT 100.0F ///< Max Rinse pump PWM percentage -#define RINSE_PUMP_PWM_IN_COUNT_MAX 255.0F ///< Rinse pump max count (100% PWM = 255) +#define RINSE_PUMP_PWM_IN_COUNT_MAX 250.0F ///< Rinse pump max count (100% PWM = 250) #define RINSE_PUMP_PWM_PULSE_RESOLUTION_US 10 ///< Rinse pump PWM pulse resolution in 10us // TODO remove once PMW control is implemented @@ -57,6 +57,7 @@ static RINSE_PUMP_STATE_T handleRinsePumpOffState( void ); static RINSE_PUMP_STATE_T handleRinsePumpOnState ( void ); static void publishRinsePumpData( void ); +static void setRinsePumpPwmCount( RINSE_PUMP_ID_T pumpId, U32 pwmCount ); /*********************************************************************//** * @brief @@ -126,10 +127,19 @@ { // Pulse width in 10us resolution U16 pumpPulseWidth = getFPGAD79RinsePumpPulseWidth(); - U32 pumpSpeedPerSec = US_PER_SECOND / ( pumpPulseWidth * RINSE_PUMP_PWM_PULSE_RESOLUTION_US ); + U32 pumpSpeedPerSec = 0U; - //Speed in RPM - rinsePumpMeasuredSpeed = pumpSpeedPerSec * SEC_PER_MIN; + if ( ( 0U != pumpPulseWidth ) && ( 0xFFFFU != pumpPulseWidth ) ) + { + pumpSpeedPerSec = US_PER_SECOND / ( pumpPulseWidth * RINSE_PUMP_PWM_PULSE_RESOLUTION_US ); + + // Speed in RPM + rinsePumpMeasuredSpeed = pumpSpeedPerSec * SEC_PER_MIN; + } + else + { + rinsePumpMeasuredSpeed = 0U; + } } /*********************************************************************//** @@ -161,6 +171,7 @@ break; } + calculateRinsePumpSpeed(); publishRinsePumpData(); } @@ -189,16 +200,8 @@ { RINSE_PUMP_STATE_T state = RINSE_PUMP_STATE_OFF; - if ( TRUE == getTestConfigStatus( TEST_CONFIG_DD_ENABLE_D79_PWM_CONTROL ) ) - { - // Set PWM count zero to stop the pump - setFPGAD79RinsePumpPWMControl( RINSE_PUMP_OFF_COUNT ); - } - else - { - // Current Beta 1.9 system uses on/off bit - setValveState( D79_PMP_VALV, VALVE_STATE_CLOSED ); - } + // Set PWM count zero to stop the logical rinse pump + setRinsePumpPwmCount( D79_RINSE_PUMP, RINSE_PUMP_OFF_COUNT ); return state; } @@ -214,25 +217,41 @@ { RINSE_PUMP_STATE_T state = RINSE_PUMP_STATE_ON; - if ( TRUE == getTestConfigStatus( TEST_CONFIG_DD_ENABLE_D79_PWM_CONTROL ) ) - { - F32 pwmPercent = getF32OverrideValue( &rinsePumpPwmPercentage ); - U32 pwmInCount = (U32)( ( pwmPercent / RINSE_PUMP_MAX_PWM_PERCENT ) * RINSE_PUMP_PWM_IN_COUNT_MAX ); + F32 pwmPercent = getF32OverrideValue( &rinsePumpPwmPercentage ); + U32 pwmInCount = (U32)( ( pwmPercent / RINSE_PUMP_MAX_PWM_PERCENT ) * RINSE_PUMP_PWM_IN_COUNT_MAX ); - //Turn on Rinse pump with given PWM value - setFPGAD79RinsePumpPWMControl( pwmInCount ); - } - else - { - // Current Beat 1.9 system uses on/off bit - setValveState( D79_PMP_VALV, VALVE_STATE_OPEN ); - } + // Turn on logical rinse pump with given PWM value + setRinsePumpPwmCount( D79_RINSE_PUMP, pwmInCount ); return state; } /*********************************************************************//** * @brief + * The setRinsePumpPwmCount function maps a logical rinse pump ID to the + * underlying FPGA control and applies the requested PWM count. + * @details \b Inputs: pumpId, pwmCount + * @details \b Outputs: FPGA rinse pump control register + * @param pumpId Logical rinse pump identifier + * @param pwmCount PWM magnitude (0..RINSE_PUMP_PWM_IN_COUNT_MAX) + * @return none + *************************************************************************/ +static void setRinsePumpPwmCount( RINSE_PUMP_ID_T pumpId, U32 pwmCount ) +{ + switch ( pumpId ) + { + case D79_RINSE_PUMP: + setFPGAD79RinsePumpPWMControl( (U08)pwmCount ); + break; + + default: + // No other rinse pumps defined yet; ignore for now. + break; + } +} + +/*********************************************************************//** + * @brief * The publishRinsePumpData function constructs and sends the rinse pump data * broadcast message. * @details \b Message \b Sent: MSG_ID_DD_RINSE_PUMP_DATA @@ -336,4 +355,3 @@ } /**@}*/ -