在Simulink中,代表并模拟代表一个物理系统的数学模型是非常简单的。模型在Simulink模块图,以图形方式表示的。对以用户来说很多模块是可用的,simulink提供较多种格式的各种现象和模型库。应用Simulink分析动态系统的一个主要优点是使我们能够快速分析复杂的系统的可能比登天还难解析分析的响应。 Simulink能够进行数值近似解,对于我们不能或不愿动手得到数学的模型。
一般来说,数学方程代表一个给定的系统,以此为基础Simulink模型可以从物理定律推导。在这节中,我们将演示如何推导出一个数学模型,然后没实现Simulink建模。该模型将在Simulink Control中演示如何使用Simulink的设计和模拟控制系统的
列车系统
在这个例子中,我们将考虑一个玩具火车,包括发动机和车身。假设没有火车前进只在一维(沿轨道)。我们应用控制在火车上,以至于它能平缓的开始和停止,以至于他们能以存在一个很小的稳态误差的速度前进。
发动机和车身的质量分别表示为 , 。进一步,在发动机和汽车通过耦合连接,刚性为k。换句话说,连接被建模为一个弹簧常数k的弹簧。力F表示发动机的车轮与轨道之间产生的力,而表示滚动摩擦系数。
受力图和牛顿第二定律
建立物理系统的数学方程的第一步是画系统的受力图。火车系统的受力图如下:
从牛顿第二定律,我们知道物体受力的和等于质量与加速度的乘积。既滚动摩擦力然这样。发动机受到水平方向的力为弹簧弹力和车轮与轨道之间产生的滚动摩擦力。车身受到的水平方向的力,为弹簧弹力与滚动摩擦力。在垂直方向,重力平衡了地面的弹力。因此,将没有垂直方向的加速度。
我们建模弹簧产生了一个由于变形线性比例的弹力, , , 分别是发动机和车身的位移。在这假设如果弹簧没有变形的话, , 等于零。滚动摩擦力建模为与速度和弹力(等于重力)的乘积是线性比例关系。
根据受力分析图,在水平方向上应用牛顿第二定律,可得到系统的如下方程。
(1) |
(2) |
Simulink建模
系统的方程可用用图框表示,不需要进一步的操作。具体地说,我们构造两个框图(每一个质量)的一般表达式 或者 。首先,打开Simulink并新建一个窗口。拖动两Sum块(在Math Operations library)到你的模型窗口,放置的位置大约如下图。
每一个Sum块的输出代表作用在每一个质量快上的合力。每个输出信号乘以1/M得到每个质量块的加速度。拖动两个Gain块(在Math Operations library)到你的模型里,并把它们连接到sum块的输出。用“Sum_F2”和“Sum_F1”标示两个信号,以便使你的模型更清楚。
对于每一个质量块,Gain块的值应该是1/M。我们可以在MATLAB的空过空间定义变量M1和M2,只在每一个Gain块中输入变量的名字。双击Gain块并输入1/M1。相似的,在第二个Gain块中输入1/M2。
你会注意到这增益不会消失在Gain块中,而是块中显示—K-。这是因为屏幕上的块太小不能在三角中显示变量完整的名字。块可以调整大小以便实际的增益值能被显示。为调整大小,点击它选择它。小方块将会出现在角上。拖动其中一个角延展这个方块。你的模型将如下:
Gain块的输出是质量块的加速度(发动机和车身)。这方程是通过质量块的速度和位移得到的。速度是通过加速度积分得到,位置是通过速度积分,我们可以产生这些信号通过积分块。从Continuous library拖动四个积分块到你的模型。连接这些块,表示他们如下。第一个积分以mass 1的加速度(“x1_ddot”)作为输入,产生mss1的速度(“x1_dot”)。第二个积分连接速度,输出为第一个质量块的位移(x1)。相同的模式用在第二个质量块。
然后,从Sinks library拖动两个Scopes到你的模型,然后与积分的输出相连。然后把他们标示“x1”和“x2”。
现在我们已经准备添加力在质量块上。首先,我们需要调整每一个sum,以合适力的个数。因为质量块1有三个力,双击Sum把List of signs变为“|+++”。质量块2只有两个力,我们可以不变Sum块
作用在质量块1上的第一个力是输入力F。从Sources library中拖动一个Signal Generator到模型中,并Sum块中最上面的输入相连。表示信号为“F”。
作用在质量块1上的第二个力士滚动摩擦力。此力公式如下
(3) |
为了产生这个力,我们可用速度信号乘以一个适当的增益。拖动一个Gain到你的模型窗口。把“x1_dot”信号连接到新Gain块的输入。把Gain块的输出与Sum第二个输入相连。双击Gain块,在Gain中输入“mu*g*M1”。然而,滚动阻力是作用在负方向。因此,把Sum块中的list of signs变为“|+-+”。然后调整Gain块的大小,标示为“Frr1”。现在模型显示如下。
质量块1上的最后一个是弹力。公式如下:
(4) |
因此,我们需要信号 乘以增益 来产生一个力。拖动一个Subtraction块到你的模型下面。为了改变块的方向,双击块的右键选择Format>Flip block。你也可以选中块,然后按CTRl-I。现在,把“x2”信号与Subtraction的减号相连,把“x1”信号和它的正好相连。这可能引起信号线交错,但是只有在相交处有一个小方块才是相连接。
现在,我们可以用这个差值乘以弹簧的弹性系数来得到弹力。拖动一个Gain块到Subtraction块的左边。把Gain块里面的值变为“k”,然后把Subtraction的输出连接到Gain的输入。然后Gain块的输出连接质量块1的Sum的第三个输入,并标示“Fs”。由于弹簧弹力作用在质量块1上的位负方向,需要再次Sum块中的list of signs改为“|+–”。模型如下。
现在我们考虑质量块2上的力。对于第一个力,我们用弹簧产生的弹力,不过对于质量块2它是正方向。把弹簧弹力信号“Fs”与质量块2的Sum块的第一个输入相连。
质量块2上的最后一个力是滚动摩擦力。这个力类似于质量块1上的滚动摩擦力。把信号“x2_dot”乘以值为“mu*g*M2”的Gain块。然后把Gain块输出与Sum块的第二个输入相连并标示“Frr2”。然后改变Sum块的第二个输入为负,如下模型。
现在这个模型已经完成。我们需要提供合适的输入和定义输出。系统的输入是发动机产生的力F。在Simulink模型中,我们定义力F为信号发生器的输出。我们和最终控制的系统的输出是发动机的速度。再添加一个Scope在你的model里面。把“x1_dot”与Scope块相连。标示Scope为“x1_dot”,你的模型如下。
现在,这个模型已经完成并且应该被保存。
运行模型
在运行模型之前,我们需要给每一个变量付一定的值。对于火车系统,我们将给如下值。
创建一个新的m文件并输入如下命令。
在MATLAB的命令窗口中执行m文件,定义这些变量。Simulink将会识别MATLAB中的变量用高模型上。
现在,我们给发动机一个合适的输入。双击信号发生器。在Wave Form真的下拉菜单中选择square设置Frequency为“0.001”。Units为默认Hertz。在Amplitude中输入-1。
在运行仿真之前的最后一步是选择一个适当的时间。频率为0.001的方波,我们应该仿真模型1000秒。再建模窗口顶部的Simulation菜单中选择Parameters,把Stop Time变为“1000”。关闭对话框。
现在,运行仿真并打开“x1_dot”scope去检测速度的输出(点击autoscale)。输入为有两个节约的方波,一个正一个负,这意味着先向前然后向后。速度输出反应这些。
这个教程中我们通过第一准则建立起了列车系统的数学模型,并用Simulink标示这方程。另一个可用的选择是用Simcape建立动态系统的物理模型。Simscape是Simulink的一个补充,它允许用户用物理量建立模型,比如电阻,电感器等。用Simscape允许用物仿真一个物理系统,完全不用数学方程。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删