开源改变世界!!

光栅性能慢 #125

推推 grbl 2年前 (2022-10-23) 624次浏览 0个评论
关闭
farbefreak打开了这个问题 on 10 Mar· 15 条评论
关闭

光栅性能慢#125

farbefreak打开了这个问题 on 10 Mar· 15 条评论

注释

光栅性能慢 #125

大家好,

我为 Arduino Due (SAM3X8E) 编译了 grblHAL。我之前在 Arduino Uno (328p) 上使用过 grbl。
我发现 uno 对于光栅扫描图像来说太慢了。所以我希望在到期时有更好的表现。

可悲的是我仍然不能超过 7000 毫米/分钟的雕刻速度。(上面的卡顿/抖动运动)
我的 DIY 雕刻机/切割机在物理上能够达到 20000 毫米/分钟的移动速度和 4000 毫米/s² 的加速度。
所以我希望能达到这些速度。

我在 Mac 上使用了带有 Lightburn 的 nativ usb 串行接口。
我将光刻设置为 2Mbaud。
我可以验证串行连接不是问题,因为可归档的最大速度没有随着串行波特率的降低而改变。

我尝试将 grbl/config.h 中的 BLOCK_BUFFER_SIZE 增加到 512

我还尝试增加/减少 ACCELERATION_TICKS_PER_SECOND(50 到 200)。
最后尝试更改 SEGMENT_BUFFER_SIZE。

在雕刻灰度时,我无法达到更高的速度。

有什么想法可以提高速度吗?

谢谢你的支持。

光栅性能慢 #125
贡献者

特热约 评论 3月10日

不要将 BLOCK_BUFFER_SIZE 增加太多,因为处理器没有 FPU(浮点单元) – 100 -200 更好?

IMO 将 SEGMENT_BUFFER_SIZE 和 ACCELERATION_TICKS_PER_SECOND 保留为默认值。我没有检查ACCELERATION_TICKS_PER_SECOND的影响,AFAIKT SEGMENT_BUFFER_SIZE没多大关系。

X 轴的步长/毫米设置是多少?

如果你想要高速,没有什么能比得上 Teensy 4.1…

光栅性能慢 #125
作者

怪胎 评论 on 10 Mar

我目前使用 16 微步的 20 齿滑轮。这相当于 80 步/毫米。

以 7000mm/min 的速度,这应该等于步频:
(7000mm/min*80steps/mm)/60=9,33Khz
所以实际上相当“慢”。
我猜步进脉冲速度不是瓶颈(因为我可以以 20m/min 的速度驾驶机器而不会卡顿)而是 pwm 更新时间?

我不认为原始 CPU 性能会成为问题,因为我发现启用/禁用动态功率缩放不会影响速度。
我猜想如果 CPU 功率是瓶颈,功率缩放所需的额外计算会减慢速度。

我有一个可以测试的 ESP32。它具有 FPU,你认为我会比 SAM3X8E 更快吗?
应该是因为它提供 240Mhz 2core vs 84Mhz,所以理论上大约快 6 倍。
这相当于 42m/min 的光栅扫描速度,这将比我的机械师更快。

您是否有任何关于您的软件与 teensy/ESP32 相结合的能力(光栅扫描速度)的信息?

光栅性能慢 #125
贡献者

特热约 评论 3月10日

我在 Mac 上使用了带有 Lightburn 的 nativ usb 串行接口。

也试试编程端口 – 我得到了高进给率,但我没有连接电机,所以无法判断它是否口吃。卡顿可能是由于 USB 外围设备开销/IRQ 优先级造成的。

我有一个可以测试的 ESP32。它具有 FPU,你认为我会比 SAM3X8E 更快吗?

它应该是因为它有一个 FPU——虽然与 ARM M4F/M7 内核相比,它的速度相当慢。

您是否有任何关于您的软件与 teensy/ESP32 相结合的能力(光栅扫描速度)的信息?

我已将 Teensy 4.1 驱动器推至70.000 毫米/分钟以上,同样没有电机。我没有分析过 ESP32 驱动程序,所以我不知道它的功能。

光栅性能慢 #125
作者

怪胎 评论 3月10日  

