Quantcast
Channel: Microcontrollers
Viewing all articles
Browse latest Browse all 216474

Forum Post: How to use pi.h header file in f28335?

$
0
0

Hello!

I want to use pi controller for my system. I found a pi.h header file in control suite. But i dont know how to use that. please help me how should i access pi controller variable from my main.c file. 

my requirements are:

idc-from adc;

idc_ref- i'll decide some value inside dsp.

output =(idc-idc_ref)*(kp+(ki/s))

kp & ki are terms in pi controller.

pi.h file is the following:

/* =================================================================================
File name: PI.H
===================================================================================*/


#ifndef __PI_H__
#define __PI_H__

typedef struct { _iq Ref; // Input: reference set-point
_iq Fbk; // Input: feedback
_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)
_iq w1; // Data: saturation record: [u(k-1) - v(k-1)]
} PI_CONTROLLER;


/*-----------------------------------------------------------------------------
Default initalisation values for the PI_GRANDO objects
-----------------------------------------------------------------------------*/

#define PI_CONTROLLER_DEFAULTS { \
0, \
0, \
0, \
_IQ(1.0), \
_IQ(0.0), \
_IQ(1.0), \
_IQ(-1.0), \
_IQ(0.0), \
_IQ(0.0), \
_IQ(0.0), \
_IQ(0.0), \
_IQ(1.0) \
}


/*------------------------------------------------------------------------------
PI_GRANDO Macro Definition
------------------------------------------------------------------------------*/

#define PI_MACRO(v) \
\
/* proportional term */ \
v.up = 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 = _IQmpy(v.Kp, (v.up + v.ui)); \
v.Out= _IQsat(v.v1, v.Umax, v.Umin); \
//v.w1 = (v.Out == v.v1) ? _IQ(1.0) : _IQ(0.0); \

// ***********************************************************************************
// This macro works with angles as inputs, hence error is rolled within -pi to +pi
// ***********************************************************************************
#define PI_POS_MACRO(v) \
/* proportional term */ \
v.up = v.Ref - v.Fbk; \
if (v.up >= _IQ(0.5)) \
v.up -= _IQ(1.0); /* roll in the error */ \
else if (v.up <= _IQ(-0.5)) \
v.up += _IQ(1.0); /* roll in the error */ \
\
/* 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 = _IQmpy(v.Kp, (v.up + v.ui)); \
v.Out= _IQsat(v.v1, v.Umax, v.Umin); \
//v.w1 = (v.Out == v.v1) ? _IQ(1.0) : _IQ(0.0); \


#endif // __PI_H__

Please help me to solve this

regards

Mahesh


Viewing all articles
Browse latest Browse all 216474

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>