Contact me: hankecnc@gmail.com

grbl 采取额外的步骤(没有双关语意) #124

推推 grbl 3年前 (2023-01-21) 166次浏览

关闭
csdexter 打开了这个问题 2012 年 10 月 12 日 · 13条评论
关闭

grbl 采取额外的步骤(没有双关语意)#124

csdexter 打开了这个问题 2012 年 10 月 12 日 · 13条评论

注释

grbl 采取额外的步骤(没有双关语意) #124

大家好,

在过去的一个月里,我一直在努力追查这件事,几乎,但现在只有当我有一些证据时才敢提请你注意。

自从我真正开始使用 grbl(即将我的 S-720 连接到它并试图蚀刻掉 PCB)以来,我注意到刀具路径中存在一种奇怪的错误。有时它在 DIP 封装中可见:一些焊盘距离轴大约 0.5mm 或更小;有时,更常见的是,工具越来越深入电路板。我对 PCB 蚀刻的第一次尝试过早地结束了,因为该工具几乎完全穿过了电路板,我所有的极客伙伴们都大笑起来。

我一一排除了电气和机械原因,随着时间的流逝,最终只剩下 grbl。所以我自己找到了问题,如果有的话,然后调试它(因为它让我发疯,我的士气因此而下降)。

说到点子上:我围绕grbl写了一个HAL(类似于jgeisler0303的模拟器思路),在本地运行它并计算了步数……我发现了与预期结果的差异。

示例:
G00 Z5.000 G00 Z0.000 G00 Z5.000
使用steps_per_mm = 333.33333(就像我的机器一样)。
结果应该是:lround(333.33333 * 5) = 1667乘以三(三笔画 0 -> 5 -> 0 -> 5)给出 5001 步,但 grbl 发出 5005 步!
用 2.5mm 重复相同的测试得到 5006 个步骤而不是 5004 个;对于 15mm,它给出 14998 步而不是 15000 等。

我很乐意将调试文件和测试输入发送给任何询问的人,我似乎无法将它们附加到这个问题上。

我将继续查看问题的根源并发布更新。

grbl 采取额外的步骤(没有双关语意) #124
成员

那很奇怪。特别奇怪的是,它看起来不是线性的,而是随机的。我正在尝试重现您的错误,但似乎无法重现。我将我的 steps_per_mm 设置为 333.3333(存在一些舍入误差,将其存储在 333.33328。没什么大不了的。)。我查看了规划器在 block->step_event_count 中计算的内容,它每次为您的 5.0mm 外壳报告准确的 1667 步。2.5mm 是 833 步。15mm 为 15000 步。

所以,不确定发生了什么。最近更新了nut_bolts.c中的read_float()函数,不知是否与此有关。无论是旧的还是新的都比一个更准确。如果你弄明白了,请告诉我。

grbl 采取额外的步骤(没有双关语意) #124
作者

我已经检查了 read_float() ,因为我也将它反向移植到我的叉子上并且工作正常。我目前怀疑加速代码,我的印象是最后一轮加速(即速度斜率中的最后一个“步骤”)被缩短或延长了一个额外的加速滴答——有时我什至可以听到机器减速到几乎停止,然后非常缓慢地移动 5-6 步。

我正在积极挖掘这个问题,并会在我发现黄金后立即报告 :-)

grbl 采取额外的步骤(没有双关语意) #124
成员

那么你是在计算步进模块生成的步数吗?还是您在进行这些测试时指的是计划者计算的步骤?我知道在某些机器上,方向销需要在步进脉冲前沿前几微秒接合,这可能会导致一些漂移问题。您是否尝试在 config.h 中启用 step_pulse_delay 以查看这是否解决/排除了任何问题?

grbl 采取额外的步骤(没有双关语意) #124
作者

由于我在机器上观察到奇怪的事情,并且机器是由 stepper.c 生成的脉冲驱动的,所以这就是我正在计算的。
我的步进放大器(我避免称它为“控制器”,因为它不像 grbl 那样控制任何东西)在 DIR/STEP 线上有触发器,所以不需要特殊的延迟(t setup /t hold)。然而,尽管我很想让它最终起作用,但我会尝试启用延迟代码,看看会发生什么——感谢您的建议。

grbl 采取额外的步骤(没有双关语意) #124
作者

我已经闪现了您发布的 0.8b 图像并进行了测试运行——同样的事情。在 5 分钟的 G 代码程序之后,累积误差约为每轴 10 步(在我的机器上每轴 0.3 毫米)。试运行的进给速度是机器最大速度的 1/8,因此运行速度过快不是问题。

我现在正在尝试使用 OpenLogic Sniffer 计算 grbl 输出的步进脉冲(以将问题隔离到 grbl 或机器),我必须以某种方式深入了解这个问题!

grbl 采取额外的步骤(没有双关语意) #124
成员

嗯..我将自己运行步进代码,看看我是否能发现会导致这个问题的东西。希望另一双眼睛可以提供帮助。

此外,您是否排除了您的驱动程序可能会错误地接收步数的任何电噪声?您可以尝试将一个非常小的电容器与步进引脚并联放置,以帮助滤除任何噪声。

grbl 采取额外的步骤(没有双关语意) #124
成员

所以,我用一个简单的脉冲计数器脚本设置了一个额外的 Arduino。我将 X 设置设置为 333.3333 步/毫米并进行了所有三个测试。他们所有人的步数都是正确的。我将检查方向销是如何触发的,看看它是否失灵导致台阶向一侧或另一侧漂移。

grbl 采取额外的步骤(没有双关语意) #124
成员

方向销似乎正确触发。无阶跃漂移。您是否在 Arduino IDE (v1.0) 中使用与 avrdude 不同的编译器?

grbl 采取额外的步骤(没有双关语意) #124
作者

感谢您的帮助,OpenBench Logic Sniffer 的初始测试也通过了。我需要搭建一个测试装置来测试更长的行程(OL​​S 可以捕获的时间跨度有限)。

avrdude 是程序员,您可能指的是 avr-gcc(编译器)。我使用的是 4.5.0 和 4.7.2,两者的(行为)结果相同。

我也在考虑使用另一个 Arduino 来计算步数,这样我就可以运行我注意到导致问题的相同 G 代码文件,并在程序完成时查看步数是否确实错误。

将报告进展情况。

grbl 采取额外的步骤(没有双关语意) #124
成员

听起来不错。如果我有什么可以做的,请告诉我。至少,我们已经排除了很多。

grbl 采取额外的步骤(没有双关语意) #124
作者

我已经测试了你的代码(官方 grbl 0.8b),有没有定义和编译的延迟,时间上似乎没有差异。这两个图像确实有不同的大小(所以我猜 #define 逻辑工作正常),但信号看起来是一样的:

  • OLS 轨迹,STEP_PULSE_DELAY=0
  • OLS 轨迹,STEP_PULSE_DELAY=5

我现在正在做“计算所有步骤”的方法。

grbl 采取额外的步骤(没有双关语意) #124
作者

将 DIRECTION to STEP 延迟增加到 10µs 解决了这个问题,无论是“理论上”(逻辑分析仪显示 DIRECTION 改变状态和 STEP 开始脉冲之间的差距恰好 10µs 宽)和“实践”(我已经成功地完成了第一个使用 CNC 的 PCB 我正在用 grbl 驱动,它看起来很棒)。

我现在将关闭它以将其从您已经满载的盘子中取出,但我仍将研究可以在 config.h 中使用的真正最小延迟是多少,以便可以相应地更新文档。

grbl 采取额外的步骤(没有双关语意) #124
成员

很高兴听到你成功了!也谢谢你的更新。

喜欢 (0)