/* *======================================================================================== * (C) Copyright 2019 АО "Диаконт" * г. Санкт-Петербург, Россия * * Файл: pi.h * *======================================================================================== */ #ifndef __PI_H__ #define __PI_H__ /* *---------------------------------------------------------------------------------------- *Включаемые файлы *---------------------------------------------------------------------------------------- */ #include "iqmath.h" /* *---------------------------------------------------------------------------------------- *Объявления макросов *---------------------------------------------------------------------------------------- */ /*------------------------------------------------------------------------------ PI_GRANDO Macro Definition ------------------------------------------------------------------------------*/ #define PI_MACRO(v) \ \ /* proportional term */ \ v.up = _IQmpy(v.Kp, (v.Ref - v.Fbk)); \ \ /* integral term */ \ v.ui = (v.Out == v.v1)?(_IQmpy(v.Ki, v.up)+ v.i1) : v.i1; \ v.i1 = v.ui; \ \ /* control output */ \ v.v1 = v.up + v.ui + v.uCorr; \ v.Out= _IQsat(v.v1, v.Umax, v.Umin); \ /* *---------------------------------------------------------------------------------------- *Объявления типов *---------------------------------------------------------------------------------------- */ typedef struct { _iq Ref; // Input: reference set-point _iq Fbk; // Input: feedback _iq uCorr; // Input: Коррекция выхода, для устранения перекретных связей _iq Out; // Output: controller output _iq Kp; // Parameter: proportional loop gain _iq Ki; // Parameter: integral gain _iq Umax; // Parameter: upper saturation limit _iq Umin; // Parameter: lower saturation limit _iq up; // Data: proportional term _iq ui; // Data: integral term _iq v1; // Data: pre-saturated controller output _iq i1; // Data: integrator storage: ui(k-1) } PI_CONTROLLER; #endif // __PI_H__