本帖最后由 落叶知秋 于 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源文档文件
听过TinyG,没有看过源码。
因为GRBL被引用的多,去年就决定先看这个,但工作原因断断续续的看,所以才有了这文档
Bresenham算法就是一种改进的DDA算法,最大的特点就是计算过程不带浮点数,全用整型数
其实在GRBL里面Bresenham算法的应用就体现在stepper.c的T1中断ISR里面的脉冲输出条件判断
如果细心的话,可以留意到同一个文件的st_prep_buffer()函数里面有这样一段代码
- for (idx=0; idx<N_AXIS; idx++) { st_prep_block->steps[idx] = (pl_block->steps[idx] << 1); }
- st_prep_block->step_event_count = (pl_block->step_event_count << 1);
复制代码其实就是把各轴的单次累加比例和脉冲输出的步数阈值都*2而已,然后在ISR里面,有如下代码
- // Initialize Bresenham line and distance counters
- st.counter_x = st.counter_y = st.counter_z = (st.exec_block->step_event_count >> 1);
复制代码就是在取初始数据时,把计数数值降到之前计算的1/2,最后判断的代码是
- // Execute step displacement profile by Bresenham line algorithm
- #ifdef ADAPTIVE_MULTI_AXIS_STEP_SMOOTHING
- st.counter_x += st.steps[X_AXIS];
- #else
- st.counter_x += st.exec_block->steps[X_AXIS];
- #endif
- if (st.counter_x > st.exec_block->step_event_count) {...}
复制代码这三处加起来就是Bresenham算法的所有了,细想一下的话可以发现,不就是下面这个图片嘛
20170904103100016.jpg (17.39 KB, 下载次数: 0)
下载附件
Bresenham算法
2018-5-10 20:16 上传
当某个轴的计算counter大于翻转脉冲阈值的1/2时,就输出,否则就不输出,继续累加对应的比例
由于是脉冲计算,所以一般是不存在浮点输出的,Bresenham算法就是为了按照上面图片的方式取“非主要步进”轴的点
不知道这样能不能说清楚?
一周热门 更多>