注释
|
我阅读了这篇论文http://www.wseas.us/e-library/conferences/cancun2004/papers/485-304.pdf 也许可以通过降低圆弧 G2/G3 中的最大进给率来实现,因此定时器 ISR 具有更大的时间预算。 我目前正在为 ARM(Teensy 3.2 = Cortex M4)的 grbl 端口编写以上所有内容,所以如果您有兴趣请告诉我,我将在 Github 上发布一个存储库。 |
|
首先,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”。 我将开始将它移植回 Ardurino,看看它是否符合我的预期。 |
|
@usbcnc: 我大约 5 年前研究过这个问题。步进器的实现不是问题,但它会破坏计划器。您必须对其进行修改,以允许在整个圆弧中进行加速和减速,并考虑进出圆弧的过渡。并不是说你不能,而是只处理线条要容易得多。 |


@chamnit,你有没有想过把Bresenham style arc algorithm放在GRBL中?
计算机图形学中有很多信息可以解释它是如何完成的,它可以用很少的计算来最大化机器精度。到目前为止我还没有发现CNC world正在使用它。Google“中点圆算法”应该为您提供大量关于理论上如何完成的信息。
使用这种算法不仅提高了准确性,而且使用更少的内存和 CPU 功率,我做了一些小实验,代码在 STM32 目标上,代码大小比当前方法小一点。最节省的是去掉atan2的功能。我还没有在 Ardurino 上做过实验,但如果有足够的兴趣,我当然可以做。
为了保持圆弧上恒定的进给速度,我们需要改变每步中断的定时器,这也导致了每步加速的需要。这意味着我们不能使用 AMASS。每一步加速,代码节省大约额外 2KB-2.5KB。