frogfish 发表于 2005-11-9 09:39

[分享]Simulink S函数在现代矢量控制系统仿真中的应用

<P align=center><FONT color=#ff0000>转自:中国电源网</FONT></P>
<P align=center><FONT color=#ff0000>Simulink S函数在现代矢量控制系统仿真中的应用 </FONT></P>
<P align=center>魏子良张庆范 </P>
<P align=center>(山东大学控制科学与工程学院济南 250061) </P>
<P>摘要:简述了Matlab S函数的核心内容,针对现代矢量控制系统中交流异步电动机高阶,非线性,强耦合的特性,推导出其状态方程形式的数学模型,并用S函数实现。所建模型可方便的应用于现代矢量控制系统的仿真中。 </P>
<P>关键词:matlabS函数模型仿真现代矢量控制系统 </P>
<P align=center>APPLICATION OF SIMULINK S-FUNCTION IN VECTOR CONTROL SYSTEM </P>
<P align=center>SIMULATION </P>
<P align=center>Wei ZiliangZhang qingfan </P>
<P align=center>(school of control science and engineering, Shandong University, Jinan 250061 ,china) </P>
<P>Abstract: The main content of Matlab/Simulink is briefly given. A simulation model of induction motor fixed to rotor flux is established in the simulation environment of the Matlab Simulation software. The model can be conveniently used in vector control system .The simulation results confirm the validity of the method and the model. </P>
<P>Key words:MatlabS-functionmodelsimulationvector control system </P>
<P>1引言 </P>
<P>1971年,由F Blaschke提出的矢量控制理论将交流传动的发展向前推进了一大步,使交流电机控制理论获得第一次质的飞跃。其基本原理为:以转子磁链这一旋转空间矢量为参考坐标,将定子电流解耦分解为相互正交的两个分量,一个与磁链同方向,表示定子电流励磁分量,另一个与磁链方向正交,表示定子电流转距分量,对其分别进行独立控制,获得像直流电机一样良好的性能。 </P>
<P>Matlab/simulink环境是一种优秀的系统仿真工具软件,使用它可以大大提高系统仿真和CAD的效率和可*性。众所周知,交流传动矢量控制系统中的异步电机本身就是一个高阶、非线性、强耦合的多变量系统。本文用S-function函数建立一个基于转子磁场定向矢量控制系统中的交流异步电动机仿真模型,介绍该函数在交流矢量控制系统计算机仿真中的应用。 </P>
<P>2Matlab S函数简介 </P>
<P>Matlab语言是Mathworks公司推出的当今国际上最为流行的软件之一。它自问世起,就以数值计算称雄,它的图形可视能力在所有数学软件中也是首屈一指的。Matlab提供了众多的工具箱,动态系统仿真工具Simulink是一个比较特别的工具箱,它是一个进行动态系统建模、仿真和综合分析的集成软件包。它的出现可以使仿真工作以结构图的形式加以进行,且采用分层结构。从建模角度讲,这既适合于Top-down的设计流程,又适合于Bottum-up逆程设计。从仿真角度讲,Simulink模型不仅能让用户知道具体环节的动态细节,而且能够让用户清晰地了解各种器件、各子系统、各系统间的信息交换,掌握各部分之间的交互影响,同时可以借助模拟示波器将仿真动态结果加以显示,因而仿真结果过程十分直观。 </P>
<P>更为可贵的是Matlab/simulink的开放性,用户可以根据自己的需要开发自己的模型,并通过封装扩充现有的模型库。要建立自己的模型,主要有如下三种方法: </P>
<P>(1)利用现有模型组合成新模型。充分利用Simulink现有的模型库,只需简单的鼠标拖拉操作既可完成构造简单的模型。 </P>
<P>(2) 使用Matlab/Simulink模型调用MATLAB函数构造y=f(x)型的函数。 </P>
<P>(3)通过调用S-function(S函数)构造。 </P>
<P>S函数是对一个动态系统的计算机程序语言描述。它是simulink运作的核心,在构造多输入、多输出、非线性、强耦合的复杂多变量系统时具有表述方式接近数学形式,编程简洁,计算速度快的优点。它可以使用Matlab或者C语言写成。用C语言写成的S函数需要用mex工具编译成MEX文件,在需要的时候可以动态的链接进Matlab。 </P>
<P>S函数的格式如下: </P>
<P align=center>Sys-func=modelname(t,x,u,flag)</P>
<P>其中modelname - 所定义的函数名; </P>
<P>t,x,u - 时间、状态变量与输入矢量; </P>
<P>flag - 返回变量标志。flag=0,返回(更新)参数和初始条件的维数;flag=1,返回状态变量的导数dx/dt;flag=2,返回离散状态x(n+1);flag=3,返回输出向量y。 </P>
<P align=left>3异步电动机的数学模型 </P>
<P>笼型交流异步电动机在两相静止坐标系α、β上的数学方程为(转子短路ur=0) </P>
<P align=center><IMG src="http://www.china-power.net/psta/04-luwen/img-dqcd/122.ht80.gif">      </P>
<P align=center>                                                                (1) </P>
<P>式中      p= <IMG src="http://www.china-power.net/psta/04-luwen/img-dqcd/122.ht81.gif">       I= <IMG src="http://www.china-power.net/psta/04-luwen/img-dqcd/122.ht82.gif">      J= <IMG src="http://www.china-power.net/psta/04-luwen/img-dqcd/122.ht83.gif">      <IMG src="http://www.china-power.net/psta/04-luwen/img-dqcd/122.ht84.gif"></P>
<P>选取定子α-β电流、转子α-β电流为状态变量,以定子α-β电压作输入,由(1)式列出电动机的状态方程</P>
<P><IMG src="http://www.china-power.net/psta/04-luwen/img-dqcd/122.ht85.gif"> </P>
<P>(2) </P>
<P>定子磁链                     <IMG src="http://www.china-power.net/psta/04-luwen/img-dqcd/122.ht86.gif">                                    (3) </P>
<P>转子磁链                     <IMG src="http://www.china-power.net/psta/04-luwen/img-dqcd/122.ht87.gif">                                 (4) </P>
<P>电磁转距                   <IMG src="http://www.china-power.net/psta/04-luwen/img-dqcd/122.ht88.gif">                     (5) </P>
<P>运动方程                      <IMG src="http://www.china-power.net/psta/04-luwen/img-dqcd/122.ht89.gif">                           (6)   </P>
<P>由式(6)可得                <IMG src="http://www.china-power.net/psta/04-luwen/img-dqcd/122.ht90.gif">                           (7) </P>
<P>由式(5)、式(7)得         <IMG src="http://www.china-power.net/psta/04-luwen/img-dqcd/122.ht91.gif">       (8) </P>
<P>其中<IMG src="http://www.china-power.net/psta/04-luwen/img-dqcd/122.ht92.gif">    <IMG src="http://www.china-power.net/psta/04-luwen/img-dqcd/122.ht93.gif">   <IMG src="http://www.china-power.net/psta/04-luwen/img-dqcd/122.ht94.gif">   <IMG src="http://www.china-power.net/psta/04-luwen/img-dqcd/122.ht95.gif">   <IMG src="http://www.china-power.net/psta/04-luwen/img-dqcd/122.ht96.gif"></P>
<P>Uα1,Uβ1,Uα2,Uβ2,Iα1,Iβ1,Iα2,Iβ2分别为两相静止坐标系下定子、转子电压和电流;ψαs,ψβs,ψαr,ψβr分别为电动机的定子、转子磁链;Ls, Lr, Lm分别为电动机的定子、转子自感和定子与转子的互感;Rs, Rr分别为电动机的定子、转子电阻; Te,TL分别为电动机电磁转距、负载阻转距;ω为电动机的转子转速;np为极对数;J为电动机的转动惯量;D为与转速成正比的阻转距阻尼系数。 </P>
<P>由式(2)、和式(8)可以得到适合于现代矢量控制系统的电动机状态方程 </P>
<P align=center>                  <IMG src="http://www.china-power.net/psta/04-luwen/img-dqcd/122.ht97.gif">                                     (9) </P>
<P>其中状态变量 <IMG src="http://www.china-power.net/psta/04-luwen/img-dqcd/122.ht98.gif"> <IMG src="http://www.china-power.net/psta/04-luwen/img-dqcd/122.ht99.gif">;输入 <IMG src="http://www.china-power.net/psta/04-luwen/img-dqcd/122.ht1.gif">; </P>
<P>输出 <IMG src="http://www.china-power.net/psta/04-luwen/img-dqcd/122.ht2.gif">。 </P>
<P align=left>4S 函数仿真模型及程序 </P>
<P>在simulink仿真环境里用S函数描述的模型如图1所示。</P>
<TABLE cellSpacing=0 cellPadding=0>

