单摆分析
此示例展示如何分析单摆的动态响应。您可以学习如何测量旋转角度,添加阻尼以及为转动关节施加扭矩。有关多体动态特性仿真的详细信息,请参阅多体动态特性。您可以使用 MATLAB® 命令,结合运动输出,为关节创建一组相位图。

首先,按照简单摆建模中所述创建一个简单的摆模型。通过向该模型添加力和扭矩,您可以逐步将摆从无阻尼自由摆转变为有阻尼受驱摆。所施加的力和扭矩包括:
重力 (Fg) - 作用于每个实体的全局力,其大小与实体质量成正比,可通过加速度向量 g 来指定。您可以使用 Mechanism Configuration 模块来指定此向量。
关节阻尼 (Fb) - 摆与关节固定装置之间的内部扭矩,可以使用线性阻尼系数对其进行参数化。此参数使用将摆连接到关节固定装置的 Revolute Joint 模块来指定。
作动扭矩 (FA) - 摆与关节固定装置之间的驱动扭矩,使用将摆连接到关节固定装置的 Revolute Joint 模块直接将其指定为 Simscape™ 物理信号。
摆运动的输出感测信息
首先,更新 SimplePendulum 模型以输出位置和速度数据,然后将这些数据输出到 MATLAB 基础工作区。
打开您在教程简单摆建模中创建的
SimplePendulum模型。在 Revolute Joint 模块对话框的 Z 转动基元(Rz) > 感测部分中,选择以下参数:
位置
速度
模块会公开两个额外的物理信号端口 q 和 w,分别输出摆相对于世界坐标系的角位置和角速度。
向模型中添加以下模块:这些模块用于将关节位置和速度输出到 MATLAB 基础工作区。
库 模块 数量 Simscape > Utilities PS-Simulink Converter 2 Simulink > Sinks To Workspace 2 将 To Workspace 模块对话框中的变量名称参数更改为
q和w。这些变量使得识别 To Workspace 模块在仿真期间输出的关节变量变得很容易,位置通过 Revolute Joint 模块端口 q 输出,而速度通过 Revolute Joint 模块端口 w 输出。要从变量名中删除关键字out,请在 Simulink® 工具条的建模选项卡上,点击模型设置,然后选择数据导入/导出并清除单一仿真输出参数。按下图所示连接模块。确保变量名称为
q的 To Workspace 模块通过 PS-Simulink Converter 模块连接到 Revolute Joint 模块的端口 q,并且变量名称为w的 To Workspace 模块连接到 Revolute Joint 模块的端口 w。
将两个 PS-Simulink Converter 模块的向量格式参数值都更改为一维数组。将连接到端口 q 和端口 w 的 PS-Simulink Converter 模块的输出信号单位参数分别设置为 deg 和 deg/s。
用其他名称(例如
SimplePendulumAnalysis)保存模型。
分析无阻尼摆
运行仿真。多体资源管理器将会打开,其中显示简单摆模型的三维动画。
在 MATLAB 命令提示符下输入以下代码,绘制关节位置和速度对时间的图:
生成的图如下所示。figure hold on plot(q) plot(w)
在 MATLAB 命令提示符下输入以下代码,绘制关节角速度对角位置的图。
结果是关节的相位图,对应于相对于水平面的起始位置为零的情况。figure plot(q.data, w.data) xlabel('θ (deg)') ylabel('ω (deg/s)')

尝试使用不同的起始角度对该模型进行仿真。在 Revolute Joint 模块对话框的 Z 转动基元(Rz) > 状态目标部分中,在指定位置目标下指定值参数。下图显示了起始角度为
-80、-40、0、40、80和deg时的复合相位图。
分析有阻尼摆
在 Revolute Joint 模块对话框中,将 Z 转动基元(Rz) > 内部力学 > 阻尼系数设置为
8e-5(N*m)/(deg/s)。阻尼系数会导致运动过程中能量耗散,从而导致摆的振荡振幅逐渐衰减。确保 Z 转动基元(Rz) > 状态目标 > 指定位置目标 > 值设置为
0deg。运行仿真。
绘制关节位置和速度对时间的图。为此,请在 MATLAB 命令提示符下输入以下代码。
生成的图如下所示。请注意,由于阻尼作用,摆的振荡会随时间衰减。当阻尼值较大时,摆会变为过阻尼状态,振荡消失。figure hold on plot(q) plot(w)
绘制关节相位图。为此,请在 MATLAB 命令提示符下输入以下代码。
figure plot(q.data, w.data) xlabel('θ (deg)') ylabel('ω (deg/s)')

尝试使用不同的起始角度对该模型进行仿真。在 Revolute Joint 模块对话框的 Z 转动基元(Rz) > 状态目标部分中,在指定位置目标下指定值参数。下图显示了起始角度为
-80、-40、0、40、80和deg时的复合相位图。
分析有阻尼受驱摆
在 Revolute Joint 模块对话框的作动部分中,将扭矩参数设置为由输入提供。模块会公开一个物理信号输入端口 t,您可以使用该端口来指定关节作动扭矩。
向模型中添加以下模块:
库 模块 Simscape > Utilities Simulink-PS Converter Simulink > Sources Sine Wave Sine Wave 模块提供周期性扭矩输入作为 Simulink 信号。Simulink-PS Converter 模块将 Simulink 信号转换为与 Simscape Multibody™ 模块兼容的物理信号。
按下图所示连接模块。

在 Sine Wave 模块对话框中,将振幅参数设置为
0.06。在 Simulink-PS Converter 模块中,将输入信号单位参数设置为N*m。这样将向关节施加一个在-0.06N*m和0.06N*m之间振荡的作动扭矩。在 Revolute Joint 模块对话框的 Z 转动基元(Rz) > 状态目标部分中,将指定位置目标下的值参数设置为
0deg。运行仿真。
绘制关节位置和速度对时间的图。为此,请在 MATLAB 命令提示符下输入以下代码。
figure hold on plot(q) plot(w)
绘制关节相位图。为此,请在 MATLAB 命令提示符下输入以下代码:
figure plot(q.data, w.data) xlabel('θ (deg)') ylabel('ω (deg/s)')

另请参阅
PS-Simulink Converter | Revolute Joint | To Workspace