1.前言
SVPWM(Space Vector Pulse Width Modulation,空間矢量脈寬調(diào)制)是近年發(fā)展的一種比較新穎的電機(jī)控制方法,是 由三相功率逆變器的六個(gè)功率開關(guān)元件組成的特定開關(guān)模式以產(chǎn)生的脈寬調(diào)制波 ,能夠使輸出電流波形盡可能接近于理想的正弦波形。SVPWM與傳統(tǒng)的正弦PWM不同,它是從三相輸出電壓的整體效果出發(fā),著眼于如何使電機(jī)獲得理想圓形磁鏈軌跡。
為什么要使用SVPWM策略?為電機(jī)控制所需,SVPWM可以依據(jù)電機(jī)磁鏈和電壓的關(guān)系,從而實(shí)現(xiàn)對(duì)電動(dòng)機(jī)恒磁通變壓變頻調(diào)速,并且SVPWM比SPWM的直流母線的電壓利用率高15%,更易于實(shí)現(xiàn)數(shù)字化。
2.SVPWM的輸入輸出分別是什么?
輸入:
1.旋轉(zhuǎn)坐標(biāo)系dq軸電壓、自然坐標(biāo)系下的ABC三相電壓等等載波信號(hào)
2.1輸入從何而來
控制器輸出的控制電壓、參考電壓等帶有所需信息的電壓信號(hào)
2.2輸出用去做什么
作為永磁同步電機(jī)等被控對(duì)象的輸入:輸出的三相PWM信號(hào)可分別加在空間上互差120°的三相靜止坐標(biāo)系上,可等效為幅度、頻率、相位的三相交流電,輸入信號(hào)含有的信息在這個(gè)三相交流電的幅度、頻率、相位中體現(xiàn)。由此可作為PMSM等被控對(duì)象的輸入,因?yàn)镻MSM的轉(zhuǎn)速取決于該三相電壓的頻率。
3.理論基礎(chǔ)和結(jié)構(gòu)組成
平均值等效原理:在一個(gè)開關(guān)周期內(nèi)通過對(duì)基本電壓矢量加以組合,使其平均值與給定電壓矢量相等。通過改變計(jì)算機(jī)(數(shù)字控制器)輸出PWM波的占空比等效所需要的三相電壓。
3.1電路:三相逆變器
三相逆變器的電路圖和工作流程圖解如圖所示,
逆變器的開關(guān)電路有如下八種開合狀態(tài)
八種開合狀態(tài)的相電壓和線電壓的對(duì)應(yīng)關(guān)系為:
3.2開關(guān)邏輯:如何為三相電路的開關(guān)賦值?
以減少開關(guān)次數(shù)為目標(biāo),將基本矢量作用順序的分配原則選定為:在每次開關(guān)狀態(tài)轉(zhuǎn)換時(shí),只改變其中一相的開關(guān)狀態(tài)。并且對(duì)零矢量在時(shí)間上進(jìn)行了平均分配,以使產(chǎn)生的PWM 對(duì)稱,從而有效地降低PWM的諧波分量。開關(guān)順序的選取有七段式序列。
下面動(dòng)態(tài)展示工作流程(圖中是以三角波為例,正弦波與之類似)
4.Simulink仿真和程序講解
總體仿真模型(代碼來源見圖中備注)
4.1三相逆變電路部分由總體模型所示
4.2開關(guān)邏輯的實(shí)現(xiàn)如下圖所示
function pwm = fcn(Fs,Mag,ang,Sec,Vdc,clk)
% Time synchronization with the simulink clock.
t=clk;
% Vdc at workspace
% General expression for the calculation of T1, T2 and 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;
% Change of sectors
sec_ant=mod(floor(Sec),2);
if(sec_ant~=1) % detection sector exchange
T1=(sqrt(3)*(Mag/Vdc))*sin(ang - ((Sec-1)*pi/3))/Fs;
T2=(sqrt(3)*(Mag/Vdc))*sin(Sec*pi/3 -ang)/Fs;
end
% Sawtooth
ref= 1/Fs * rem(t,1/Fs)/(1/Fs);
% Time intervals
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); %Initialize table of key states - > 3 rows (arms), 7 columns (times) and 6 vectors (sectors).
% ------Arm A -------- -------Arm B -------- -------Arm 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 1
sw_array(:,:,2)=[0 0 1 1 1 0 0;0 1 1 1 1 1 0; 0 0 0 1 0 0 0]; %setor 2
sw_array(:,:,3)=[0 0 0 1 0 0 0;0 1 1 1 1 1 0; 0 0 1