<TR>
<TD width=56 height=0></TD></TR>
<TR>
<TD></TD>
<TD><IMG src="http://www.china-power.net/psta/04-luwen/img-dqcd/122.ht3.jpg"></TD></TR></TABLE><BR clear=all>模型的输入是三相定子电压,经坐标变换换为静止两相定子电压,另外输入负载转距。输出的两相定子电流经坐标变换再转换为三相电流。在该模型中还可用示波器观察到定子磁链、转速和电磁转距。 <BR>
<P align=center>图1S函数表示的基于转子磁场定向的电动机仿真模型 </P>
<P>图1中从三相到两相的静止坐标变换(3s/2s)模型如图2所示,从两相到三相的坐标变换(2s/3s)模型如图3所示。</P>
<P>       <IMG src="http://www.china-power.net/psta/04-luwen/img-dqcd/122.ht4.jpg">               <IMG src="http://www.china-power.net/psta/04-luwen/img-dqcd/122.ht5.jpg"></P>
<P>图23/2坐标变换仿真模型                  图32/3坐标变换仿真模型             </P>
<P>下面给出基于转子磁场定向的矢量控制系统中的交流电动机的S函数模型的程序(M文件)。该程序可直接或稍加修改就可应用于矢量控制系统的建模和仿真中。 </P>
<P>function=model_sfunc(t,x,u,flag) </P>
<P>% MODEL_SFUNC A M-file S-function for defining a system of inductor motor </P>
<P>model_parameter;                      % model_paramerer.m </P>
<P>A=K*[-Rs*Lr,w*Lm^2,Rr*Lm,w*Lm*Lr </P>
<P>-w*Lm^2,-Rs*Lr,-w*Lm*Lr,Rr*Lm </P>
<P>      Rs*Lm,-w*Lm*Ls,-Rr*Ls,-w*Lr*Ls </P>
<P>w*Lm*Ls,Rs*Lm,w*Lr*Ls,-Rr*Ls]; </P>
<P>B=K*; </P>
<P>C=; </P>
<P>D=zeros(2,2); </P>
<P>% </P>
<P>% dispatch the flag </P>
<P>% </P>
<P>switch flag, </P>
<P>   case 0 </P>
<P>          =mdlInitializeSizes; % Initialization </P>
<P>   case 1 </P>
<P>          sys=mdlDerivatives(t,x,u);            % Calculate derivatives </P>
<P>   case 3 </P>
<P>          sys=mdlOutputs(t,x,u);               % Calculate outputs </P>
<P>   case{2,4,9} </P>
<P>          sys=[ ];                                          % Unused flags </P>
<P>   otherwise </P>
<P>          error(['Unhandled flag=',num2str(flag)]);% Error handling </P>
<P>end                                                          % end model_sfunc </P>
<P>% </P>
<P>% mdlInitializeSizes </P>
<P>% Return the sizes, initial conditions, andsample times for the S-function. </P>
<P>% </P>
<P>function =mdlInitializeSizes </P>
<P>sizes=simsizes; </P>
<P>sizes.NumContStates=5; </P>
<P>Sizes.NumDiscStates=0; </P>
<P>Sizes.NumOutputs=6; </P>
<P>Sizes.NumInputs=3; </P>
<P>Sizes.DirFeedthrough=1;                % Matrix D is nonempty </P>
<P>Sizes.NumSampleTimes=1; </P>
<P>sys=simsizes(sizes); </P>
<P>x0=[ 1.800,6.530,-2.350,-0.970,600 ]; % initialize the initial conditions </P>
<P>str=[] ;                                  % str is an empty matrix. </P>
<P>Ts=                                 % Initialize the array of sample times </P>
<P>% end mdlInitializeSizes </P>
<P>% </P>
<P>% mdlDerivatives   Return the derivatives for the continuous ststes. </P>
<P>% </P>
<P>function sys=mdlDerivatives(t,x,u) </P>
<P>Sys(1:4)=A*X(1:4)+B*u; </P>
<P>Te=np*Lm*(X(2)*X(3)-X(4)*X(1)); </P>
<P>w=X(5); </P>
<P>Sys(5)=((Te-u(3))*np-D*X(5))/J; </P>
<P>% end mdlDerivatives. </P>
<P>% </P>
<P>% mdlOutputs   Return the block outputs </P>
<P>% </P>
<P>Function sys=mdlOutputs(t,x,u)      </P>
<P>sys(1:2)=X(1:2); </P>
<P>sys(3)=Ls*X(1)+Lm*X(3); </P>
<P>sys(4)=Ls*X(2)+Lm*X(4); </P>
<P>sys(5)=X(5); </P>
<P>sys(6)=np*Lm*(X(2)*X(3)-X(4)*X(1)); </P>
<P>% end mdlOutputs. </P>
<P>交流异步电动机参数M文件: </P>
<P>%交流异步电动机参数M文件: </P>
<P> </P>
<P>Rs=0.687;                  % stator resistance(Ω) </P>
<P>Rr=0.642;                  % rotor resistance(Ω) </P>
<P>Ls=0.084;                  % stator inductance(H) </P>
<P>Lr=0.852;                  % rotor inductance(H) </P>
<P>Lm=0.813;                  % mutual inductance(h) </P>
<P>W=1400;                      % real speed(rpm) </P>
<P>Np=2;                        % pole number </P>
<P>J=0.3;                     % moment of inertia(kgmm)t </P>
<P>D=0.01;                      % torque damp coefficien </P>
<P>K=1/(Ls*Lr-Lm*Lm);         </P>
<P>% end </P>
<P>5结论 </P>
<P>用Simulink进行现代矢量控制系统仿真的关键是建立电动机模型,由于电动机的非线性,多变量,强耦合特性,描述电动机的状态方程含有非线性,不能套用Simulink的线性状态方程模型,所以用S函数来构造更能反映其特性的本质。本文所建模型为进一步研究现代矢量控制系统提供了基础模型,其使用的灵活性,操作的简单性使得它成为研究与分析现代矢量控制系统的有力工具。</P>
<P>参考文献: </P>
<P> 陈伯时.电力拖动自动控制系统.北京:机械工业出版社.2000. </P>
<P> 冯垛生、曾岳南.无速度传感器矢量控制原理与实践.北京:机械工业出版社.1997. </P>
<P> 陈桂明、张明照等 .应用MATLAB建模与仿真.北京:科学出版社.2001. </P>
<P> 张志涌等 .精通MATLAB.北京:北京航空航天大学出版社.2000. </P>
<P> SIMULINK User’s Guide ,Version4.0,The Math Works,inc.2001. </P>
<P>作者简介: </P>
<P>魏子良   男,硕士,1976年出生,从事计算机控制及仿真和电气控制方面的研究;张庆范(1949-), </P>
<P>教授,主要从事自动控制及电力电子技术应用的研究。</P>

