注释
|
串行端口允许高达 112500bps 的传输速率。但这归结为每个传输字节有 1 个起始位、8 个数据位和 1 – 2 个停止位。在 10 位时,您可以传输 11250 字节/秒……理论上……但这只是理论……这假设很多时序完美匹配,并且 Arduino 可以利用它获得的每一个。可以这么说,在好的一天,最大值约为 10KB。您需要做的是寻找减少需要传输的数据量的方法。如果您运行绝对坐标,请寻找 G0/G1 命令,其中一个参数不会从一个命令更改为下一个命令。如果 X 或 Y 坐标没有改变,则没有理由将其包含在第二个命令中。降低准确性也可能有所帮助。在“.”之后通常不需要超过一位数字。基于 DOS/Windows 的程序通常会将 [Cr] 和 [Lf] 添加到每一行的末尾。摆脱 [Lf] 符号也会稍微有所帮助。(这可能会给您带来 2-5% 的改善)Trygve Den 29.april 2021 kl。11.34.36 +02.00 skrev Sven ***@***.***>:
|
是的,我已经这样做了:使用 G91,仅在 S 需要更改时才发送新坐标(好的,当使用 Z 而不是 S 时,我在路线的起点和终点发送相同的 S 以避免斜坡)。 |
汇率是 115200,所以多一点 两个主要限制因素(除波特率外)是发送方传输方法(单行/等待 ok 或保持输入缓冲区已满)和规划器缓冲区大小(Grbl 中最多 256 个条目,但限于可用 RAM,默认为36?)。有关详细信息,请参阅此 grblHAL 问题 和此博客文章。 |
|
我没有提到:我使用了字符计数流协议,缓冲区大小为 127。 |
这是串行输入缓冲区大小。 规划器缓冲区大小会影响最大值。吞吐量相当大 – 至少在高进给率下。
第 26 至 33 行 bfb67f0
|
不 |
|
尝试以一半或两倍的波特率运行,以确定是否是通信限制或 AVR 根本没有足够的马力来更快地处理移动 |
为此,您必须找出瓶颈所在。IMO 它很可能是计划者缓冲区。也许您可以通过发送一连串运动命令来估算,这些命令几乎可以使计划程序缓冲区充满?或者在延迟后收到正常回复时检查您的发件人?(当规划器缓冲区饱和时) 据我们发现,在使用相当大的规划器缓冲区之前,字符计数模式下的流式 gcode 不会影响这一点。另一个可能影响这一点的因素是 8 位 CPU 的处理速度,它相当慢(与 M4F ARM 相比)并且规划器占用了很多周期…… 如果您可以访问具有更多 RAM(2560 Mega?)的控制器,您可以同时调整输入缓冲区和规划器缓冲区的大小,以了解它们如何影响吞吐量?
可能有马力但内存太少无法使用? |
|
看来:我需要自己弄清楚…首先 |
|
你能提高串行通信速度吗? |


Arduino uno 每秒可以处理多少个运动命令?
极端例子:
进给率 = 6000 毫米/分钟 = 100 毫米/秒
光栅 0.1 毫米(G91 中需要 GCode,例如 G1X0.1S100)
需要 1000 Gcode 行/秒 = ca。10000 字节/秒。
我的经验:
我在 ca 处发现了一个限制。100 Gcode 行/秒 = ca。1000 字节/秒(进给率 4000 毫米/秒 = 67 毫米/秒,0.4 毫米光栅,约 8 字节)
图像绘制开始于 4:30 https://youtu.be/7Nvf4UwK_yk?t=269
运动不流畅,因为太高进给率从 5:08 开始https://youtu.be/7Nvf4UwK_yk?t=308
或者是 USB 端口的限制?