Simulink和Adams的联合仿真——电机转速的控制

一、简述

       这里不在赘述电机的原理,仅仅通过施加扭矩,电机加速转动,撤销扭矩,电机匀速转动,反向施加扭矩,电机减速到0的实现。

        软件:adams2020、matlab2023

        Simulink模型见附录,如有需求可联系我提供Adams模型和Simulink模型

二、Adams建模

       Adams常用快捷键:旋转(R),放大/缩小(Z),移动(T)

1、Aadams模型创建

       在Adams中建模出电机的简化模型,也可以Creo、Solidworks或者其他CAD软件创件的三维模型导入到Adams;这里是直接在Adams中直接创建的,后面会介绍如何导入其他CAD软件绘制的三维模型。

(1)打开Adams软件,我这里用的是Adams2020,其他版本类似的操作,界面如下——点击创建新模型:

(2)这里的模型名称可以更改,工作路径也可以更改为自己提前准备好的文件夹(文件夹名称不能是中文名),重力一般保持默认,有需求也可更改,单位可以保持默认,也可更改,或者保持默认的,之后确有需求,也可以在Adams设置中修改

(3)单位和重力修改位置

(4)创建完成之后在力这一栏能看到有重力(gravity),我这里是不需要,所以删掉了。也可以保留不删掉,但有防止重力对结果的影响,咱们可以把重力取消激活

(5)取消激活方法:选中重力,点击鼠标右键,选择激活/失效(英文界面位置相同),将对象激活前面的勾去掉,点击确定即可,此时重力失去作用。

(6)按下面流程依次创建四个连杆来表示风扇的扇叶,四个连杆的一端在坐标系中心位置。(数量和尺寸都可以自定)

         注意:这里创建时的单位是厘米(cm),如果我们的连杆长度250mm,那么这里应该填写的时25(cm),直接填写250的创建出来的模型长度就是2500mm了。

(7)这里的part2到6表示四个扇叶,part7表示图中绿色部件(电机转子),电机可创建也可以不用创建。如果要创建如图与工作格栅相垂直的部件,需要将工作格栅更改一下。

(8)默认情况下工作格栅与XY平面重合,此时我们创建部件都是主体方向在XY平面内,比如圆柱体轴线在XY平面上,横截面与XY平面垂直,此时我们需要创建一个轴线与XY平面垂直的圆柱体,则需要更改工作格栅所在平面。下面是更改方法:点击设置——工作格栅——设置方向;默认是XY平面,这里我们更改为全局XZ,然后点击工具栏顶部的切换按钮就可以切换到XZ平面,咱们就可以再XZ平面上看到工作格栅这些点,也就可以创建圆柱体Prat7了。

(9)创建电机模型(上面已做好相关设置,可以直接创建)

(10)创建完成之后会看到有5个部件,因为我这里创建的其中一个部件不需要删掉了,导致编号不连续。

(11)模型创建好了,但是这些零件/部件只是放在这里,并没有产生任何联系,接下来我们要对这些零件/部件添加约束和驱动关系。切换到连接工具栏,然后点击第一个锁的图标(固定副),选择“2个物体,1个位置”,分别将所有扇叶处在坐标原点的一端的参考点和和电机连接在一起,即:Part2——Part7、Part4——Part7、Part5——Part7、Part6——Part7,创建好固定副后能看到一个锁的图形,即连杆和点击部件被固定在一起了,依次完成所有部件的连接。

(12)部件和连接关系已完成创建,现在需要给电机一个驱动,这个驱动可以是扭矩,也可以是角加速度(和扭矩等效)、角速度或者角度。如果给定的是角加速度、角速度或者角度,则需要再创建一个转动副的约束关系,这里我们给一个扭矩,所以就不需要这个转动副约束了。后面会详细介绍转动副的创建。

(13)切换工具栏到力这一栏,顺时针的箭头符号即为扭矩,点击扭矩,选择空间固定、垂直与格栅(前面我们为了创建电机更改了工作格栅的方向,在创建整个扭矩之前需要将工作格栅更改回全局XY平面),然后在坐标原点位置右键,在弹出列表中找到Part_7(选择你实际的电机部件编号),点击Part_7,再次点击坐标原点位置,在列表中找到Part_7.cm,即圆柱体电机的质心,点击后即可完成扭矩的创建,并能看到一个逆时针的红色箭头。

