/************************************************************************** * * Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file PIControllers.h * * @author (last) Vinayakam Mani * @date (last) 02-Oct-2024 * * @author (original) Vinayakam Mani * @date (original) 02-Oct-2024 * ***************************************************************************/ #ifndef __PI_CONTROLLERS_H__ #define __PI_CONTROLLERS_H__ #ifdef _TD_ #include "TDCommon.h" #endif #ifdef _DD_ #include "DDCommon.h" #endif #ifdef _RO_ #include "ROCommon.h" #endif /** * @defgroup PIControllers PIControllers * @brief PIControllers common module. Provides PI controllers for various actuators. * * @addtogroup PIControllers * @{ */ // ********** public definitions ********** /// Enumeration of PI controllers. typedef enum ControllerList { #ifdef _DD_ PI_CONTROLLER_ID_FRESH_DIALYSATE_PUMP, ///< Fresh dialysate Pump controller PI_CONTROLLER_ID_SPENT_DIALYSATE_PUMP, ///< Spent dialysate Pump controller PI_CONTROLLER_ID_PRIMARY_HEATER, ///< Primary heater controller PI_CONTROLLER_ID_TRIMMER_HEATER, ///< Trimmer heater controller #endif #ifdef _RO_ PI_CONTROLLER_ID_RO_PUMP_FLOW = 0, ///< RO Pump controller to flow PI_CONTROLLER_ID_RO_PUMP_MAX_PRES, ///< RO pump controller to maximum pressure #endif NUM_OF_PI_CONTROLLERS_IDS ///< Number of PI controllers } PI_CONTROLLER_ID_T; /// Enumeration of PI controller signals. typedef enum ControllerSignals { CONTROLLER_SIGNAL_REFERENCE = 0, ///< Reference value CONTROLLER_SIGNAL_MEASURED, ///< Measured value CONTROLLER_SIGNAL_ERROR, ///< Error value CONTROLLER_SIGNAL_ERROR_SUM, ///< Error sum before anti-windup CONTROLLER_SIGNAL_ERROR_SUM_AFTER_WINDUP, ///< Error sum after anti-windup CONTROLLER_SIGNAL_PROPORTIONAL_OUTPUT, ///< P portion of controller output signal CONTROLLER_SIGNAL_INTEGRAL_OUTPUT, ///< I portion of controller output signal CONTROLLER_SIGNAL_CONTROL, ///< Controller output signal NUM_OF_CONTROLLER_SIGNAL ///< Number of PI controller signals } PI_CONTROLLER_SIGNALS_ID; /// Data structure for PI control profiles. typedef struct { F32 Kp; ///< Proportional Value F32 Ki; ///< Integral Value F32 uMin; ///< Minimum control signal F32 uMax; ///< Maximum control signal F32 maxErrorSumStep; ///< Maximum change in I (error sum) for a single control interval. U32 controlInterval; ///< Control interval value } PI_CONTROLLER_PROFILE_DATA_T; // ********** public function prototypes ********** void initializePIController( PI_CONTROLLER_ID_T controllerID, F32 initialControlSignal, F32 kP, F32 kI, F32 controlMin, F32 controlMax ); void resetPIController( PI_CONTROLLER_ID_T controllerID, F32 initialControlSignal ); F32 runPIController( PI_CONTROLLER_ID_T controllerID, F32 referenceSignal, F32 measuredSignal ); F32 getPIControllerSignals( PI_CONTROLLER_ID_T controllerID, PI_CONTROLLER_SIGNALS_ID signalID ); void setPIControllerStepLimit( PI_CONTROLLER_ID_T controllerID, F32 stepLimit ); /**@}*/ #endif