落叶知秋 发表于 2018-9-11 17:14:40

[分享]几个开源运动控制项目的源码笔记

本帖最后由 落叶知秋 于 2018-9-11 17:17 编辑

编辑说明:标题添加[分享]字样

说明
几个月前发了个帖子:https://www.amobbs.com/thread-5691704-1-1.html
是关于GRBL的源码阅读笔记的,看到还是有坛友回复感兴趣的,这几个月把其他几个我知道的开源运动控制器的源码看了下,
同样的也做了一些简单的笔记,也贴上来,如果有坛友觉得有些微帮助,或是感兴趣交流一番,也很好了。

涉及的开源运动控制项目有:
GRBL - 时间比较早,也可以算是下面3个其他项目的原型,目前也一直在更新,最大的优缺点是,简单
TinyG - 简单的cnc机床控制,机械手控制,S型加减速,最大支持6轴(非联动)
Smoothieware - 3D打印,激光切割,cnc磨床,C++编程风格,SD卡脱机
Marlin - 专攻3D打印,SD卡脱机,v2.0增加了S型加减速

注意
1.楼主自己写的文档都是用xmind软件写的,附件里面有个Marlin旧版本的PDF格式文档,是在网上找的
2.楼主看源码的顺序是:GRBL --> TinyG --> Smoothieware --> Marlin2.0
在看GRBL的时候花的时间比较长,也看的细一些,往后时间就越来越短的,对应项目的笔记也会越来越短,
原因是越看到后面越觉得框架差不多,只不过是功能上增删补漏而已
3.楼主做的笔记主要是针对项目的框架部分,即怎么去阅读整个项目的源码,同时也针对了运动控制部分
做了稍微多一些的笔记,很多细节是基本忽略掉的,如果有兴趣可以一起看代码探讨,哈哈
4.关于Marlin项目是直接看了2.0版本的,不是之前流传甚广的那个1.1版本,附件的PDF文档是写的1.1版本

文档截图
GRBL


TinyG


Smoothieware


Marlin_2.0


附件










huangguimina4 发表于 2018-9-11 17:23:19

谢谢楼主的无私奉献

su33691 发表于 2018-9-11 17:41:15

这个得顶一下。。。

honami520 发表于 2018-9-11 17:47:42

花了挺多时间研究这个得啊,不错嘛

hkjabcd 发表于 2018-9-11 18:47:46

这个感兴趣!!只是还没看过,不知难度如何?电机S曲线算法吗?多轴是否支持插补

ruzi 发表于 2018-9-11 19:21:27

谢谢楼主!

落叶知秋 发表于 2018-9-11 19:48:32

hkjabcd 发表于 2018-9-11 18:47
这个感兴趣!!只是还没看过,不知难度如何?电机S曲线算法吗?多轴是否支持插补 ...

都支持多轴插补,用的都是DDA插补,轨迹规划S型加减速是TinyG和Marlin2.0支持

落叶知秋 发表于 2018-9-11 19:49:20

honami520 发表于 2018-9-11 17:47
花了挺多时间研究这个得啊,不错嘛

哈哈,谢谢捧场

sandeant 发表于 2018-9-11 21:02:51

谢谢楼主!

kinsno 发表于 2018-9-11 21:27:35

落叶知秋 发表于 2018-9-11 19:49
哈哈,谢谢捧场

请问,你做的笔记里,有没有关于加减速的,比如:
1、从速度A上升到B速,半途中突然改成降速到C,半途中再突然改成上升速到D,即目标速度可能一直在变化。
2、从位置A向B位置运行,半途中突然修改为C位置,半途中再突然改成D位置,即目标位置,可能一直在变化。

在以上两种情况,均需要保持速度的平滑,即走S形曲线,尤其是情形2 。。。

落叶知秋 发表于 2018-9-11 21:35:53

kinsno 发表于 2018-9-11 21:27
请问,你做的笔记里,有没有关于加减速的,比如:
1、从速度A上升到B速,半途中突然改成降速到C,半途中 ...

你说的这个可以算是应用要求吧,就是速度和位置允许无限叠加。。。

楼主位的笔记里面主要是针对那几个开源运动控制器软件框架的分析,
和运动控制部分的数据流和关键实现流程,工艺一般都是G代码解析器来解析,
然后系统通过前瞻、速度规划和DDA插补来实现电机运动。

