模拟一个连续时间的弹跳球
此示例演示如何配置Stateflow®图表,以模拟连续时间的弹跳球。球在空中连续运动,直到触地为止,这时就发生了间断。结果,球突然改变了方向和速度。有关更多信息,请参见状态流中的连续时间建模.
该模型sf_bounce
包含连续时间更新的图表。局部变量用位置和速度来描述自由落体球的动力学。在模拟过程中,模型使用过零检测来确定球何时撞击地面。
弹跳球的动力学
你可以指定一个球如何在重力作用下自由下落p和速度v用这个一阶微分方程组:
当p<= 0时,球触地反弹。你可以通过更新球的位置和速度来建模反弹:
将位置重置为p= 0。
将速度重置为球落地前的负值。
为了解释能量损失,将新速度乘以分布系数(-0.8)。
配置连续时间模拟图表
在模型中,BouncingBall图实现了模态逻辑来模拟自由落体的连续动力学和与弹跳相关的离散变化。在图表属性对话框中,这些设置使BouncingBall图表能够连续时间模拟:
更新方法是
连续
因此,该图表采用连续时间模拟来模拟弹跳球的动力学。启用过零检测选择,以便Simulink®求解器可以金宝app准确地确定球何时撞击地面。否则,Simulink模型就不金宝app能准确地模拟物理现象,球就会落到地下。
定义连续时间变量
BouncingBall图表有两个连续时间变量:p
对于位置和v
的速度。对于每个变量:
范围是
当地的
.类型是
双
.更新方法是
连续
.
为了向Simulink模型公开图表的连续状态,BouncingBall图表有两个输出变量:金宝appp_out
而且v_out
.对于每个变量:
范围是
输出
.类型是
双
.更新方法是
离散
.
下图隐含地定义了连续时间变量的时间导数:
p_dot
是位置的导数吗p
.v_dot
作为速度的导数v
.
在Model Explorer中,您可以在图表中查看连续时间的局部变量和相应的输出。隐式导数变量不会出现在模型资源管理器中或符号窗格。
自由落体连续动力学模型
BouncingBall图表由一个名为下降
这在数值上解决了自由落体的微分方程。进入状态的默认转换设置初始位置为10m,初始速度为15m /s。的在
状态下的动作:
定义位置和速度的导数
将球的位置和速度的值赋给输出变量
p_out
而且v_out
建立弹跳的离散效应模型
的下降
状态有一个自循环转换,将弹跳的不连续建模为当球突然反转方向时的瞬时模式变化。转换上的条件调用边缘检测操作符下降
.该操作符通过检测位置何时越过零阈值并变为负值来确定球何时撞击地面。如果条件有效,当球撞击地面时,条件动作将重置位置和速度。
验证图表语义
中定义的设计需求满足BouncingBall图表连续时间模拟指南.特别是,图表:
初始化默认转换上的局部变量p和v
给a中的导数p_dot和v_dot赋值
在
行动写入转换操作中的局部变量p和v
不包含事件、内部转换、基于事件的时序逻辑或更改检测操作符
查看仿真结果
运行模型后,Scope块将绘制出球的位置和速度。位置图显示了预期的反弹模式。