//======================================================================================================
//IPark變換UD,UQ-->UALFA,UBETA獲得給定信號 //svpwm 後面獨自有一小節詳解
//======================================================================================================
Ualfa = _IQmpy(Ud,Cosine) - _IQmpy(Uq,Sine);
Ubeta = _IQmpy(Uq,Cosine) + _IQmpy(Ud,Sine);
B0=Ubeta;
B1=_IQmpy(_IQ(0.8660254),Ualfa)- _IQmpy(_IQ(0.5),Ubeta);// 0.8660254 = sqrt(3)/2
B2=_IQmpy(_IQ(-0.8660254),Ualfa)- _IQmpy(_IQ(0.5),Ubeta); // 0.8660254 = sqrt(3)/2
//*********確定扇區************//
Sector=0;
if(B0>_IQ(0)) Sector =1;
if(B1>_IQ(0)) Sector =Sector +2;
if(B2>_IQ(0)) Sector =Sector +4;
/////////////////////////////////
X=Ubeta;//va
Y=_IQmpy(_IQ(0.8660254),Ualfa)+ _IQmpy(_IQ(0.5),Ubeta);// 0.8660254 = sqrt(3)/2 vb
Z=_IQmpy(_IQ(-0.8660254),Ualfa)+ _IQmpy(_IQ(0.5),Ubeta); // 0.8660254 = sqrt(3)/2 vc
//////////////////////////////////////////////確定相鄰矢量作用的時間/////////////////
if(Sector==1)
{
t_01=Z;
t_02=Y;
if((t_01+t_02)>_IQ(1))
{
t1=_IQmpy(_IQdiv(t_01, (t_01+t_02)),_IQ(1));
t2=_IQmpy(_IQdiv(t_02, (t_01+t_02)),_IQ(1));
}
else
{ t1=t_01;
t2=t_02;
}
Tb=_IQmpy(_IQ(0.5),(_IQ(1)-t1-t2));
Ta=Tb+t1;
Tc=Ta+t2;
}
///////////////////////一下每一個扇區都是確定相鄰矢量作用的時間///////////
else if(Sector==2)
{
t_01=Y;
t_02=-X;
if((t_01+t_02)>_IQ(1))
{
t1=_IQmpy(_IQdiv(t_01, (t_01+t_02)),_IQ(1));
t2=_IQmpy(_IQdiv(t_02, (t_01+t_02)),_IQ(1));
}
else
{ t1=t_01;
t2=t_02;
}
Ta=_IQmpy(_IQ(0.5),(_IQ(1)-t1-t2));
Tc=Ta+t1;
Tb=Tc+t2;
}
else if(Sector==3)
{
t_01=-Z;
t_02=X;
if((t_01+t_02)>_IQ(1))
{
t1=_IQmpy(_IQdiv(t_01, (t_01+t_02)),_IQ(1));
t2=_IQmpy(_IQdiv(t_02, (t_01+t_02)),_IQ(1));
}
else
{ t1=t_01;
t2=t_02;
}
Ta=_IQmpy(_IQ(0.5),(_IQ(1)-t1-t2));
Tb=Ta+t1;
Tc=Tb+t2;
}
else if(Sector==4)
{
t_01=-X;
t_02=Z;
if((t_01+t_02)>_IQ(1))
{
t1=_IQmpy(_IQdiv(t_01, (t_01+t_02)),_IQ(1));
t2=_IQmpy(_IQdiv(t_02, (t_01+t_02)),_IQ(1));
}
else
{ t1=t_01;
t2=t_02;
}
Tc=_IQmpy(_IQ(0.5),(_IQ(1)-t1-t2));
Tb=Tc+t1;
Ta=Tb+t2;
}
else if(Sector==5)
{
t_01=X;
t_02=-Y;
if((t_01+t_02)>_IQ(1))
{
t1=_IQmpy(_IQdiv(t_01, (t_01+t_02)),_IQ(1));
t2=_IQmpy(_IQdiv(t_02, (t_01+t_02)),_IQ(1));
}
else
{ t1=t_01;
t2=t_02;
}
Tb=_IQmpy(_IQ(0.5),(_IQ(1)-t1-t2));
Tc=Tb+t1;
Ta=Tc+t2;
}
else if(Sector==6)
{
t_01=-Y;
t_02=-Z;
if((t_01+t_02)>_IQ(1))
{
t1=_IQmpy(_IQdiv(t_01, (t_01+t_02)),_IQ(1));
t2=_IQmpy(_IQdiv(t_02, (t_01+t_02)),_IQ(1));
}
else
{ t1=t_01;
t2=t_02;
}
/////////////////////確定比較時間////////////////////////////
Tc=_IQmpy(_IQ(0.5),(_IQ(1)-t1-t2));
Ta=Tc+t1;
Tb=Ta+t2;
}
MfuncD1=_IQmpy(_IQ(2),(_IQ(0.5)-Ta));//倒三角計算
MfuncD2=_IQmpy(_IQ(2),(_IQ(0.5)-Tb));
MfuncD3=_IQmpy(_IQ(2),(_IQ(0.5)-Tc));
}