你提的应用要求,笔记里面没有,但我觉得那几个开源运动控制器都可以实现这个应用需求

kinsno 发表于 2018-9-11 21:38:17

落叶知秋 发表于 2018-9-11 21:35
你说的这个可以算是应用要求吧,就是速度和位置允许无限叠加。。。

楼主位的笔记里面主要是针对那几个开 ...

可能是吧,我关注的是算法问题,你关注的是框架问题,哈哈。
这些代码,都是LINUX下的吗,还是单片机框架的?有对应的板子可以玩吗?




落叶知秋 发表于 2018-9-11 21:49:43

kinsno 发表于 2018-9-11 21:38
可能是吧,我关注的是算法问题,你关注的是框架问题,哈哈。
这些代码,都是LINUX下的吗,还是单片机框架 ...

单片机下的,最早是avr,现在基本都已经或正在往arm转

yinian 发表于 2018-9-11 22:30:48

非常感谢,关注学习下

HJJ2008 发表于 2018-9-11 23:50:53

谢谢楼主!

dboyzju 发表于 2018-9-12 00:03:12

感谢楼主无私奉献!

90soso 发表于 2018-9-12 08:54:57

不错~~~支持

boycn 发表于 2018-9-12 08:59:40

这个要顶一下,谢谢分享

天使之翼 发表于 2018-9-12 09:41:50

对学习运动控制算法有很大的帮助

654705188 发表于 2018-9-12 10:09:13

mark 3D打印CNC电机控制

lhaoyue 发表于 2018-9-12 10:16:33

mark 开源运动控制

kxm2008 发表于 2018-9-12 23:57:34

谢谢楼主无私奉献

cpumaker 发表于 2018-9-13 00:59:03

支持闭环控制吗?

cpumaker 发表于 2018-9-13 00:59:03

支持闭环控制吗?

cpumaker 发表于 2018-9-13 00:59:03

支持闭环控制吗?

落叶知秋 发表于 2018-9-13 08:35:38

cpumaker 发表于 2018-9-13 00:59
支持闭环控制吗?

不支持,楼主位的几个项目都主要是步进开环控制模式,
有外接编码器的接口,但闭环控制还没有实现

su33691 发表于 2018-9-13 09:13:40

绝大部分的控制器均不支持闭环控制。
伺服驱动器通过接收编码器信号,完成闭环控制。

落叶知秋 发表于 2018-9-13 09:17:45

su33691 发表于 2018-9-13 09:13
绝大部分的控制器均不支持闭环控制。
伺服驱动器通过接收编码器信号,完成闭环控制。 ...

哈哈,这种模式一般被称为“半闭环”

zengyi703 发表于 2018-9-13 09:20:23

谢楼主分享

su33691 发表于 2018-9-13 10:39:35

我用过很多广数、KND的数控系统,驱动电机的信号均为4个信号8根线。
号称2us一个翻转,250KHZ的频率输出。

落叶知秋 发表于 2018-9-13 11:15:10

su33691 发表于 2018-9-13 10:39
我用过很多广数、KND的数控系统,驱动电机的信号均为4个信号8根线。
号称2us一个翻转,250KHZ的频率输出。 ...

那些系统应该是配伺服电机的吧,而且他们一般的架构不是楼主位的那样的,纯单片机控制,
一般都是DSP+FPGA控制,脉冲频率可以做的很高

su33691 发表于 2018-9-13 11:53:48

落叶知秋 发表于 2018-9-13 11:15
那些系统应该是配伺服电机的吧,而且他们一般的架构不是楼主位的那样的,纯单片机控制,
一般都是DSP+FPG ...

广数、KND的数控系统均不区分步进电机和伺服电机,
4个信号:脉冲,方向,使能,报警。

zhang0352505 发表于 2018-9-13 11:58:25

多谢楼主,先收藏一下,以后有空看

cloudboy 发表于 2018-9-13 11:58:37

运动控制器 开源,记下了

落叶知秋 发表于 2018-9-13 12:01:24

su33691 发表于 2018-9-13 11:53
广数、KND的数控系统均不区分步进电机和伺服电机,
4个信号:脉冲,方向,使能,报警。
...

这个楼主是知道的,脉冲型驱动器的接收端信号基本就这些,但步进电机控制的脉冲频率不能太高,特别是开环的,脉冲频率高了(转速高了)丢步严重,
所以一般这些面向机床和加工中心的数控系统偏向配伺服电机

