开源改变世界!!

Bresenham 的弧算法 #768

推推 grbl 2年前 (2023-01-23) 144次浏览

关闭
VladimirLusin 打开了这个问题 2019 年 12 月 3 日 · 5 条评论
关闭

Bresenham 的弧算法#768

VladimirLusin 打开了这个问题 2019 年 12 月 3 日 · 5 条评论

注释

Bresenham 的弧算法 #768

你好。我来自俄罗斯。我使用俄语自动翻译成英语,如果文本不完全正确,我深表歉意。
我正在制作简单的 Atmega CNC 系统。我了解了您的经验,并将部分使用您的想法,特别是用于从计算机接收程序帧的环形缓冲区和运动规划器的环形缓冲区。
我想知道你为什么使用线段的弧近似?我觉得很难。需要计算三角函数,需要计算很多段。
毕竟有Bresenham构造弧的算法。它发生在整数中。
还有一种米切纳算法(这是一种改进的布雷森汉姆算法)。
在工业数控机架中,也使用评价函数法。它甚至比 Bresenham 算法更简单。
我还找到了苏联制造的CNC机架的描述,其中使用了整数微分分析仪的方法。我已经试过了。起初他在电脑上模拟——他画了圆圈。然后在 Atmega 的固件中使用。我的 CNC 绘图仪画了一个完美的圆。
如果您对这些算法感兴趣,我可以分享我的代码。

Bresenham 的弧算法 #768

运动引擎(规划器和步进驱动器)需要线段。它们可以非常小,但格式是线段,而不是像光栅图像缓冲区可以处理的随机排序的点。

经典圆弧算法基于能够以随机顺序绘制点——这在 CNC 中是不可能的;因为您必须从头到尾遵循弧线。因此,您必须在弧形算法穿过每个象限时重新执行它;这消除了经典算法实现的几个优化机会。在 ATMega328 上,没有足够的 RAM 来同时保存整个点集;它们是在 CNC 穿过圆弧时生成的。

即使有这些限制,也有可能改进电弧生成算法的性能;但是需要使用示波器进行时序测试以验证结果(关闭中断,在进入计算时将引脚切换为高电平,并在退出时再次将其切换为低电平,重新启用中断;并使用示波器查看多长时间引脚高)。

实际上,目前现有的算法似乎已经足够好了;Chamnit 的所有可用时间都花在了 Grbl 的 ARM 端口上。这并不是说您不应该尝试它。这只是说,在 ARM 版本出来并得到妥善解决之前,我不希望用它做任何事情。

😄

Bresenham 的弧算法 #768

我不批评现有的算法 GRBL。我尊重创造事物的人。只是想建议如何简化算法。
许多 CNC 系统使用 DDA 方法或评估函数方法执行圆弧插补。那已经是 30 年前甚至更早的事了。Atmega328 的功能在当时非常出色。
我认为没有必要将弧的所有点都放在缓冲区中。它们可以实时计算。对于规划器,您需要计算弧入口处和弧出口处的速度矢量。最有可能的是,速度也可以实时控制,预先计算出您需要在哪个位置开始加速或减速。我还没有这样做,但我会尝试。
好吧,我不会为建议而烦恼。继续你的工作。感谢您分享您的最佳实践。祝你好运!

Bresenham 的弧算法 #768

X 和 Y 将在整个圆弧中加速和减速

Bresenham 的弧算法 #768

是的。绕圆做匀速运动,X 和 Y 将以变化的加速度运动。
我的意思是总加速度。毕竟,如有必要,您可以开始以低等高线速度沿圆弧移动,然后逐渐增加速度,获得必要的速度,并且在圆弧结束时,如有必要,您还可以平稳地降低等高线速度。总加速度可以计算为切线加速度和向心加速度的矢量之和 (V * V / R)。

Bresenham 的弧算法 #768
贡献者

大约 8 年前,对圆形 Bresenham 进行了评估。无需过于复杂的规划和步骤算法来适应圆弧。保持简单总是更重要。

此外,Grbl 的 arc 例程通过使用小角度坐标变换来最小化所需的三角计算。它的效率足以在慢速 8 位 AVR 上运行。

喜欢 (0)