开源改变世界!!

加速率导致呕吐… #620

推推 grbl 2年前 (2022-10-30) 271次浏览 0个评论
关闭
timryder 打开了这个问题 2015 年 3 月 7 日 · 31 条评论

注释

加速率导致呕吐... #620

好的,所以我正在用我的硬件进行一些测试,当我以更高的加速度减速率执行许多小的线性运动时,我一直在经历一些 Grbl 的错误。我有 120=600 110=1800

有了这些设置和许多改变方向的微小快速动作,grbl 只会锁定而不响应。我向它发送了一个 gcode,但没有得到任何响应。我必须软重启它。但是,如果我将加速度从 600 更改为 500,它实际上工作得很好。

同样使用相同的 600 加速度参数和大连续移动它也可以正常工作。我的应用程序需要有许多小动作。

想法?

加速率导致呕吐... #620

@timryder: 我对那个设置范围没有问题。我的一台机器默认设置为 600 mm/min^2 和 6000 mm/min 最大速度。我总是用一个有很多小线段的 g 代码程序来测试机器设置。我想这取决于您的 Grbl 设置,来自 GUI 的流是否跟上,以及您发送的线段有多小。请发布您的 Grbl 设置。

config.h 文件中还有一些其他调整可以帮助优化 Grbl 以适应您的系统。如果加速度非常高,您可能希望增加每秒的加速度记号(例如 120-150 和您的段缓冲区大小为 8 以进行补偿)并将串行波特率增加到 250,000 以帮助增加吞吐量。

加速率导致呕吐... #620

#define DEFAULT_X_STEPS_PER_MM 640.0
#define DEFAULT_Y_STEPS_PER_MM 800.0
#define DEFAULT_Z_STEPS_PER_MM 640.0
#define DEFAULT_X_MAX_RATE 1600.0 // mm/min
#define DEFAULT_Y_MAX_RATE 1600.0 // mm/min
#define DEFAULT_Z_MAX_RATE 1600.0 // mm/min
#define DEFAULT_X_ACCELERATION (600.0_60_60) // 10_60_60 mm /min^2 = 10 mm/sec^2
#define DEFAULT_Y_ACCELERATION (600.0_60_60) // 10_60_60 mm/min^2 = 10 mm/sec^2
#define DEFAULT_Z_ACCELERATION (600.0_60_60) // 10_60_60 mm/min^2 = 10 mm/sec^2
#define DEFAULT_X_MAX_TRAVEL 80.0 // mm
#define DEFAULT_Y_MAX_TRAVEL 50.0 // mm
#define DEFAULT_Z_MAX_TRAVEL 200.0 // mm
#define DEFAULT_STEP_PULSE_MICROSECONDS 10
#define DEFAULT_STEPPING_INVERT_MASK 0
#define DEFAULT_DIRECTION_INVERT_MASK (1<<Y_AXIS)
#define DEFAULT_STEPPER_IDLE_LOCK_TIME 0 // msec (0-254, 255 keeps steppers enabled)
#define DEFAULT_STATUS_REPORT_MASK ((BITFLAG_RT_STATUS_MACHINE_POSITION)|(BITFLAG_RT_STATUS_WORK_POSITION))
#define DEFAULT_JUNCTION_DEVIATION 0.02 // mm
#定义 DEFAULT_ARC_TOLERANCE 0.002 // mm
#define DEFAULT_REPORT_INCHES 1 // 错误
#define DEFAULT_AUTO_START 1 // 正确
#define DEFAULT_INVERT_ST_ENABLE 0 // 错误
#define DEFAULT_INVERT_LIMIT_PINS 0 // 错误
#define DEFAULT_SOFT_LIMIT_ENABLE 0 // 错误 #define
DEFAULT_INVERT_ST_ENABLE 0 // 错误
DEFAULT_HOMING_ENABLE 1 // 假
#define DEFAULT_HOMING_DIR_MASK (1<<Y_AXIS) // 移动正方向
#define DEFAULT_HOMING_FEED_RATE 1200.0 // mm/min
#define DEFAULT_HOMING_SEEK_RATE 500.0 // mm/min
#define DEFAULT_HOMING_DEBOUNCE_DELAY 0 // msec (0-65kPU)
#define DEFAULT_HOMING毫米

