基于时间分割的前加减速快速插补算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
0. 引言
时间分割插补,也称数据采样插补,是 根据指定的进给速度,将轮廓曲线分割成插 补采样周期的进给量[1]。根据加减速控制与 插补的位置关系,可分为前加减速控制和后 加减速控制。前加减速控制算法具有较高的 轮廓控制精度的优点,通常认为的缺点是需 要预测减速点,计算量大[2, 3]。 基于时间分割的前加减速插补算法应满足 以下条件: 1) 准确定位原则,即当各轴距离是脉冲当 量的整数倍时,不允许有理论定位误差; 2) 最小时间原则,即整个插补过程时间最 短,要求加减速阶段采用最大加(减)速度, 均速阶段达到指定进给速度; 3) 单位时间原则,即加减速和均速阶段的 时间长度为插补周期的整数倍; 4) 单位脉冲原则,即对于位置控制系统, 每个周期插补指令的脉冲个数为整数。
http://www.paper.edu.cn
基于时间分割的前加减速快速插补算法 1
杨林,张承瑞
山东大学机械工程学院,山东济南 (250061) 摘 要:以直线插补为例,导出了基于时间分割的前加减速快速插补算法。通过插补前预处 理,可求出插补参数的精确离散解,使插补过程中无需进行减速点预判,减少了计算工作量, 并能满足定位、速度、加速度要求。 关键词:时间分割法;前加减速;插补算法
//
void prepare() { n = (int)(maxV / a); // 加速周期数 // 判断是否可以达到 maxV if ((int)(d / maxV) > n) { // 可以达到 maxV v = maxV; // 取指定最高速度 m = (int)(d / v) – n; // 均速周期数 totalStep = 2 * n + m; // 总周期数 double de = d – (m + n) * v; //残余距离 if (de > 0) { // 有残余距离
double vc = (n + 1) * a – v; if (de <= n * vc) { // 不需要插入
deltaV = de / n; } else { // 需要插入最后一段
deltaV = (de + vc) / (n + 1);
totalStep += 1; } } } else { //达不到指定最高速度的情况 n = sqrt(d / a) – 1; // 计算加速周期数 v = (n + 1) * a; // 最高速度 m = (int)(d / v) – n; // 均速周期数 totalStep = 2 * n + m; // 总周期数 double de = d - (m + n) * v; // 残余距离
算法包含两个函数:void prepare()用于 预处理,计算加减速周期数、均速周期数、
总 周 期 数 、 和 最 高 速 度 ; double
nextStep(int i)用于求 第周期的插补量。算法
以类似 C 语言的伪代码形式给出。设程序中
包含以下变量:
double d; double maxV; double a;
最后一个周期的速度为 ,满足图 3 的情 况,需要最后插入一个周期。
所以,在达不到 周期的速度为
的情况下,第 个
2. 程序算法
从前面的推导中可以看出,两种情况的 速度公式 是类似的,差别是 和最高速度
不同。而 和最高速度在插补过程中保持不 变,可以在预处理时提前求出。因而,两种 情况可以合并进行处理。
http://www.paper.edu.cn
1.1. 最高速度等于
前面计算 时进行了取整操作,可 能存在残余距离,即
即图 2 所示的情况,最后一周期加上 之后不超过最大加速度,取
残余距离以速度 平均分摊到减速部分,如 下图 2 阴影部分所示。
否则,即图 3 所示的情况,有 求得
令
此处 的含义是最后一周期在不超过 最大加速度的情况下,允许再增加的速度。 有
-4-
http://www.paper.edu.cn
Time Division Based Acceleration/Deceleration Interpolation Algorithm
Yang Lin, Zhang Chengrui
School of Mechanical Engineering, Shandong University. Shandong, Jinan, CHN (250061) Abstract
图 2 残余距离平均分摊到减速段
经调整后,减速阶段除第 1 个周期外, 其余各周期的加减速不变,仍为 。
所以,在可以达到 周期的速度为
情况下,第 个
1.2. 最高速度小于
图 3 均分后最后一个周期超过
还存在一个问题,就是最后一个周期速 度 加上 之后可能超过最大加速度 , 如图 3 所示。此时,需要在最后多添加一个 周期,速度为 。最后一周期的速度为
4. 结论
本文提出一种基于时间分割的插补的直线 加减速算法,该算法通过提前预处理,不需 要在每次插补时计算减速点,使插补过程的 计算量大大减少,并且能够精确定位,满足 速度和加速度要求。
参考文献
1 赵玉刚, 宋现春. 数控技术[M]. 北京: 机 械工业出版社, 2003. 2 何英武, 郭远东. 插补过程用后加减速时 精度控制方法研究与实现[J]. 制造技术与机 床, 2006, (10):117-119. 3 许良元. 数控加工中加减速控制曲线的研 究[J]. 机械工程师, 2006, (9):65-66. 4 郭新贵, 李从心, 阮雪榆. 采用线性加减 速伺服系统的快速准确定位方法[J]. 机械工 程学报, 2003, 39 (7):74-78.
if(de > 0 ) { //有残余距离
deltaV = de / (n + 1);
totalStep += 1;
-3-
http://www.paper.edu.cn
} } } // // 计算第 i 个周期的插补值。 // double nextStep(int i) { if(i < n) { // 加速阶段 return i * a; } else if (i <= m + n) { // 均速阶段 return v; } else if (i <= totalStep) { // 减速阶段 return v + deltaV – (i – m – n) * a; } else { // 超出总周期数,无效 return 0; } }
-5-
如果 D 足够大,则可以加速到 要的加速周期数为
,所需
均速周期数为
从上式可以看出当
时,包含速度为
的均速段;反之,最高速度达不到 , 只有加减速过程。下面对这两个情况分别进 行讨论。
设直线插补的最大速度为 ,最大加
速度为 ,行程为 D,n 为加减速的周期 数,m 为均速的周期数,其速度图如图 1 所
1 本课题得到国家基金(50675123)和博士点基金(20040422026)的资助。 -1-
当最高速度达不到 时,可以看作只 有一个周期的均速阶段,其速度为
其中 为加速阶段的周期数,如图 4 所示。
如果
-2-
http://www.paper.edu.cn
n
图 4 最高速度小于
总距离为
n
时的速度图
则加速阶段的周期为
均速距离等于 段周期数为
,所以均速阶
此时还剩余
,将
其均速插入到减速部分。从图 4 可以看出,
郭新贵[4]提出了前加减速控制快速准确 定位方法,但减速阶段加速度存在波动。本 文通过离散求解,能够满足以上四个条件。 文章分三个部分:第一部分对两种加减速情 况进行公式推导,第二部分给出具体插补算 法 ,第三部分对算法的应用进行讨论。
1. 公式推导
示。
nห้องสมุดไป่ตู้
m
n
图 1 具有加减速和均速过程的速度图
总距离为
An acceleration and deceleration interpolation algorithm for CNC system is presented. The algorithm is based on time division method, and an accurate solution is calculated before interpolating process. So there is no need to pre-judge the decelerating point, and position, velocity and acceleration requirement can be satisfied. Keywords: Time Division; Acceleration/Deceleration; Interpolation Algorithm; CNC 作者简介:杨林,男,1974 年生,博士,副教授,主要研究方向为数控系统、软件工程。
3. 算法讨论
1) nextStep 返回的浮点类型值,不满足前 面提出的“单位脉冲原则”,需要在外部进行 数字积分处理。实现方式为:定义浮点类型 的理论位置变量,累计 nextStep 的返回值, 对其四舍五入后得到实际位置,与上次计算 的实际位置相减,得到增量脉冲数。由于采 用四舍五入进行取整,因此,最大轮廓误差 小于 0.5 个脉冲当量。 2) nextStep 的返回值实际上是在直线方向 上的增量矢量长度。对于多轴插补来说,只 需用该值与直线单位矢量相乘,即可得到各 轴的理论增量,然后使用 1)中的数字积分 处理,得到各轴的实际增量脉冲。 3) 算法在预处理阶段已确定了加减速周 期数 n 和均速周期数 m,因此在插补过程中, 无需每个插补周期都进行减速点计算。
// 距离(已知) // 设定最高速度(已知) // 加速度(已知)
int m;
// 均速周期数
int n;
// 加速周期数
int totalStep;// 总周期数
double deltaV;// 存放减速调整值
double v;
// 实际最高速度
// // 预处理求 m,n,v,deltaV 和 totalStep
4) 残余距离的平摊到减速阶段,使之仍保 持最大减速度,当各轴距离是脉冲当量的整 数倍时,不存在终点定位误差。 5) 如果采用面向对象的编程语言,建议使 用类对数据进行封装,在构造函数中执行预 处理。当前执行的周期数可以存储在对象内 部,这样调用实例方法 nextStep 时,不需要 传递参数。 6) 算法使用了浮点数计算,更适合于软件 插补器。