搜索
bottom↓
回复: 25

GRBL代码浅析

[复制链接]

出0入0汤圆

发表于 2015-9-5 22:19:19 | 显示全部楼层 |阅读模式
GRBL代码浅析

GRBL是一个在8位的单片机上可完成很多G代码的程序。很出名的一个程序。
不知道有没有对它代码分析的资料。这里对它的代码作一点分析。

程序的大部分都有对代码做了详细的注释。都可以参考。

1.CNC的程序一般都注重周期。要求周期小不抖动。GRBL是没有周期的。
定时器用了,却没有固定的周期。定时器用了在产生电机的脉冲上。
一个轴要求移动一定的距离。脉冲产生方法是10ms发1个脉冲定时器周期
是10ms,10ms发2个脉冲定时器周期是5ms,一个周期发1个脉冲,速度
越快,定时器周期就小了。速度在变,定时器的中断周期在变。

2.1个周期发1个脉冲,变化的周期定时器中断,产生了变化的运动速度,
不停消耗循环队列的速度定时器中断周期数据。在main()中不停调用
protocol_execute_realtime()给这个队列加入数据。
protocol_execute_realtime()函数是在程序各个地方不停被调用
来保证队列不空。

3.在main()中对串口进来的一串字符串解析,就会对G代码解析了。
G代码解析部分的代码很好理解的。直线移动会被加入到一个线段循环队列。
在这个队列上GRBL会对线段做前瞻处理。没错8位MCU也可以前瞻。求出
各线段的起点与终点的最快速度。有两线段就会根据线段夹角计算过渡的最
大速度。后面进来一个线段都会对前面的线段加速的。

4.protocol_execute_realtime()函数调用st_prep_buffer()函数
从做了前瞻处理处理的线段队列中取数据产生了速度定时器中断周期数据
的队列。st_prep_buffer()函数是GRBL中最难理解的。不过也不超过
320行。

5.GRBL主要是两条线,main()函数与脉冲产生的不定周期定时中断。
两个循环队列。main()函数在处理两个循环队列时,优先保证定时器
周期数据的队列。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2015-9-6 00:28:53 来自手机 | 显示全部楼层
呵呵,在stm32f1上脉冲最高不过100k。那个通讯协议也是生不如死,得修改过后才能用

出0入0汤圆

发表于 2015-9-6 02:50:48 | 显示全部楼层
不错,谢谢分享

出5入0汤圆

发表于 2015-9-6 08:12:12 来自手机 | 显示全部楼层
看看。   

出0入0汤圆

 楼主| 发表于 2015-9-7 21:11:26 | 显示全部楼层
hmd420304805 发表于 2015-9-6 00:28
呵呵,在stm32f1上脉冲最高不过100k。那个通讯协议也是生不如死,得修改过后才能用 ...

STM32用的是串口吗?
原装的GRBL用串口的很好啊!

用了stm32是USB的通信接口吗?
Arduino用的是USB转串口,通信接口用了两芯片,比一个的通信芯片当然好!


GRBL是一个很好的代码啊!看的人不多吗?还是这个代码对大家写程序没什么可借鉴的?

出0入0汤圆

发表于 2015-9-13 09:00:40 | 显示全部楼层
EasyControl 发表于 2015-9-7 21:11
STM32用的是串口吗?
原装的GRBL用串口的很好啊!


GRBL在STM32上确实使用串口
你觉得他协议好,可能是因为你没用过
涉及通信的没有校验是绝对不可信的,所以需要加校验,重发机制。
一个两个芯片没有什么不同,都是走的串行。协议层上是一样的。
总而言之:这个套码是玩具级的东西,可以参考,也可以加之改造,放到商业应用上来。
从算法方面看,简单实惠,但是有些地方还是粗暴了一点,比如说:位置的REPORT,这一段程序在M8上要跑200US,在CM3上跑70US,测得结果之后,我笑了。
看过你的作品,也明白你写EASYCONTROL的那段艰辛历程,希望以后多多交流。


出0入0汤圆

发表于 2015-9-14 20:51:42 | 显示全部楼层
浅 ~~ 哈哈~~

出0入0汤圆

 楼主| 发表于 2015-10-9 21:18:06 | 显示全部楼层
hmd420304805 发表于 2015-9-13 09:00
GRBL在STM32上确实使用串口
你觉得他协议好,可能是因为你没用过
涉及通信的没有校验是绝对不可信的,所 ...

大家多交流!GRBL真的好啊!

出0入0汤圆

 楼主| 发表于 2015-10-9 21:25:12 | 显示全部楼层

GRBL是在8位MCU上来做一个数控系统。代码不多功能不少。很有价值。

想看数控技术是一个很好的资料。

出0入0汤圆

发表于 2015-10-9 22:50:20 | 显示全部楼层
EasyControl 发表于 2015-10-9 21:18
大家多交流!GRBL真的好啊!

目前已经把它移植到STM32F4上了,目测运行良好
开启FPU运算,开优化数学库,浮点数开方啥的都不是问题了!
把不必要的运算去掉,把那悲惨的协议改一下,就可以用了。
总之就是速度杠杠的!!!
想把GRBL的加减速改成S曲线或者指数型曲线,不知道难度有多大,请大神指点一二!

出0入0汤圆

 楼主| 发表于 2015-10-10 09:45:44 | 显示全部楼层
