本例子参考自Robert L. Norton编写的《Adams Tutorial Kit for Mechanical Engineering Courses (Third Edition)》中的Example 34: DC Motor,对其进行了更加仔细的整理,补足了一些不够仔细的部分,这个例子应该可以说是我见过的最为详细完整的Adams与Simulink 联合仿真的例子,即使是对零基础的人也很友好。因此整理出来,以供有需要的人参考。
对于写文章分享,还是小学生一个,如果觉得对你有帮助的,请不要忘记点个赞,如果觉得写得不错,会考虑整理更多相关的图文教程。
根据基尔霍夫电压定律 :
v_i-v_L-v_R-v_b=0\\
其中: v_i 是输入电压; v_L 和 v_R 分别是电感和电阻两端的电压; v_b 是反向电压,与电机转速成正比,即:
v_b=K_b\cdot \dot{\theta}\\
现在,根据电枢电流 和电机转速写出电压降的表达式:
v_i-L_A\cdot \frac{di_A}{dt}-R_A\cdot i_A-K_b\cdot \dot{\theta}=0 \\
电机输出的扭矩与电枢电流成正比,
T_m=K_t\cdot i_A \\
根据电机轴动力学公式 得出:
T_m-c\cdot \dot{\theta}=J\cdot \ddot{\theta} \\
整理公式得出:
\begin{cases} \frac{di_A}{dt}=\frac{v_i-R_A\cdot i_A-K_b\cdot \dot{\theta}}{L_A}\\ \ddot{\theta}=\frac{K_t\cdot i_A-c\cdot \dot{\theta}}{J}\\ \end{cases}\\
根据上面的公式,可以在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仿真,结果如下,以作为联合仿真的对照结果。
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 (N*m*s/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)】,这两者为输出变量。
4.6 创建力矩
选择创建一个力矩
按照默认的选项,依次点击【圆柱体】和【坐标原点】,完成力矩的创建。
双击新创建的力矩,输入公式【-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 仿真结果对比
将两个模型放在一起比较:
结果如下:
如果Simulink中的数据并不能满足你的需求,需要查看非输出变量的变化,或者说想要看到或者导出具体的机构运动动画的话,你需要先找到联合仿真以后生成的【*.res】文件。注意这个文件每仿真一次都会重新覆盖,有需要的记得复制到其他目录下保存。
然后将其导入,注意在导入的时候需要双击【Model Name】旁边灰色的框,然后选中里面的模型,再进行导入。
然后就可以在【postprocessor】中进行查看。
一般平时只会逛逛知乎,一直都是当一个小透明,中文关于adams和Simulink联合仿真的资料写得好的不多,这此整理出来希望能够帮到有需要的人。这个教程应该足够详细了,即使是初学者也应该没有难度,如果有机会,将来会再整理一些Adams的一些高阶一点点的使用技巧。
已经不逛知乎好多年,也不干科研很多年了,所幸当年素材还在,查漏补缺了一下,由于已经不从事这方面的工作了,技术性的问题也应该回答不了了,以上。