文档库 最新最全的文档下载
当前位置:文档库 › F2812 SVPWM程序IQmath版

F2812 SVPWM程序IQmath版

//======================================================================================================
//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计算占空比MfuncD1,MfuncD2,MfuncD3,之后再计算全比较器参数赋值CMPR1,CMPR2,CMPR3.
-------------------------------------------------------------------------------------------------------*/
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;
}

MfuncD1=_IQmpy(_IQ(2),(_IQ(0.5)-Ta));
MfuncD2=_IQmpy(_IQ(2),(_IQ(0.5)-Tb));
MfuncD3=_IQmpy(_IQ(2),(_IQ(0.5)-Tc));


MfuncF1=_IQtoF(MfuncD1); //用于观察
MfuncF2=_IQtoF(MfuncD2);
MfuncF3=_IQtoF(MfuncD3);
}

============

=======完整程序请见下面链接:================================

===================================================================================
DSP学习程序
===================================================================================
基于F2812的开环SVPWM程序学习程序
https://www.wendangku.net/doc/e48091485.html,/item.htm?id=15400507552

永磁同步电机矢量控制系统仿真(转子磁场定向控制策略)
https://www.wendangku.net/doc/e48091485.html,/item.htm?id=14219110771

基于F2812的永磁同步电机SVPWM矢量控制学习程序
https://www.wendangku.net/doc/e48091485.html,/item.htm?id=15400115883



相关文档