3、逐点比较法(二):圆弧插补原理、象限处理与过象限问题、终点判别方法

好,我们接着聊逐点比较法。上一章讲了直线插补,这一章轮到圆弧了。说实话,圆弧插补在实际加工中比直线更常见——倒角、圆角、螺纹、球面,哪哪都离不开它。我个人习惯把圆弧插补看作是「带曲率的直线插补」,本质上还是逐点比较那一套逻辑,只不过偏差计算换了个公式。

3.1 圆弧插补的基本原理

先想一个问题:我们要走一段圆弧,怎么判断当前点是在圆内还是圆外?

很简单。设圆心在原点,圆弧半径为 R,当前点坐标为 (x, y)。那么偏差值 F 就是:

F = x² + y² - R²

如果 F = 0,点在圆上;F > 0,点在圆外;F < 0,点在圆内。嗯,就这么直白。

那下一步往哪走?这取决于我们走的是顺时针还是逆时针,以及当前在圆内还是圆外。我总结了一个口诀,你记一下:

  • 逆时针(CCW):F ≥ 0 时走 -X 方向(向圆内修正),F < 0 时走 +Y 方向(向圆外修正)
  • 顺时针(CW):F ≥ 0 时走 -Y 方向,F < 0 时走 +X 方向

为什么这样定?说白了就是「让偏差绝对值减小」。我在调试第一台数控铣床时,就因为这个方向搞反了,结果刀具在工件上画了个大大的螺旋线……嗯,从那以后我再也不敢凭感觉记了,直接画个坐标系贴在操作台上。

3.2 象限处理——四个象限的偏差计算

刚才说的是第一象限的情况。但实际加工中,圆弧可能跨越四个象限。每个象限的进给方向都不一样,你得小心。

我们以逆时针圆弧为例,看看四个象限的进给规则:

象限 F ≥ 0 进给方向 F < 0 进给方向
第一象限 -X +Y
第二象限 +Y -X
第三象限 +X -Y
第四象限 -Y +X

你发现规律了吗?其实每个象限的规则,就是把第一象限的规则「旋转」一下。我个人习惯用「象限映射法」来写代码——先判断当前点在第几象限,然后查表决定进给方向。这样代码结构清晰,不容易出错。

核心要点:象限判断的依据是坐标符号。第一象限 x>0, y>0;第二象限 x<0, y>0;第三象限 x<0, y<0;第四象限 x>0, y<0。每次进给后都要重新判断象限。

3.3 过象限问题——最容易被忽略的坑

过象限,说白了就是圆弧从当前象限进入下一个象限。比如从第一象限逆时针走到第二象限,中间要经过 x=0, y=R 这个点。

为什么这是个问题?因为象限变了,进给方向也要变。如果你没处理好,刀具会在象限边界处「卡一下」或者「抖一下」。我曾经在加工一个直径 200mm 的圆环时,就因为过象限处理不当,在四个象限交界处留下了明显的接刀痕,整个工件直接报废……

过象限的处理方法有两种:

  1. 实时判断法:每次进给后检查坐标是否跨过象限边界。如果跨过了,立即切换进给规则。
  2. 分段插补法:把圆弧按象限分成四段,每段单独调用插补程序。我个人更推荐这种方法,代码更稳定,调试也方便。

避坑指南:过象限时,偏差值 F 的计算公式不变,但进给方向要切换。另外,在象限边界上(比如 x=0 或 y=0),要特别注意进给方向的选择——我建议统一按「进入新象限后的规则」来处理,避免歧义。

3.4 终点判别方法

圆弧插补的终点判别比直线复杂一些。直线可以算总步数,但圆弧的步数不是固定的——它取决于你走的是 90° 弧还是 180° 弧,半径多大。

常用的终点判别方法有三种:

  • 总步数法:预先计算圆弧的总步数(即从起点到终点需要走多少步),每走一步减一,减到零就停。这个方法最简单,但需要提前算好步数。
  • 坐标比较法:每次进给后比较当前坐标与终点坐标。如果 x 和 y 都到达终点,就停止。这个方法不用提前算步数,但要注意——圆弧可能不是单调的,比如逆时针圆弧,x 可能先减小后增大,所以不能只看一个坐标。
  • 偏差值法:当当前点与终点的偏差值小于某个阈值时,认为到达终点。这个方法适合高精度场景,但阈值设多少得根据实际需求来。

我在实际项目中,最常用的是「总步数法 + 坐标比较法」双重校验。先算总步数作为主判据,再用坐标比较作为安全冗余。你想想看,万一步数算错了,至少还有坐标兜底,不至于撞刀。

小技巧:总步数的计算公式是:N = |Δx| + |Δy|,其中 Δx 和 Δy 是起点到终点在 x 和 y 方向上的总位移。注意,这里用的是曼哈顿距离,不是欧氏距离。为什么?因为逐点比较法每次只走一个轴,所以总步数就是两个方向位移的绝对值之和。

3.5 一个完整的圆弧插补示例

说了这么多,不如看个实际例子。假设我们要从 (5, 0) 逆时针走到 (0, 5),半径 R=5,走 90° 圆弧。

起点: (5, 0), F = 25 + 0 - 25 = 0
第一步: F=0, 走 -X → (4, 0), F = 16 + 0 - 25 = -9
第二步: F<0, 走 +Y → (4, 1), F = 16 + 1 - 25 = -8
第三步: F<0, 走 +Y → (4, 2), F = 16 + 4 - 25 = -5
第四步: F<0, 走 +Y → (4, 3), F = 16 + 9 - 25 = 0
第五步: F=0, 走 -X → (3, 3), F = 9 + 9 - 25 = -7
...
一直走到 (0, 5) 为止

你看,每一步都在修正偏差,最终逼近目标圆弧。这就是逐点比较法的精髓——不追求一步到位,而是步步为营,稳扎稳打。

好了,圆弧插补的原理、象限处理、过象限和终点判别就讲到这里。下一章我们聊聊「数字积分法(DDA)」,那又是另一种思路了。