如何查找G代码中曲线的路径
G代码在描述的曲线,是由很多个小线段来逼进它当我们在处理这些小线段时,如果单个节点进行插补,则需要反复的加减速,插补速度很慢
所以在处理小线段时,需要采用连续插补,即将曲线的路径找出来,在起始线段处加速,在末尾线段减速
现在头痛的是,如何找出曲线的路径呢
想了几个方法
预读N条G代码,
1、找出插补主轴,看当前线段的插补主轴和上一线段的插补主轴是否一致,如果不一致,则减速,否则不减速,连续运动
2、插补主轴如果换向,则减速。否则不减速,连续运动
如下图,圆的雕刻路径
http://cache.amobbs.com/bbs_upload782111/files_29/ourdev_562537GTTFSP.JPG
(原文件名:未命名.JPG)
共有200条直线段和圆弧
如果采用单节点插补,则要加减速200次
如果采用连续插补,则只要加减速5次
可实际上,这个圆是可以加减速一次,就可以加工完成的。 不知大家有没有好的方向来判断G代码中的路径,连续插补时如何确定在哪一线段开始减速
再看下图,插补主轴换向后减速的例子
http://cache.amobbs.com/bbs_upload782111/files_29/ourdev_562538I8VKGR.JPG
(原文件名:未命名.JPG)
注明一下,插补主轴是指在插补过程中,移动距离大的一轴 MCX314中文手册ourdev_562428L4CERS.pdf(文件大小:1.08M) (原文件名:MCX314cn.pdf)
手册中有在连续查补中的描述。不知有没有帮助 谢谢semonpic的回复
我现在的问题不是如何实现连续插补,而是不知道要提取G代码中的哪些线段来做连续插补 连续插补是在CPLD里完成的,现在的问题是如何找出需要连续插补的线段,然后将它写入CPLD 顶起,关注。
楼主加工的工件有多大,速度要多高啊,插补都用到加减速了 步进电机运动,当然要加减速才行
这是最基本的
不可能用恒速去插补吧
速度不快 3米每分就行
单节点插补用来雕刻PCB还行,最高可达1.2米每分
如果雕刻PVC,要3米每分的加工速度,就要用连续插补了 是哪个加减速?是电机性能要加速启动?或减速缓冲?3米每分钟这么慢的速度不要加减速。 步进电机走3米每分钟不算很慢吧,如果丝杆导程是5mm,3米每分是600转/分了,是要加减速才行 1、你的G代码怎么生成的?如果是你描述的正圆且你的硬件支持圆弧插补的话,就没必要打散成小段。
2、你需要看下速度规划方面的资料,插补算法除了曲线拟合以外都比较好实现了,如何针对你的插补
算法和机床、电机的特性来做速度规划,以达到要求的加工精度才是重点。
3、你说的预读N条G代码是可行的办法,前瞻处理,有几种算法,可以去查下资料。
4、对“需要连续插补的线段”很是不解,加工过程要么连续插补,要么走单段,而且这个是用户来选择的。 re:yngufeng
感谢你,回答得非常的仔细
1、正圆是可以用四个和四个以下的圆弧来表示,主的要问题不是圆,而是曲线,曲线是由很多小段的圆弧和直线描述的。
2、圆弧和直线插补目前可以说是做得很好了,关键是曲线运动时,反复加减速导致速度提不上来。
至于加工精度,和电机,驱动器,丝杆以及G代码有关。目前精度不是问题。主是要是曲线加工和直线圆弧相比加工效率很低。
正因为这样,所以需要用连续插补,使曲线拟合的所有小线段加工时只需要一个加减速过程。
4、在G代码中,有三种类型的线段,直线、圆弧、曲线,直线和圆弧是用的单条代码描述的,而曲线则是由多条G代码描述的,在加工直线和圆弧的时候是走单段,而加工曲线的时候是连续插补的。 如下图的 D
http://cache.amobbs.com/bbs_upload782111/files_30/ourdev_562936I654U9.JPG
(原文件名:1.JPG)
最外面的那条路径有由19条小线段组成的弧
如果单段加工,要加工19段,加减速19次,如果加速度不够且最大速度设得比较高,每段都加不到最大速度。
如果连续插补,19段连续加工,只需要加减速1次,如果加速度不够且最大速度设得比较高也没有关系,第一段加不到,第二段接着加,这样可以加到最大速度
很显然,连续插补效率高。 回复【10楼】liu_xf 新发
-----------------------------------------------------------------------
呵,明白你的意思了.
我目前采用的方法跟你的"预读N条G代码"方法类似,只是把所有的运动指令G代码(GOO,G01,G02,G03...包括打散的小线段)统一处理.
N值是固定的(比如30条),不过有局限性,当连续小线段太多的时候,速度就提不了太高.
还有一种是定长前瞻,不过操作太复杂,要看你的CPU性能和内存容量.
也有高手跟我说过先把全部刀路处理一遍再跑,不过只适用于比较小的文件,而且不能实现加工中调速.
个人觉得从这几种方法中找个折中方案是效果最好的.
祝你成功 ∧_∧Y 定长前瞻我觉得不合适
G代码中 不是所有的线段都能连续处理
曲线的拐角处一定是要减速的
比如 10楼图片中
从 1 开始,到19 这段弧线就结束了,下一段又要重新开始
所以说 前瞻的长度要看 曲线的路径 其实还有一个问题 不知 yngufeng 兄遇到过没有
我们知道,不同的线段在插补时,输出的频率是不一样的,比如 1段插补时X频率是15K,第2段插补时 X的频率变为14K
当这两段连续插补时,会产生一个1K频率的跃变
这会影响机器运动的连续性。
我觉得在插补第一段快结束时,应减速至14K,然后再连上第二段,这样才会很连续
关键是这个控制起来有点困难。
在目前的测试中,还真发现这个问题 回复【13楼】liu_xf 新发
-----------------------------------------------------------------------
15K-14K的跳变其实可以理解为加速度,只要这个加速度不超过机床和电机能承受的最大加速度,实际加工是没有太大影响的.当然这个跳变值是越小越好的,所以在两段数据的夹角比较大的时候,就得先把速度降下来.如果要做到非常平滑的过度而且速度不能降太多的话,估计要用到曲线拟合.你可以试下定条数的前瞻,我们的这一算法已经用在了实际的产品中了,由于机床要求不是很高,目前看起来是可以满足加工要求的. mark yngufeng 看来是高手,膜拜一下。
定条数前瞻,那不是要在加工的时候判断两段数据的夹角,当比较大的时候还要降速
也就是说,边插补,边判断
为何不在夹角比较大的时候停止前瞻,插补的时候就不需要判断了
你觉得呢
看不出定长前瞻有什么优势 其实我觉得还有一个方法,来解决 频率跃变的问题
就是连续插补时仍然加减速,只是减速时不是减到最小速度,而是减到一个定值
这个定值与最大速度接近,且与连续插补的所有线段的最小速度也接近。
这样,连续插补时,输出的脉冲跳变是很小的,而且加工时根本看不出它是在加减速 我的速度规划可能与我的架构有关(FPGA按指定的速度做插补,速度规划交给上层MCU来解决).
个人觉得如你所说的连续插补降速到定值是不可行的,因为夹角是不定的,这样的话,等于你用同样的拐弯速度来走不同的弯道,会出问题的.
我同事用了个比较形象的比喻:赛车手过弯道.所有弯道都被打成了小线段.那么怎样才能保证以最快的速度过弯又不翻车?
"跳频"的问题其实就是线段终点速度的问题.当前段的终点速度就是下一段的起点速度,那么就要根据这两段的夹角来确定这个终点速度,使得"跳频"不超过最大加速度. 15K-14K的跳变其实可以理解为加速度,只要这个加速度不超过机床和电机能承受的最大加速度,实际加工是没有太大影响的.当然这个跳变值是越小越好的,所以在两段数据的夹角比较大的时候,就得先把速度降下来.如果要做到非常平滑的过度而且速度不能降太多的话,估计要用到曲线拟合.你可以试下定条数的前瞻,我们的这一算法已经用在了实际的产品中了,由于机床要求不是很高,目前看起来是可以满足加工要求的.
--------------
yngufeng 兄,你那个产品里,有没有出现 频率跳变的情况
你的机床最大加工速度是多少
频率跳变,加工速度底的时候还没事,加工速度越高的时候,跳变也被放大了。 回复【22楼】liu_xf 新发
-----------------------------------------------------------------------
"只要这个加速度不超过机床和电机能承受的最大加速度,实际加工是没有太大影响的....所以在两段数据的夹角比较大的时候,就得先把速度降下来....."
速度降下来了,跳变值就小了.所以拐弯才要减速.
我们的产品,跳频是肯定有的,具体跳变值没测量过.
加工速度5m/min左右~可以满足要求. "跳频"的问题其实就是线段终点速度的问题.当前段的终点速度就是下一段的起点速度,那么就要根据这两段的夹角来确定这个终点速度,使得"跳频"不超过最大加速度.
-------------
经测试,不解决跳频还真不行,速度快了有失步的情况
看来,需要针对不同的曲线做速度规划
由CPU算出每一段的终点速度
然后交给CPLD去处理。
采用连续插补,加工效率那是成倍的增长啊。呵呵
CPLD资源有点紧了! mark{:smile:} MARK:加我QQ939896399 mark 学习 .学习了
页:
[1]