使用simulink进行SVPWM模块的搭建

使用simulink进行SVPWM模块的搭建,第1张

大致弄懂了SVPWM的基本原理之后,下面我就使用MATLAB SIMULINK工具进行仿真

整体的仿真模块如下图所示:

整体的simulink仿真图如上图所示,虽然很多资料上都有,但是在实际按照资料搭建的过程中总是会遇到这样或者是那样的问题,在我经过多次失败的过程中,终于搭建出来正确的模型。下面我就具体介绍一下每个子模块的具体搭建方法以及参数的设定。

在本模型中PWM的开关周期为0.0002s,直流侧电压Udc=700V,仿真算法采用变步长ode23tb算法,且最大仿真步长(MAX STEP SIZE)为0.00001,其余值保持初始值不变。

PWM三角波可以用MATLAB SIMULINK仿真模块中的repeating sequence产生,具体设置如下:

其中对称的等腰三角波的幅值一般取频率的一般,使用示波器观察三角波如下:

需要注意的一点是,注意设定输入正弦波的采样时间,如果采样时间过大或者过小都会使得这个三角波失真。这里给出输入的两个正弦波的模块的设置:

接下来就分模块说说如何搭建:

首先是扇区N的判断模块:

扇区N的计算结果如下:

接下来是中间变量X,Y,Z的计算模块

T1和T2计算模块

切换时间Tcm1,Tcm2,Tcm3模块

切换时间的计算结果:

最后是计算相电压的模块,一般资料这个模块都没有把内部的结构详细给出

相电压Ua的计算结果:

就这样一个完整的SVPWM模块就完成了~

这句话的意思是:'PCHDPI/SVPWM/Subsystem2/Subsystem/Multiport Switch'元件的中的数值不能设定为零,改正方法:要么把值改为0-6的数,要么设为“none”。

照着改 ,不难

void svpwm(float *ptr)

{

int A,B,C,N

double X,Y,Z,Tx,Ty,T0,T1,Tm,Th

if(usbeta>0)A=1

else A=0

if((1.732051*usalfa-usbeta)>0)B=1

else B=0

if((1.732051*usalfa-usbeta)>0)C=1

else C=0

N=A+2*B+4*C//计算扇区

X=1.732051*usbeta*Ts/udc

Y=(0.8660*usbeta+1.5*usalfa)*Ts/udc

Z=(-0.8660*usbeta+1.5*usalfa)*Ts/udc

swith(N)//各扇区工作时间

{

case 1:Tx=YTy=-Zbreak

case 2:Tx=-XTy=Ybreak

case 3:Tx=ZTy=Xbreak

case 4:Tx=-ZTy=-Xbreak

case 5:Tx=XTy=-Ybreak

default:Tx=-YTy=Z

}

if((Tx+Ty)>Ts)

{

Tx=Tx*Ts/(Tx+Ty)

Ty=Ty*Ts/(Tx+Ty)

}

T0=(Ts-(Tx+Ty))/4

T1=(Ts+Tx-Ty)/4

Tm=(Ts-Tx+Ty)/4

Th=(Ts+Tx+Ty)/4

swith(N)//比较寄存器赋值

{

case 1:*ptr=Tm*(ptr+1)=T0*(ptr+2)=Thbreak

case 2:*ptr=T0*(ptr+1)=Th*(ptr+2)=Tmbreak

case 3:*ptr=T0*(ptr+1)=T1*(ptr+2)=Thbreak

case 4:*ptr=Th*(ptr+1)=Tm*(ptr+2)=T0break

case 5:*ptr=Th*(ptr+1)=T0*(ptr+2)=T1break

default:*ptr=T1*(ptr+1)=Th*(ptr+2)=T0break

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7844878.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存