ifdef added to be able to switch between pressure controller and normal operation

This commit is contained in:
VineetaGupta 2025-11-10 11:35:25 +01:00
parent eb917a1a30
commit 8817de2da0
5 changed files with 105 additions and 110 deletions

4
.gitignore vendored
View File

@ -16,4 +16,6 @@
/EnduranceTestBench/.settings/*
/EnduranceTestBench/Drivers/STM32G4xx_HAL_Driver/LICENSE.txt
/EnduranceTestBench/Drivers/CMSIS/LICENSE.txt
/EnduranceTestBench/EnduranceTestBench Debug.launch
/EnduranceTestBench/EnduranceTestBench Debug.launch
EnduranceTestBench/EnduranceTestBench/Debug/*
EnduranceTestBench/EnduranceTestBench/.settings/language.settings.xml

View File

@ -85,9 +85,9 @@ bool GrundfosPmpSetSpeed(float32 setSpeed_f32)
data_au8[0] = (uint8)(dacVal_u16 >> 8); /* Upper 8 bits */
data_au8[1] = (uint8)(dacVal_u16 & 0xFF); /* Lower 8 bits */
// return HalI2CMasterTransmit(MAP_HAL_GRUNDFOS_PMP_I2C_HANDLE,
// GRUNDFOS_PMP_INTERNAL_DAC_ADDR,
// data_au8, 2u) == NMS_ERR_NONE;
return HalI2CMasterTransmit(MAP_HAL_GRUNDFOS_PMP_I2C_HANDLE,
GRUNDFOS_PMP_INTERNAL_DAC_ADDR,
data_au8, 2u) == NMS_ERR_NONE;
}

View File

