注释
@timryder: 我对那个设置范围没有问题。我的一台机器默认设置为 600 mm/min^2 和 6000 mm/min 最大速度。我总是用一个有很多小线段的 g 代码程序来测试机器设置。我想这取决于您的 Grbl 设置,来自 GUI 的流是否跟上,以及您发送的线段有多小。请发布您的 Grbl 设置。 config.h 文件中还有一些其他调整可以帮助优化 Grbl 以适应您的系统。如果加速度非常高,您可能希望增加每秒的加速度记号(例如 120-150 和您的段缓冲区大小为 8 以进行补偿)并将串行波特率增加到 250,000 以帮助增加吞吐量。 |
#define DEFAULT_X_STEPS_PER_MM 640.0 帮个忙,你能在你的系统上运行这个小片段的 Gcode 吗? // G20 G1 X0.2882 Y1.2336 |
@timryder: 谢谢。我今晚回家时试试看。明天给我打电话提醒我,如果我忘记了。不过,仅从这一点来看,您的设置似乎并不少见。也不是 g 代码,尽管运动非常小,大约为 0.001 英寸。你用你的机器做什么需要这种精度? |
@timryder: 工作正常。检查您的 |
这种情况发生在短时运动中的事实表明,这是梯形缩小为三角形的时候。这是它必须一步从 max +ve accel 到 max -ve accel 的地方。 我知道平滑 S 曲线型加速的空间非常小,但是可以使用一些软启动技术吗?我在考虑一个短的 a/2 段,这也会减少很多机械应力。 至少,至少有一个梯形梯形而不是三角形似乎是可取的。这会将反转更改为 a->0;0-> -a 而不是 +a -> -a ,即震惊的一半。 如果在这些外部更改期间可能存在软件故障,则可能也会改进软件。 |
@J-Dunn: 它在我这边有效,不知道状态是什么@timryder的机器。我花了很多时间研究 v0.9 的稳定性,并确保考虑到您提到的任何潜在的短距离移动问题。Grbl 对于 CNC 铣床将遇到的预期运动范围应该是稳健的。存在一个有效范围,部分原因是浮点数和整数步长值处理的数值舍入。这是无法避免的。也已经有许多技术可以帮助四舍五入三角形速度曲线峰值等。这就是为什么 Grbl v0.9 和 v0.8 之间存在如此差异的原因,以及为什么 v0.9 可以通过复杂的刀具路径实现如此高的速率而不会丢失步骤。对我来说,它已经解决了。 至于 S 曲线,S 曲线的前瞻性规划比人们意识到的要复杂得多。这也是 LinuxCNC 仍然没有它的原因之一。TinyG 表示他们进行 S 曲线规划,但它仅在一小部分假设范围内有效,并试图强行其余部分。但是,别担心,我正在做一些特别的事情,我还不想放弃。 |
好的,谢谢你的解释。如果已经有软化边缘的方法,那就太好了。我正在建造一台相当大的 CNC 路由器机器,这与我将要移动的质量有关。 事实上,这是我最初认为 grbl 不够复杂的原因之一。看起来 v0.9 可能并非如此。 事实上,我怀疑余弦曲线将是理论上的理想,而不是抛物线 S 曲线。这可以用泰勒级数的两个或三个项来计算,或者,如果不是,使用查找表。不过,在 Arduino 中可能不会有这样的空间。 我可能会尝试使用 v0.9,等到我的硬件更完善时,希望我们会有更多关于您的“惊喜”的消息。应该不错。 |
我仍然遇到这个问题,但我正试图在其他地方查明它……我意识到我给你的 Gcode 部分是我的软件流编写器的输出,直到它停止……所以我需要制作另一个输出是完整的,并有礼貌地请您再次自己使用它。 还@chamnit我很好奇您在开发和调试时使用的是什么实际硬件?乌诺?什么波特?什么发件人或用户界面? 我正在使用我自己的 UI 和我自己的电路板。电路板使用 FT232RL UART 桥接器,但运行 grbl 的 Arduino Duemilonove 也一样。我已经通过我的通信电路进行了环回测试,并且在任何波特率甚至超高波特率下都有 0 次失败。所以我认为它是 grbl 或 UI。我正在使用基本协议。发送一个命令等待OK,再发送一个。现在我正在使用推荐的 115k 波特。 |
@J-Dunn: 质量应该不重要。有运行 Grbl 的巨大、沉重的 4’x8′ 木制 CNC。加速就是加速,S 曲线可以说对性能没有帮助。S 曲线运动曲线实际上以更平滑的过渡换取高端性能。但是,S 曲线确实有助于减少令人兴奋的共振模式。如果您的机器不是很硬且速度不是很快,比如拾取机器,那么 S 曲线轮廓肯定会有所帮助。对于 CNC 铣床,机器应该已经足够坚硬以考虑切削力,这样共振模式就不是问题了。 @timryder:我使用 Arduino IDE 后端工具(与直接 IDE 编译中使用的相同)编译并上传到 115200 波特的库存 Arduino Uno。我通常使用 Grbl Python 流脚本来测试 g 代码程序,因为它最小、可靠且符合规范。我偶尔会使用 GrblPanel 或 UGS 进行测试(bCNC 看起来也不错,但还没有在机器上使用过)。我不使用调试器或 Atmel Studio。有人多次告诉我应该这样做,但我总是在纯文本编辑器中编写代码并使用命令行。我想旧习惯很难改掉。 |
@J-Dunn:至于移植到 Arduino Uno 以外的东西,您可以通过更改 config.h 中定义的 cpu 映射立即将 Grbl 编译到 Arduino Mega2560。这将为您提供足够的空间来添加东西,但 Mega 并没有更快。浮点运算在这些 8 位控制器上非常昂贵,必须尽可能地减少。Grbl 还有其他几个移植到 ARM 的端口。一个是 Teensy 3.1,另一个是 Tiva Launchpad,但我不记得他们走了多远。据我了解,移植是相当微不足道的。 |
chamnit ,我同意刚性,我想尽量减少机械应力和磨损。高刚性与此相反:一些柔性或齿形皮带都有助于减轻机械冲击。 |
查姆尼特说:“已经有许多技术可以帮助修整三角形速度曲线的峰值等。” stepper.c 说: 如果情况不再如此,似乎需要更新评论。 代码有据可查,但 AMASS 的事情看起来需要一些头疼才能跟上。一些关于现在如何完成的文章将对遵循代码有很大帮助。;) |
@J-Dunn: Grbl 仍然是恒定的加速度。梯形/三角形峰值舍入通过其设计发生在阶梯段生成中。它不会进行真正的舍入,因为那将是 S 曲线。 |
我有一个与线程无关的问题…我决定更改我的流代码以允许?在 gcode 的流式传输期间也是如此.. 在这样做时,我注意到当它 barfs 时,GRBL 的状态变为“队列”……为什么?我该如何预防?我应该以不同的方式发送我的流吗? |
@timryder:如果不查看您的流代码并了解它在做什么,则不确定。尝试使用新的 v0.9i 主控。由于诸如此类的原因,它摆脱了 QUEUE 状态。 |
v0.9g,h,i 是否还有 A0 A1 A2 Start、Hold、Abort 的映射引脚?它们是否被拉低到地面并且高输入触发它们或反转?还有为在某处指定的那些引脚启用内部上拉的功能,或者这样做会是一个问题吗?我想知道我的定制板上是否有噪音,这可能会给我造成问题….. 不过谢谢,我会更新到 0.9i! |
@timryder:一切都是一样的,除了可变主轴默认启用(D11和D12交换)。您可以在 config.h 中禁用它。在 v0.9i 中,当使用一些新的 config.h 选项时,所有输入引脚都可配置为高或低触发以及启用或禁用内部上拉电阻。默认情况下,内部上拉电阻被启用并假定为低电平作为控制引脚的触发器。您可以通过 config.h 将其翻转为高触发。 |
@chamnit谢谢你!我实际上并没有在我的系统中使用 Z 轴,我只使用 X 和 Y。我会将代码更改为我需要它工作的代码。 在我的流式传输过程中,我遇到了各种 RUN、IDLE、QUEUE。我可能已经破解了所有问题的外壳。我目前的 C0 C1 C2 刚刚与电路板的其余部分隔离,它们没有接地,但我正在考虑使用 10k 并将它们拉下来,或者只是为了我的努力而在固件中一起禁用它们。我将不得不踢它。 |
对于速度,你想要多少速度? 2015-03-18 20:29 GMT+01:00,Tim Ryder通知@github.com :
|
我将我的代码库更新到 v0.9i,到目前为止,我已经非常成功地消除了我的问题。尽管在将我的系统推到最大速度并进行各种类型的多头和空头移动的耐力测试期间,我遇到了一种奇怪的行为,我认为系统将小数位解释为错误的位置,或者可能将其翻译为 mm 而不是 in . 基本上我看到的是机器在 y 方向上正向移动到我信封之外的一个非常大的位置.. 一旦它到达那里它继续向下移动到正确的位置但我关闭了电机并让通信继续运行,这样它就不会伤害机器,我可以捕获输出日志。 这是我发送命令并记录交换的交易的链接。到目前为止,这种情况已经发生在我身上两次了……我的协议再次发送并等待“OK”响应,然后再次发送。 http://www.cmt-engineering.com/StrangeOutput.txt 你能看看我并提出任何想法吗? 编辑:我应该注意我在 Windows 中有另一个线程,它以 250 毫秒的间隔独立于其他任何东西并且无条件发送“?” 获得状态。 |
那么是什么阻止了 ‘?” 被插入到 G1 字符串的中间,并导致解析器拒绝全部或部分坐标?这些 |
@ashellywindows mscorlib 允许您一次发送一条线,并且同一应用程序中的任意数量的线程都可以发送它们。如果我使用“WriteLine”而不是“Write”,那么它会自动处理线程传入请求并按顺序发送它们,绝不允许在现有传输的中间插入。先进先出栈。 |
@timryder:错误 24 是一个 g 代码块,它有两个使用轴 (XYZ) 字的命令。从您的 g 代码中,除了 G1 之外没有其他内容。这让我相信,由于某种原因,这条信息流被搞砸了。 |
@chamnit你能想象它发生在我身上吗?也就是说从UI来说?另外,当很明显我没有发布其值接近那么高的 GCode 时,你对机器跑出它的信封有何看法……如果你查看机器状态,你会发现它正在计数到 Y 轴上的 140 英寸。我从来没有在附近指挥过。 为了测试,我将暂时禁用执行状态查询的线程。你们是否有任何已经实现的示例代码允许在流式传输期间查询状态? |
@timryder: 流很可能也破坏了这些值。你可以只放置’?g 代码程序中的字符让 Grbl 在没有额外线程的情况下返回报告。 |
如果我将字符串附加到“?”,它会正常工作吗? |
是的。我在我的待办事项列表中添加了一个“回声”选项,以帮助解决此类问题。 |
Echo 的编译时选项将是惊人的! |
认为这是对 Sonny 的一个问题,但是继续了解我在这些帖子中看到的代码,也许任何人都可以启发我。我的问题是 GRBL 是否允许在加工时降低进给率?例如 G01 X120,000 F120.0 将需要一分钟才能完成,如果在此期间机器开始抖动并且可能存在损坏小工具的风险,我可以发送命令降低进给速度吗? |
@LotusPack:目前还没有,但我确实编写了 v0.9 以允许实时进给率覆盖。有一些小细节我需要解决。这是 v1.0 首次亮相的主要功能。 |
先生们。我对我造成的头痛感到非常抱歉……我发现我的所有问题最终都是由我在自定义 UI 中使用的日志记录功能造成的它到barf … grbl现在运行良好,没有问题:) 谢谢你们的支持!很棒的项目。 |
蒂姆瑞德 评论 2015 年 3 月 7 日
好的,所以我正在用我的硬件进行一些测试,当我以更高的加速度减速率执行许多小的线性运动时,我一直在经历一些 Grbl 的错误。我有 120=600 110=1800
有了这些设置和许多改变方向的微小快速动作,grbl 只会锁定而不响应。我向它发送了一个 gcode,但没有得到任何响应。我必须软重启它。但是,如果我将加速度从 600 更改为 500,它实际上工作得很好。
同样使用相同的 600 加速度参数和大连续移动它也可以正常工作。我的应用程序需要有许多小动作。
想法?