注释
|
那很奇怪。特别奇怪的是,它看起来不是线性的,而是随机的。我正在尝试重现您的错误,但似乎无法重现。我将我的 steps_per_mm 设置为 333.3333(存在一些舍入误差,将其存储在 333.33328。没什么大不了的。)。我查看了规划器在 block->step_event_count 中计算的内容,它每次为您的 5.0mm 外壳报告准确的 1667 步。2.5mm 是 833 步。15mm 为 15000 步。 所以,不确定发生了什么。最近更新了nut_bolts.c中的read_float()函数,不知是否与此有关。无论是旧的还是新的都比一个更准确。如果你弄明白了,请告诉我。 |
|
我已经检查了 read_float() ,因为我也将它反向移植到我的叉子上并且工作正常。我目前怀疑加速代码,我的印象是最后一轮加速(即速度斜率中的最后一个“步骤”)被缩短或延长了一个额外的加速滴答——有时我什至可以听到机器减速到几乎停止,然后非常缓慢地移动 5-6 步。 我正在积极挖掘这个问题,并会在我发现黄金后立即报告 |
|
那么你是在计算步进模块生成的步数吗?还是您在进行这些测试时指的是计划者计算的步骤?我知道在某些机器上,方向销需要在步进脉冲前沿前几微秒接合,这可能会导致一些漂移问题。您是否尝试在 config.h 中启用 step_pulse_delay 以查看这是否解决/排除了任何问题? |
|
由于我在机器上观察到奇怪的事情,并且机器是由 stepper.c 生成的脉冲驱动的,所以这就是我正在计算的。 |
|
我已经闪现了您发布的 0.8b 图像并进行了测试运行——同样的事情。在 5 分钟的 G 代码程序之后,累积误差约为每轴 10 步(在我的机器上每轴 0.3 毫米)。试运行的进给速度是机器最大速度的 1/8,因此运行速度过快不是问题。 我现在正在尝试使用 OpenLogic Sniffer 计算 grbl 输出的步进脉冲(以将问题隔离到 grbl 或机器),我必须以某种方式深入了解这个问题! |
|
嗯..我将自己运行步进代码,看看我是否能发现会导致这个问题的东西。希望另一双眼睛可以提供帮助。 此外,您是否排除了您的驱动程序可能会错误地接收步数的任何电噪声?您可以尝试将一个非常小的电容器与步进引脚并联放置,以帮助滤除任何噪声。 |
|
所以,我用一个简单的脉冲计数器脚本设置了一个额外的 Arduino。我将 X 设置设置为 333.3333 步/毫米并进行了所有三个测试。他们所有人的步数都是正确的。我将检查方向销是如何触发的,看看它是否失灵导致台阶向一侧或另一侧漂移。 |
|
方向销似乎正确触发。无阶跃漂移。您是否在 Arduino IDE (v1.0) 中使用与 avrdude 不同的编译器? |
|
感谢您的帮助,OpenBench Logic Sniffer 的初始测试也通过了。我需要搭建一个测试装置来测试更长的行程(OLS 可以捕获的时间跨度有限)。 avrdude 是程序员,您可能指的是 avr-gcc(编译器)。我使用的是 4.5.0 和 4.7.2,两者的(行为)结果相同。 我也在考虑使用另一个 Arduino 来计算步数,这样我就可以运行我注意到导致问题的相同 G 代码文件,并在程序完成时查看步数是否确实错误。 将报告进展情况。 |
|
听起来不错。如果我有什么可以做的,请告诉我。至少,我们已经排除了很多。 |
|
将 DIRECTION to STEP 延迟增加到 10µs 解决了这个问题,无论是“理论上”(逻辑分析仪显示 DIRECTION 改变状态和 STEP 开始脉冲之间的差距恰好 10µs 宽)和“实践”(我已经成功地完成了第一个使用 CNC 的 PCB 我正在用 grbl 驱动,它看起来很棒)。 我现在将关闭它以将其从您已经满载的盘子中取出,但我仍将研究可以在 config.h 中使用的真正最小延迟是多少,以便可以相应地更新文档。 |
|
很高兴听到你成功了!也谢谢你的更新。 |




大家好,
在过去的一个月里,我一直在努力追查这件事,几乎,但现在只有当我有一些证据时才敢提请你注意。
自从我真正开始使用 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 等。
我很乐意将调试文件和测试输入发送给任何询问的人,我似乎无法将它们附加到这个问题上。
我将继续查看问题的根源并发布更新。