From d2de7da0e3d94d8e4d3b3e7e459b2d49b2bbd110 Mon Sep 17 00:00:00 2001 From: VineetaGupta Date: Wed, 2 Apr 2025 13:17:18 +0200 Subject: [PATCH] Pump speed decrease in case of high pressure --- EnduranceTestBench/nehemis/grundfos.c | 10 +++---- EnduranceTestBench/nehemis/grundfos.h | 2 +- EnduranceTestBench/nehemis/pressureSensor.c | 1 + EnduranceTestBench/nehemis/processBoard.c | 31 +++++++++++++++------ EnduranceTestBench/scheduler/sdl.c | 1 + 5 files changed, 31 insertions(+), 14 deletions(-) diff --git a/EnduranceTestBench/nehemis/grundfos.c b/EnduranceTestBench/nehemis/grundfos.c index 9f8fd80..f9580d3 100644 --- a/EnduranceTestBench/nehemis/grundfos.c +++ b/EnduranceTestBench/nehemis/grundfos.c @@ -27,7 +27,7 @@ /****************************************************************************** * Private function Declarations ******************************************************************************/ -static float32 GrundfosPmpReadVoltage(uint8 channel_u8); +static uint32 GrundfosPmpReadVoltage(uint8 channel_u8); /****************************************************************************** * Extern Function Definitions @@ -45,9 +45,9 @@ void GrundfosPmpEnable(uint8 state_u8) } -float32 GrundfosPmpFeedback(uint8 channel_u8) +uint32 GrundfosPmpFeedback(uint8 channel_u8) { - float32 feedbackSpeed_u32 = (GrundfosPmpReadVoltage(channel_u8)) * 0.32f; + uint32 feedbackSpeed_u32 = (GrundfosPmpReadVoltage(channel_u8)) * 360u; return feedbackSpeed_u32; } @@ -90,13 +90,13 @@ bool GrundfosPmpSetSpeed(float32 setSpeed_f32) * @return ADC output voltage based on sensor reading. * */ -static float32 GrundfosPmpReadVoltage(uint8 channel_u8) +static uint32 GrundfosPmpReadVoltage(uint8 channel_u8) { /* Convert ADC value to voltage (assuming 12-bit resolution and 3.3V reference) */ float32 voltage_f32 = 0.0f; uint32 adcVal_u32 = 0uL; AnalogMeasurementReadData(channel_u8, &adcVal_u32); - voltage_f32 = (float32)adcVal_u32 * (ANALOG_MEAS_ADC_REF_VOLTAGE / ANALOG_MEAS_ADC_RESOLUTION); + voltage_f32 = adcVal_u32 * (uint32)(ANALOG_MEAS_ADC_REF_VOLTAGE / ANALOG_MEAS_ADC_RESOLUTION); return voltage_f32; } diff --git a/EnduranceTestBench/nehemis/grundfos.h b/EnduranceTestBench/nehemis/grundfos.h index 4520955..0f24027 100644 --- a/EnduranceTestBench/nehemis/grundfos.h +++ b/EnduranceTestBench/nehemis/grundfos.h @@ -34,7 +34,7 @@ typedef struct /****************************************************************************** * Extern Function Declarations ******************************************************************************/ -float32 GrundfosPmpFeedback(uint8 channel_u8); +uint32 GrundfosPmpFeedback(uint8 channel_u8); void GrundfosPmpEnable(uint8_t state_u8); bool GrundfosPmpSetSpeed(float setSpeed_f); #endif /* GRUNDFOS_H_ */ diff --git a/EnduranceTestBench/nehemis/pressureSensor.c b/EnduranceTestBench/nehemis/pressureSensor.c index 1415b5e..252fd0f 100644 --- a/EnduranceTestBench/nehemis/pressureSensor.c +++ b/EnduranceTestBench/nehemis/pressureSensor.c @@ -33,6 +33,7 @@ static float PressureSensorReadVoltage(uint32 channel_u32); ******************************************************************************/ void PressureSensorInit(PressureSensorMain_st *pressureSensor_pst) { + pressureSensor_pst->rawT_f32 = 0.0f; if (pressureSensor_pst == NULL) { /* ERROR */ diff --git a/EnduranceTestBench/nehemis/processBoard.c b/EnduranceTestBench/nehemis/processBoard.c index 82b11b3..7546bdb 100644 --- a/EnduranceTestBench/nehemis/processBoard.c +++ b/EnduranceTestBench/nehemis/processBoard.c @@ -30,19 +30,19 @@ #define PROCESS_BOARD_VALVE_POS_INDEX 0x6002 #define PROCESS_BOARD_VALVE_FLOW_INDEX 0x6006 #define PROCESS_BOARD_VALVE_PRESSURE_INDEX 0x6001 - #define PROCESS_BOARD_VALVE_SUB_INDEX 0x0 #define PU_CANOPEN_SLAVE_LINE 0u #define PU_CANOPEN_MASTER_LINE 1u - #define PU_PUMP_SPEED_CHANGE_INTERVAL 900000uLL #define PU_PUMP_MAX_SPEED 10u #define PU_PUMP_MIN_SPEED 0u - #define PU_PMP_ENABLE 1u #define PU_PMP_DISABLE 0u +#define PU_PMP_RATED_SPEED 3500uL + +#define PU_MAX_PRESSURE 20u /****************************************************************************** * Global variables ******************************************************************************/ @@ -114,6 +114,11 @@ void ProcessBoardInit(void) FlowmeterInit(&flowmeterFM2_gst); FlowmeterInit(&flowmeterFM3_gst); FlowmeterInit(&flowmeterFM4_gst); + + PressureSensorInit(&pressureSensorPS1_gst); + PressureSensorInit(&pressureSensorPS2_gst); + PressureSensorInit(&pressureSensorPS3_gst); + PressureSensorInit(&pressureSensorPS4_gst); } @@ -173,7 +178,7 @@ void ProcessBoardRun(void) ******************************************************************************/ static void ProcessBoardGrundfosPumpHandler(void) { - static float32 pmpSpeed_f32 = 0.0f; + static uint32 pmpSpeed_u32 = 0uL; static uint8 speed_u8 = 0u; static uint64 startTime_u64 = 0uLL; uint64 currentTimeMs_u64; @@ -189,7 +194,16 @@ static void ProcessBoardGrundfosPumpHandler(void) if ((currentTimeMs_u64 - startTime_u64) >= PU_PUMP_SPEED_CHANGE_INTERVAL) { - if (speed_u8 < PU_PUMP_MAX_SPEED) + if (pressureSensorPS1_gst.rawT_f32 > PU_MAX_PRESSURE || pressureSensorPS2_gst.rawT_f32 > PU_MAX_PRESSURE || + pressureSensorPS3_gst.rawT_f32 > PU_MAX_PRESSURE || pressureSensorPS4_gst.rawT_f32 > PU_MAX_PRESSURE) + { + /* Decrease speed if pressure is too high */ + if (speed_u8 > PU_PUMP_MIN_SPEED) + { + speed_u8 -= 2u; + } + } + else if (speed_u8 < PU_PUMP_MAX_SPEED) { speed_u8 += 2u; } @@ -204,15 +218,16 @@ static void ProcessBoardGrundfosPumpHandler(void) } /* Grundfos Pump feedback speed OUT */ - pmpSpeed_f32 = GrundfosPmpFeedback(PMP_ADC_CHANNEL); + pmpSpeed_u32 = GrundfosPmpFeedback(PMP_ADC_CHANNEL); - if (pmpSpeed_f32 > 3.3f) + if (pmpSpeed_u32 > PU_PMP_RATED_SPEED) { - GrundfosPmpEnable(PU_PMP_DISABLE); + GrundfosPmpEnable(PU_PMP_DISABLE); } } + static void ProcessBoardTriggerMvPosCtrl(uint8 motorId_u8, uint8 posData_u8) { diff --git a/EnduranceTestBench/scheduler/sdl.c b/EnduranceTestBench/scheduler/sdl.c index a3417ae..0a6531c 100644 --- a/EnduranceTestBench/scheduler/sdl.c +++ b/EnduranceTestBench/scheduler/sdl.c @@ -129,6 +129,7 @@ void SdlInit(void) { testBenchStarted_b = false; SdlInitCanopen(); + ProcessBoardInit(); }