Index: firmware/App/Controllers/RinsePump.c =================================================================== diff -u -r94789b2f2324d5901685b6ff7b6224d4af3a0276 -r0253afcc2b02def4d57a4a21a20a9b3a6fe65f22 --- firmware/App/Controllers/RinsePump.c (.../RinsePump.c) (revision 94789b2f2324d5901685b6ff7b6224d4af3a0276) +++ firmware/App/Controllers/RinsePump.c (.../RinsePump.c) (revision 0253afcc2b02def4d57a4a21a20a9b3a6fe65f22) @@ -7,8 +7,8 @@ * * @file RinsePump.c * -* @author (last) Vinayakam Mani -* @date (last) 14-Apr-2026 +* @author (last) Raghu Kallala +* @date (last) 19-May-2026 * * @author (original) Vinayakam Mani * @date (original) 02-Oct-2025 @@ -48,7 +48,7 @@ #define RINSE_PUMP_PULSE_WIDTH_INVALID_MAX 0xFFFFU ///< Invalid pulse width maximum (sensor fault). //TODO: to be tested once the Beta 2 units are out #define RINSE_PUMP_SPD_OUT_OF_RANGE_TOL_PCT 0.10F ///< Rinse pump commanded vs measured speed tolerance (10%). -#define RINSE_PUMP_SPEED_OUT_PERSISTENCE_MS 500 ///< Persistence time (ms) before declaring speed-out-of-range alarm. +#define RINSE_PUMP_SPEED_OUT_PERSISTENCE_MS 3000 ///< Persistence time (ms) before declaring speed-out-of-range alarm. #define RINSE_PUMP_MAX_RPM_ESTIMATE 3000U ///< Estimated max rinse pump RPM (for PWM-to-target conversion). // ********** private data ********** @@ -66,7 +66,7 @@ static RINSE_PUMP_STATE_T handleRinsePumpOnState ( void ); static void monitorRinsePumpSpeed( void ); static void publishRinsePumpData( void ); -static void setRinsePumpPwmCount( RINSE_PUMP_ID_T pumpId, U32 pwmCount ); +static void setRinsePumpPwm( RINSE_PUMP_ID_T pumpId, F32 pwmPercent ); /*********************************************************************//** * @brief @@ -79,7 +79,7 @@ { // Initialize controller variables rinsePumpDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; - currentRinsePumpState = RINSE_PUMP_STATE_INIT; + currentRinsePumpState = RINSE_PUMP_STATE_OFF; rinsePumpDataPublishInterval.data = RINSE_PUMP_DATA_PUB_INTERVAL; rinsePumpDataPublishInterval.ovData = RINSE_PUMP_DATA_PUB_INTERVAL; rinsePumpDataPublishInterval.ovInitData = RINSE_PUMP_DATA_PUB_INTERVAL; @@ -258,7 +258,8 @@ } //TODO: to be tested once the Beta 2 units are out - checkPersistentAlarm( ALARM_ID_DD_D79_RINSE_PUMP_SPEED_OUT_OF_RANGE, isRpSpeedOut, (F32)rinsePumpMeasuredSpeed, (F32)rinsePumpTargetSpeedRPM ); + //TODO: Needs more understanding/characterization from EE team, so uncomment after understanding. + //checkPersistentAlarm( ALARM_ID_DD_D79_RINSE_PUMP_SPEED_OUT_OF_RANGE, isRpSpeedOut, (F32)rinsePumpMeasuredSpeed, (F32)rinsePumpTargetSpeedRPM ); } /*********************************************************************//** @@ -276,8 +277,13 @@ if ( TRUE == getTestConfigStatus( TEST_CONFIG_DD_FP_ENABLE_BETA_2_0_HW ) ) { - // Set PWM count zero to stop the logical rinse pump - setRinsePumpPwmCount( D79_RINSE_PUMP, RINSE_PUMP_OFF_COUNT ); + F32 pwmPercent; + + // Set PWM to zero to stop the logical rinse pump + rinsePumpPwmPercentage.data = 0.0F; + // PWM should be zero. Ignore the override value for rinsePumpPwmPercentage if any. + pwmPercent = rinsePumpPwmPercentage.data; + setRinsePumpPwm( D79_RINSE_PUMP, pwmPercent ); } else { @@ -301,13 +307,13 @@ if ( TRUE == getTestConfigStatus( TEST_CONFIG_DD_FP_ENABLE_BETA_2_0_HW ) ) { - F32 pwmPercent = getF32OverrideValue( &rinsePumpPwmPercentage ); // TODO should this conversion happen in setPWMCount function? - U32 pwmInCount = (U32)( ( pwmPercent / RINSE_PUMP_MAX_PWM_PERCENT ) * RINSE_PUMP_PWM_IN_COUNT_MAX ); + F32 pwmPercent; - rinsePumpTargetSpeedRPM = (U32)( ( (F32)pwmInCount / RINSE_PUMP_PWM_IN_COUNT_MAX ) * (F32)RINSE_PUMP_MAX_RPM_ESTIMATE ); + rinsePumpPwmPercentage.data = RINSE_PUMP_DEFAULT_PWM_PERCENT; + pwmPercent = getF32OverrideValue( &rinsePumpPwmPercentage ); // Turn on logical rinse pump with given PWM value - setRinsePumpPwmCount( D79_RINSE_PUMP, (U32)pwmInCount ); + setRinsePumpPwm( D79_RINSE_PUMP, pwmPercent ); } else { @@ -320,20 +326,24 @@ /*********************************************************************//** * @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 + * The setRinsePumpPwm function maps a logical rinse pump ID to the + * underlying FPGA control and applies the requested PWM. + * @details \b Inputs: pumpId, pwmPercent * @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 ) +static void setRinsePumpPwm( RINSE_PUMP_ID_T pumpId, F32 pwmPercent ) { + U08 pwmCount = (U08)( ( pwmPercent / RINSE_PUMP_MAX_PWM_PERCENT ) * RINSE_PUMP_PWM_IN_COUNT_MAX ); + + rinsePumpTargetSpeedRPM = (U32)( ( (F32)pwmCount / RINSE_PUMP_PWM_IN_COUNT_MAX ) * (F32)RINSE_PUMP_MAX_RPM_ESTIMATE ); + switch ( pumpId ) { case D79_RINSE_PUMP: - setFPGAD79RinsePumpPWMControl( (U08)pwmCount ); + setFPGAD79RinsePumpPWMControl( pwmCount ); break; default: @@ -358,7 +368,7 @@ RINSE_PUMP_PAYLOAD_T data; data.d79State = getRinsePumpState(); - data.d79PumpPWM = getF32OverrideValue( &rinsePumpPwmPercentage ); + data.d79PumpPWM = ( getRinsePumpState() == RINSE_PUMP_STATE_OFF ? 0.0F : getF32OverrideValue( &rinsePumpPwmPercentage ) ); data.d79PumpRPM = rinsePumpMeasuredSpeed; broadcastData( MSG_ID_DD_RINSE_PUMP_DATA, COMM_BUFFER_OUT_CAN_DD_BROADCAST, (U08*)&data, sizeof( RINSE_PUMP_PAYLOAD_T ) );