帮个忙,你能在你的系统上运行这个小片段的 Gcode 吗?

//

G20
G90
M9
F80.0000
G0 X1.4080 Y1.7509
M8
G4
P0.02 G2 X0.6178 Y1.1362 I-0.0500 J-0.7510
M9
G4
P0.02 G0 X0.1845 Y1.1884
M8
G4 P0.02
G1 X0 .2306 Y1.2370
G1 X0.2331 Y1.1884
M9
G4
P0.02 G0 X0.2321 Y1.2079
M8
G4
P0.02 G1 X0.2029 Y1.2079
M9
G4
P0.02 G0 X0.2483 Y1.1884
M8
G4 P0.02 G1 X0.2702 Y1.2370
G1 X0.2824 Y1.2370 G1 X0.2837 Y1.2369 G1 X0.2849 Y1.2365 G1 X0.2860 Y1.2361 G1 X0.2869 Y1.2354 G1 X0.2876 Y1 .2346

G1 X0.2882 Y1.2336
G1 X0.2885 Y1.2325
G1 X0.2886 Y1.2313
G1 X0.2885 Y1.2300
G1 X0.2882 Y1.2286
G1 X0.2877 Y1.2273
G1 X0.2870 Y1.2259
G1 X0.2861 Y1.2245
G1 X0.2850 Y1.2232
G1 X0.2838 Y1.2220
G1 X0.2824 Y1.2209
G1 X0.2810 Y1.2199
G1 X0.2796 Y1.2191
G1 X0.2780 Y1.2184
G1 X0 .2765 Y1.2180
G1 X0.2750 Y1.2177
G1 X0.2736 Y1.2176
G1 X0.2752 Y1.2175
G1 X0.2767 Y1.2172
G1 X0.2781 Y1.2167
G1 X0.2793 Y1.2161
G1 X0。 2803 Y1.2153
G1 X0.2813 Y1.2143
G1 X0.2820 Y1.2133
G1 X0.2825 Y1.2121
G1 X0.2829 Y1.2107
G1 X0.2830 Y1.2093
G1 X0.2829 Y1.2078
G1 X0.2827 Y1.2062
G1 X0.2823 Y1.2046
G1 X0.2816 Y1.2030
G1 X0.2808 Y1.2014
G1 X0.2798 Y1.1997
G1 X0.2786 Y1.1981
G1 X0.2773 Y1.1967
G1 X0.2759 Y1.1952
G1 X0.2743 Y1.1939
G1 X0.2727 Y1.1927
G1 X0.2710 Y1.1916
G1 X0.2692 Y1.1906
G1 X0 .2675 Y1.1899
G1 X0.2657 Y1.1893
G1 X0.2639 Y1.1888
//

加速率导致呕吐... #620

@timryder: 谢谢。我今晚回家时试试看。明天给我打电话提醒我,如果我忘记了。不过,仅从这一点来看,您的设置似乎并不少见。也不是 g 代码,尽管运动非常小,大约为 0.001 英寸。你用你的机器做什么需要这种精度?

加速率导致呕吐... #620

@timryder: 工作正常。检查您的$$设置以确保它们更新为您想要的。Grbl 在默认设置下不会自动执行此操作。

加速率导致呕吐... #620

这种情况发生在短时运动中的事实表明,这是梯形缩小为三角形的时候。这是它必须一步从 max +ve accel 到 max -ve accel 的地方。

我知道平滑 S 曲线型加速的空间非常小,但是可以使用一些软启动技术吗?我在考虑一个短的 a/2 段,这也会减少很多机械应力。

至少,至少有一个梯形梯形而不是三角形似乎是可取的。这会将反转更改为 a->0;0-> -a 而不是 +a -> -a ,即震惊的一半。