superliu 发表于 2005-11-26 15:30

好啊图文并茂啊

kokyo52 发表于 2007-12-11 11:59

真的很有用啊,多谢多谢

gagmeng 发表于 2007-12-25 16:09

本科生

   
精华: 0
积分: 5
帖子: 19
威望: 3 点
振动币: 339 个
阅读权限: 10
注册: 2007-3-30
来自 xi'an






#3插入书签大 中 小
发表于 2007-12-11 11:59资料个人空间主页 短消息加为好友   
真的很有用啊,多谢多谢

gagmeng 发表于 2008-1-9 10:25

收下了,多谢!!!

stefsun 发表于 2008-1-9 14:08

回复 5楼 的帖子

model_parameter是如何封装的,是和model_sfunc一起封装成s函数吗,我怎么用了就报错呢

liky83672815 发表于 2008-1-10 10:53

有个地方不太明白啊,mdlDerivatives里的x(1)x(2)x(3)x(4)都是什么意思啊??

stefsun 发表于 2008-1-10 18:54

回复 楼主 的帖子

好像这个s函数建立的不对呀,
参数里边有D还有一个矩阵D怎么回事,还有他的输入也没有在输出中显示呀,为什么Sizes.DirFeedthrough=1;呢,不理解,反正我是 用这个函数做不出电机的模型,还请高手赐教

longhorntang 发表于 2008-9-11 19:51

是的,这里面有个错误,是不可能实现的,因为输入参变量在矩阵里是参数

ff630 发表于 2008-10-22 00:31

收藏经典,学习

yuanchili 发表于 2008-11-1 21:51

学习学习,谢谢!

gty3344 发表于 2008-11-1 23:49

回复 楼主 frogfish 的帖子

谢谢
正好要学习学习

fengxuemin303 发表于 2009-1-7 09:51

好东西
,....

伊米亚和 发表于 2011-5-3 20:44

回复 9 # longhorntang 的帖子

请问高手能给解释一下么?
页: [1]
查看完整版本: [分享]Simulink S函数在现代矢量控制系统仿真中的应用