空间电压矢量脉宽调制技术(SVPWM)在DSP中的实现步骤总体空间电压矢量脉宽调制技术(SVPWM)在DSP中的实现步骤:(1)获得SVPWM的输入信号UALFA,UBETA, UD,UQ经过IPARK变换得到输入信号UALFA,UBETA;(2)利用输入信号UALFA,UBETA确定扇区变量P,再通过扇区变量P确定扇区Sector;(3)利用输入信号UALFA,UBETA计算中间变量X,Y,Z,再根据不同扇区利用中间变量X,Y,Z计算t1,t2;(4)利用t1,t2计算中间变量Taon,Tbon,Tcon,再根据不同扇区利用中间变量Taon,Tbon,Tcon,计算Ta,Tb,Tc;(5)利用Ta,Tb,Tc计算占空比MfuncC1,MfuncC2,MfuncC3,之后再计算全比较器参数赋值CMPR1,CMPR2,CMPR3.详细空间电压矢量脉宽调制技术(SVPWM)在DSP中的实现步骤:(1)获得SVPWM的输入信号UALFA,UBETA;图1 PMSM矢量控制总体框图各位初学者应该首先明白空间电压矢量脉宽调制技术(SVPWM)的输入是电压量Ualfa,Ubeta。
Ualfa,Ubeta是通过IPARK变换得到的。
记住原理是原理,实践是实践,两者不同!多看看TI的例程和PDF说明文档,很有帮助!图2 SVPWM 模块框图(2)利用输入信号UALFA,UBETA 确定扇区变量P,再通过扇区变量P 确定扇区Sector ; 计算三个中间变量B 0,B 1,B 2:0011221sin 60sin 3022sin 60sin 30122B U B U B U U B U U B U U B U U ββαβαβαβαβ⎧⎪=⎧=⎪⎪⎪=−⇒=−⎨⎨⎪⎪=−−⎩⎪=−−⎪⎩o oo o o 在使用符号函数1()0x sign x x >⎧=⎨<⎩计算扇区中间变量P 值: 2104si ()2()()P gn B sign B sign B =++P 值与扇区号之间的对应关系为:P 1 2 3 4 5 6 扇区号 2 6 1 4 3 5图3 扇区变量P 与扇区SECTOR 之间关系(3)利用输入信号UALFA,UBETA计算中间变量X,Y,Z,再根据不同扇区利用中间变量X,Y,Z 计算t1,t2;计算三个中间变量X,Y,Z:122122X UY U UZ U Uβαβαβ⎧⎪=⎪⎪=+⎨⎪⎪=−+⎪⎩o根据电压矢量所在扇区确定切换时间t1,t2:扇区号 1 2 3 4 5 6 t1 -Z Z X -X -Y Y t2 X Y -Y Z -Z -X图4 T1,T2的波形(4)利用t1,t2计算中间变量Taon,Tbon,Tcon,再根据不同扇区利用中间变量Taon,Tbon,Tcon,计算Ta,Tb,Tc;1212(1)/2(0~1)aonbon acon bT t tT T tT T t=−−⎧⎪=+⎨⎪=+⎩,图5 Taon ,Tbon 的波形(5)利用Ta,Tb,Tc 计算占空比MfuncC1,MfuncC2,MfuncC3,之后再计算全比较器参数赋值CMPR1,CMPR2,CMPR3.则不同扇区内切换点T a ,T b ,T c 可有下表得到:(0.5)*2(0.5)*2(1~1)(0.5)*2a ab b cc T T T T T T =−⎧⎪=−−⎨⎪=−⎩ 范围改变EvaRegs.CMPR1 = (Uint16)(MfuncC1*Modulation*T1Period/2+T1Period/2);//A 相占空比计算,调制比Modulation =0.95EvaRegs.CMPR2 = (Uint16)(MfuncC2*Modulation*T1Period/2+T1Period/2);//B 相占空比计算 EvaRegs.CMPR3 = (Uint16)(MfuncC2*Modulation*T1Period/2+T1Period/2);//B 相占空比计算图6 Ta,Tb的波形本文主要基于TI公司C2000系列F2812例程中的说明文件svgen_dq.pdf编写而成,主要是帮助SVPWM初学者。
如有错误或者修改的地方,或者疑问,请联系QQ:546847771主要讲解技术,非诚勿扰!具体程序如下://=============================================================================== //计算Sine,Cosine,用于IPARK变换//=============================================================================== i++;i=0;if(i>256)Sine = sin(6.2831853*i/256);Cosine = cos(6.2831853*i/256);//=============================================================================== //IPARK变换:UD,UQ==>UALFA,UBETA//=============================================================================== UALFA=Cosine*UD-Sine*UQ;UBETA=Sine*UD+Cosine*UQ;//=============================================================================== //SVPWM算法实现,首先通过UALFA,UBETA确定扇区变量P//=============================================================================== B0=UBETA;B1=0.8660254*UALFA-0.5*UBETA;B2=-0.8660254*UALFA-0.5*UBETA;if(B0>0)P0=1;P0=0;elseP1=1;if(B1>0)elseP1=0;P2=1;if(B2>0)P2=0;elseP=P0+2*P1+4*P2;//==============================================================================//通过扇区变量P确定扇区Sector//============================================================================== Sector=2;if(P==1)else if(P==2) Sector=6;else if(P==3) Sector=1;else if(P==4) Sector=4;else if(P==5) Sector=3;else if(P==6) Sector=5;//=============================================================================== //根据扇区Sector计算Ta,Tb,Tc//===============================================================================X=UBETA;Y=0.8660254*UALFA+0.5*UBETA;Z=-0.8660254*UALFA+0.5*UBETA;if(Sector==1){t1=-Z;t2=X;Taon=(1-t1-t2)/2;Tbon=Taon+t1;Tcon=Tbon+t2;Ta=Taon;Tb=Tbon;Tc=Tcon;}if(Sector==2)else{t1=Z;t2=Y;Taon=(1-t1-t2)/2;Tbon=Taon+t1;Tcon=Tbon+t2;Ta=Tbon;Tb=Taon;Tc=Tcon;}elseif(Sector==3){t1=X;t2=-Y;Taon=(1-t1-t2)/2;Tbon=Taon+t1;Tcon=Tbon+t2;Ta=Tcon;Tb=Taon;Tc=Tbon;}if(Sector==4)else{t1=-X;t2=Z;Taon=(1-t1-t2)/2;Tbon=Taon+t1;Tcon=Tbon+t2;Ta=Tcon;Tb=Tbon;Tc=Taon;}else if(Sector==5){t1=-Y;t2=-Z;Taon=(1-t1-t2)/2;Tbon=Taon+t1; Tcon=Tbon+t2; Ta=Tbon;Tb=Tcon;Tc=Taon;}else if(Sector==6){t1=Y;t2=-X;Taon=(1-t1-t2)/2;Tbon=Taon+t1;Tcon=Tbon+t2;Ta=Taon;Tb=Tcon;Tc=Tbon;}MfuncC1=(Ta-0.5)*2;MfuncC2=(Tb-0.5)*2;MfuncC3=(Tc-0.5)*2;//===========================================================================//全比较器参数赋值,调制比M=0.95//=========================================================================== EvaRegs.CMPR1 = (Uint16)(MfuncC1*Modulation*T1Period/2+T1Period/2);//A相占空比计算EvaRegs.CMPR2 = (Uint16)(MfuncC2*Modulation*T1Period/2+T1Period/2);//B相占空比计算EvaRegs.CMPR3 = (Uint16)(MfuncC2*Modulation*T1Period/2+T1Period/2);//B相占空比计算。