#define IPARK(v) \
\
v.Valpha = _IQmpy(v.VdRef,v.Cos) - _IQmpy(v.VqRef,v.Sin); \
v.Vbeta = _IQmpy(v.VqRef,v.Cos) + _IQmpy(v.VdRef,v.Sin);
#define SVPWM(v) \
\
v.sector = 0; \
v.temp_sv1=_IQdiv2(v.Vbeta); /*divide by 2*/ \
v.temp_sv2=_IQmpy(_IQ(0.8660254),v.Valpha); /* 0.8660254 = sqrt(3)/2*/ \
\
/* Inverse clarke transformation */ \
v.Va = v.Vbeta; \
v.Vb = -v.temp_sv1 + v.temp_sv2; \
v.Vc = -v.temp_sv1 - v.temp_sv2; \
/* 60 degree Sector determination */ \
if (v.Va>_IQ(0)) v.sector = 1; \
if (v.Vb>_IQ(0)) v.sector = v.sector+2; \
if (v.Vc>_IQ(0)) v.sector = v.sector+4; \
/* X,Y,Z (Va,Vb,Vc) calculations X = Va, Y = Vb, Z = Vc */ \
v.Va = v.Vbeta; \
v.Vb = v.temp_sv1 + v.temp_sv2; \
v.Vc = v.temp_sv1 - v.temp_sv2; \
/* Sector 0: this is special case for (Ualpha,Ubeta) = (0,0)*/ \
switch(v.sector) \
{ \
case 0: \
v.Ta = _IQ(0.5); \
v.Tb = _IQ(0.5); \
v.Tc = _IQ(0.5); \
break; \
case 1: /*Sector 1: t1=Z and t2=Y (abc ---> Tb,Ta,Tc)*/ \
v.t1 = v.Vc; \
v.t2 = v.Vb; \
v.Tb=_IQdiv2((_IQ(1)-v.t1-v.t2)); \
v.Ta = v.Tb+v.t1; /* taon = tbon+t1 */ \
v.Tc = v.Ta+v.t2; /* tcon = taon+t2 */ \
break; \
case 2: /* Sector 2: t1=Y and t2=-X (abc ---> Ta,Tc,Tb)*/ \
v.t1 = v.Vb; \
v.t2 = -v.Va; \
v.Ta=_IQdiv2((_IQ(1)-v.t1-v.t2)); \
v.Tc = v.Ta+v.t1; /* tcon = taon+t1 */ \
v.Tb = v.Tc+v.t2; /* tbon = tcon+t2 */ \
break; \
case 3: /* Sector 3: t1=-Z and t2=X (abc ---> Ta,Tb,Tc)*/ \
v.t1 = -v.Vc; \
v.t2 = v.Va; \
v.Ta=_IQdiv2((_IQ(1)-v.t1-v.t2)); \
v.Tb = v.Ta+v.t1; /* tbon = taon+t1 */ \
v.Tc = v.Tb+v.t2; /* tcon = tbon+t2 */ \
break; \
case 4: /* Sector 4: t1=-X and t2=Z (abc ---> Tc,Tb,Ta)*/ \
v.t1 = -v.Va; \
v.t2 = v.Vc; \
v.Tc=_IQdiv2((_IQ(1)-v.t1-v.t2)); \
v.Tb = v.Tc+v.t1; /* tbon = tcon+t1 */ \
v.Ta = v.Tb+v.t2; /* taon = tbon+t2 */ \
break; \
case 5: /* Sector 5: t1=X and t2=-Y (abc ---> Tb,Tc,Ta)*/ \
v.t1 = v.Va; \
v.t2 = -v.Vb; /* tbon = (1-t1-t2)/2 */ \
v.Tb=_IQdiv2((_IQ(1)-v.t1-v.t2)); \
v.Tc = v.Tb+v.t1; /* taon = tcon+t2 */ \
v.Ta = v.Tc+v.t2; \
break; \
case 6: /* Sector 6: t1=-Y and t2=-Z (abc ---> Tc,Ta,Tb)*/ \
v.t1 = -v.Vb; \
v.t2 = -v.Vc; \
v.Tc=_IQdiv2((_IQ(1)-v.t1-v.t2)); \
v.Ta = v.Tc+v.t1; /* taon = tcon+t1 */ \
v.Tb = v.Ta+v.t2; /* tbon = taon+t2 */ \
break; \
} \
/* Convert the unsigned GLOBAL_Q format (ranged (0,1)) ->.. */ \
/* ..signed GLOBAL_Q format (ranged (-1,1))*/ \
v.Ta = _IQmpy2(v.Ta-_IQ(0.5)); \
v.Tb = _IQmpy2(v.Tb-_IQ(0.5)); \
v.Tc = _IQmpy2(v.Tc-_IQ(0.5));
EPwm1Regs.CMPA.half.CMPA= _IQmpy(HalfPWM_TB_PERIOD,myFoc.Ta)+HalfPWM_TB_PERIOD;
EPwm2Regs.CMPA.half.CMPA= _IQmpy(HalfPWM_TB_PERIOD,myFoc.Tb)+HalfPWM_TB_PERIOD;
EPwm3Regs.CMPA.half.CMPA= _IQmpy(HalfPWM_TB_PERIOD,myFoc.Tc)+HalfPWM_TB_PERIOD;
通过按键产生一个事件,printf数据CMPA,把串口接收到的数据复制到excel,绘制出马鞍波波形。