Contact me: hankecnc@gmail.com

加速度会导致呕吐… #620

推推 grbl 3年前 (2023-01-22) 241次浏览

关闭
timryder 打开了这个问题 2015 年 3 月 7 日 · 31条评论
关闭

加速度会导致呕吐…#620

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毫米/秒^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 // false
#define DEFAULT_AUTO_START 1 // true
#define DEFAULT_INVERT_ST_ENABLE 0 // false
#define DEFAULT_INVERT_LIMIT_PINS 0 // false
#define DEFAULT_SOFT_LIMIT_ENABLE 0 // false
#define DEFAULT_default_limit_0 // false
#ENABLE 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-65k)
#define DEFAULT_OFF_HOMING 0 //毫米

帮我一个忙,你能在你的系统上运行这个 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 的稳定性,并确保考虑到您提到的任何潜在的短移动问题。对于 CNC 铣床将遇到的预期运动范围,Grbl 应该是稳健的。存在一个有效范围,部分原因是浮点数的舍入和整数步长值处理。这是无法避免的。也已经有许多技术可以帮助圆整三角速度剖面峰值等。这就是为什么Grbl v0.9和v0.8之间会有如此大的差异,也是为什么v0.9可以通过复杂的刀具路径实现如此高的速度而不丢步的原因。对我来说,它已经解决了。

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

加速度会导致呕吐... #620

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

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

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

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

加速度会导致呕吐... #620
作者

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

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

我正在使用我自己的用户界面和我自己的电路板。电路板使用 FT232RL UART 桥接器,但运行 grbl 的 Arduino Duemilonove 也是如此。我已经通过我的通信电路进行了环回测试,并且在任何波特率甚至超高波特率下都出现了 0 次失败。所以我认为它是 grbl 或 UI。我正在使用基本协议。发送命令等待确定,发送另一个。现在我正在使用推荐的 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

chamnit 说:“已经有许多技术可以帮助圆整三角速度剖面峰值等。”

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

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

代码有很好的文档记录,但 AMASS 的东西看起来需要有点挠头才能理解。一些关于现在如何完成的文章将对遵循代码有很大帮助。;)

加速度会导致呕吐... #620
成员

@J-Dunn: Grbl 还在不断加速。梯形/三角形峰值圆化发生在其设计的阶梯段生成中。它不会进行真正的舍入,因为那将是一条 S 曲线。

加速度会导致呕吐... #620
作者

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

加速度会导致呕吐... #620
成员

@timryder:如果不查看您的流代码并了解它在做什么,就不确定。尝试使用新的 v0.9i master。由于诸如此类的原因,它摆脱了 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 轴步进中断的
最坏情况
是 25.6 uS 在 16Mhz 的斜坡配置。
为其他中断添加 7.5uS,这是 30khz 步进频率。
如果不需要加载缓冲区,则中断时间缩短 10uS。
在 stepper.c 中添加两个队列槽,步进
频率超过 100khz。
增加这个插槽也会增加频率。
缺点是,由于时序要求,对于较短的步进
脉冲长度,
步进脉冲需要在中断内进行硬编码并
使用额外
的配置字段进行配置。
如果添加更多插槽,频率会增加。
此外,grbl 在 stm32 上也能很好地编译,这个提升频率大概达到了硬件驱动程序
的限制
,例如 A4988 步进驱动程序的 500khz
,脉冲宽度为1uS,连续步进的
最小间隔为 2uS。真正的问题是,您是否
拥有
在 16 倍微步进时每秒超过 156 转或
在 8 倍微步进时超过 300 rps 的电机。

2015-03-18 20:29 GMT+01:00,Tim Ryder notifications@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你能想象它发生在我这边吗?也就是说从用户界面?另外,当我显然没有发布其值接近那么高的任何 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 中使用的日志记录功能引起的,它占用了计算机中太多的 CPU,这会导致它到 barf … grbl 现在运行良好并且没有问题 :)

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

喜欢 (0)