TI Motor Control

//======================================================================================================

//IPark变换UD,UQ-->UALFA,UBETA获得给定信号

//====================================================================================================== 

Ualfa = _IQmpy(Ud,Cosine) - _IQmpy(Uq,Sine);

Ubeta = _IQmpy(Uq,Cosine) + _IQmpy(Ud,Sine); 

    

//======================================================================================================

//通过UALFA,UBETA确定扇区Sector,根据扇区Sector计算Ta,Tb,Tc,SVPWM实现

//====================================================================================================== 

/*------------------------------------------------------------------------------------------------------

空间电压矢量脉宽调制技术(SVPWM)DSP中的实现步骤:

(1)获得SVPWM的输入信号UALFA,UBETA,Ud,Uq经过IPARK变换得到输入信号UALFA,UBETA;

(2)利用输入信号UALFA,UBETA计算中间变量B0,B1,B2,确定扇区Sector

(3)利用输入信号UALFA,UBETA计算中间变量X,Y,Z,再根据不同扇区利用中间变量X,Y,Z计算t1,t2;

(4)利用t1,t2根据不同扇区计算Ta,Tb,Tc;

(5)利用Ta,Tb,Tc计算占空比MfuncD1MfuncD2MfuncD3,之后再计算全比较器参数赋值CMPR1CMPR2CMPR3.

-------------------------------------------------------------------------------------------------------*/

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;

Y=_IQmpy(_IQ(0.8660254),Ualfa)+ _IQmpy(_IQ(0.5),Ubeta);// 0.8660254 = sqrt(3)/2 

Z=_IQmpy(_IQ(-0.8660254),Ualfa)+ _IQmpy(_IQ(0.5),Ubeta); // 0.8660254 = sqrt(3)/2 

 

if(Sector==0)

{

Ta=_IQ(0.5);

Tb=_IQ(0.5);

Tc=_IQ(0.5);

else if(Sector==1)

{

t1=Z;

t2=Y;

 

Tb=_IQmpy(_IQ(0.5),(_IQ(1)-t1-t2));

Ta=Tb+t1;

Tc=Ta+t2;

}

else if(Sector==2)

{

t1=Y;

t2=-X;

 

Ta=_IQmpy(_IQ(0.5),(_IQ(1)-t1-t2));

Tc=Ta+t1;

Tb=Tc+t2;

else if(Sector==3)

    {

t1=-Z;

t2=X;

 

Ta=_IQmpy(_IQ(0.5),(_IQ(1)-t1-t2));

Tb=Ta+t1;

Tc=Tb+t2;

    } 

    else if(Sector==4)

    {

t1=-X;

t2=Z;

 

Tc=_IQmpy(_IQ(0.5),(_IQ(1)-t1-t2));

Tb=Tc+t1;

Ta=Tb+t2;

    } 

    else if(Sector==5)

    {

t1=X;

t2=-Y;

 

Tb=_IQmpy(_IQ(0.5),(_IQ(1)-t1-t2));

Tc=Tb+t1;

 Ta=Tc+t2;

}

else if(Sector==6)

{

t1=-Y;

t2=-Z;

 

Tc=_IQmpy(_IQ(0.5),(_IQ(1)-t1-t2));

Ta=Tc+t1;

Tb=Ta+t2;

 

Ta=_IQmpy(_IQ(2),(Ta-_IQ(0.5)));

Tb=_IQmpy(_IQ(2),(Tb-_IQ(0.5)));

Tc=_IQmpy(_IQ(2),(Tc-_IQ(0.5)));

 

原文地址:https://www.cnblogs.com/linkfeel/p/2572991.html