adams与simulink联合仿真
adams与simulink联合仿真
定义
Adams 的软件 UI 设计很糟糕,因此尽量不在 Adams 中做仿真;此外,如果希望做好的控制算法,还得在 Simulink 中做仿真,这就引出了本文的内容
方案
本文由 简悦 SimpRead 转码, 原文地址 zhuanlan.zhihu.com
前言
本例子参考自 Robert L. Norton 编写的《Adams Tutorial Kit for Mechanical Engineering Courses (Third Edition)》中的 Example 34: DC Motor,对其进行了更加仔细的整理,补足了一些不够仔细的部分,这个例子应该可以说是我见过的最为详细完整的 Adams 与 Simulink 联合仿真的例子,即使是对零基础的人也很友好。因此整理出来,以供有需要的人参考。
对于写文章分享,还是小学生一个,如果觉得对你有帮助的,请不要忘记点个赞,如果觉得写得不错,会考虑整理更多相关的图文教程。
理论部分
根据基尔霍夫电压定律:
其中: 是输入电压; 和 分别是电感和电阻两端的电压; 是反向电压,与电机转速成正比,即:
现在,根据电枢电流和电机转速写出电压降的表达式:
电机输出的扭矩与电枢电流成正比,
根据电机轴动力学公式得出:
整理公式得出:
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.2 Simulink 模型框图
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 模型的创建已经完成。
Adams 与 Simulink 联合仿真
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】中进行查看。