hmd420304805 发表于 2015-10-9 22:50
目前已经把它移植到STM32F4上了,目测运行良好
开启FPU运算,开优化数学库,浮点数开方啥的都不是问题了 ...

大神不敢啊!

目前我看的代码都没用到对加加速度的控制。也没什么上机器上实际测试对比过,不太清楚啊!

加加速度控制会有明显的效果吗?3D打印速度不快可能可以不用吧。

加加速度好像对不同机器不同情况要用不同的好几个参数。

这方面您多发高见啊!

出0入0汤圆

发表于 2015-10-10 11:53:32 | 显示全部楼层
EasyControl 发表于 2015-10-10 09:45
大神不敢啊!

目前我看的代码都没用到对加加速度的控制。也没什么上机器上实际测试对比过,不太清楚啊! ...


不同加减速曲线,效果还是看得出来的:
T型曲线高速不行,冲击太大了
S曲线最平稳,但是加速减速动作慢
指数型曲线在以上两者做了平衡

你不是做了linuX-CNC的移植吗?
应该有更多的心得才对,难道LINUXCNC都是T型加速的吗?
我对LINUX CNC 的直流伺服插补比较感兴趣
能加麻花藤吗?
账号的数字就是。

出0入0汤圆

 楼主| 发表于 2015-10-10 15:15:00 | 显示全部楼层
hmd420304805 发表于 2015-10-10 11:53
不同加减速曲线,效果还是看得出来的:
T型曲线高速不行,冲击太大了
S曲线最平稳,但是加速减速动作慢

linuxcnc对机器的抖动处理是在前瞻中限速与限加速度吧。

机器冲击大了简单的方法就是限速与限加速度了。

有时间了多聊聊。

出0入4汤圆

发表于 2015-10-16 23:12:09 | 显示全部楼层
都是高手  

出0入0汤圆

发表于 2016-4-30 14:56:48 | 显示全部楼层
不知道楼主研究到啥地步了

出0入0汤圆

发表于 2016-5-1 08:39:49 来自手机 | 显示全部楼层
hmd420304805 发表于 2015-10-9 22:50
目前已经把它移植到STM32F4上了,目测运行良好
开启FPU运算,开优化数学库,浮点数开方啥的都不是问题了 ...

他的冲击大不?我也移植到了F4,但是上机还是发现存在冲击,不知道什么原因,

出0入4汤圆

发表于 2016-5-1 18:20:47 | 显示全部楼层
学学CNC,这个还是有启发

出0入0汤圆

 楼主| 发表于 2016-5-1 19:20:09 | 显示全部楼层
想要GRBL来处理前瞻,要计算得好,有难度的。MCU做这个不是强项的。

可以考虑用PC来处理了。输入G代码,输出G代码。
输入与输出中间对加速度与速度处理,夹角可以用圆弧来过渡。
圆弧又用小线段来过渡。

复杂的计算用PC了,实时的简单计算用MCU。这样会更好些吧。

出0入0汤圆

发表于 2016-5-3 19:05:50 | 显示全部楼层
qq302011 发表于 2016-5-1 08:39
他的冲击大不?我也移植到了F4,但是上机还是发现存在冲击,不知道什么原因, ...

有视频吗?
参数什么的都放上来
一起分析。
或者麻花藤,账号后面数字

出0入0汤圆

发表于 2016-5-3 19:15:28 | 显示全部楼层
EasyControl 发表于 2016-5-1 19:20
想要GRBL来处理前瞻,要计算得好,有难度的。MCU做这个不是强项的。

可以考虑用PC来处理了。输入G代码,输 ...


我觉得不是这样的:GRBL为什么会出现性能瓶颈?
不是因为算法的问题,而是STEP模块的高频中断决定的。
如果可以,可以使用CPU+CPLD的架构来处理,把STEP模块交给硬件模块来处理,这样是可以到达一个新的高度的。
但是这样系统复杂度提高了,有违GRBL的设计出发点。

出0入0汤圆

发表于 2016-5-7 12:45:54 | 显示全部楼层
hmd420304805 发表于 2016-5-3 19:15
我觉得不是这样的:GRBL为什么会出现性能瓶颈?
不是因为算法的问题,而是STEP模块的高频中断决定的。
...

即便使用FPGA也会存在冲击,但是使用以前公司自己搞的速度前瞻就没问题,不知什么原因,一直在研究,我用在切割机上面,偶尔会抖一下,各种数据分析都没找出什么原因

出0入0汤圆

发表于 2016-5-7 12:49:36 | 显示全部楼层
hmd420304805 发表于 2016-5-3 19:05
有视频吗?
参数什么的都放上来
一起分析。

图片是自己搞的板子,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出100入85汤圆

发表于 2017-9-25 08:22:31 来自手机 | 显示全部楼层
qq302011 发表于 2016-5-7 12:49
图片是自己搞的板子,

板子好漂亮,有得卖不?

出0入0汤圆

发表于 2017-9-25 12:09:28 | 显示全部楼层
whatcanitbe 发表于 2017-9-25 08:22
板子好漂亮,有得卖不?

这个项目后来取消了,由于需要上位机软件配合,我没有做上位机软件,目前只好在一些自用的项目上使用

出0入0汤圆

发表于 2017-10-13 15:08:51 | 显示全部楼层
kankan, Thanks!

出0入0汤圆

发表于 2017-11-12 16:00:41 | 显示全部楼层
感谢,学习了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 15:21

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表