svpwm的matlab模型,svpwm的MATLAB仿真实现(转载)
取Tz為1/(1e+4)這就是說開個頻率是10kHz,Vdc為500,這兩個參數要根據實際情況自己設置,這里是我任意設的,repeating
sequence的設置如圖3所示,這樣設的目的是想產生一個周期為Tz,峰值為Tz/2的等腰直角三角形調制波,接下來設置兩個比較模塊和取反模塊,比較模塊是大于等于關系,各模塊的其他參數,我沒說的就當默認設置,細心的讀者會在圖4中的第一幅圖中看到仿真時間設為Ts,這是我設的系統仿真步長,這里就用默認值-1,此外比較模塊和取反模塊的信號屬性signal
atrributes均應設為Boolean格式。
圖3
步驟3:設置s-builder模塊,這個設置也很簡單,但是看起來有點多,圖2中的svpwm模塊就是用simulink中的s-function
builder建立的,只是名字改成svpwm罷了,有圖2可以看出svpwm產生的三個時間比較值與repeating
sequence產生的等腰三角波進行比較,從而產生想要的六路PWM波,svpwm的核心算法是使用C語言編寫的,下面詳細介紹該模塊的設置,s-fanction
builder的界面如下圖:
圖5
在s-function name
中輸入svpwm,如果你把我下面說的設置完后,再按一下s-function
name旁邊的build,接著就會在matlab的顯示路徑文件夾中(如“我的文檔/matlab”)產生幾個格式各異的以svpwm開頭的文件,如svpwm.c,svpwm.tlc等,不過這是后話,先說說設置,在initialization中的各參數均設為0,sample
mode 設為inherited,如圖5所示,這些都是默認值,也是說可以不用管它就可以了,在data
properties中設:
圖6
port name 為u
(默認是u0),行數row為4(因為有四個輸入參數),其他選用默認值,如圖6所示,設output ports的輸出port
name為y(原來為y0),行數rows為3(因為有三個輸出),其他參數默認,剩下的兩個parameters和data type
attributes均采用默認值;在libraries中全部使用默認值;接下來要改的就是outputs中的內容,也是實現SVPWM的核心算法,必須注意要必須勾選inputs
are needed in the output function(direct
feedthrough),這句話的意思是:輸出結果直接用到了輸入數據,比如y=u+1,將下面給出的C語言程序復制到空白處,如圖7所示:
圖7
int A,B,C,N;
double X,Y,Z,Tx,Ty,T0,Tl,Tm,Th;
if (u[1]>0) A = 1;
else A=0;
if ((1.732051*u[0]-u[1])>0) B = 1;
else B=0;
if
((-1.732051*u[0]-u[1])>0) C = 1;
else C=0;
N=A+2*B+4*C;
X=1.732051*u[1]*u[2]/u[3];
Y=(0.8660*u[1]+1.5*u[0])*u[2]/u[3];
Z=(-0.8660*u[1]+1.5*u[0])*u[2]/u[3];
switch (N)
{
case 1: Tx=
Y;Ty=-Z;break;
case 2:
Tx=-X;Ty= Y;break;
case 3: Tx=
Z;Ty= X;break;
case 4:
Tx=-Z;Ty=-X;break;
case 5: Tx=
X;Ty=-Y;break;
default: Tx=-Y;Ty= Z;
}
if ((Tx+Ty)>u[2])
{
Tx=Tx*u[2]/(Tx+Ty);
Ty=Ty*u[2]/(Tx+Ty);
}
T0=(u[2]-(Tx+Ty))/4;
Tl=(u[2]+Tx-Ty)/4;
Tm=(u[2]-Tx+Ty)/4;
Th=(u[2]+Tx+Ty)/4;
switch (N)
{
case 1
:y[0]=Tm;y[1]=T0;y[2]=Th;break;
case 2
:y[0]=T0;y[1]=Th;y[2]=Tm;break;
case 3
:y[0]=T0;y[1]=Tl;y[2]=Th;break;
case 4
:y[0]=Th;y[1]=Tm;y[2]=T0;break;
case 5
:y[0]=Th;y[1]=T0;y[2]=Tl;break;
default
:y[0]=Tl;y[1]=Th;y[2]=T0;
}
接下來的兩個continuous derivatives和discrete
update都不用改,使用默認值,這兩個只有在有導數時才會用到,最后一個在build info中勾選show comlile
steps(在build時會顯示編譯過程)、create a debugged mex-file和generate wrapper
tlc(這個我也不知道干什么用的)。這下所有的細節設置都結束了,
步驟4:設置仿真參數,回到mdl主界面,選擇菜單欄中的simulation/configurate
parameters,里面的仿真時間可以根據實際情況自己定,在sover
options中,type建議選fixed-step,fixed step
size應本人設為5e-6,這個參數是仿真時最小的步長,這個參數必須比開關周期Tz小,否則無法仿真,其他參數都不用管它,要想知道這些參數是什么意思,就多看看matlab
中的help,里面都有詳細說明。
步驟5是安裝lcc,在matlab的command window中輸入mex
-setup,然后按照提示將LCC安裝上,安裝完畢的提示是done。。。,接下來你就可以做跟你有用有關的事了,把SVPWM當做一個模塊了使用。
步驟6:打開s-function
builder,單擊一下里面的build,接著您就可以看到編譯過程,如果看到success,那就說明您已經成功了。編譯完后關閉s-function
builder,接下來做你的系統仿真吧,只要您的svpwm模塊和編譯出來的svpwm.c放在一個文件夾中,以后仿真就不用再點build了。
很簡單吧,其實SVPWM的仿真沒什么難的!需要提醒同志們的是,在仿真之前必須build一下s-function
builder,不然無法運行模塊,采用s-builder的原因是建成的模塊很簡潔,而且運行速度要比其他方法快的多,接下來同志們該去自己試一下了!
總結
以上是生活随笔為你收集整理的svpwm的matlab模型,svpwm的MATLAB仿真实现(转载)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Microsoft Office 201
- 下一篇: 选项卡,下拉菜单操做时的页面数据更新,h