Index: PIControllers.c =================================================================== diff -u -r5c486b49eeca18ec83b7d776d9052dd38800f7d0 -r5af863b0029529a964b953313e8cbf283989ed66 --- PIControllers.c (.../PIControllers.c) (revision 5c486b49eeca18ec83b7d776d9052dd38800f7d0) +++ PIControllers.c (.../PIControllers.c) (revision 5af863b0029529a964b953313e8cbf283989ed66) @@ -27,37 +27,36 @@ // ********** private definitions ********** -#define MAX_ILIMIT 1.0F ///< Controller max Ilimit/maxErrorSumStep. +#define MAX_ILIMIT 1.0F ///< Controller max Ilimit/maxErrorSumStep. +#define MIN_KI NEARLY_ZERO ///< minimum integral coefficient - cannot be zero. +#define SET_CONTROLLER( c, id ) ( (c) = &piControllers[ id ] ) ///< macro to set a local controller pointer to a given piController. /// Enumeration of PI controller direction. typedef enum controller_Directions { - CONTROLLER_BIDIRECTIONAL = 0, ///< Controller runs bidirectional so it covers positive and negative control signals - CONTROLLER_UNIDIRECTIONAL, ///< Controller runs unidirectional so it only covers positive control signals - NUM_OF_CONTROLLELR_DIRECTIONS ///< Number of PI controllers directions + CONTROLLER_BIDIRECTIONAL = 0, ///< Controller runs bidirectional so it covers positive and negative control signals + CONTROLLER_UNIDIRECTIONAL, ///< Controller runs unidirectional so it only covers positive control signals + NUM_OF_CONTROLLELR_DIRECTIONS ///< Number of PI controllers directions } PI_CONTROLLER_DIRECTIONS_T; /// Record for PI controller. typedef struct { // -- PI's parameters -- - F32 Kp; ///< Proportional Value. - F32 Ki; ///< Integral Value. - F32 uMax; ///< Maximum control signal. - F32 uMin; ///< Minimum control signal. + F32 Kp; ///< Proportional Value. + F32 Ki; ///< Integral Value. + F32 uMax; ///< Maximum control signal. + F32 uMin; ///< Minimum control signal. // -- PI's signals -- - F32 referenceSignal; ///< Reference signal. - F32 measuredSignal; ///< Measured signal. - F32 errorSignal; ///< Reference - measured signal. - F32 errorSumBeforeWindUp; ///< Error signal before windup correction. - F32 errorSum; ///< Error integral after windup correction. - F32 controlSignal; ///< Actual control signal. - F32 maxErrorSumStep; ///< Maximum change in I (error sum) for a single control interval. - PI_CONTROLLER_DIRECTIONS_T direction; ///< PI controller control direction. + F32 referenceSignal; ///< Reference signal. + F32 measuredSignal; ///< Measured signal. + F32 errorSignal; ///< Reference - measured signal. + F32 errorSumBeforeWindUp; ///< Error signal before windup correction. + F32 errorSum; ///< Error integral after windup correction. + F32 controlSignal; ///< Actual control signal. + F32 maxErrorSumStep; ///< Maximum change in I (error sum) for a single control interval. + PI_CONTROLLER_DIRECTIONS_T direction; ///< PI controller control direction. } PI_CONTROLLER_T; -#define MIN_KI NEARLY_ZERO ///< minimum integral coefficient - cannot be zero. -#define SET_CONTROLLER( c, id ) ( (c) = &piControllers[ id ] ) ///< macro to set a local controller pointer to a given piController. - // ********** private data ********** /// PI Controllers - initial configurations. @@ -66,6 +65,8 @@ #ifdef _DD_ { 0.0, 0.0, 4500, 300, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 10.0, CONTROLLER_BIDIRECTIONAL }, // PI_CONTROLLER_ID_FRESH_DIALYSATE_PUMP { 0.0, 0.0, 4500, 300, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 10.0, CONTROLLER_BIDIRECTIONAL }, // PI_CONTROLLER_ID_SPENT_DIALYSATE_PUMP + { 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, CONTROLLER_BIDIRECTIONAL }, // PI_CONTROLLER_ID_PRIMARY_HEATER + { 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, CONTROLLER_BIDIRECTIONAL }, // PI_CONTROLLER_ID_TRIMMER_HEATER #endif #ifdef _RO_ { 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5, CONTROLLER_UNIDIRECTIONAL }, // PI_CONTROLLER_ID_RO_PUMP