网上有很多相关内容的详细解释。本文阐述了SVPWM 调制策略的要点,重点是SIMULINK 仿真。
SVPWM(空间矢量脉宽调制)是近年来发展起来的一种比较新颖的电机控制方法。它是由三相电力逆变器的六个功率开关元件组成的一种特定的开关方式。产生的脉宽调制波可以使输出电流波形尽可能接近理想的正弦波形。 SVPWM 与传统的正弦PWM 不同。它从三相输出电压的整体效果出发,重点研究如何使电机获得理想的圆形磁通轨迹。
为什么要使用SVPWM策略?对于电机控制,SVPWM可以根据电机磁通与电压的关系实现电机的恒磁通变电压和变频调速。 SVPWM比SPWM的直流母线电压利用率高15%,更容易实现数字化。
输入:
1、旋转坐标系中的dq轴电压、自然坐标系中的ABC三相电压等载波信号。
2.电源
输出:
三相PWM信号
控制器输出的控制电压、参考电压及其他具有所需信息的电压信号
作为永磁同步电机等被控对象的输入:输出的三相PWM信号可加到空间相差120的三相静态坐标系中,可等效为三相幅度、频率和相位。相位交流电,输入信号所包含的信息就体现在这个三相交流电的幅值、频率、相位上。这可以用作PMSM等受控对象的输入,因为PMSM的转速取决于三相电压的频率。
平均值等效原理:通过组合一个开关周期内的基本电压矢量,平均值等于给定的电压矢量。通过改变计算机(数字控制器)输出PWM波的占空比,使所需的三相电压相等。
如图所示为
三相逆变器的电路图和工作流程图。
八种开关状态的相电压和线电压对应关系为:
八个基本电压空间矢量的大小和位置:非零矢量(相电压幅值)的幅值相同(模数长度为),相邻矢量之间的间隔为60,两个零矢量幅度为零,位于中心。在每个扇区中,选择两个相邻的电压矢量和零矢量,根据伏秒平衡原理合成每个扇区中的任意电压矢量。满足以下数学表达式:
其中, 为期望电压矢量;是采样周期;分别为对应的两个非零电压矢量和零电压矢量在一个采样周期内的作用时间;包括两个零向量和。上式的含义是向量在时间上产生的积分效应值与在时间上产生的积分效应之和相同。
此时,问题就变成了如何选择8种类型的开关及其对应的持续时间。
通过空间向量的计算,可以得到每个开关状态的持续时间(以第一个扇区为例):
以减少切换次数为目标,选择基本矢量动作序列的分配原则为:每次切换状态转换时仅改变一相的切换状态。并且零矢量在时间上均匀分布,使生成的PWM对称,从而有效减少PWM的谐波分量。有七级顺序可供选择切换顺序。详细图解请参考:https://zhuanlan.zhihu.com/p/115067276
下面动态展示工作流程(图中以三角波为例,正弦波类似)
整体仿真模型(代码来源见图中注释)
该代码的输入是旋转坐标系下的轴电压。首先判断扇区的选择(图中的Selec.Setor)
通过将轴电压转换到坐标系中,将矢量分解到各个坐标轴上,并根据角度进行判断。
函数[Mag,ang,Sec]=fcn(u)complexo=u(2)+ i* u(3);Mag=abs(complexo);ang=atan2(imag(complexo),real(complexo));alpha=ang*180/pi;秒=(alpha0 alpha=60)*1+ (alpha60 alpha=120)*2 + (alpha120 alpha=180)*3 . +(alpha-180 alpha-120)*4+ (-120=-60)*5 + (-60=0)*6;接下来,使用七阶段选择方法实时选择开关值。
function pwm=fcn(Fs,Mag,ang,Sec,Vdc,clk)% 与simulink 时钟进行时间同步。 t=clk;%工作区Vdc%计算T1、T2和T0的通用表达式。 T1=(sqrt (3)*(Mag/Vdc))*sin(Sec*pi/3 -ang)/Fs;T2=(sqrt(3)*(Mag/Vdc))*sin(ang - ((Sec) -1)* pi/3))/Fs;T0=(1/Fs -T1- T2)/2;% 扇区变化sec_ant=mod(floor(Sec),2);if(sec_ant~=1) %检测扇区交换T1=(sqrt(3)*(Mag/Vdc))*sin(ang - ((Sec-1)*pi/3))/Fs; T2=(sqrt(3)*(Mag/Vdc))*sin(Sec*pi/3 -ang)/Fs; end% Sawtoothref=1/Fs * rem(t,1/Fs)/(1/Fs);% 时间间隔int1=T0/4;int2=int1+T1/2; int3=int2+T2/2;int4=int3+T0/2;int5=int4+T2/2;int6=int5+T1/2;timet=1+(ref=int1)+(ref=int2)+(ref=int3)+(ref=int4)+(ref=int5)+(ref=int6);sw_array=zeros(3,7,6); %初始化关键状态表- 3 行(arms)、7 列(times)和6 个向量(sectors)。 % ------A 臂-------- ----------B 臂-------- ----------C 臂-------- -sw_array(:1)=[0 1 1 1 1 1 0;0 0 1 1 1 0 0; 0 0 0 1 0 0 0]; %setor 1sw_array(:2)=[0 0 1 1 1 0 0;0 1 1 1 1 1 0; 0 0 0 1 0 0 0]; %setor 2sw_array(:3)=[0 0 0 1 0 0 0 ;0 1 1 1 1 1 0; 0 0 1 1 1 0 0]; %setor 3sw_array(:4)=[0 0 0 1 0 0 0;0 0 1 1 1 0 0; 0 1 1 1 1 1 0]; %setor 4sw_array(:5)=[0 0 1 1 1 0 0;0 0 0 1 0 0 0; 0 1 1 1 1 1 0]; %setor 5sw_array(: 6)=[0 1 1 1 1 1 0;0 0 0 1 0 0 0; 0 0 1 1 1 0 0]; %setor 6 if t1e-6Sec=1;结束; S1=sw_array(1,timet,秒);S2=~S1;S3=sw_array(2,timet,秒);S4=~S3;S5=sw_array(3,timet,秒);S6=~S5;% SVPWMpwm=[S1 S2 S3 S4 S5 S6] ;end开关量输出到IGBT,然后三相逆变电路产生PWM波