- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于EMAC200运动控制器的圆弧插补算法研究
基于EMAC200运动控制器的
圆弧插补算法研究
关键词:开放式运动控制器;圆弧插补算法;
一、简介
北京元茂兴控制设备技术有限责任公司的EMAC200 运动控制器是一款开放性很强的控制
器,它提供一种轨迹生成的方式——“External Profile Mode”。利用它,我们可以设定每一
个(或者每几个)伺服周期的电机位置,速度,加速度,加加速度参数,从而我们可以实现复
杂的轨迹曲线。
在这篇文章里,介绍了使用EMAC 的“External Profile Mode”如何实现圆弧插补,其中包
括,圆弧插补的一种数学计算方法,及EMAC 如何实现。
二、圆弧插补的数学计算方法
我们采用起点,终点及半径方法来实现圆弧插补。及已知圆弧的起点,终点,半径,及插补
方向(顺时针或逆时针)来实现圆弧插补。
我们先来讨论最简单的情况,即圆弧的圆心就在坐标(0,0)点,如图1所示。
图1
在圆上任意取一点A(x1,y1),由圆的极坐标公式可以得出:
x1=Rcosa;
y1=Rsina;
R为圆的半径,a为A点与X轴的夹角。
因为R已知,角a是一个变化量。对于图1所示圆,相当于角a从0°旋转到360°,就形
成了圆。
上面我们提到,EMAC可以设置每一个伺服周期(或每几个)伺服周期的位置,因此只要得出
在某一个伺服周期的角a值,就可以得出该伺服周期X轴及Y轴两个电机的位置。
对于圆弧插补,我们一般给出圆弧插补的线速度V,因此我们可以计算出角速度
ω=V/R
下面我们可以自己设定一个固定的插补周期T,该插补周期要为控制卡伺服周期的整数倍。
有了角速度及插补周期T,我们可以计算出每一个插补周期角a的变化量θ。
θ=w﹡T。
这样,角a从0°开始,每到下一个插补周期,角a的当前值都增加一个θ值,直到旋转到
360°为止。从而可以计算出每一个插补周期的x和y的坐标值。
对于非整圆的弧,我们的计算方法完全相同,只是需要再计算出角a的起始角度及最终角度
即可。
三、使用EMAC控制器实现
EMAC 的“External Profile Mode”允许用户自己设定运动轨迹,包括运动位置,速度,加
速度,加加速度,及时间5个参数。我们通过数学方法生成这些参数后,可以将他们的值写
到EMAC 的双端口RAM 中。整个RAM 将类似于一个数据表,如图2所示。
图2
整个双端口RAM 可以写16K个32bit变量,如果我们的数据很多,无法一次全部放到双端
口RAM 中,那么我们可以让这个RAM 区以一种旋转缓冲区的方式工作。我们可以通过
EMAC的指令GetBufferWriteIndex及GetBufferReadIndex来获得当前RAM区中读指针及写
指针的位置。通过比较这两个指针的位置,我们可以命令什么时候可以写入新的数据,什么
时候可以安全的覆盖掉旧的数据。
在我们提供的demo程序中,就是采用这种旋转缓冲区的方式来实现圆弧插补的。
四、关于圆弧插补的进一步讨论
上面我们讨论的圆,圆心在(0,0)点,但是对于绝大部分圆弧,圆心不在坐标原点。对于这样
的圆弧,我们可以使用坐标平移的方法来解决问题。如图3所示。
图3
圆弧的计算方法是相同的,只是在计算每个插补周期的A 点位置时,都要加上圆心的坐标
值。即:
x1=Rcosa+Xc;
y1=Rsina+Yc;
那么,问题的重点就变为如何找到圆心。有了正确的圆心坐标后,我们的问题就能得到解决。
下面首先我们来看如何通过起点坐标,终点坐标及半径值,计算出圆心坐标。
图4
如图4所示:我们可以计算出起点及终点弦长AB。
AB= (X2− X1)2+(Y2−Y1)2
做直线段CM⊥AB。则M为线段AB的中点。
M点的坐标Xm及Ym及线段BM长度我们也可以计算出来。
有了这些,我们就可以计算出弦AB所对的圆心角。
图5
如图5所示:
过M 点及A点分别做线段MD//Y 轴,AD//X 轴。
过M 点及C点分别做线段ME//Y 轴,MC//X 轴。
首先我们可以计算出线段MD 及AD 的长度,
MD=|Ym-Y1|,
AD=|X
文档评论(0)