**
玩转Matlab-Simscape(初级)- 10 - 基于COMSOL&Simulink 凸轮机构的控制仿真
**
目录
-
- [玩转Matlab-Simscape(初级)- 10 - 基于COMSOL&Simulink 凸轮机构的控制仿真](#玩转Matlab-Simscape(初级)- 10 - 基于COMSOL&Simulink 凸轮机构的控制仿真)
- 前言
- 一、简介
- 二、在Solidworks中创建3D模型,并导入Simulink
-
- [2.1 Solidworks中建模](#2.1 Solidworks中建模)
- [2.2 、将xml模型导入simulink](#2.2 、将xml模型导入simulink)
- 三、在COMSOL中创建模型,并导入Simulink
-
- [3.1 模型简介](#3.1 模型简介)
- [3.2 模型搭建](#3.2 模型搭建)
- [3.3 在Simulink中创建模型](#3.3 在Simulink中创建模型)
- 总结
前言
在产品开发中,多体动力学控制仿真是一种常见方法,本文从初学者的角度一点点掀开应用Maltab simscape对多体进行仿真的面纱。写这篇博文是为后续做旋翼无人机的多体系统仿真打基础。欢迎各位小伙伴关注、赞赞、留言和收藏。
本文进一步深入学习构建复杂一点点的凸轮机构的建模过程。
一、简介
本文研究柴油机气门机构。该系统所有组成零件全部假定为刚体。模型的输出包括气门从动件的位移和速度,模型输入为旋转凸轮转速。凸轮3D结构如下所示。
二、在Solidworks中创建3D模型,并导入Simulink
2.1 Solidworks中建模
当我们按照从下到上的方式,将一个个创建完零件再装配起来。
该机构的运动组件是:
- 凸轮和凸轮轴
- 气门
固定组件是: - 导程、销轴、凸轮轴承
有时候从Solidworks中利用插件导出*.xml文件时会遇到一些问题,如在装配体中,如果使用"凸轮配合相切"、'铰链'等配合方式来联结3D模型汇总的凸轮与推杆,摇臂与销轴时,会在导出Samscape Multibody模型的xml文件时出错。如下图所示。
这通常意味着你正在尝试导出的某些约束类型不被Simscape Multibody所支持。Simscape Multibody支持多种标准的机械约束,如固定连接、铰链、滑块、齿轮等,但对于一些更复杂或自定义的约束,如机械配合中涉及的"凸轮配合相切",可能无法直接转换成Simscape Multibody中可用的约束类型。
解决方法1:忽略这种错误
手动创建凸轮:•在MATLAB/Simscape Multibody环境中,使用内置的凸轮组件(如果有的话)来重新创建凸轮机构。这可能需要手动输入凸轮轮廓的数据。
解决方法2:在SW中用其他约束来替换"凸轮配合相切"这种约束尝试使用Simscape Multibody支持的标准约束来代替你的凸轮配合。
这两种方法都不太友好,后续我对SimSacpe了解多了,再补上这块内容。
2.2 、将xml模型导入simulink
在matlab 命令窗中,利用命令smimport('*.xml')语句,导入在SW中生成的xml模型文件,并运行仿真。
三、在COMSOL中创建模型,并导入Simulink
上面2.1 ~2.2讲到的方式,对于新手处理起那些复杂模型问题来,非常困难,下面讲述另一种简单的方法。
3.1 模型简介
该机构中,凸轮旋转是指定的,弹簧联结到气门,以限制其运动,由此,可以计算给定凸轮转速条件下,从动件的位移、速度和加速度;计算凸轮-推杆的连接力(单独在comsol中求解这个力是很容易收敛的,但与simulink进行协同仿真时,很难收敛。协同仿真时,我把求解连接力这部分给取消了,协同仿真模型很容易得到了收敛 )。
将弹簧安装到气门上的目的是迫使气门跟随凸轮的轮廓运动,并避免凸轮与气门之间的间歇性接触。因此,弹簧刚度的最佳值是使凸轮与从动件始终保持接触,同时,使凸轮轴旋转所需的扭矩最小。
3.2 模型搭建
-
将Solidworks中创建的CamFollwer装配体模型导入进COMSOL几何中。
-
在"多体动力学"物理场节点中设置刚性材料 、固定约束 条件、运动副(凸轮从动件、铰链关节、槽关节)、 指定凸轮轴旋转运动,气门运动添加弹簧、添加重力
-
划分网格
-
在COMSOL中创建Simulink协同仿真块(Cosimulation for Simulink)
-
- 先创建全局变量探针,用于指定协同仿真块的输入、输出量
-
- 再次求解comsol模型,确保模型能正常求解
-
- 设置协同仿真块输入输出参数
-
- 导出生成*.fmu协同仿真文件,供Simulink调用
-
注意:
1.在COMSOL中如果要输出协同仿真模块(Cosimulation for Simulink节点),一般需要先创建"全局变量探针 ",该探针变量用于探测模型的输入量、输出量在整个求解过程中的变化。
2."研究"设置中"辅助扫描"功能,不支持协同仿真模块(Cosimulation for Simulink)的导出,因此,在"研究"中,不能设置"辅助扫描"参数。
3.3 在Simulink中创建模型
注意:1.需要通过进入Matlab Simulink平台,不支持手动建立Simulink与COMSOL的连接,否则在Simulink中添加Comsol协同仿真模块时,在Simulink Library中不显示Comsol协同仿真模块,如下图所示。
创建一个简单的控制模型,并运行仿真,如下图所示。
运行结果如下,在simulink和comsol中结果一致。
接下来,在Matlab 命令窗口中输入"mphlaunch",打开Comsol,我们可以继续利用comsol对数据结果进行后处理,也可以进一步完善优化控制器,达成设计目的。
需要注意的是:在运行仿真时,计算不收敛是常见的问题,尝试在simulink--Model Settings中对求解器进行设置,comsol中对求解器进行设置,一般可以解决问题。
总结
以上就是今天分享的关于Matlab Simulink 与comsol协同仿真的内容,搭建了一个柴油机控制气门开闭的凸轮机构的模型,进一步熟悉了利用SW、Comsol、Matlab Simulink进行协同仿真的整个建模流程。一种方法,从SW将3D模型导入Matlab Simscape中,另一种方法,将3D模型从SW导入Comsol生成协同仿真模块,再进入Simulink进行控制仿真;两种方法各有长短。后续会一步步再深入研究。【赠人玫瑰,手留余香】欢迎各位小伙伴关注、赞赞、留言和收藏。