菜鸟学四轴控制器之3:数字积分法DDA实现直线插补

上一篇的逐点比较法显然是无法画一条有倾角的直线的。因为X轴和Y轴永远都不同步,也就是像打台球一样,你打一个,我打一个,如果我进了球,我再接着打一个。

也就是说,如果直线为45度,也是没有办法画出来的,只能是锯齿形状。

如何实现X和Y同时动?也就是说,如果要画一条45度的线,X和Y同时动不就行了么?

比如起点为0,0,终点为5,5,如果采用逐点比较法,则需要运动10次,如果两轴同时运动,则5步就可以实现了。实现的途径如下:

初始值为0,0,然后下一步,我们每个坐标增加5,则结果为5,5,这样会溢出,也就是说,溢出来出发运动一步。溢出以后清零,下一步再加5,又溢出,继续同时运动一步。一共5步就可以实现了。

等等,当然可以设置寄存器的溢出值为5,这样的寄存器使用3位就行了,但是如果要移动到(3,7)的坐标呢?显然,我们用的寄存器则可以选用溢出值为7.

这样的话,我们要用的寄存器其实需要3个,一个是存(3,7)的初始值,一个存7这个阀值,一个则是累加器。我们可以直接省掉一个阀值的寄存器。也就是说,直接用3位的寄存器,阀值为8.

步数 X累加 X余数 X是否溢出 Y累加 Y余数 Y是否溢出
0 0 0 0 0 0 0
1 3 0 0 7 0 0
2 6 0 0 14 6 1
3 9 1 1 13 5 1
4 4 0 0 12 4 1
5 7 0 0 11 3 1
6 10 2 1 10 2 1
7 5 0 0 9 1 1
8 8 0 1 8 0 1

也就是说,当X轴和Y轴同时溢出的时候,X和Y轴是在同步运动的。

问题来了,比如我们要运动从(0,0)运动到(2554,47)这个点,实际需要多少步?

也就是说,只要能装的下2554这个的寄存器位数就可以了,也就是说,用4096来作为累加器。移动的速度则是4096*脉冲当量的周期。实际上,这个时间比2554+47慢了很多了。

但是这样做的好处显而易见,我们不是每一个图形,都是锯齿形了。

我们可以轻松的实现直接的实际刀路如上面的图形

从而实现了多座标联动,多坐标曲线插补,在轮廓控制方面得到了广泛的应用。

再来一个例子。

上面没有用到公式,如果感兴趣可以找教材了解,原理图如下:

还有一种就是圆形的DDA插补,鉴于我好不容易才理解了数字积分法,以及提高DDA插补质量用到了更加难理解的左移规格化等技术,干货太多,我打算另起一篇。
想起李笑来的一句话:解决问题的钥匙,显然大部分时候都不是要你眼睛盯着锁头,而是要到别的地方去寻找。

显然,我一开始就打算了解什么是插补,什么是联动,在百度上苦苦搜寻,压根就没有办法了解清楚,而在不经意中,为了了解DDA,多轴联动的概念迎刃而解。

时间: 2024-10-25 15:22:01

菜鸟学四轴控制器之3:数字积分法DDA实现直线插补的相关文章

菜鸟学四轴控制器之2:逐点比较法

逐点比较法是基准脉冲插补算法中,最简单和直接的一种方式. 简单粗暴,速度快! 可以实现直线插补,圆形插补和其他的插补,比如椭圆形等. 逐点比较法,顾名思义,就是每走一步都要将加工点的瞬时坐标同规定的图形轨迹相比较,判断其偏差,然后决定下一步的走向,如果加工点走到图形外面去了,那么下一步就要向图形里面走:如果加工点在图形里面,那么下一步就要向图形外面走,以缩小偏差.这样就能得出一个非常接近规定图形的轨迹,最大偏差不超过一个脉冲当量. 所以说,一般的雕刻机应该可以满足要求吧,关键是速度也快啊,比如说

菜鸟学四轴控制器之1:插补是啥东西