(14)要是箭头太小或是看不到,可以对扭矩图标进行设置,具体操作:左边浏览一栏找到力,将加号点开,找到扭矩SFORCE1,右键后找到外观,然后在图标大小一栏输入数字,比如300,应用或者确定则图标就变大,就能看清楚了。

(15)之后双击扭矩,打开的窗口在函数一栏里面输入一个数字(不需要太大,否则运算困难或则造成动画不流畅,这里以20为例),然后确定。到此基本的adams模型已经完成创建,现在来验证模型正确与否。

(16)点击仿真工具栏,点击齿轮图标,然后终止时间一栏输入20,表示仿真时间20秒,步数一栏输入200,表示20秒的时间内运行200步。然后点击类似播放按钮的绿色图标即可开始仿真,咱们就能看到整个系统会越转越快,说明我们的模型是正确的。序号5 的按钮可以重新播放之前的仿真结果。到此,模型验证通过。接下来就是为了Simulink做准备。


以下是转动副的创建,不涉及到本实验中去,不需要的可以直接跳到本章第2节

        前面模型中固定副已添加完成,我们再对这个整体添加一个转动副,这里的转动副主要添加到电机转子上即可。同样选择连接一栏的第二个图标(带一个旋转箭头的)即为转动副,“两个物体,一个位置的”构建方式,第一个物体选择Part7(电机模型,根据自己锁创建的部件编号进行选择),第二个物体选在工作格栅可以看到一个ground(即大地),点击即可,位置则在坐标原点位置右键,找到Prat7.cm,即点击的质心位置。此时可以看到一个旋转的箭头,即表示我们的转动副创建成功了。

        验证模型正确与否操作方法:工具栏找到驱动,运动副驱动中点击第二个(转动副),特性一栏中的旋转速度30默认(后面可以修改),然后点击JOINT5(转动副),即可完成旋转驱动,

       在驱动左边栏驱动中能看到一个MOTION1,双击即可打开一个新窗口,函数(时间一栏)表示驱动的大小,类型一栏表示驱动的类型,位移、速度、加速度(对应转动就是角位移、角速度、角加速度)。选择位移,则函数(时间)一栏表示的是在仿真时间内(上文中的p小节仿真时间20秒)20秒时间内,角度转过30°;设置成速度,则电机以30°/秒的角速度旋转20秒;设置成加速度,表示在20秒的时间内电机以30°/s^2的加速度持续做匀加速的转动,速度越来越大。

运动副创建结束


2、Adams到Simulink模型的导出

(1)创建输入量:在整个实验中,输入量是扭矩,点击单元,点击x图标,然后名称一栏后面的VARIABLR可以删掉重命名为Torque,我这里是叫F_Torque,关于时间的函数F(time,...)一栏则是保持默认0不填,电机确定或者应用,即可在Adams界面左边栏单元——系统单元里面看到创建好的F_Torque。

如果是输入量,则这里的F(time,...)一栏一般为0。

(2)创建输出量,对于电机来说,我们给他施加扭矩,则输出的量有转动的角加速度Alpha和角速度Omega,这里我们将角加速度Alpha和角速度Omega都进行输出。看两个的变化情况。按照(1)中输入扭矩的创建方式创建输出量角速度Omega和叫加速度Alpha,因为输出量需要有参考,因此这里的F(time,...)一栏需要进行填写:

        具体步骤:双击创建好的Alpha,然后点击F(time,...)一栏右边三个点,在数学函数一栏右边小三角点击下拉找到加速度。点击加速度,在加速度列表找到关于Z轴的角加速度,双击之后在“定义运行时间函数”窗口中就自动输入WDTZ(...,...,....,....),将括号内的全部删掉,替换为电机的质心,在这里叫part_7.cm,不知道的话可以在物体中找到电机部件,然后点开加号找到一个cm的,双击即可看到,复制粘贴在WDTZ的括号中。

    同理,角速度也是一样的修改方式

说明:这里选择的角速度和角加速度都是关于Z轴的,因为我们创建的Adams模型是关于Z轴旋转的,因此参考的角速度和角加速度都是与Z轴相关的。关于角速度和角加速度获取函数除了WZ、WDTZ,还有WX\WY、WDTX\WDTY,具体用法可以参考官方教程,或者多多尝试,这里不再赘述

