玩转Matlab-Simscape(初级)- 10 - 基于COMSOL&Simulink 凸轮机构的控制仿真

**

**


目录


前言

在产品开发中,多体动力学控制仿真是一种常见方法,本文从初学者的角度一点点掀开应用Maltab simscape对多体进行仿真的面纱。写这篇博文是为后续做旋翼无人机的多体系统仿真打基础。欢迎各位小伙伴关注、赞赞、留言和收藏。

本文进一步深入学习构建复杂一点点的凸轮机构的建模过程。


一、简介

本文研究柴油机气门机构。该系统所有组成零件全部假定为刚体。模型的输出包括气门从动件的位移和速度,模型输入为旋转凸轮转速。凸轮3D结构如下所示。

2.1 Solidworks中建模

当我们按照从下到上的方式,将一个个创建完零件再装配起来。

该机构的运动组件是:

  • 凸轮和凸轮轴
  • 气门
    固定组件是:
  • 导程、销轴、凸轮轴承

有时候从Solidworks中利用插件导出*.xml文件时会遇到一些问题,如在装配体中,如果使用"凸轮配合相切"、'铰链'等配合方式来联结3D模型汇总的凸轮与推杆,摇臂与销轴时,会在导出Samscape Multibody模型的xml文件时出错。如下图所示。

这通常意味着你正在尝试导出的某些约束类型不被Simscape Multibody所支持。Simscape Multibody支持多种标准的机械约束,如固定连接、铰链、滑块、齿轮等,但对于一些更复杂或自定义的约束,如机械配合中涉及的"凸轮配合相切",可能无法直接转换成Simscape Multibody中可用的约束类型。

解决方法1:忽略这种错误

手动创建凸轮:•在MATLAB/Simscape Multibody环境中,使用内置的凸轮组件(如果有的话)来重新创建凸轮机构。这可能需要手动输入凸轮轮廓的数据。

解决方法2:在SW中用其他约束来替换"凸轮配合相切"这种约束尝试使用Simscape Multibody支持的标准约束来代替你的凸轮配合。

这两种方法都不太友好,后续我对SimSacpe了解多了,再补上这块内容。

在matlab 命令窗中,利用命令smimport('*.xml')语句,导入在SW中生成的xml模型文件,并运行仿真。

上面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进行控制仿真;两种方法各有长短。后续会一步步再深入研究。【赠人玫瑰,手留余香】欢迎各位小伙伴关注、赞赞、留言和收藏。

相关推荐
biomooc4 分钟前
R 语言 | 绘图的文字格式(绘制上标、下标、斜体、文字标注等)
开发语言·r语言
骇客野人6 分钟前
【JAVA】JAVA接口公共返回体ResponseData封装
java·开发语言
black^sugar8 分钟前
纯前端实现更新检测
开发语言·前端·javascript
404NooFound13 分钟前
Python轻量级NoSQL数据库TinyDB
开发语言·python·nosql
用余生去守护1 小时前
python报错系列(16)--pyinstaller ????????
开发语言·python
数据小爬虫@1 小时前
利用Python爬虫快速获取商品历史价格信息
开发语言·爬虫·python
向宇it1 小时前
【从零开始入门unity游戏开发之——C#篇25】C#面向对象动态多态——virtual、override 和 base 关键字、抽象类和抽象方法
java·开发语言·unity·c#·游戏引擎
莫名其妙小饼干2 小时前
网上球鞋竞拍系统|Java|SSM|VUE| 前后端分离
java·开发语言·maven·mssql
十年一梦实验室2 小时前
【C++】sophus : sim_details.hpp 实现了矩阵函数 W、其导数,以及其逆 (十七)
开发语言·c++·线性代数·矩阵
最爱番茄味2 小时前
Python实例之函数基础打卡篇
开发语言·python