?? svpwm222.m
字號:
%==========================================================================
function [sys,x0,str,ts] =svpwm222(t,x,u,flag)
switch flag,
case 0,
[sys,x0,str,ts]=mdlInitializeSizes;
case 2,
sys=mdlUpdate(t,x,u);
case 3,
sys=mdlOutputs(t,x,u);
case 4,
sys=mdlGetTimeOfNextVarHit(t,x,u);
case {1,9}
sys=[];
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
%=============================================================================
% mdlInitializeSizes
% Return the sizes, initial conditions, and sample times for the S-function.
%=============================================================================
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 3;
sizes.NumOutputs = 3;
sizes.NumInputs =3;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0 = [0;1;0];
str = [];
ts = [-2 0];
%=============================================================================
%更新狀態變量
% 其中:u(1)為合成空間電壓矢量模值
% u(2)為檢測到的直流母線電壓
% u(3)為合成矢量的同步旋轉角,為弧度值。
% x(1)為由u(1)和u(2)所合成的新的矢量(相當于和占空比有關)
% x(2)指6個扇區:1,2,3,4,5,6
% x(3)指合成的空間電壓矢量在一個扇區的相對角度(θ-k*60),為角度值。運算時要變換為弧度值(θ-k*60)*pi/180
function sys=mdlUpdate(t,x,u)
x(1)=(3*u(1))/(2*u(2));
if x(1)>=sqrt(3/4)
x(1)=sqrt(3/4);
end
if x(1)<=0
x(1)=0;
end
x(2)=floor(u(3)*180/(60*pi))+1;
x(3)=u(3)*180/pi-(x(2)-1)*60
sys=x;
%=============================================================================
% 計算輸出時間
function sys=mdlOutputs(t,x,u)
T=0.0001;% SVPWM波的開關周期
T1=T*x(1)*cos(x(3)*pi/180)-1/sqrt(3)*T*x(1)*sin(x(3)*pi/180);
T2=2/sqrt(3)*T*x(1)*sin(x(3)*pi/180);
T0=T-T1-T2;
switch (x(2))
case [1]
state=[T1+T2+T0/2,T2+T0/2,T0/2];
case [2]
state=[T1+T0/2,T1+T2+T0/2,T0/2];
case [3]
state=[T0/2,T1+T2+T0/2,T2+T0/2];
case [4]
state=[T0/2,T1+T0/2,T1+T2+T0/2];
case [5]
state=[T2+T0/2,T0/2,T1+T2+T0/2];
case [6]
state=[T1+T2+T0/2,T0/2,T1+T0/2];
end
sys=state;
%=============================================================================
%計算下一采樣時間點
function sys=mdlGetTimeOfNextVarHit(t,x,u)
sampletime=0.0001;
sys=t+sampletime;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -