|
AM263x Digital Power SDK
09.01.00
|
|
Go to the documentation of this file.
48 #include "../dcl_common.h"
55 typedef struct dcl_pi_sps
67 #define PI_SPS_DEFAULTS { 1.0f, 0.0f, 1.0f, -1.0f, 1.0f, -1.0f }
93 #define PI_DEFAULTS { 1.0f, 0.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, 0.0f, 0.0f, \
94 &(DCL_PI_SPS)PI_SPS_DEFAULTS, &(DCL_CSS)DCL_CSS_DEFAULTS }
106 #define PI_INT_DEFAULTS .i6=1.0f, .i10=0.0f, .i11=0.0f, \
107 .sps=&(DCL_PI_SPS)PI_SPS_DEFAULTS, .css=&(DCL_CSS)DCL_CSS_DEFAULTS
114 #define DCL_initPI() &(DCL_PI)PI_DEFAULTS
122 #define DCL_initPIasParam(kp,ki,umax,umin) &(DCL_PI){ .Kp=kp, .Ki=ki, \
123 .Umax=umax, .Umin=umin, PI_INT_DEFAULTS }
135 #define DCL_initPIasSPS(pi_ptr,sps_ptr) \
137 DCL_PI* new_pi = (pi_ptr) ? pi_ptr : DCL_initPI(); \
138 DCL_PI_SPS* new_sps = (sps_ptr) ? sps_ptr : &(DCL_PI_SPS)PI_SPS_DEFAULTS; \
141 *new_pi = (DCL_PI){ (new_sps)->Kp, (new_sps)->Ki, (new_sps)->Umax, (new_sps)->Umin,\
142 (new_sps)->Imax, (new_sps)->Imin, 1.0f, 0.0f, 0.0f, \
143 (DCL_PI_SPS*)new_sps, &(DCL_CSS)DCL_CSS_DEFAULTS }; \
158 pi->i10 = pi->i11 = 0.0f;
170 #ifdef DCL_ERROR_HANDLING_ENABLED
184 pi->Kp = pi->sps->Kp;
185 pi->Ki = pi->sps->Ki;
186 pi->Umax = pi->sps->Umax;
187 pi->Umin = pi->sps->Umin;
188 pi->Imax = pi->sps->Imax;
189 pi->Imin = pi->sps->Imin;
200 #ifdef DCL_ERROR_HANDLING_ENABLED
216 pi->Kp = pi->sps->Kp;
217 pi->Ki = pi->sps->Ki;
218 pi->Umax = pi->sps->Umax;
219 pi->Umin = pi->sps->Umin;
220 pi->Imax = pi->sps->Imax;
221 pi->Imin = pi->sps->Imin;
257 #ifdef DCL_ERROR_HANDLING_ENABLED
271 pi->sps->Kp = zpk->
K * (1.0f + (T * z1) / 2.0f);
272 pi->sps->Ki = (-2.0f * T * z1) / (2.0f + (T * z1));
287 #ifdef DCL_ERROR_HANDLING_ENABLED
301 pi->sps->Kp = zpk->
K * (1.0f + (T * z1) / 2.0f);
302 pi->sps->Ki = -zpk->
K * T * z1;
317 v2 = pi->Kp * (rk - yk);
318 v4 = pi->i10 + (pi->Ki * pi->i6 * v2);
321 pi->i6 = (v5 == v9) ? 1.0f : 0.0f;
324 #ifdef DCL_TESTPOINTS_ENABLED
346 v4 = (v1 * pi->Ki * pi->i6) + pi->i10;
350 pi->i6 = (v5 == v9) ? 1.0f : 0.0f;
352 #ifdef DCL_TESTPOINTS_ENABLED
372 bool l11, l14, l17, l18, l19;
375 v5 = (v1 * pi->Ki * pi->i6) + pi->i10;
377 v7 = (v1 * pi->Kp) + v5;
379 l17 = (v7 == v8) ?
true :
false;
380 l11 = (
DCL_runSat(v5, pi->Imax, pi->Imin) == v5) ?
true :
false;
381 l19 = (v5 > 0) ?
true :
false;
382 l14 = (v1 > 0) ?
true :
false;
383 l18 = l17 && (!l11 || (l19 ^ l14));
384 pi->i6 = (l18) ? 1.0f : 0.0f;
386 #ifdef DCL_TESTPOINTS_ENABLED
405 v2 = (rk - yk) * pi->Kp;
406 v8 = v2 * pi->Ki * pi->i6;
407 v4 = v8 + pi->i11 + pi->i10;
412 pi->i6 = (v5 == v9) ? 1.0f : 0.0f;
414 #ifdef DCL_TESTPOINTS_ENABLED
float32_t i11
Tustin integrator storage.
Definition: dcl_pi.h:84
float32_t K
Real gain.
Definition: dcl_zpk3.h:69
float32_t Kp
Proportional gain.
Definition: dcl_pi.h:57
float32_t Umax
Upper saturation limit.
Definition: dcl_pi.h:59
float32_t Umin
Lower saturation limit.
Definition: dcl_pi.h:60
@ dcl_param_warn_err
Parameter warning.
Definition: dcl_error.h:60
#define _DCL_CODE_SECTION
Defines dcl function section that users can specify in the linker file(.cmd) and to accelerate perfor...
Definition: dcl_common.h:63
_DCL_CODE_ACCESS void DCL_forceUpdatePI(DCL_PI *pi)
Loads PI tuning parameter from its SPS parameter without interrupt protection
Definition: dcl_pi.h:167
#define DCL_runErrorHandler(ptr)
Prototype for basic error handler.
Definition: dcl_error.h:107
float32_t Umin
Lower control saturation limit.
Definition: dcl_pi.h:77
@ dcl_param_range_err
Parameter range exceeded.
Definition: dcl_error.h:58
float32_t Ki
Integral gain.
Definition: dcl_pi.h:58
float32_t Imax
Upper integrator saturation limit, only used in DCL_runPIParallelEnhanced()
Definition: dcl_pi.h:78
#define DCL_getUpdateStatus(p)
Determine whether a parameter update-in-progress flag is set.
Definition: dcl_css.h:122
#define DCL_clearUpdateStatus(p)
Definition: dcl_css.h:116
#define _DCL_CODE_ACCESS
Defines the scope of dcl functions (static inline/extern inline/none)
Definition: dcl_common.h:58
_DCL_VOLATILE struct dcl_pi * PI_Handle
@ dcl_none
No error.
Definition: dcl_error.h:57
_DCL_CODE_ACCESS void DCL_resetPI(DCL_PI *pi)
Resets PI internal storage data with interrupt protection.
Definition: dcl_pi.h:153
_DCL_CODE_ACCESS void DCL_loadParallelPIasZPK(DCL_PI *pi, DCL_ZPK3 *zpk)
Configures a parallel PI controller in "zero-pole-gain" form Note: Sampling period pi->css->T are use...
Definition: dcl_pi.h:285
uint32_t dcl_interrupt_t
Definition: dcl_common.h:99
float32_t Imax
Upper integrator saturation limit, only used in DCL_runPIParallelEnhanced()
Definition: dcl_pi.h:61
_DCL_CODE_ACCESS _DCL_CODE_SECTION float32_t DCL_runPISeriesTustin(DCL_PI *pi, float32_t rk, float32_t yk)
Executes a series form PI controller with Tustin integrator.
Definition: dcl_pi.h:401
DCL_PI object for storing PI specific parameters.
Definition: dcl_pi.h:72
DCL_PI_SPS * sps
updates controller parameter
Definition: dcl_pi.h:87
@ dcl_param_invalid_err
Parameter not valid.
Definition: dcl_error.h:59
_DCL_CODE_ACCESS _DCL_CODE_SECTION void DCL_updatePINoCheck(DCL_PI *pi)
Loads PI tuning parameter from its SPS parameter with interrupt protection.
Definition: dcl_pi.h:197
float32_t Imin
Lower integrator saturation limit, only used in DCL_runPIParallelEnhanced()
Definition: dcl_pi.h:62
float32_t i10
I path feedback value.
Definition: dcl_pi.h:83
_DCL_CODE_ACCESS _DCL_CODE_SECTION bool DCL_updatePI(DCL_PI *pi)
A conditional update based on the update flag. If the update status is set, the function will update ...
Definition: dcl_pi.h:234
float32_t Imin
Lower integrator saturation limit, only used in DCL_runPIParallelEnhanced()
Definition: dcl_pi.h:79
_DCL_VOLATILE struct dcl_pi DCL_PI
#define DCL_runSat(data, Umax, Umin)
Macro to saturate a control variable but does not change the data itself unlike runClamp()
Definition: dcl_clamp.h:89
Defines the controller common support structure.
Definition: dcl_css.h:57
float32_t Ki
Integral gain.
Definition: dcl_pi.h:75
#define DCL_restoreInts(v)
Definition: dcl_common.h:98
float32_t Umax
Upper control saturation limit.
Definition: dcl_pi.h:76
Defines the DCL_ZPK3 controller structure.
Definition: dcl_zpk3.h:62
#define _DCL_VOLATILE
Defines volatile for DCL strctures Flags can be defined in dcl.h or user files before including DCL l...
Definition: dcl_common.h:71
_DCL_CODE_ACCESS void DCL_loadSeriesPIasZPK(DCL_PI *pi, DCL_ZPK3 *zpk)
Configures a series PI controller in "zero-pole-gain" form Note: Sampling period pi->css->T are used ...
Definition: dcl_pi.h:255
#define DCL_getErrorInfo(ptr)
Macro to store error info in CSS.
Definition: dcl_error.h:97
#define DCL_setError(ptr, code)
Macro to set error code in CSS.
Definition: dcl_error.h:79
_DCL_CODE_ACCESS _DCL_CODE_SECTION float32_t DCL_runPIParallelEnhanced(DCL_PI *pi, float32_t rk, float32_t yk)
Executes a parallel form PI controller with enhanced anti-windup logic incorporating an addintional i...
Definition: dcl_pi.h:369
float32_t Kp
Proportional gain.
Definition: dcl_pi.h:74
Defines DCL_PI shadow parameter set used for updating controller parameter.
Definition: dcl_pi.h:56
_DCL_CODE_ACCESS _DCL_CODE_SECTION float32_t DCL_runPISeries(DCL_PI *pi, float32_t rk, float32_t yk)
Executes an inline series form PI controller.
Definition: dcl_pi.h:313
float float32_t
Defines single,double precision data type. Note: Assumes ABI to be TI_EABI, does not support legacy T...
Definition: dcl_common.h:54
_DCL_CODE_ACCESS _DCL_CODE_SECTION float32_t DCL_runPIParallel(DCL_PI *pi, float32_t rk, float32_t yk)
Executes a parallel form PI controller Implemented as inline C function.
Definition: dcl_pi.h:340
DCL_CSS * css
configuration & debugging
Definition: dcl_pi.h:88
float complex z1
Complex zeros 1.
Definition: dcl_zpk3.h:63
float32_t i6
Saturation storage.
Definition: dcl_pi.h:82
#define DCL_disableInts()
Define enable and disable interrupt operations.
Definition: dcl_common.h:97