FilterAndRotations.h File Reference

Macros for filter, rotations and discrete PI, PID regulators. More...

#include "Constants.h"

Go to the source code of this file.

Defines

#define ROTATE_POS(in, out, t)   out.q[N]=_IQmpy(in.q[N],_IQcos(t))-_IQmpy(in.d[N],_IQsin(t));out.d[N]=_IQmpy(in.q[N],_IQsin(t))+_IQmpy(in.d[N],_IQcos(t));
#define ROTATE_NEG(in, out, t)   out.q[N]=_IQmpy(in.q[N],_IQcos(t))+_IQmpy(in.d[N],_IQsin(t));out.d[N]=-_IQmpy(in.q[N],_IQsin(t))+_IQmpy(in.d[N],_IQcos(t));
#define SROTATE_POS(in, out, t)   out.q=_IQmpy(in.q,_IQcos(t))-_IQmpy(in.d,_IQsin(t));out.d=_IQmpy(in.q,_IQsin(t))+_IQmpy(in.d,_IQcos(t));
#define SROTATE_NEG(in, out, t)   out.q=_IQmpy(in.q,_IQcos(t))+_IQmpy(in.d,_IQsin(t));out.d=-_IQmpy(in.q,_IQsin(t))+_IQmpy(in.d,_IQcos(t));
#define ROTATE_POS_ESC(in, out, t)   out.q[N]=_IQmpy(in,_IQcos(t));out.d[N]=_IQmpy(in,_IQsin(t));
#define ROTATE_NEG_ESC(in, out, t)   out.q[N]=_IQmpy(in,_IQcos(t));out.d[N]=-_IQmpy(in,_IQsin(t));
#define SROTATE_POS_ESC(in, out, t)   out.q=_IQmpy(in,_IQcos(t));out.d=_IQmpy(in,_IQsin(t));
#define SROTATE_NEG_ESC(in, out, t)   out.q=_IQmpy(in,_IQcos(t));out.d=-_IQmpy(in,_IQsin(t));
#define PI_REG(in, out, Kp, Ki)   out[N]=out[N1]+_IQmpy(Kp,_IQmpy(in[N],(_IQ(1)+_IQmpy(DTDIV2,Ki))) + _IQmpy(in[N1],(_IQmpy(DTDIV2,Ki)-_IQ(1))))
#define PI_QD_REG(in, out, Kp, Ki)   PI_REG(in.q,out.q,Kp,Ki); PI_REG(in.d,out.d,Kp,Ki)
#define PI_QD_REG_NOSYM(in, out, Kp_q, Ki_q, Kp_d, Ki_d)   PI_REG(in.q,out.q,Kp_q,Ki_q); PI_REG(in.d,out.d,Kp_d,Ki_d)
#define PI_REG_DT(in, out, Kp, Ki, dTDiv2)   out[N]=out[N1]+_IQmpy(Kp,_IQmpy(in[N],(_IQ(1)+_IQmpy(dTDiv2,Ki))) + _IQmpy(in[N1],(_IQmpy(dTDiv2,Ki)-_IQ(1))))
#define PID_COEFFS_LPF(kp, ki, kd, lpf, b0, b1, b2, a1, a2)
#define PID_REG_LPF(in, out, b0, b1, b2, a1, a2)   out[N] = - _IQmpy(a1,out[N1]) - _IQmpy(a2,out[N2]) + _IQmpy(b0,in[N]) + _IQmpy(b1,in[N1]) + _IQmpy(b2,in[N2])
#define PID_QD_REG_LPF(in, out, b0, b1, b2, a1, a2)   PID_REG(in.q,out.q,b0,b1,b2,a1,a2); PID_REG(in.d,out.d,b0,b1,b2,a1,a2)
#define PID_COEFFS(kp, ki, kd, b0, b1, b2)
#define PID_REG(in, out, k0, k1, k2)   out[N] = _IQmpy(k0,in[N]) + _IQmpy(k1,in[N1]) + _IQmpy(k2,in[N2]) + out[N2]
#define INV_PID_REG(in, out, k0, k1, k2)   in[N] = _IQdiv((out[N]-out[N2]- _IQmpy(k1,in[N1])- _IQmpy(k2,in[N2])),k0)
#define PID_QD_REG(in, out, k0, k1, k2)   PID_REG(in.d,out.d,k0,k1,k2); PID_REG(in.q,out.q,k0,k1,k2)
#define INV_PID_QD_REG(in, out, k0, k1, k2)   INV_PID_REG(in.d,out.d,k0,k1,k2); INV_PID_REG(in.q,out.q,k0,k1,k2)
#define INV_PI_REG(in, out, Kp, Ki)
#define INV_PI_QD_REG(in, out, Kp, Ki)   INV_PI_REG(in.q,out.q,Kp,Ki); INV_PI_REG(in.d,out.d,Kp,Ki)
#define INV_PI_QD_REG_NOSYM(in, out, Kp_q, Ki_q, Kp_d, Ki_d)   INV_PI_REG(in.q,out.q,Kp_q,Ki_q); INV_PI_REG(in.d,out.d,Kp_d,Ki_d)
#define PI_REG_WR(in, out, Kp, Ki)   out[N]=out[N1]+_IQmpy(Kp,_IQmpy(in[N],(_IQ(1)+_IQmpy(DTWDIV2,Ki))) + _IQmpy(in[N1],(_IQmpy(DTWDIV2,Ki)-_IQ(1))))
#define INT(in, out)   out[N]=out[N1]+_IQmpy(DTDIV2,(in[N]+in[N1]))
#define INT_QD(in, out)   INT(in.q,out.q); INT(in.d,out.d);
#define INT_DT(in, out, dTDiv2)   out[N]=out[N1]+_IQmpy(dTDiv2,(in[N]+in[N1]))
#define INT_QD_DT(in, out, dTDiv2)   INT_DT(in.q,out.q,dTDiv2); INT_DT(in.d,out.d,dTDiv2);
#define FILTER_LPF(in, out, B0_LPF, A1_LPF)   out[N]=_IQmpy(B0_LPF,(in[N]+in[N1]))+_IQmpy(A1_LPF,out[N1])
#define FILTER_Q_LPF(in, out, B0_LPF, A1_LPF)   out.q[N]=_IQmpy(B0_LPF,(in.q[N]+in.q[N1]))+_IQmpy(A1_LPF,out.q[N1])
#define FILTER_D_LPF(in, out, B0_LPF, A1_LPF)   out.d[N]=_IQmpy(B0_LPF,(in.d[N]+in.d[N1]))+_IQmpy(A1_LPF,out.d[N1])
#define FILTER_QD_LPF(in, out, B0_LPF, A1_LPF)   FILTER_Q_LPF(in,out,B0_LPF,A1_LPF); FILTER_D_LPF(in,out,B0_LPF,A1_LPF)
#define FILTER_HPF(in, out, B0_HPF, A1_HPF)   out[N]=_IQmpy(B0_HPF,(in[N]-in[N1]))+_IQmpy(A1_HPF,out[N1])
#define FILTER_Q_HPF(in, out, B0_HPF, A1_HPF)   out.q[N]=_IQmpy(B0_HPF,(in.q[N]-in.q[N1]))+_IQmpy(A1_HPF,out.q[N1])
#define FILTER_D_HPF(in, out, B0_HPF, A1_HPF)   out.d[N]=_IQmpy(B0_HPF,(in.d[N]-in.d[N1]))+_IQmpy(A1_HPF,out.d[N1])
#define FILTER_QD_HPF(in, out, B0_HPF, A1_HPF)   FILTER_Q_HPF(in,out,B0_HPF,A1_HPF); FILTER_D_HPF(in,out,B0_HPF,A1_HPF)
#define DQ2PH_QDDATA(fqd, fa, fb, fc)   fa=fqd.d[N];fb=_IQmpy(_IQ(-0.5),fqd.d[N])+_IQmpy(SQRT3DIV2,fqd.q[N]);fc=-(fa+fb)
#define DQ2PH(fqd, fa, fb, fc)   fa=fqd.d;fb=_IQmpy(_IQ(-0.5),fqd.d)+_IQmpy(SQRT3DIV2,fqd.q);fc=-(fa+fb)
#define PH2QD(fa, fb, fqd)   fqd.d=fa;fqd.q=(_IQmpy(SQRT3DIV3,fa)+_IQmpy(TWOSQRT3DIV3,fb));
#define PH2QD_QDDATA(fa, fb, fqd)   fqd.d[N]=fa;fqd.q[N]=(_IQmpy(SQRT3DIV3,fa)+_IQmpy(TWOSQRT3DIV3,fb));
#define CROSS(in, saliency, out)   out=_IQmpy(in.d,_IQsin(saliency))-_IQmpy(in.q,_IQcos(saliency))
#define CROSS_QDDATA(in, saliency, out)   out=_IQmpy(in.d[N],_IQsin(saliency))-_IQmpy(in.q[N],_IQcos(saliency))
#define SCALAR2SYNCVEC(in, out, t)   out.d[N]=_IQmpy(in , _IQcos(t));out.q[N]=_IQmpy(in , _IQsin(t));
#define SSCALAR2SYNCVEC(in, out, t)   out.d=_IQmpy(in , _IQcos(t));out.q=_IQmpy(in , _IQsin(t));
#define SCALAR2PULSATING(in, out, t)   out.d[N]=_IQmpy(in , _IQcos(t));out.q[N]=_IQ(0);
#define SSCALAR2PULSATING(in, out, t)   out.d=_IQmpy(in , _IQcos(t));out.q=_IQ(0);

