matlab模块里有s,求助!!S-Function做通用模块

三、简单单摆S-函数仿真实验

使用S-函数来对一个单摆系统进行仿真,主要演示以下三个方面:

(1)利用S-函数对单摆系统进行建模

(2)利用simulink进行仿真,研究单摆的位移

(3)利用S-函数动画来演示单摆的运动

下载 (7.29 KB)

2009-3-31 19:28

(1)单摆的动力学方程为

下载 (1.23 KB)

2009-3-31 19:28

其中M是摆球质量,u是外力,Kd阻尼系数,Fg重力

(2)将系统动力学方程转换为状态方程

下载 (2.91 KB)

2009-3-31 19:28

(3)根据状态方程,在模板的基础上编写S-函数

我们根据状态方程并结合题目分析下

输入:u,故1个

输入:θ,故1个

连续状态变量:x1=θ和x2=θ',故2个

离散状态变量:由于是连续系统,故0个

直通前向馈路:由于输出θ与输入u没有任何联系,故没有直接馈通,所有为0

采样时间数量:在这个系统中我们统一成一个就可以了,故1个

状态变量初值:也就是x1=θ和x2=θ'的初值,这里我们取初始角度60°,速度为0,故x0=[x1 x2]=[60 0]

采样时间:由于是连续系统,故ts=[0 0]function [sys,x0,str,ts] = Single_Pendulum_Demo(t,x,u,flag,M,xx0,Kd,g)

%M=varargin{1};%摆球质量

%xx0=varargin{2};%状态变量初值

%Kd=varargin{3};%阻尼系数

%g=varargin{4};%重力加速度

switch flag,

case 0,

[sys,x0,str,ts]=mdlInitializeSizes(xx0);

case 1,

sys=mdlDerivatives(t,x,u,Kd,g,M);

case 2,

sys=mdlUpdate(t,x,u);

case 3,

sys=mdlOutputs(t,x,u);

case 4,

sys=mdlGetTimeOfNextVarHit(t,x,u);

case 9,

sys=mdlTerminate(t,x,u);

otherwise

DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));

end

function [sys,x0,str,ts]=mdlInitializeSizes(xx0)

sizes = simsizes;

sizes.NumContStates  = 2;%2个连续状态

sizes.NumDiscStates  = 0;%0个离散状态

sizes.NumOutputs     = 1;%1个输出变量

sizes.NumInputs      = 1;%1个输入变量

sizes.DirFeedthrough = 0;%没有直接馈通,简单的说就是输出y中有没有输入参数u

sizes.NumSampleTimes = 1;%采用时间个数

sys = simsizes(sizes);

x0  = s0;%状态变量初值

str = [];%Matlab自已预留的,全部保留空着,不要动

ts  = [0 0];%[0 0]适用于连续系统

function sys=mdlDerivatives(t,x,u,Kd,g,M)

%状态变量一阶导数表达式

sys = [x(2);-Kd*x(2)-M*g*sin(x(1))+u];

function sys=mdlUpdate(t,x,u)

%由于是连续系统,故不需填写

sys = [];

function sys=mdlOutputs(t,x,u)

%输入变量是摆角θ,即x(1)

sys = x(1);

function sys=mdlGetTimeOfNextVarHit(t,x,u)

%由于是连续系统这个用不到,可以不理它

sampleTime = 1;

sys = t + sampleTime;

function sys=mdlTerminate(t,x,u)

%模块解决没有什么操作,也不需要理它

sys = [];

复制代码(4)使用simulink建模

在sink中拖出scop,scouce中拖出sine wave,user-defined function中拖出S-function,并如下如连接三个模块

下载 (34.54 KB)

2009-3-31 20:11

双击sine wave输入设置属性

下载 (38.53 KB)

2009-3-31 20:11

双击S-Function,如下设置参数

下载 (68.64 KB)

2009-3-31 20:11

运行仿真,得到以下结果

下载 (29.69 KB)

2009-3-31 20:11

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值