如果在这些外部更改期间可能存在软件故障,则可能也会改进软件。

加速率导致呕吐... #620

@J-Dunn: 它在我这边有效,不知道状态是什么@timryder的机器。我花了很多时间研究 v0.9 的稳定性,并确保考虑到您提到的任何潜在的短距离移动问题。Grbl 对于 CNC 铣床将遇到的预期运动范围应该是稳健的。存在一个有效范围,部分原因是浮点数和整数步长值处理的数值舍入。这是无法避免的。也已经有许多技术可以帮助四舍五入三角形速度曲线峰值等。这就是为什么 Grbl v0.9 和 v0.8 之间存在如此差异的原因,以及为什么 v0.9 可以通过复杂的刀具路径实现如此高的速率而不会丢失步骤。对我来说,它已经解决了。

至于 S 曲线,S 曲线的前瞻性规划比人们意识到的要复杂得多。这也是 LinuxCNC 仍然没有它的原因之一。TinyG 表示他们进行 S 曲线规划,但它仅在一小部分假设范围内有效,并试图强行其余部分。但是,别担心,我正在做一些特别的事情,我还不想放弃。

加速率导致呕吐... #620

好的,谢谢你的解释。如果已经有软化边缘的方法,那就太好了。我正在建造一台相当大的 CNC 路由器机器,这与我将要移动的质量有关。

事实上,这是我最初认为 grbl 不够复杂的原因之一。看起来 v0.9 可能并非如此。

事实上,我怀疑余弦曲线将是理论上的理想,而不是抛物线 S 曲线。这可以用泰勒级数的两个或三个项来计算,或者,如果不是,使用查找表。不过,在 Arduino 中可能不会有这样的空间。

我可能会尝试使用 v0.9,等到我的硬件更完善时,希望我们会有更多关于您的“惊喜”的消息。应该不错。

加速率导致呕吐... #620

我仍然遇到这个问题,但我正试图在其他地方查明它……我意识到我给你的 Gcode 部分是我的软件流编写器的输出,直到它停止……所以我需要制作另一个输出是完整的,并有礼貌地请您再次自己使用它。

@chamnit我很好奇您在开发和调试时使用的是什么实际硬件?乌诺?什么波特?什么发件人或用户界面?

我正在使用我自己的 UI 和我自己的电路板。电路板使用 FT232RL UART 桥接器,但运行 grbl 的 Arduino Duemilonove 也一样。我已经通过我的通信电路进行了环回测试,并且在任何波特率甚至超高波特率下都有 0 次失败。所以我认为它是 grbl 或 UI。我正在使用基本协议。发送一个命令等待OK,再发送一个。现在我正在使用推荐的 115k 波特。

加速率导致呕吐... #620

@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。有人多次告诉我应该这样做,但我总是在纯文本编辑器中编写代码并使用命令行。我想旧习惯很难改掉。

加速率导致呕吐... #620

@J-Dunn:至于移植到 Arduino Uno 以外的东西,您可以通过更改 config.h 中定义的 cpu 映射立即将 Grbl 编译到 Arduino Mega2560。这将为您提供足够的空间来添加东西,但 Mega 并没有更快。浮点运算在这些 8 位控制器上非常昂贵,必须尽可能地减少。Grbl 还有其他几个移植到 ARM 的端口。一个是 Teensy 3.1,另一个是 Tiva Launchpad,但我不记得他们走了多远。据我了解,移植是相当微不足道的。

加速率导致呕吐... #620

chamnit ,我同意刚性,我想尽量减少机械应力和磨损。高刚性与此相反:一些柔性或齿形皮带都有助于减轻机械冲击。

加速率导致呕吐... #620

查姆尼特说:“已经有许多技术可以帮助修整三角形速度曲线的峰值等。”

