上一篇的逐点比较法显然是无法画一条有倾角的直线的。因为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,多轴联动的概念迎刃而解。

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

  1. 数字积分法DDA(DDA(Digital Differential Analyzer)

    数字积分法DDA(DDA(Digital Differential Analyzer)    数字积分法又称数字微分分析法DDA(Digital differential Analyzer),是在数字 ...

  2. 倍福TwinCAT(贝福Beckhoff)应用教程13.2 TwinCAT控制松下伺服 NC自定义直线插补

    对于MOVEJ的关节运动来说,我们只关心每个电机的角度(只需要考虑多个电机协同开始运动和结束运动,关键是对每个电机加速度均一化,从而一起跑一起停,这部分内容可以参考机器人学导论以获取更加详细的说明), ...

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

    一.如图所示的界面,按钮One.Two.Three分别对应三个控制器的view,点击实现切换.个人感觉父子控制器的重点在于,控制器的view们之间建立了父子关系,控制器不建立的话,发生在view上面的 ...

  4. 菜鸟学自动化测试(八)----selenium 2.0环境搭建(基于maven)

    菜鸟学自动化测试(八)----selenium 2.0环境搭建(基于maven) 2012-02-04 13:11 by 虫师, 11419 阅读, 5 评论, 收藏, 编辑 之前我就讲过一种方试来搭 ...

  5. 菜鸟学IT之四则运算升级版

     菜鸟学IT之四则运算升级版 本次作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2213 团队代码github远程仓库的 ...

  6. JS控制只能输入数字并且最多允许小数点两位

    直接上代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  7. JS 控制只能输入数字并且最多允许两位小数点

    <html lang="en"> <head> <meta charset="UTF-8"> <title>JS ...

  8. 菜鸟学Java(十五)——Java反射机制(二)

    上一篇博文<菜鸟学编程(九)——Java反射机制(一)>里面,向大家介绍了什么是Java的反射机制,以及Java的反射机制有什么用.上一篇比较偏重理论,理论的东西给人讲出来总感觉虚无缥缈, ...

  9. 菜鸟学Java(十四)——Java反射机制(一)

    说到反射,相信有过编程经验的人都不会陌生.反射机制让Java变得更加的灵活.反射机制在Java的众多特性中是非常重要的一个.下面就让我们一点一点了解它是怎么一回事. 什么是反射 在运行状态中,对于任意 ...

随机推荐

  1. LintCode "Partition Array by Odd and Even"

    One pass in-place solution: all swaps. class Solution { public: /** * @param nums: a vector of integ ...

  2. lucene.net helper类 【结合盘古分词进行搜索的小例子(分页功能)】

      转自:http://blog.csdn.net/pukuimin1226/article/details/17558247 添加:2013-12-25 更新:2013-12-26 新增分页功能. ...

  3. Android框架

    http://blog.163.com/vicent_zxb/blog/static/1858861312011488262665/ (一)Android系统框架详解 Android采用分层的架构,分 ...

  4. C#对数组去重

    #region ArrayList的示例应用 /// 方法名:DelArraySame /// 功能: 删除数组中重复的元素 /// </summary> /// <param na ...

  5. sublime text2 css格式化插件

    插件下载地址:https://gist.github.com/2863474 插件,可以将CSS格式化成一行,也可以将一行格式化成多行. 下载解压缩之后,将compact_expand_css_com ...

  6. WindowsForm应用程序调用WebService

    本文原创,如需转载,请标明源地址,谢谢合作!http://blog.csdn.net/sue_1989/article/details/6597078 本文的编写IDE为VSTS2008和.NET F ...

  7. Chrome开发者工具详解(2)

    Chrome开发者工具面板 面板上包含了Elements面板.Console面板.Sources面板.Network面板.Timeline面板.Profiles面板.Application面板.Sec ...

  8. BIP_BI Publisher Administrator设定Configuration/Font/Currencies(案例)

    2014-08-08 Created By BaoXinjian

  9. JConsole connection failed

    最近用jconsole本地连接eclipse失败 , 如下图 : 在eclipse.ini中添加如下代码即可 -Dcom.sun.management.jmxremote.port=9999-Dcom ...

  10. Java序列化,serializable

    Java 串行化技术可以使你将一个对象的状态写入一个Byte 流里,并且可以从其它地方把该Byte 流里的数据读出来,重新构造一个相同的对象.这种机制允许你将对象通过网络进行传播,并可以随时把对象持久 ...