adams与simulink联合仿真

randolf2022年7月8日
大约 7 分钟

adams与simulink联合仿真

定义

Adams 的软件 UI 设计很糟糕,因此尽量不在 Adams 中做仿真;此外,如果希望做好的控制算法,还得在 Simulink 中做仿真,这就引出了本文的内容

方案

本文由 简悦 SimpReadopen in new window 转码, 原文地址 zhuanlan.zhihu.comopen in new window

前言


本例子参考自 Robert L. Norton 编写的《Adams Tutorial Kit for Mechanical Engineering Courses (Third Edition)》中的 Example 34: DC Motor,对其进行了更加仔细的整理,补足了一些不够仔细的部分,这个例子应该可以说是我见过的最为详细完整的 Adams 与 Simulink 联合仿真的例子,即使是对零基础的人也很友好。因此整理出来,以供有需要的人参考。

对于写文章分享,还是小学生一个,如果觉得对你有帮助的,请不要忘记点个赞,如果觉得写得不错,会考虑整理更多相关的图文教程。

理论部分


根据基尔霍夫电压定律:

其中: 是输入电压; 分别是电感和电阻两端的电压; 是反向电压,与电机转速成正比,即:

现在,根据电枢电流和电机转速写出电压降的表达式:

电机输出的扭矩与电枢电流成正比,

根据电机轴动力学公式得出:

整理公式得出:


根据上面的公式,可以在 Simulink 里面搭建对应的框图模型,相应参数以及对应框图如下。

3.1. 仿真参数

% initialize DC motor parameters
L   = 0.01;    % unit: H
R   = 10;      % unit: ohm
K_t = 0.6;     % unit: Nm/A
K_b = 0.002;   % unit: V*s/rad
J   = 1.22e-5; % unit: kg*m^2
c   = 0.0001;  % unit: Nm*s/rad

3.3 仿真结果

进行 5s 仿真,结果如下,以作为联合仿真的对照结果。

Adams 建模


4.1 创建新模型

打开软件,新建模型,选择 MKS 单位系统,这一步对最终结果影响不大,可根据自己使用习惯进行调整。

4.2 创建电机主轴

这里采用一个圆柱体来作为电机主轴的模型。选择创建【Cylinder】。

选择新建部件,输入对应的外形参数,长【10 cm】,半径【1 cm】,然后分别先后点击【原点】和 X【轴上的一点】,完成圆柱体的创建,然后把新创建的圆柱体命名为【Shaft】。

4.3 创建约束

选择【YZ 平面】为工作平面;工作平面的选择为后续的约束以及力矩的定位提供方便。

选择添加【Revolute joint】

按照默认设定,依次选择【圆柱体】,【地面】和【坐标原点】,完成转动副的创建。

4.4 添加旋转阻尼

选择添加一个【Rotiational Spring-Damper】

勾选【阻尼系数 CT】在框中填上对应的阻尼系数【0.0001 (Nms/rad)】,然后依次点击【圆柱体】,【地面】以及【圆柱体质心】,完成【旋转阻尼】的创建。

双击已经创建好的【旋转阻尼】,在刚度系数的下拉菜单中选择【no stiffness】

4.5 创建状态变量

首先要创建一个新的【Marker】,

选择【通过 X 轴与 Y 轴】定义参考点,依次选择【坐标原点】,【圆柱体质心 X 轴】,【圆柱体质心 Y 轴】完成参考点的创建,将其重命名为【marker_ref】,这个参考点将用于轴角位移和角速度的测量。

随后,如下图所示,创建 3 个状态变量,其中【moter_torque】为输入力矩,不需要修改内容,它的值会从 Simulink 中获取;【motor_theta】为轴的角位移,对应的公式为【AZ(Shaft.cm, marker_ref)】,【motor_omega】为轴的角速度,对应的公式为【WZ(Shaft.cm, marker_ref, marker_ref)】,这两者为输出变量。

note

注意这里的WZ函数,其有3个参数:

  • To Marker: Measure Prop to ground
  • From Marker: Subtract Prop to ground
  • About Marker: Measure Prop about Z axis in this frame

注意左下角全局坐标系的指向,这里的角速度可以写成下面的形式:

  • WX(Shaft.cm)
  • WZ(Shaft.cm, 0, marker_ref)

如果写成:

  • WZ(Shaft.cm, marker_ref)

会得到结果为0,因为这里的意思是绕着全局的Z方向的角速度

4.6 创建力矩

选择创建一个力矩

按照默认的选项,依次点击【圆柱体】和【坐标原点】,完成力矩的创建。

note

注意这里力矩选择的是Space-Fixed,意味着力固定在空间中;实际上选择Body-Fixed会更好,固定在物体上

双击新创建的力矩,输入公式【-VARVAL(motor_torque)】,此公式的意义在于把输入变量【motor_torque】的值赋给力矩,此处不可之间输入变量名,需要通过【VARVAL】函数进行转换,负号的添加取决于刚才参考点的选取,看情况选择是否添加。

至此,Adams 模型的创建已经完成。


5.1 导出 Adams 模型

在【tools】中选择【plugin manager】选择加载【Adams Control】插件

在【Plugins】中选择【Adams Control】中的【Plant Export】

在输入信号框中点击右键,选择【motor_torque】

同样,在输出信号的框中点击右键,选择【motor_theta】和【motor_omega】

在【target software】中选择【MATLAB】,最后窗口应如下图所示,点击【OK】,完成模型的导出。

最终会得到以下这 4 个文件

5.2 MATLAB 部分

打开 MATLAB,运行导出的【*.m】文件,得到如下结果。

在【命令行】中输入【adams_sys】打开默认生成的 Simulink 模型,其中橙色模块就是导出的模型,这个 adams 子模块可以复制出来,连接到你的模型中,每次运行之前只需要先运行【.m】文件即可。注意:若模型路径变化会产生警告,这个时候【.slx】文件中的 adams 子模块不需要更改,但是需要重新导出一次模型,并运行新导出的【*.m】文件即可消除警告。

5.3 搭建对应的联合仿真模型

Adams 子模块复制出来以后,代替原有的动力学模型,框图如下:

仿真结果如下:

5.4 仿真结果对比

将两个模型放在一起比较:

结果如下:

Adams 中查看结果


如果 Simulink 中的数据并不能满足你的需求,需要查看非输出变量的变化,或者说想要看到或者导出具体的机构运动动画的话,你需要先找到联合仿真以后生成的【*.res】文件。注意这个文件每仿真一次都会重新覆盖,有需要的记得复制到其他目录下保存。

然后将其导入,注意在导入的时候需要双击【Model Name】旁边灰色的框,然后选中里面的模型,再进行导入。

然后就可以在【postprocessor】中进行查看。

参考

引文
脚注
Loading...