GRBL源码简单分析[源码+图片+xmind文档]

2019-12-09 13:38发布

本帖最后由 落叶知秋 于 2018-5-10 12:05 编辑

声明

  好久没发技术贴,刚好前一阵子才把文档写完,就发到论坛上来,希望对坛友有用。
  去年就开始在GitHub下载了源码开始看,但断断续续的看了将近一年才模模糊糊的看完!
  也一边看一边做文档记录,用的XMind做记录,由于免费版,导不出来Word或者PDF,
  只能导图片了,将就一下。

说明

  文档内容是看代码过程中的理解,肯定有理解不透彻的地方,如果有坛友能指出,提前感谢。
  由于软件限制和懒,文档内容以图片形式展示
  附件提供楼主看代码的GitHub版本的源代码和网络上找的stm32移植版本的源代码,没有实际上机录验证过,此处仅讨论代码

简介
  GRBL是基于Avr单片机的一个应用于3D打印机上的运动控制项目,由于楼主不会Avr,就不发在Avr版块,但不影响阅读源码
  注意:个人认为GRBL是个简易型的数控系统,但仅此而已,其中有可以学习借鉴的地方,运动控制方面的。
  GRBL里面有G代码解析、运动前瞻,T型加减速、直线插补、两轴圆弧插补等功能。

文档内容

grbl 1.1f.png (10.2 KB, 下载次数: 5) 下载附件 总目录 2018-5-10 11:50 上传

1.文件目录.png (165.32 KB, 下载次数: 3) 下载附件 1.文件目录 2018-5-10 11:50 上传

2.模块分类.png (56.71 KB, 下载次数: 0) 下载附件 2.模块分类 2018-5-10 11:50 上传

3.数据流.png (55.34 KB, 下载次数: 1) 下载附件 3.数据流 2018-5-10 11:50 上传

4.综合说明.png (1.71 MB, 下载次数: 2) 下载附件 4.综合说明 2018-5-10 11:50 上传

附件

grbl-1.1f.20170801.zip (296.07 KB, 下载次数: 329) 2018-5-10 11:51 上传 点击文件名下载附件
GitHub源码

stm32f407移植GRBL.rar (12.51 MB, 下载次数: 805) 2018-5-10 11:51 上传 点击文件名下载附件
stm32移植

grbl 1.1f XMind文档.rar (30.42 KB, 下载次数: 391) 2018-5-10 12:05 上传 点击文件名下载附件

编辑原因:添加了XMind源文档文件
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
99条回答
王涛
2019-12-14 09:47
本帖最后由 王涛 于 2018-5-11 18:09 编辑
落叶知秋 发表于 2018-5-11 18:00
这个问题是属于DDA算法的范畴了,这样说吧:
假设从P0点(0,0,0)插补到P1点(2,4,8),坐标分别对应X,Y,Z, ...



谢谢,分析。
下面是Bresenham's line and circle algorithm数学模型
可是看了半天代码分析和这个模型就是关联不起来。
https://www.cs.helsinki.fi/group/goa/mallinnus/lines/bresenh.html


(x, y +ε)的下一个点为(x, y + ε + m),这里ε为累加误差。

可以看出,当ε+m < 0.5时,绘制(x + 1, y)点,否则绘制(x + 1, y + 1)点。

每次绘制后,ε将更新为新值:
            ε = ε + m ,如果(ε + m) < 0.5
            ε = ε + m – 1, 其他情况

这里判别条件的  (ε + m) < 0.5

    即 2*(ε + m) < 1

    即 2*(ε + dy / dx) < 1  (由于m = dy / dx)

    即 2*(ε* dx + dy) < dx (同乘以dx)

    令ξ = ε*dx 可得

            ξ = ξ + dy, 如果2*(ξ + dy) < dx
            ξ = ξ + dy – dx, 其他情况
    可以看到,此时运算已经全变为整数了。以下为算法的伪代码:
            ξ ← 0, y ← y1
            For x ← x1 to x2 do
                Plot Point at (x, y)
                If (2(ξ + dy) < dx)
                    ξ ←ξ + dy
                Else
                    y ← y + 1,ξ ←ξ + dy – dx
                End If
            End For

一周热门 更多>