Pump speed decrease in case of high pressure

This commit is contained in:
VineetaGupta 2025-04-02 13:17:18 +02:00
parent 71b468cc6e
commit d2de7da0e3
5 changed files with 31 additions and 14 deletions

View File

@ -27,7 +27,7 @@
/****************************************************************************** /******************************************************************************
* Private function Declarations * Private function Declarations
******************************************************************************/ ******************************************************************************/
static float32 GrundfosPmpReadVoltage(uint8 channel_u8); static uint32 GrundfosPmpReadVoltage(uint8 channel_u8);
/****************************************************************************** /******************************************************************************
* Extern Function Definitions * 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; return feedbackSpeed_u32;
} }
@ -90,13 +90,13 @@ bool GrundfosPmpSetSpeed(float32 setSpeed_f32)
* @return ADC output voltage based on sensor reading. * @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) */ /* Convert ADC value to voltage (assuming 12-bit resolution and 3.3V reference) */
float32 voltage_f32 = 0.0f; float32 voltage_f32 = 0.0f;
uint32 adcVal_u32 = 0uL; uint32 adcVal_u32 = 0uL;
AnalogMeasurementReadData(channel_u8, &adcVal_u32); 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; return voltage_f32;
} }

View File

@ -34,7 +34,7 @@ typedef struct
/****************************************************************************** /******************************************************************************
* Extern Function Declarations * Extern Function Declarations
******************************************************************************/ ******************************************************************************/
float32 GrundfosPmpFeedback(uint8 channel_u8); uint32 GrundfosPmpFeedback(uint8 channel_u8);
void GrundfosPmpEnable(uint8_t state_u8); void GrundfosPmpEnable(uint8_t state_u8);
bool GrundfosPmpSetSpeed(float setSpeed_f); bool GrundfosPmpSetSpeed(float setSpeed_f);
#endif /* GRUNDFOS_H_ */ #endif /* GRUNDFOS_H_ */

View File

@ -33,6 +33,7 @@ static float PressureSensorReadVoltage(uint32 channel_u32);
******************************************************************************/ ******************************************************************************/
void PressureSensorInit(PressureSensorMain_st *pressureSensor_pst) void PressureSensorInit(PressureSensorMain_st *pressureSensor_pst)
{ {
pressureSensor_pst->rawT_f32 = 0.0f;
if (pressureSensor_pst == NULL) if (pressureSensor_pst == NULL)
{ {
/* ERROR */ /* ERROR */

View File

@ -30,19 +30,19 @@
#define PROCESS_BOARD_VALVE_POS_INDEX 0x6002 #define PROCESS_BOARD_VALVE_POS_INDEX 0x6002
#define PROCESS_BOARD_VALVE_FLOW_INDEX 0x6006 #define PROCESS_BOARD_VALVE_FLOW_INDEX 0x6006
#define PROCESS_BOARD_VALVE_PRESSURE_INDEX 0x6001 #define PROCESS_BOARD_VALVE_PRESSURE_INDEX 0x6001
#define PROCESS_BOARD_VALVE_SUB_INDEX 0x0 #define PROCESS_BOARD_VALVE_SUB_INDEX 0x0
#define PU_CANOPEN_SLAVE_LINE 0u #define PU_CANOPEN_SLAVE_LINE 0u
#define PU_CANOPEN_MASTER_LINE 1u #define PU_CANOPEN_MASTER_LINE 1u
#define PU_PUMP_SPEED_CHANGE_INTERVAL 900000uLL #define PU_PUMP_SPEED_CHANGE_INTERVAL 900000uLL
#define PU_PUMP_MAX_SPEED 10u #define PU_PUMP_MAX_SPEED 10u
#define PU_PUMP_MIN_SPEED 0u #define PU_PUMP_MIN_SPEED 0u
#define PU_PMP_ENABLE 1u #define PU_PMP_ENABLE 1u
#define PU_PMP_DISABLE 0u #define PU_PMP_DISABLE 0u
#define PU_PMP_RATED_SPEED 3500uL
#define PU_MAX_PRESSURE 20u
/****************************************************************************** /******************************************************************************
* Global variables * Global variables
******************************************************************************/ ******************************************************************************/
@ -114,6 +114,11 @@ void ProcessBoardInit(void)
FlowmeterInit(&flowmeterFM2_gst); FlowmeterInit(&flowmeterFM2_gst);
FlowmeterInit(&flowmeterFM3_gst); FlowmeterInit(&flowmeterFM3_gst);
FlowmeterInit(&flowmeterFM4_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 void ProcessBoardGrundfosPumpHandler(void)
{ {
static float32 pmpSpeed_f32 = 0.0f; static uint32 pmpSpeed_u32 = 0uL;
static uint8 speed_u8 = 0u; static uint8 speed_u8 = 0u;
static uint64 startTime_u64 = 0uLL; static uint64 startTime_u64 = 0uLL;
uint64 currentTimeMs_u64; uint64 currentTimeMs_u64;
@ -189,7 +194,16 @@ static void ProcessBoardGrundfosPumpHandler(void)
if ((currentTimeMs_u64 - startTime_u64) >= PU_PUMP_SPEED_CHANGE_INTERVAL) 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; speed_u8 += 2u;
} }
@ -204,15 +218,16 @@ static void ProcessBoardGrundfosPumpHandler(void)
} }
/* Grundfos Pump feedback speed OUT */ /* 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) static void ProcessBoardTriggerMvPosCtrl(uint8 motorId_u8, uint8 posData_u8)
{ {

View File

@ -129,6 +129,7 @@ void SdlInit(void)
{ {
testBenchStarted_b = false; testBenchStarted_b = false;
SdlInitCanopen(); SdlInitCanopen();
ProcessBoardInit();
} }