su33691 发表于 2018-9-13 12:10:23

落叶知秋 发表于 2018-9-13 12:01
这个楼主是知道的,脉冲型驱动器的接收端信号基本就这些,但步进电机控制的脉冲频率不能太高,特别是开环 ...

你说的这些情况是数控机床编程时要考虑的事。实际上输出的脉冲频率很低。既使步进电机也运行的很好。

saomao 发表于 2018-9-13 12:59:48

此处留名,后续细细研究下

maqian 发表于 2018-9-13 13:47:28

回头有空了好好看看

LCH201328 发表于 2018-9-14 13:00:39

工作的内容就是运动控制卡,有空看看

475627406 发表于 2018-9-17 09:24:44

哪个速度最快,marlin2.0能跑200k了不

落叶知秋 发表于 2018-9-17 10:09:37

475627406 发表于 2018-9-17 09:24
哪个速度最快,marlin2.0能跑200k了不

这个看用什么芯片吧,脉冲发生的机制大同小异,就看处理器的速度了

ZDHCKJS 发表于 2018-9-17 12:28:52

谢谢分享

bsz84 发表于 2018-9-17 22:21:15

有空好好看看,谢谢分享!

windancerhxw 发表于 2018-9-27 10:45:04

这个必须得顶一下:mark ::几个开源运动控制项目的源码笔记

jetta2014 发表于 2018-9-27 13:41:19

有空要学习一下,谢谢楼主!

lsy5110 发表于 2018-9-27 14:39:19

有空看看

hy317 发表于 2018-9-27 15:55:35

谢谢楼主!

qq635274216 发表于 2018-9-30 17:22:25

硬件平台是什么?

holdkcsxym 发表于 2018-9-30 17:41:56

下载看看,纯软件算吗

vermon 发表于 2018-9-30 17:50:01

qq635274216 发表于 2018-9-30 17:22
硬件平台是什么?

大多都支持arduino   8位机能写到这个水平 确实不得不佩服

落叶知秋 发表于 2018-9-30 19:21:07

vermon 发表于 2018-9-30 17:50
大多都支持arduino   8位机能写到这个水平 确实不得不佩服

现在也逐渐转向ARM的32位芯片了

XTXB 发表于 2018-11-10 22:09:10

本帖最后由 XTXB 于 2018-11-10 22:12 编辑

楼主用心了,感谢分享!正在玩光驱写字机,咱是菜鸟,看grbl一头雾水,学习了。

advarx21ic 发表于 2018-11-10 23:11:18

简直要膜拜了,很棒,感谢分享.

JohnSmith 发表于 2018-11-11 21:53:18

学习一下,谢谢楼主分享。

yangxizhong 发表于 2018-11-12 07:53:17


谢谢楼主!

nn5499 发表于 2018-11-13 09:43:29

这个很厉害。

whf199191 发表于 2018-11-13 19:27:37

楼主厉害!下载下来看看

sbsdys 发表于 2018-12-18 10:17:42

非常感谢楼主!

hopeqiu 发表于 2018-12-18 10:44:17

谢谢楼主分享

robincui 发表于 2018-12-18 11:07:42


谢谢楼主分享

txl216 发表于 2018-12-18 13:03:13

不错,谢谢楼主分享

孤鸿寄语 发表于 2019-5-14 18:53:25

感谢大佬

PCBBOY1991 发表于 2019-10-5 11:02:58

还没看代码,不知道移植到C8051上是不是同样的道理啊?

落叶知秋 发表于 2019-10-5 14:00:28

PCBBOY1991 发表于 2019-10-5 11:02
还没看代码,不知道移植到C8051上是不是同样的道理啊?

算法部分都通用的,底层改一改吧

PCBBOY1991 发表于 2019-10-5 14:41:59

落叶知秋 发表于 2019-10-5 14:00
算法部分都通用的,底层改一改吧

好的,谢谢,有空研究一下!

dragonbbc 发表于 2019-10-5 14:53:28

不错不错,MARK

feibagezib 发表于 2019-10-5 18:59:18

Mark 一个

end2000 发表于 2019-10-5 22:13:16

GRBL,记号一下。

lf8013 发表于 2019-10-7 15:47:29

谢谢楼主无私分享,必须的顶一下{:victory:}

