MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/Motor/pi.h

64 lines
2.5 KiB
C

/*
*========================================================================================
* (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__