@ -56,6 +56,7 @@ GrundfosMain_st grundfosPMP_gst;
static void ProcessBoardFlowmeterDataOUT(float32 rawQ_f32);
static void ProcessBoardPressureSensorDataOUT(float32 rawT_f32);
static void ProcessBoardPumpSpeedDataOUT(uint32 pmpSpeed_u32);
static void ProcessBoardGrundfosPumpHandler(void);
/******************************************************************************
* Extern Function Declarations
******************************************************************************/
@ -105,9 +106,10 @@ void ProcessBoardRun(bool pumpTurnOn_b)
FlowmeterGetFlow(&flowmeterFM4_gst);
/* Pressure sensor data IN */
// PressureSensorGetVal(&pressureSensorPS1_gst);
// PressureSensorGetVal(&pressureSensorPS2_gst);
// PressureSensorGetVal(&pressureSensorPS3_gst);
/* Removed to work with pressure controller */
PressureSensorGetVal(&pressureSensorPS1_gst);
PressureSensorGetVal(&pressureSensorPS2_gst);
PressureSensorGetVal(&pressureSensorPS3_gst);
/* Flowmeter data OUT */
ProcessBoardFlowmeterDataOUT(flowmeterFM1_gst.rawQ_f32);
@ -123,7 +125,7 @@ void ProcessBoardRun(bool pumpTurnOn_b)
ProcessBoardPumpSpeedDataOUT(grundfosPMP_gst.rawQ_f32);
ProcessBoardGrundfosPumpHandler(pumpTurnOn_b);
ProcessBoardGrundfosPumpHandler();
}
else
{
@ -131,68 +133,9 @@ void ProcessBoardRun(bool pumpTurnOn_b)
}
}
void ProcessBoardGrundfosPumpHandler(uint8 speed_u8)
{
GrundfosPmpSetSpeed(speed_u8);
/* Grundfos Pump feedback speed OUT */
GrundfosPmpFeedback(&grundfosPMP_gst);
if ((uint8)(grundfosPMP_gst.rawQ_f32) > PU_PMP_RATED_SPEED)
{
speed_u8 -= 2u;
}
}
/******************************************************************************
* Private function definitions
******************************************************************************/
//static void ProcessBoardGrundfosPumpHandler(bool pumpTurnOn_b)
/* To be used with preesure controller */
//void ProcessBoardGrundfosPumpHandler(uint8 speed_u8)
//{
// static uint8 speed_u8 = PU_PUMP_MIN_SPEED;
// static uint64 startTime_u64 = 0uLL;
// uint64 currentTimeMs_u64;
//
// HalSystemGetRunTimeMs(&currentTimeMs_u64);
//
// if (startTime_u64 == 0uLL)
// {
// HalSystemGetRunTimeMs(&startTime_u64);
// }
//
// if (pumpTurnOn_b == true)
// {
// GrundfosPmpEnable(PU_PMP_ENABLE);
// }
// else
// {
// GrundfosPmpEnable(PU_PMP_DISABLE);
// }
//
//
// if ((currentTimeMs_u64 - startTime_u64) >= PU_PUMP_SPEED_CHANGE_INTERVAL)
// {
// 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;
// }
// else
// {
// speed_u8 = PU_PUMP_MIN_SPEED;
// }
//
// startTime_u64 = currentTimeMs_u64;
// }
//
// GrundfosPmpSetSpeed(speed_u8);
//
// /* Grundfos Pump feedback speed OUT */
@ -203,6 +146,51 @@ void ProcessBoardGrundfosPumpHandler(uint8 speed_u8)
// speed_u8 -= 2u;
// }
//}
/******************************************************************************
* Private function definitions
******************************************************************************/
static void ProcessBoardGrundfosPumpHandler(void)
{
static uint8 speed_u8 = PU_PUMP_MIN_SPEED;
static uint64 startTime_u64 = 0uLL;
uint64 currentTimeMs_u64;
GrundfosPmpEnable(PU_PMP_ENABLE);
HalSystemGetRunTimeMs(&currentTimeMs_u64);
if (startTime_u64 == 0uLL)
{
HalSystemGetRunTimeMs(&startTime_u64);
}
if ((currentTimeMs_u64 - startTime_u64) >= PU_PUMP_SPEED_CHANGE_INTERVAL)
{
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;
}
else
{
speed_u8 = PU_PUMP_MIN_SPEED;
}
startTime_u64 = currentTimeMs_u64;
}
GrundfosPmpSetSpeed(speed_u8);
/* Grundfos Pump feedback speed OUT */
GrundfosPmpFeedback(&grundfosPMP_gst);
}
static void ProcessBoardFlowmeterDataOUT(float32 rawQ_f32)
{

View File

@ -49,6 +49,4 @@ void ProcessBoardInit(void);
*/
void ProcessBoardRun(bool pumpTurnOn_b);
void ProcessBoardGrundfosPumpHandler(uint8 speed_u8);
#endif /* PROCESSBOARD_H_ */

View File

@ -42,8 +42,6 @@
/******************************************************************************
* Type Declarations
******************************************************************************/
static void SdlFilterInterrupt(void);
static inline float32 RevModelConvertToPercent(float32 value_f32, float32 minVal_f32, float32 maxVal_f32)
{
float32 clamped = value_f32;
@ -63,71 +61,79 @@ static inline float32 RevModelConvertToPercent(float32 value_f32, float32 minVal
* Global Declarations
******************************************************************************/
static bool testBenchStarted_b;
static PuControllersPidInput_st pmpRoPressurePidInput_st = {0};
static PuFiltersSensorData_st receivedFilterData_st;
/******************************************************************************
* Public Function Definitions
******************************************************************************/
void SdlInit(void)
{
testBenchStarted_b = false;
HalTimerStart(MAP_HAL_TIMER_FILTER);
NmsCanInit();
PuFiltersInit();
ProcessBoardInit();
HalTimerConfigureCallback(MAP_HAL_TIMER_FILTER, SdlFilterInterrupt);
#ifdef PREESURE_CONTROLLER
static PuControllersPidInput_st pmpRoPressurePidInput_st = {0};
static PuFiltersSensorData_st receivedFilterData_st;
HalTimerStart(MAP_HAL_TIMER_FILTER);
HalTimerConfigureCallback(MAP_HAL_TIMER_FILTER, SdlFilterInterrupt);
PuFiltersInit();
PuControllersInitInputs(&pmpRoPressurePidInput_st);
#endif
}
void SdlRun(void)
{
NmsCanRun();
#ifdef PREESURE_CONTROLLER
static uint64 lastPressureUpdateMs_u64 = 0uLL;
uint64 currentTimeMs_u64;
static uint8 pressureSetpoint_u8 = 0u;
uint8 turnOnTestbench = 0u;
NmsCanGetObj_u8(0x2007, 0x0, &turnOnTestbench);
NmsCanRun();
if (NmsCanAreAllNodesOperational())
{
EnduranceTestBenchRun(&testBenchStarted_b);
// if (turnOnTestbench == 1)
// {
// if (NmsCanAreAllNodesOperational())
// {
EnduranceTestBenchRun(&testBenchStarted_b);
if (testBenchStarted_b)
{
ProcessBoardRun(true);
HalSystemGetRunTimeMs(&currentTimeMs_u64);
if (testBenchStarted_b)
if ((currentTimeMs_u64 - lastPressureUpdateMs_u64) >= 5000)
{
ProcessBoardRun(true);
HalSystemGetRunTimeMs(&currentTimeMs_u64);
if ((currentTimeMs_u64 - lastPressureUpdateMs_u64) >= 5000)
if (pressureSetpoint_u8 + 2 <= 15)
{
if (pressureSetpoint_u8 + 2 <= 15)
{
pressureSetpoint_u8 += 2;
}
else
{
pressureSetpoint_u8 = 0;
}
lastPressureUpdateMs_u64 = currentTimeMs_u64;
pressureSetpoint_u8 += 2;
}
SdlEnablePressureControl(pressureSetpoint_u8);
else
{
pressureSetpoint_u8 = 0;
}
lastPressureUpdateMs_u64 = currentTimeMs_u64;
}
// }
// }
// else
// {
// ProcessBoardRun(false);
// }
SdlEnablePressureControl(pressureSetpoint_u8);
}
}
#else
if (NmsCanAreAllNodesOperational())
{
EnduranceTestBenchRun(&testBenchStarted_b);
if (testBenchStarted_b)
{
ProcessBoardRun(true);
}
else
{
ProcessBoardRun(false);
}
}
#endif
}
#ifdef PREESURE_CONTROLLER
void SdlEnablePressureControl(uint8 pressureSetpoint_u8)
{
static PuControllersPidOutput_st pmpRoPressurePidOutput_st = {0};
@ -155,3 +161,4 @@ static void SdlFilterInterrupt(void)
receivedFilterData_st = PuFiltersRun();
}
#endif