/************************************************************************** * * Copyright (c) 2024-2025 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) Michael Garthwaite * @date (last) 11-Sep-2025 * * @author (original) Vinayakam Mani * @date (original) 07-Oct-2024 * ***************************************************************************/ #ifndef __PI_CONTROLLERS_H__ #define __PI_CONTROLLERS_H__ #ifdef _TD_ #include "TDCommon.h" #endif #ifdef _DD_ #include "DDCommon.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 _TD_ PI_CONTROLLER_ID_BLOOD_FLOW, ///< Blood pump controller to target flow rate #endif #ifdef _DD_ PI_CONTROLLER_ID_D12_PUMP, ///< Fresh dialysate Pump controller PI_CONTROLLER_ID_D48_PUMP, ///< Spent dialysate Pump controller PI_CONTROLLER_ID_D5_HEAT, ///< Primary heater controller PI_CONTROLLER_ID_D45_HEAT, ///< Trimmer heater controller PI_CONTROLLER_ID_RO_PUMP_FLOW, ///< RO Pump controller to flow PI_CONTROLLER_ID_RO_PUMP_PRES, ///< RO pump controller to maximum pressure PI_CONTROLLER_ID_BOOST_PUMP_FLOW, ///< Boost pump controller to flow PI_CONTROLLER_ID_BOOST_PUMP_PRES, ///< Boost 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_FEEDFORWARD_OUTPUT, ///< Feed forward 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, BOOL isFeedForwardEnabled, F32 feedFowardSignal ); void resetPIController( PI_CONTROLLER_ID_T controllerID, F32 initialControlSignal, F32 feedFowardSignal ); 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