Functions

static _iq FirFilter (volatile _iq *in, _iq *b, unsigned int n)
static _iq FirFilterV2 (volatile _iq *in, _iq *b, unsigned int n)
static _iq IIRFilter (volatile _iq *in, volatile _iq *out, _iq *b, unsigned int nb, _iq *a, unsigned int na)
static void ShiftRight (volatile _iq *in, unsigned int n)
static void ShiftRightV2 (volatile _iq *in, unsigned int n)
static void Zeros (volatile _iq *v, unsigned int n)
static void MAvrgCoeffs (_iq *b, unsigned int n)

Detailed Description

Macros for filter, rotations and discrete PI, PID regulators.

File Name : FilterAndRotations.h Project : TIMotorLIB TI Doc: na

Author:
Pablo Garcia (pgarcia@isa.uniovi.es)
Date:
2007

Definition in file FilterAndRotations.h.


Define Documentation

#define PI_REG_WR ( in,
out,
Kp,
Ki   )     out[N]=out[N1]+_IQmpy(Kp,_IQmpy(in[N],(_IQ(1)+_IQmpy(DTWDIV2,Ki))) + _IQmpy(in[N1],(_IQmpy(DTWDIV2,Ki)-_IQ(1))))
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines
Generated on Mon Apr 23 12:59:21 2012 for TIMotorLIB by  doxygen 1.6.3