一、简述
这里不在赘述电机的原理,仅仅通过施加扭矩,电机加速转动,撤销扭矩,电机匀速转动,反向施加扭矩,电机减速到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参数,导致结果并不是很好。大家有更好的建议,欢迎交流、补充。