/**********************************************************************//** * * Copyright (c) 2019-2020 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 * * @date 12-Dec-2019 * @author L. Baloa * * @brief Header file for the PI controllers service (PIControllers.c). * **************************************************************************/ #ifndef __PICONTROLLERS_H__ #define __PICONTROLLERS_H__ #include "DGCommon.h" /** * @defgroup PIControllers PIControllers * @brief PIControllers service module. Provides PI controllers for various actuators.. * * @addtogroup PIControllers * @{ */ // ********** public definitions ********** /// Enumeration of PI controllers typedef enum ControllerList { PI_CONTROLLER_ID_ULTRAFILTRATION = 0, ///< Load cell controller for dialysate outlet pump. PI_CONTROLLER_ID_BLOOD_FLOW, ///< Flow controller for blood pump. PI_CONTROLLER_ID_DIALYSATE_FLOW, ///< Flow controller for dialysate inlet pump. PI_CONTROLLER_ID_PRIMARY_HEATER, ///< Temperature controller for primary heater PI_CONTROLLER_ID_TRIMMER_HEATER, ///< Temperature controller for trimmer heater 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; // ********** 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 ); /**@}*/ #endif