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

相关推荐
Scott9999HH8 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
码智社9 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海9 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖10 小时前
JDK 26 新特性详解
java·开发语言
马优晨11 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
人邮异步社区12 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大13 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai13 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
এ慕ོ冬℘゜13 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript
执明wa14 小时前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio