首页 理论教育 SVPWM算法仿真建模优化

SVPWM算法仿真建模优化

时间:2023-06-18 理论教育 版权反馈
【摘要】:根据前述SVPWM原理,仿真中需要确定ua、ub和θ。图9-31给出的是一个完整的SVPWM仿真模型,说明如下:1)Clock模块输出一个时间信号,输出值等于当前的MATLAB仿真时间。图9-31 SIMULINK仿真模型图9-32 MATLAB-Fcn参数对话框3)Complex to Magnitude-Angle模块的功能是将复数转变为幅值与相角。

SVPWM算法仿真建模优化

1.建模方法1——时间分配法

第一种建模方法是基于公式9-8的时间分配法,其思路是:首先根据电压矢量的空间位置确定需要使用的是哪两个基本电压空间矢量;其次根据前述公式计算出每个电压空间矢量的作用时间;然后在仿真模型中将系统仿真时间与各个电压矢量的切换时刻逐一进行对比,按照图9-26的七段法进行时间分配,从而实现SVPWM算法

根据前述SVPWM原理,仿真中需要确定uaubθ。这三个量的确定都离不开扇区的判断。扇区的判断方法如下:首先计算出某时刻电压空间矢量的角度φ(-180°到+180°范围内),φ在0°~60°内为第1扇区,φ在60°~120°范围内为第2扇区,φ在120°~180°内为第3扇区,φ在-180°~-120°内为第4扇区,φ在-120°~-60°内为第5扇区,φ在-60°~0°内为第6扇区,如图9-30所示。

判断完扇区后,就可以选择相应的两个电压矢量了。设两个电压矢量中,先作用的电压矢量为ua,后一个为ub。假定ug在第3扇区,那么它可以由U2U3合成。我们既希望tg时间内电压矢量以零电压矢量开始,又要遵守最低功耗原则,那么只能把U2作为uaU3作为ub,这时开关信号依次为000、010、011、111、011、010、000,可见逆变器每次状态切换时只有一路开关动作,开关损耗较小。把每个扇区内uaub的选择方法总结成表9-2。

978-7-111-50228-9-Chapter09-47.jpg

图9-30扇区与电压矢量示意图

表9-2 uaub选择表

978-7-111-50228-9-Chapter09-48.jpg

公式9-8中的θ可以通过电压矢量的当前角度φ来获得,但是由于不同扇区内ua的选取不同,所以θφ的关系也不同。把各扇区内的θφ关系整理成表9-3。

表9-3 θφ的关系对照表

978-7-111-50228-9-Chapter09-49.jpg

根据前面的分析,编写的S-Function程序如下:

978-7-111-50228-9-Chapter09-50.jpg

%输入电压矢量的幅值Ve和相位Ph

978-7-111-50228-9-Chapter09-51.jpg

%定义控制每个矢量的开关信号

978-7-111-50228-9-Chapter09-52.jpg

u7=[111];

%判断输入矢量位于哪个扇区,从而选择相应的ua,ub,Phe.(为计算ta、tb、t0)

978-7-111-50228-9-Chapter09-53.jpg

978-7-111-50228-9-Chapter09-54.jpg

关于上述程序的说明如下:

1)程序中的一些参数设置如下:逆变器直流侧电压400V,期望逆变器输出一个旋转周期为0.02s、幅值为150V的旋转电压矢量。每一个周期分成20个小区间,那么每一小区间内电压矢量的作用时间为0.02/20s。

2)本程序是一个S-Function函数程序,S-Function程序有很多功能,本程序中只用了它的时间采样功能,让此仿真程序每隔tsam=0.02/20/100更新一次给定矢量。另外,在S-Function程序中,直接使用字母t就能得到系统当前的仿真时间。

3)程序中判断开关时刻的原理是这样的:把一个电压矢量的保持时间tw=0.02/20分成7段:t0/4、ta/2、tb/2、t0/2、tb/2、ta/2和t0/4,如图9-26所示。用当前的仿真时间除以tw后取余数,根据余数的大小就能够判断当前的仿真时间属于7个时间段内的哪一个,进而可以确定要输出的电压矢量。

图9-31给出的是一个完整的SVPWM仿真模型,说明如下:

1)Clock模块输出一个时间信号,输出值等于当前的MATLAB仿真时间。