之前看过运动控制芯片的手册,包括了NOVA的MCX314和PCL6045等,知道插补的概念. 但是插补到底是啥玩意,其实一直是有点疑惑的,然后就傻乎乎的去问一些专家,他们的说法是: 插补可以同时多轴输出,速度很快.然后就不知道问啥了. 基于我之前做步进电机的经验,以及测试步进电机驱动器的经验,我一般情况下都是通过单片机发一个固定脉冲来测试驱动器的性能.如果需要测试电机各种速度下的力矩特性,最多采用了S加减速曲线,在我看来,要画一个直线,那太简单了,直接X轴和Y轴同时给不同速度的脉冲不就OK了么?

菜鸟学四轴控制器之6:刀具半径补偿算法

为什么要有刀具补偿? 想象一下,如果我们的刀具可以理想到半径无穷小,倒是不需要考虑半径的补偿,但是实际上我们用到的是刀具的边沿在雕刻物体,如下图: 简单来看,好像是直接平行于轮廓进行移动就可以了,其实不然,单条直线的雕刻是平行,但是直线和直线,直线和圆弧,圆弧和圆弧都是不同的,并且!直线与直线的刀具补偿也分为三种情况分析.并且,在理论上有两种方法来进行补偿. 且慢,还分为三步,第一步是建立补偿,第二步 进行补偿,第三步撤销补偿. 两种方法分别为: 1.B刀具半径补偿 2.C刀具半径补偿 按照以往

iOS边练边学--父子控制器之自定义控制器的切换

一.如图所示的界面,按钮One.Two.Three分别对应三个控制器的view,点击实现切换.个人感觉父子控制器的重点在于,控制器的view们之间建立了父子关系,控制器不建立的话,发生在view上面的事件,对应的view可能接收不到,控制器们建立了父子关系后,可以将事件传递给相应的控制器. 练习代码如下: 1 #import "ViewController.h" 2 #import "OneTableViewController.h" 3 #import "

菜鸟学Python第十七天

菜鸟学python第十七天 1.logging 模块 logging模块即日志记录模块 用途:用来记录日志 为什么要记录日志: 为了日后复查,提取有用信息 如何记录文件 直接打开文件,往里写东西 直接写入文件的两个问题:(logging模块解决这两个问题) 你写的数据格式 别人看不懂 解析数据模块 logging的使用 logging模块的两种记录日志的方式 使用logging提供的模块级别函数 使用logging日志系统四大组件 <!--本质上logging模块级别函数日志记录就是对日志系统四

菜鸟学Java(二十)——你知道long和Long有什么区别吗?

Java中数据类型分两种: 1.基本类型:long,int,byte,float,double2.对象类型:Long,Integer,Byte,Float,Double其它一切java提供的,或者你自己创建的类. 其中Long叫 long的包装类.Integer.Byte和Float也类似,一般包装类的名字首写是数值名的大写开头. 什么是包装类? 在java中有时候的运算必须是两个类对象之间进行的,不充许对象与数字之间进行运算.所以需要有一个对象,这个对象把数字进行了一下包装,这样这个对象就可以

菜鸟学Python训练营第一期练习题

菜鸟学Python训练营第一期练习题 1.比如自然数10以下能被3或者5整除的有,3,5,6和9,那么这些数字的和为23. 求能被3或者5整除的1000以内数字的和 1 multiple_of_threes=[] 2 for multiple_of_three in range(0,1001,3): 3 multiple_of_threes.append(multiple_of_three) 4 sum_of_threes=sum(multiple_of_threes) 5 print(mult

《跟菜鸟学Cisco UC部署实战》-视频课程-学习投资

有朋友,有学生,问到学习投资些什么,注意:投资可重复利用!就看你怎么用!!! 所以,我写下此博文,目的为了更方便学员学习! 一.在线培训(直播): 1. 学费: 8168元. (目前没开班,如果需要培训大纲,培训计划,请联系QQ:学无止境 3313395633 ) 2. 1条电话初装费 初装费:150元(大约)+31元/月,测试后可以,如果不用,请停机保号,停机保号:5元/月. 3. 1条宽带 默认大家都能上网,不用单独投资! 4. 语音网关 680元(老师为购买此组合,本课程中使用此组合! 一

菜鸟学jQuery源码(一)

整个jQuery是一个自调用的匿名函数: 1 (function(global, factory) { 2 if (typeof module === "object" && typeof module.exports === "object") { 3 module.exports = global.document ? 4 factory(global, true) : 5 function(w) { 6 if (!w.document) { 7