jiangyimfs1 发表于 2019-10-7 21:05:55

这个厉害了,要学习一下了

308594151 发表于 2019-10-8 10:58:50

支持一下

yofa2008 发表于 2019-10-8 12:10:37

学习一下

笨笨仔 发表于 2019-10-8 17:07:36

谢谢楼主,挺厉害的

闲鱼翻身 发表于 2019-10-8 20:18:55

感谢分享。。。

nango 发表于 2019-12-21 09:10:40

请教楼主,tinyg的固定频率输出是怎么控制加减速的?类似于PWM的机制吗?

落叶知秋 发表于 2019-12-21 14:32:58

nango 发表于 2019-12-21 09:10
请教楼主,tinyg的固定频率输出是怎么控制加减速的?类似于PWM的机制吗?

固定频率就相当于时基,规划加减速的时候就把路径以时基为最小单位离散成运动段
速度快就一个时基发一个脉冲,速度慢就若干个时基发一个脉冲,误差为一个时基

nango 发表于 2019-12-25 10:31:42

本帖最后由 nango 于 2019-12-25 10:33 编辑

落叶知秋 发表于 2019-12-21 14:32
固定频率就相当于时基,规划加减速的时候就把路径以时基为最小单位离散成运动段
速度快就一个时基发一个 ...

感谢楼主,这么久的帖子还能回复我的问题。我现在的想法是最终能够每个周期(比如1ms)输出各个轴的位置信息,以便放在EC总线上,之前研究了很久GRBL,最后发现GRBL生成脉冲时定时器间隔会变,这样就无法在确定的周期时间点输出各个轴的位置。想利用tinyG的时基固定的特性,固定地在每个周期输出位置,但是现在还么研究透,不知道是否可行,想问问楼主有没有什么建议{:titter:}

落叶知秋 发表于 2019-12-25 11:20:42

nango 发表于 2019-12-25 10:31
感谢楼主,这么久的帖子还能回复我的问题。我现在的想法是最终能够每个周期(比如1ms)输出各个轴的位置 ...

总线式的就把stepper部分去掉就好了,然后速度规划部分如果还是在后台处理,那就另外在定时器里面取运动buffer出来,发给总线设备就好了,注意加减速计算的时基要和定时器周期对上
如果加减速换成了在定时器中处理,则参考一下时间分割的方法,算完直接发给总线就好了

xiaoliang8071 发表于 2019-12-25 12:46:30

感谢楼主,太好了

atonghua 发表于 2020-2-28 10:13:05

支持楼主 厉害!!!

liang16888 发表于 2020-3-3 23:07:11

Thank you !!!

WOTASOM 发表于 2020-3-30 04:35:16

楼主厉害!强贴必须MARK

zyw19987 发表于 2020-3-30 07:43:59

有没有和我一样的,控制小白(g码是啥都不懂)希望有对应的硬件来学习实操一下。

lizuqing 发表于 2020-3-30 21:53:10

这个得顶一下。。。

aidyaish 发表于 2020-4-30 15:40:06

顶!楼主太厉害了!

jiajia88 发表于 2020-7-17 10:22:43

感谢楼主分享

lizhengjun 发表于 2020-7-21 16:39:46

感谢楼主分享,学习下

ccccmagicboy 发表于 2020-7-22 09:13:13

很好的资料,非常有用。

liang16888 发表于 2020-7-25 11:34:55

正好需要 感谢

吕布MCU 发表于 2020-7-26 09:31:50

正好需要,谢谢

ddcour 发表于 2020-7-28 07:04:32

这个厉害了!

Gram_Liu 发表于 2020-8-7 10:15:42

感谢楼主的分享

wqm8181 发表于 2020-8-9 14:22:12

谢谢分享

bule 发表于 2020-8-9 22:35:17

谢谢楼主的分享

MoMo_avr 发表于 2020-9-18 11:00:18

留下脚印,时刻关注。

Excellence 发表于 2020-9-18 13:42:44

MARK.


学习一下。

wth 发表于 2020-10-5 16:41:11

感谢楼主,学习一下

renstone 发表于 2020-10-5 16:50:30

跟着学习一下

jiajia88 发表于 2020-10-30 17:03:57

谢谢分享

lnso 发表于 2020-11-1 06:46:45

学习一下
页: [1] 2
查看完整版本: [分享]几个开源运动控制项目的源码笔记