Contact me: hankecnc@gmail.com

GRBL中的Bresenham风格弧算法? #1137

推推 grbl 3年前 (2023-01-23) 261次浏览

关闭
usbcnc 打开了这个问题 2016 年 11 月 23 日 · 3条评论
关闭

GRBL中的Bresenham风格弧算法?#1137

usbcnc 打开了这个问题 2016 年 11 月 23 日 · 3条评论

注释

GRBL中的Bresenham风格弧算法? #1137

@chamnit,你有没有想过把Bresenham style arc algorithm放在GRBL中?
计算机图形学中有很多信息可以解释它是如何完成的,它可以用很少的计算来最大化机器精度。到目前为止我还没有发现CNC world正在使用它。Google“中点圆算法”应该为您提供大量关于理论上如何完成的信息。

使用这种算法不仅提高了准确性,而且使用更少的内存和 CPU 功率,我做了一些小实验,代码在 STM32 目标上,代码大小比当前方法小一点。最节省的是去掉atan2的功能。我还没有在 Ardurino 上做过实验,但如果有足够的兴趣,我当然可以做。

为了保持圆弧上恒定的进给速度,我们需要改变每步中断的定时器,这也导致了每步加速的需要。这意味着我们不能使用 AMASS。每一步加速,代码节省大约额外 2KB-2.5KB。

GRBL中的Bresenham风格弧算法? #1137

我阅读了这篇论文http://www.wseas.us/e-library/conferences/cancun2004/papers/485-304.pdf
并且我认为这在 Arduino 上会很困难,因为它每步至少需要 3 次乘法。
正如您所提到的,要通过弧线保持恒定速度也并不简单……

也许可以通过降低圆弧 G2/G3 中的最大进给率来实现,因此定时器 ISR 具有更大的时间预算。
对于 G0,它始终是一条直线,因此这些可以更快。
我会坚持使用 AMASS,但只有在你有时间的时候,也就是进给率较低的时候。

我目前正在为 ARM(Teensy 3.2 = Cortex M4)的 grbl 端口编写以上所有内容,所以如果您有兴趣请告诉我,我将在 Github 上发布一个存储库。

GRBL中的Bresenham风格弧算法? #1137
作者
USBCNC 评论了 2016 年 11 月 24 日  

首先,Bresenham 算法被移出了 ISR 线或弧,因此时间预算问题不是问题。
其次,我改进了弧计算的版本,并且在计算点时不使用乘法。但是要计算时间(保持恒定速度),我需要做一些除法。

到目前为止,在浮点数或整数计算方面,分辨率的组合导致了几个偏差。

情况 1. X 和 Y 都具有相同的步长/mm,无论是否为浮点数,这都可能导致只有整数加号和减号。

Case 2. X 和Y 不同step/mm,都是整数,那么只用整数加减。这是椭圆不是圆。

Case 3. X和Y不同step/mm且都是浮点数,则需要浮点数加减1/3左右。2/3仍然是整数计算。这就是我现在正在做的。但其他两种情况要简单得多,占用的 CPU 空间也更少。

我正在试验廉价的 STM32(皮质 M3)电路板,该电路板广泛供应,运费约为 1.6 美元。在速卖通上搜索“stm32f103c8t6 board”。
它有 64KB 公布的闪存,但实际上是 128KB 闪存。20KB 内存。它更有能力容纳 GRBL。由于它没有EEPROM,我用1K的ram和1K的flash来模拟EEPROM。它内置USB作为串行端口工作。
GRBL 的初始端口已经在 github 上了。Bresenham 风格的弧线还没有完成,因为它还没有完成。此外,我可能会考虑在提供源代码之前发布我的算法。

我将开始将它移植回 Ardurino,看看它是否符合我的预期。

GRBL中的Bresenham风格弧算法? #1137
成员

@usbcnc: 我大约 5 年前研究过这个问题。步进器的实现不是问题,但它会破坏计划器。您必须对其进行修改,以允许在整个圆弧中进行加速和减速,并考虑进出圆弧的过渡。并不是说你不能,而是只处理线条要容易得多。

喜欢 (0)