stepper.c 说:
/* BLOCK VELOCITY PROFILE DEFINITION
规划器块缓冲区是在假设恒定加速度速度曲线的情况下计划的,并且是….

如果情况不再如此,似乎需要更新评论。

代码有据可查,但 AMASS 的事情看起来需要一些头疼才能跟上。一些关于现在如何完成的文章将对遵循代码有很大帮助。;)

加速率导致呕吐... #620

@J-Dunn: Grbl 仍然是恒定的加速度。梯形/三角形峰值舍入通过其设计发生在阶梯段生成中。它不会进行真正的舍入,因为那将是 S 曲线。

加速率导致呕吐... #620

我有一个与线程无关的问题…我决定更改我的流代码以允许?在 gcode 的流式传输期间也是如此.. 在这样做时,我注意到当它 barfs 时,GRBL 的状态变为“队列”……为什么?我该如何预防?我应该以不同的方式发送我的流吗?

加速率导致呕吐... #620

@timryder:如果不查看您的流代码并了解它在做什么,则不确定。尝试使用新的 v0.9i 主控。由于诸如此类的原因,它摆脱了 QUEUE 状态。

加速率导致呕吐... #620

v0.9g,h,i 是否还有 A0 A1 A2 Start、Hold、Abort 的映射引脚?它们是否被拉低到地面并且高输入触发它们或反转?还有为在某处指定的那些引脚启用内部上拉的功能,或者这样做会是一个问题吗?我想知道我的定制板上是否有噪音,这可能会给我造成问题…..

不过谢谢,我会更新到 0.9i!

加速率导致呕吐... #620

@timryder:一切都是一样的,除了可变主轴默认启用(D11和D12交换)。您可以在 config.h 中禁用它。在 v0.9i 中,当使用一些新的 config.h 选项时,所有输入引脚都可配置为高或低触发以及启用或禁用内部上拉电阻。默认情况下,内部上拉电阻被启用并假定为低电平作为控制引脚的触发器。您可以通过 config.h 将其翻转为高触发。

加速率导致呕吐... #620

@chamnit谢谢你!我实际上并没有在我的系统中使用 Z 轴,我只使用 X 和 Y。我会将代码更改为我需要它工作的代码。

在我的流式传输过程中,我遇到了各种 RUN、IDLE、QUEUE。我可能已经破解了所有问题的外壳。我目前的 C0 C1 C2 刚刚与电路板的其余部分隔离,它们没有接地,但我正在考虑使用 10k 并将它们拉下来,或者只是为了我的努力而在固件中一起禁用它们。我将不得不踢它。

加速率导致呕吐... #620

对于速度,你想要多少速度?
我正在运行较旧的代码,从未在修订版 g 后查看过代码,但对于斜坡配置,6 轴步进中断的
最坏情况
是 16Mhz 时为 25.6 uS。
为其他中断添加 7.5uS,这是 30khz 步进频率。
如果不需要加载缓冲区,那么中断时间会缩短 10uS。
在 stepper.c 中添加两个队列槽后,步进
频率超过 100khz。
增加这个插槽也会增加频率。
缺点是,由于时序要求,对于较短的步进
脉冲长度,
步进脉冲需要在中断内部进行硬编码并
使用额外
的配置字段进行配置。
如果添加更多插槽,频率会增加。
此外,grbl 也可以在 stm32 上很好地编译,这种提升频率可能会受到硬件驱动器
的限制
,例如 A4988 步进驱动器的 500khz
,脉冲宽度为1uS,连续步进的
最小间隔为 2uS。真正的问题是,您是否
有电机可以
在 16 倍微步或 8 倍微步时每秒旋转超过 156 转或 300 rps

2015-03-18 20:29 GMT+01:00,Tim Ryder通知@github.com :

@chamnit谢谢你!我实际上并没有在我的系统中使用 Z 轴,我
只使用 X 和 Y。我会将代码更改为我需要它工作的代码。

在我的流式传输过程中,我遇到了各种 RUN、IDLE、QUEUE。
我可能已经破解了所有问题的外壳。我目前的 C0
C1 C2 刚刚与电路板的其余部分隔离,它们没有
接地,但我正在考虑使用 10k 并将它们拉下来,
或者只是为了我的努力而在固件中一起禁用它们。我将
不得不踢它。


直接回复此邮件或在 GitHub 上查看:
#620(评论)

加速率导致呕吐... #620

我将我的代码库更新到 v0.9i,到目前为止,我已经非常成功地消除了我的问题。尽管在将我的系统推到最大速度并进行各种类型的多头和空头移动的耐力测试期间,我遇到了一种奇怪的行为,我认为系统将小数位解释为错误的位置,或者可能将其翻译为 mm 而不是 in . 基本上我看到的是机器在 y 方向上正向移动到我信封之外的一个非常大的位置.. 一旦它到达那里它继续向下移动到正确的位置但我关闭了电机并让通信继续运行,这样它就不会伤害机器,我可以捕获输出日志。

这是我发送命令并记录交换的交易的链接。到目前为止,这种情况已经发生在我身上两次了……我的协议再次发送并等待“OK”响应,然后再次发送。

http://www.cmt-engineering.com/StrangeOutput.txt

你能看看我并提出任何想法吗?

编辑:我应该注意我在 Windows 中有另一个线程,它以 250 毫秒的间隔独立于其他任何东西并且无条件发送“?” 获得状态。

加速率导致呕吐... #620

那么是什么阻止了 ‘?” 被插入到 G1 字符串的中间,并导致解析器拒绝全部或部分坐标?这些Receive: error: Invalid gcode ID:24行是可疑的。

加速率导致呕吐... #620

@ashellywindows mscorlib 允许您一次发送一条线,并且同一应用程序中的任意数量的线程都可以发送它们。如果我使用“WriteLine”而不是“Write”,那么它会自动处理线程传入请求并按顺序发送它们,绝不允许在现有传输的中间插入。先进先出栈。

加速率导致呕吐... #620

@timryder:错误 24 是一个 g 代码块,它有两个使用轴 (XYZ) 字的命令。从您的 g 代码中,除了 G1 之外没有其他内容。这让我相信,由于某种原因,这条信息流被搞砸了。

加速率导致呕吐... #620

@chamnit你能想象它发生在我身上吗?也就是说从UI来说?另外,当很明显我没有发布其值接近那么高的 GCode 时,你对机器跑出它的信封有何看法……如果你查看机器状态,你会发现它正在计数到 Y 轴上的 140 英寸。我从来没有在附近指挥过。

为了测试,我将暂时禁用执行状态查询的线程。你们是否有任何已经实现的示例代码允许在流式传输期间查询状态?

加速率导致呕吐... #620

@timryder: 流很可能也破坏了这些值。你可以只放置’?g 代码程序中的字符让 Grbl 在没有额外线程的情况下返回报告。

加速率导致呕吐... #620

如果我将字符串附加到“?”,它会正常工作吗?

加速率导致呕吐... #620

是的。我在我的待办事项列表中添加了一个“回声”选项,以帮助解决此类问题。

加速率导致呕吐... #620

Echo 的编译时选项将是惊人的!

加速率导致呕吐... #620

认为这是对 Sonny 的一个问题,但是继续了解我在这些帖子中看到的代码,也许任何人都可以启发我。我的问题是 GRBL 是否允许在加工时降低进给率?例如 G01 X120,000 F120.0 将需要一分钟才能完成,如果在此期间机器开始抖动并且可能存在损坏小工具的风险,我可以发送命令降低进给速度吗?

加速率导致呕吐... #620

@LotusPack:目前还没有,但我确实编写了 v0.9 以允许实时进给率覆盖。有一些小细节我需要解决。这是 v1.0 首次亮相的主要功能。

加速率导致呕吐... #620

先生们。我对我造成的头痛感到非常抱歉……我发现我的所有问题最终都是由我在自定义 UI 中使用的日志记录功能造成的它到barf … grbl现在运行良好,没有问题:)

谢谢你们的支持!很棒的项目。

喜欢 (0)

您必须 登录 才能发表评论!