2)MATLAB Function模块的功能是产生一个旋转矢量。双击模块,弹出图9-32所示的对话框,在MATLAB Function对话框Parameters一栏文字编辑区域内填写“1.0*150*(cos(314*u)+i*sin(314*u))”,u代表输入,即前一级的时间信号,在Output signal type中选择complex,表示输出是一个复数,这样就得到了一个用复数表示的电压空间矢量。

978-7-111-50228-9-Chapter09-55.jpg

图9-31 SIMULINK仿真模型

978-7-111-50228-9-Chapter09-56.jpg

图9-32 MATLAB-Fcn参数对话框

3)Complex to Magnitude-Angle模块的功能是将复数转变为幅值与相角。

4)4个Display模块能够显示当前的数值,在仿真时起到辅助观察的作用,删除它们不会影响系统的运行。双击Display后在对话框的Decimation参数中设置较大的整数可以加快系统的仿真速度。

5)图9-31中有两个S-Function模块,第一个S-Function模块的作用是对随时间连续变化的电压矢量进行采样,采样间隔为0.02/20s。它的程序如下:

978-7-111-50228-9-Chapter09-57.jpg

978-7-111-50228-9-Chapter09-58.jpg

双击第一个S函数模块S-Function可以弹出图9-33a所示的对话框,在S-Function name中填入“m040389svpwm003”,由于没有传递参数,S-Function parameters一栏不必填。双击第二个S函数模块S-Function1,弹出图9-33b所示的对话框,在S-Function name中填入要调用的程序的名字“m040389svpwm004”,在S-Function parameters中填入需要传递的参数400(逆变器直流侧电压)。

6)Constant1模块产生一个常数0.02/20,表示电压空间矢量的保持时间为0.02/20s。

7)两个Scope模块的作用相当于示波器,Scope用以观察三相电压波形,Scope1单独观察一相的电压波形。

8)为了让仿真顺利进行,还需要对SIMULINK的仿真环境参数进行必要的设置,点击Simulation菜单中Configuration Parameters选项后就打开了仿真参数设置对话框,如图9-34所示。仿真开始时间(Start time)为0,结束时间(Stop time)为0.04s,最大仿真步长(Max step size)为0.02/20/200。设置最大仿真步长很重要,如果仿真步长太大,大于逆变器开关周期,那么仿真结果会出现严重的失真。步长越小,采样频率越高,但仿真速度也越慢。

978-7-111-50228-9-Chapter09-59.jpg

图9-33 S函数参数设定对话框

978-7-111-50228-9-Chapter09-60.jpg

图9-34 Configuration Parameters对话框

9)本仿真模型涉及两个采样时间的概念,很有必要分清它们的区别。第一个采样时间是指在S-Function函数中的采样时间tsam,它表示仿真系统每经过tsam时间对函数的输入量进行一次采样,这种采样是必需的。例如在第一个S-Function中,需要将开关时间作为tsam,这就将每个电压空间矢量的保持时间设置为开关周期,从而保证SVPWM算法的正常执行。第二个采样时间是图9-34中SIMULINK仿真系统的采样时间,它可以通过改写Max step size来设置,以达到平衡仿真精度和仿真速度的目的。当然系统仿真步长要明显小于tsam采样时间。

图9-35给出了逆变器A相的开关信号波形,图9-36为放大后的三相开关信号波形。

978-7-111-50228-9-Chapter09-61.jpg

图9-35 一相开关信号波形(www.xing528.com)

978-7-111-50228-9-Chapter09-62.jpg

图9-36 放大的三相开关信号波形

2.建模方法2——计时器比较法

第一种仿真方法虽然实现了SVPWM的算法,但是算法中的某些函数并不适合在DSP上运行。下面对第一种仿真方法进行改进,按照适合DSP实现的方式设计算法。

978-7-111-50228-9-Chapter09-63.jpg

图9-37 时间与电压的对应关系

图9-37给出了一种新的判断开关时刻的方法——利用计数器产生一个等腰三角形,将其与一个恒定的值进行比较以确定开关时刻。图中的7个小时间段对应了6个开关时刻,它们可以利用usw1usw2usw3与三角波比较获得。图中三角波的幅值设置为Ud,周期设置为开关周期tsam。当三角波的值在0~usw1范围时输出u0;当三角波的值在usw1usw2范围时时输出Ua;当三角波的值在usw2usw3范围时输出Ub;当三角波的值在usw3Ud范围时输出u7usw1usw2usw3的值满足下列关系:

978-7-111-50228-9-Chapter09-64.jpg

因为本仿真算法不需记录时间,所以改进后的算法可用一般的MATLAB函数编写程序,程序如下:

function y=m040389svpwm005(u)

%本函数共有5个输入变量,分别是电压矢量的幅值、电压矢量的相位、电压矢量的作用时间,直流电压Ud、三角载波(注意:三角载波的幅值必须等于直流电压)。

978-7-111-50228-9-Chapter09-65.jpg

%定义控制每个矢量的开关信号

978-7-111-50228-9-Chapter09-66.jpg

%判断输入矢量位于哪个扇区,从而选择相应的ua,ub,Phe.(为计算ta、tb、t0)

978-7-111-50228-9-Chapter09-67.jpg

978-7-111-50228-9-Chapter09-68.jpg

用SIMULINK搭建的仿真模型如图9-38所示,说明如下:

1)仿真中仍然用到了S-Function模块“m040389svpwm003”(前面已经给出),因为对连续电压空间矢量的离散化必不可少;另外也可利用SIMULINK的Discrete子库中的零阶保持器(Zero-order hold)模块来实现采样保持。

2)此仿真模型较图9-31多了两个输入模块,一个是代表逆变器直流电压的Udc(设为常数400);另一个模块是Repeating Sequence,作用是产生一个周期为0.02/20s的三角波,变化范围为0~400(即图9-37中的三角波)。

978-7-111-50228-9-Chapter09-69.jpg

图9-38 第二种方法的SIMULINK仿真模型

仿真结果分析

图9-38的仿真结果如图9-39和9-40所示。

978-7-111-50228-9-Chapter09-70.jpg

图9-39 一相开关信号波形

978-7-111-50228-9-Chapter09-71.jpg

图9-40 放大的三相开关信号波形

为了对SVPWM控制逆变器输出的交流电压进行验证,需要在SIMULINK里添加一些辅助模块,如图9-41所示。

978-7-111-50228-9-Chapter09-72.jpg

图9-41 采用SIMULINK进行仿真验证

对图9-41作以下说明:

1)Switch开关是一个理想开关器件,用它来模拟逆变器一相半桥电路的功能,当输入信号为1时,输出为200;输入信号为0时,输出为-200,3个Switch组成了逆变器的3个桥臂,这样就搭建成一个理想化的逆变器模型。

2)butter模块设置成低通滤波器,图中4个低通滤波器自上到下的截止频率分别为基波频率(50Hz)、3次谐波频率、5次谐波频率和7次谐波频率。

3)Fourier模块可以测量基波或各次谐波的幅值,图中设置成测量基波的幅值。

图9-42是逆变器输出相电压经过低通滤波后的结果。由图9-42a可知,在经过不到2个周期的过渡过程之后,相电压基波波形近似成为正弦波;从图9-42d马鞍形波形可以看出,相电压中含有明显的3次谐波。

图9-41中的Display4中显示的148.8就是相电压基波的幅值,说明已经非常接近150V的三相正弦电压了。图9-43则更直观地显示了基波电压幅值的变化过程。可见,在经过一个周期过渡以后,相电压幅值保持约150V不变。

978-7-111-50228-9-Chapter09-73.jpg

图9-42 低通滤波后的相电压波形

978-7-111-50228-9-Chapter09-74.jpg

图9-43 Fourier模块输出的基波相电压幅值

3.建模方法3——三角波调制法(改进的SPWM建模)

文献对SPWM和SVPWM之间的关系进行研究,指出可以推导出图9-44所示的基于SPWM的SVPWM实现算法,即需要在原有的三相正弦调制波中同时加入一个零序分量uz*

uz*=(1-2λ)-(1-λu*max-λu*min (9-23)

式中的u*maxu*min分别代表三相正弦调制波中的最大值与最小值;λ表示零电压矢量作用总时间中U0所占的时间份额(为0~1之间的实数)。注意式9-23中的3个电压均是以Ud/2作为基准的标幺值电压

978-7-111-50228-9-Chapter09-75.jpg

图9-44 基于SPWM的SVPWM算法示意图

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