我再次检查了到期。我实际上得到了运行 grbl 的 UNO 的 5 倍左右的性能。所以进步很大。
这实际上是有道理的,因为 uno 以 16Mhz 运行,而 Due 以 84Mhz 运行,这大约快 5 倍,不考虑架构更改。

我也尝试过使用串口,​​这个性能实际上有点差。我只能让端口在 115200 运行,所以这可能是其中的一部分。
我尝试在 /stream.h 文件中定义
“#define BAUD_RATE 500000” ,但它没有任何区别。

也试试编程端口 – 我得到了高进给率,但我没有连接电机,所以无法判断它是否口吃。卡顿可能是由于 USB 外围设备开销/IRQ 优先级造成的。

高进给率是什么意思?
使用您的 SenderIO 应用程序和积极缓冲时,我得到大约 5200 毫米/分钟,而在积极缓冲关闭时,我得到大约 3600 毫米/分钟。那是与 nativ USB 端口。

使用串行端口(我无法达到 115200 波特以上)我只能获得 2500 毫米/分钟的进给率。
似乎慢速端口在这里受到限制。

看来我应该试试 ESP32

光栅性能慢 #125
贡献者

德雷斯科 评论 3月12日

@terjeio有什么让我很困惑。。

出于好奇,我greyscale_raster_test.nc从上面链接的问题中获取了文件——尝试裸露的 Teensy 和 H743 板(均设置为最大 50,000 毫米/分钟和 1,000 毫米/秒2 加速度)。我只能通过 USB 连接进行测试——正如你在另一个问题中所说,规划器缓冲区在两块板上都缺乏。

但是,接收缓冲区似乎已被填满(通常在任何时候都有 20-40 个字节空闲)。我无法理解的是,如果是 USB 数据传输问题,那么接收缓冲区肯定也会被饿死吗?或者 MCU 上是否有额外的开销,导致数据不够快地从接收缓冲区中取出?

(顺便说一下,H743 的运行时间略低于 10 分钟,而 Teensy4.1 的运行时间略低于 20 分钟,因此 H743 端口看起来很有希望)。

光栅性能慢 #125
贡献者

德雷斯科 评论 3月13日

@terjeio有什么让我很困惑。。

啊不,忽略我,我是个白痴:)我忘记启用激光模式,所以每次功率变化都会停止运动!现在,Teensy 大约需要 40 秒,H743 大约需要 22 秒。

(虽然已经发现了 H7 端口的一个问题,因为它有时会在中途停顿几秒钟,将对此进行调查)。

光栅性能慢 #125
贡献者

特热约 评论 3月16日

我对光栅性能进行了更多测试。我可以通过进给率和加速度的某些组合获得进给率超调 – 我猜这是由于处理器负载太高,因为我在 Teensy 驱动程序中看不到这一点。当减速发生时,计划器缓冲区会被饿死(未满)。

不过已经发现了 H7 端口的一个问题,因为它有时会在中途停顿几秒钟

延迟是否大致对应于主步进定时器的完整计数 (2^32) 所需的时间?

光栅性能慢 #125
贡献者

德雷斯科 评论 3月16日

延迟是否大致对应于主步进定时器的完整计数 (2^32) 所需的时间?

啊哈,是的。我没有注意到,但始终是 17.89s,对应于 240MHz 的定时器时钟速率。

顺便说一句,在查找时,我注意到步进计时器的计算不一定正确。我需要将 x2 乘数的检查添加到 driver_init() – 其他 STM32 设备也可能相同..?

diff --git a/Src/driver.c b/Src/driver.c
index 9a99a99..9a4e23d 100644
--- a/Src/driver.c
+++ b/Src/driver.c
@@ -1758,13 +1758,18 @@ bool driver_init (void)
     __HAL_RCC_GPIOF_CLK_ENABLE();
     __HAL_RCC_GPIOG_CLK_ENABLE();
 
+    RCC_ClkInitTypeDef clock;
+    uint32_t latency;
+
+    HAL_RCC_GetClockConfig(&clock, &latency);
+
     hal.info = "STM32H743";
     hal.driver_version = "211211";
 #ifdef BOARD_NAME
     hal.board = BOARD_NAME;
 #endif
     hal.driver_setup = driver_setup;