(3)创建完成所有输入和输出参数之后,输出参数因为我们找了和模型相关的参考,所以可以通过这些参考获取模型的角速度和角加速度,但是扭矩F_Torque值是0,并没有和我们的模型相关联,因此需要将他们联系起来。

        前面第1节的第(13)小节中我们创建了一个扭矩SFORCE_1,在第2节的第(1)小节中我们又创建了一个输入量F_Torque,想在我们要将这两个联系起来,因为在Simulink中,输入的F_Torque并不能直接对整个模型进行作用,因此我们需要用到一个函数VARVAL,即获取某个参数的数据,在本例中表示将Simulink输入的F_Torque获取并赋予整个Adams系统的驱动扭矩SFORCE_1。

(4)将Adams模型导出为Simulink模型

A、导出之前要确保我们的插件是处于打开状态:工具——插件管理器——第一项都勾选即可

B、导出Simulink模型:点击插件——第一个图标——机械系统导出

C、输入信号空白处右键找到输入扭矩,输出信号空白处右键——推测——找到角速度Omega角加速度Alpha,点击之后即可添加进去,然后将目标软件下拉找到matlab,点击确定即可完成导出Simulink模型。

三、Simulink—Adams联合仿真实现

1、Simulink模型读取

(1),打开matlab,将目录切换到Adams的工作目录

(2)运行刚才导出模型的点m文件,我这里叫Control_Plant_MotorTest,如果没有进行重命名的话一般是Control_Plant_1,第二次导出则叫Control_Plant_2;右键运行后得到的结果中显示了输入量和输出量,然后命令行窗口输入

adams_sys

点击回车后弹出模型

         运行后弹出simulink模型(不要在次基础上进行建模),新建一个Simulink模型,将主要的Adams模型复制到新建的Simulnk模型中去

2、联合仿真实现

(1)这里是实现电源上下电、换挡控制,比如上电,P挡、低速挡、中速挡、高速挡,这里用1和0表示上电和断电,同时1也表示P挡,2表示低速档、3表示中速挡、4表示高速挡,P挡和断电状态下目标转速是0,2挡状态下目标转速是3600°/s,3挡表示5400°/s,4挡表示7200°/s(为避免数字太大,这里需要将角度转化为弧度。)模型中的开关模块表示换挡按钮。

(2)将目标转速进行输入,采用一个PID模块来实施调控,运行后结果如下所示

A、挡位和目标速度的关系(Omega_Target是目标转速、Shift_Ctrl是换挡挡位和电源控制)

B、实际的输出速度、加速度和目标速度的曲线图(Alpha是实际角加速度、Omega是实际角速度、Omega_Target是目标角速度)

C、如果需要在运行过程中查看Adams模型的动画,可以双击adams_sub模块进去,然后双击ADAMS Plant模块,将Animation mode切换到interactive

D、再次运行整个simulink模型,等编译完成之后即可跳出Adams窗口,此时可以双击Simulink模型中的开关模块,执行换挡操作,同时观察Adams模型的运行状态和示波器曲线的走势。

附录、Simulink算法逻辑

1、总览

2、Power模块——上电和断电

3、Shift模块——挡位

4、Omega_out模块——挡位和角速度输出模块

5、Speed_Ctrl模块——挡位控制模块

6、Shift——Omega_Target模块

7、PID参数

        这里用的是离散型的,各位也可以改成连续性的,同时将Adams模块也调成连续的进行仿真观察结果有什么差异,

8、离散和连续切换

9、仿真步长设置

        上述计算结果都是在变步长,自动求解器下获得的,可以调整为定步长进行运算,但此时需要将步长设置成和Adams模块的Communication interval一致,第8节中为Communication interval 值为0.005。如果要调整为adams的求解器,只能在变步长的状态下才能进行切换。

总结

        算法逻辑比较简陋,大家可以持续进行完善,比如任意挡位状态下断电后重新上电则自动置于P挡,另外由于没有找到一组合适PID参数,导致结果并不是很好。大家有更好的建议,欢迎交流、补充。

  • 26
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值