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条回答
王涛
1楼-- · 2019-12-17 18:33
落叶知秋 发表于 2018-5-14 14:46
因为GRBL里面的counter是无符号数值,所以在实际代码中是做了1/2 event_step的初值偏移和step_axis与even ...


源代码中ADAPTIVE_MULTI_AXIS_STEP_SMOOTHING 自适应多轴平滑步进(AMASS)是被定义过的的了,也就是step_event_count被扩大了 st_prep_block->step_event_count = pl_block->step_event_count << MAX_AMASS_LEVEL;多倍,
而后又 st.counter_x = st.counter_y = st.counter_z = (st.exec_block->step_event_count >> 1);然后在缩小    st.steps[Z_AXIS] = st.exec_block->steps[Z_AXIS] >> st.exec_segment->amass_level;倍。
实际上是这里只是赋值 st.counter_x = st.counter_y = st.counter_z = (st.exec_block->step_event_count >> 1)为什么要这样做


#ifndef ADAPTIVE_MULTI_AXIS_STEP_SMOOTHING
          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);
        #else
          // With AMASS enabled, simply bit-shift multiply all Bresenham data by the max AMASS
          // level, such that we never divide beyond the original data anywhere in the algorithm.
          // If the original data is divided, we can lose a step from integer roundoff.
          for (idx=0; idx<N_AXIS; idx++) { st_prep_block->steps[idx] = pl_block->steps[idx] << MAX_AMASS_LEVEL; }
          st_prep_block->step_event_count = pl_block->step_event_count << MAX_AMASS_LEVEL;
        #endif

// Initialize Bresenham line and distance counters
        st.counter_x = st.counter_y = st.counter_z = (st.exec_block->step_event_count >> 1);
      }
      st.dir_outbits = st.exec_block->direction_bits ^ dir_port_invert_mask;

      #ifdef ADAPTIVE_MULTI_AXIS_STEP_SMOOTHING
        // With AMASS enabled, adjust Bresenham axis increment counters according to AMASS level.
        st.steps[X_AXIS] = st.exec_block->steps[X_AXIS] >> st.exec_segment->amass_level;
        st.steps[Y_AXIS] = st.exec_block->steps[Y_AXIS] >> st.exec_segment->amass_level;
        st.steps[Z_AXIS] = st.exec_block->steps[Z_AXIS] >> st.exec_segment->amass_level;
      #endif

落叶知秋
2楼-- · 2019-12-17 20:13
王涛 发表于 2018-5-14 16:03
源代码中ADAPTIVE_MULTI_AXIS_STEP_SMOOTHING 自适应多轴平滑步进(AMASS)是被定义过的的了,也就是ste ...
st.counter_x = st.counter_y = st.counter_z = (st.exec_block->step_event_count >> 1)为什么要这样做

这个是之前说过的,为了去掉负数运算

ADAPTIVE_MULTI_AXIS_STEP_SMOOTHING 自适应多轴平滑步进(AMASS)

这个请看楼主位最后一张图片的右下角部分
王涛
3楼-- · 2019-12-17 23:24
落叶知秋 发表于 2018-5-14 16:10
这个是之前说过的,为了去掉负数运算

ADAPTIVE_MULTI_AXIS_STEP_SMOOTHING 自适应多轴平滑步进(AMASS)
这里是为了在低速时加快中断的处理速度这里我理解。我想问的是 st.counter_x = st.counter_y = st.counter_z 赋值为0行不行。 st.counter_x = st.counter_y = st.counter_z =0;
落叶知秋
4楼-- · 2019-12-18 01:36
 精彩回答 2  元偷偷看……
jetta2014
5楼-- · 2019-12-18 03:36
本帖最后由 jetta2014 于 2018-5-15 10:48 编辑

刚准备玩下GRBL,就看到楼主的大作了,先谢啦!
补充一下,grbl 1.1f XMind文档.rar无法打开!
liujingwei
6楼-- · 2019-12-18 03:58
这个分析很强,图文并茂

一周热门 更多>