-    hal.f_step_timer = HAL_RCC_GetPCLK2Freq();
+    hal.f_step_timer =  HAL_RCC_GetPCLK2Freq() * (clock.APB2CLKDivider == 0 ? 1 : 2);
     hal.rx_buffer_size = RX_BUFFER_SIZE;
     hal.delay_ms = &driver_delay;
     hal.settings_changed = settings_changed;
光栅性能慢 #125
贡献者

德雷斯科 评论 3月16日  

今天早上重新测试,将 hal.f_step_timer 设置为实际的计时器时钟频率,并且不再看到挂起 – 尽管它将运行时间从 ~22 秒增加到 45 秒。

编辑:在检查了一些时间之后,我可以看到运行时间的变化是有意义的,就像之前以预期/报告速度的 2 倍移动一样。

光栅性能慢 #125

在测试我即将进行的激光重建时,我在 Teensy 4.1 板上以 256 步/毫米的速度在 18000 毫米/分钟发现了这个问题。我想达到 36000 毫米/分钟左右,但我们将在本周末将硬件安装到激光器中后看看情况如何。我正在使用 LightBurn 生成 G 代码,并将 LightBurn 或 ioSender 作为我的发件人。

使用光栅中的垂直框作为我的测试文件,我将它们的宽度和间距更改得更近,直到控制器似乎开始滞后。一旦我达到大约 2x2mm(宽度/间隙)的间距,电机的指令速度就会听得见下降,ioSender 报告为 17119mm/min。Lightburn 也会发生这种情况,但我看不到进给率。一旦间距达到 1mmx1mm,速度就会下降到 12119mm/min,并且 ioSender 会开始卡顿,而不会开启积极的缓冲。间距低至 0.5 毫米,进给速度低至 8569 毫米/分钟。我认识到这对于 g 代码规划器来说是一个极端情况,但它是一个有趣的边缘情况。只要激光功率在减速期间表现正常,我就会认为这是一个优雅的“失败”。

明天有更多时间进行测试的想法:
更改微步以查看步脉冲率是否会改变这种行为。
修改规划/流媒体缓冲区的大小
通过以太网而不是 Teensy USB流媒体
将某些东西连接到主轴输出以监控“激光”功率。

光栅性能慢 #125
贡献者

德雷斯科 评论 4 月 1 日

@SRFirefox出于兴趣,你能分享你的测试文件吗?谢谢!

光栅性能慢 #125

是的。这些中的每一个都设置为18000mm / min。玩得开心!另外:更改 step/mm 设置什么也没做。

raster_testfile.zip

光栅性能慢 #125
贡献者

特热约 评论 4 月 1 日

您的 $0 设置是多少(步进脉冲时间)?
使用 $0=3 并将规划器缓冲区设置为 500 个步进脉冲在我的范围 @ 36000mm/m 上看起来不错。
test05x05.nc 在 00:18 以检查模式通过 USB 传输,~200Kb/s。

提示:您可以使用ioSender 中的文件 > 转换 > 压缩来减小文件大小。

光栅性能慢 #125

很酷。脉冲时间可能设置为 8uS,但更重要的是我从源代码编译并忽略了将规划器缓冲区更改为高于 36 的值。我已将源更改为 1024 缓冲区大小,我将脉冲时间更改为 3我回到硬件。也很高兴知道本机 USB 正在检查模式下对数据进行爆破。少一件需要担心的事情。我很想看看它在以太网模式下的表现,一些电流隔离可能会很好。

感谢您检查文件。我会在早上回来报告 – 我很高兴有一台更容易破解的机器!

光栅性能慢 #125

将规划器缓冲区更改为 1024 段,一切运行顺利。我的激光光栅以 48000 毫米/分钟的速度舒适地进行,如果我小心的话,它可以加速到 60000 毫米/分钟。但这应该可以处理我可以扔给它的所有东西,尽管我确信黑客空间中的其他激光用户之一会证明我错了。到目前为止,它看起来甚至比旧控制器更好。

光栅性能慢 #125 grblHAL锁定并限制与合作者的对话 on 12 Sep
光栅性能慢 #125 terjeio将此问题转化为讨论 #189 on 12 Sep

这个问题被转移到讨论中。

你可以在那里继续对话。前往讨论 →

喜欢 (0)

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