3、插补算法原理:时间分割法、数据采样插补法,粗插补与精插补的分工

插补算法,说白了就是让电机按照你想要的轨迹走。不是简单走直线,而是走圆弧、走曲线、走螺旋线。我刚开始接触多轴插补时,总觉得这玩意儿是数学家在纸上画的东西,直到第一次调机时看到电机在圆弧上走出了一串锯齿……嗯,从那以后我再也不敢轻视插补算法了。

这一章,我们聊聊三种核心概念:时间分割法、数据采样插补法,以及粗插补与精插补的分工。搞懂了这些,你写插补代码时心里就有底了。

3.1 时间分割法:把连续轨迹切成时间片

时间分割法,名字听着挺唬人,其实思路很简单——把一段连续的轨迹,按固定的时间间隔切成一小段一小段。每一小段里,电机走一个直线或圆弧微段。

举个例子,你要走一个半径为 50mm 的圆弧,进给速度 100mm/s。如果你把时间片设为 1ms,那每一片里电机就走 0.1mm。这 0.1mm 的微段,控制器就当成直线来算。

核心公式:

ΔL = F × ΔT

其中 ΔL 是每个时间片内的位移量,F 是进给速度,ΔT 是时间片长度。

我个人的习惯是,时间片选 1ms 到 5ms 之间。太短了,CPU 扛不住;太长了,轨迹会明显走形。你想想看,如果时间片是 20ms,那一个圆弧就被切成 50 段直线,看起来就跟多边形似的。

实战建议:

时间片的选择要结合你的控制周期。如果伺服驱动器的位置环周期是 1ms,那插补时间片最好也是 1ms 的整数倍,比如 2ms 或 4ms。这样插补点和驱动器的采样点能对齐,减少抖动。

3.2 数据采样插补法:用采样点还原轨迹

数据采样插补法,跟时间分割法有点像,但思路不同。它不是按固定时间切,而是按固定的空间步长或角度步长来采样。说白了,就是先算出轨迹上的一系列离散点,然后让电机一个点一个点地走过去。

我记得有一次做五轴联动,客户要求加工一个叶轮曲面。如果用时间分割法,圆弧段还好,但到了样条曲线段,时间片切出来的点分布不均匀——曲率大的地方点太疏,曲率小的地方点太密。后来换成数据采样插补法,按弧长等距采样,效果就好多了。

对比项 时间分割法 数据采样插补法
采样依据 固定时间间隔 固定空间步长/角度步长
适用场景 直线、圆弧等简单轨迹 样条曲线、自由曲面等复杂轨迹
点分布 时间均匀,空间不均匀 空间均匀,时间不均匀
CPU 负载 较低 较高(需实时计算采样点)
轨迹精度 受时间片大小影响 受采样步长影响

实际项目中,我经常把两种方法混着用。直线段用时间分割法,简单高效;曲线段用数据采样法,保证精度。你想想看,没必要所有地方都用重武器。

3.3 粗插补与精插补:分工协作的艺术

粗插补和精插补,是插补算法里最容易被忽视的一对搭档。很多人以为插补就是一次算完,其实不是。现代运动控制器里,插补是分两层做的。

粗插补:在轨迹规划层,按较大的时间片(比如 1ms~10ms)算出轨迹上的关键点。这些点叫“插补点”或“路径点”。粗插补只关心轨迹的形状,不关心电机怎么走。

精插补:在伺服驱动层,按更小的时间片(比如 0.1ms~1ms)在粗插补点之间做线性插值,生成给电机的位置指令。精插补关心的是让电机走得平滑、不抖动。

举个例子:

粗插补每 2ms 算出一个点,精插补每 0.5ms 算一次。那精插补就在两个粗插补点之间,用直线插值算出 4 个中间点。这样电机每 0.5ms 收到一个新位置指令,走起来就顺滑多了。

我曾经在一个项目中,粗插补周期设了 10ms,精插补周期设了 1ms。结果电机在圆弧上跑出了明显的抖动。后来把粗插补周期降到 2ms,问题就解决了。为什么会这样?因为粗插补点太稀疏,精插补用直线去拟合圆弧,误差太大。

避坑指南:

我曾经犯过一个错误——粗插补和精插补的周期比设成了 20:1。粗插补 10ms,精插补 0.5ms。结果精插补在两个粗插补点之间插了 20 个点,但轨迹误差累积到 0.3mm 以上。后来我给自己定了个规矩:粗插补与精插补的周期比不要超过 10:1,最好控制在 4:1 到 8:1 之间。

3.4 三层插补架构:从轨迹到电机

在实际的多轴运动控制器里,插补通常分三层:轨迹规划层、粗插补层、精插补层。我画了一张图,帮你理清这三层的关系。

三层插补架构图 轨迹规划层 解析 G 代码,生成连续轨迹 粗插补层 按时间分割/数据采样,生成路径点 精插补层 在路径点间线性插值,生成位置指令 伺服驱动层 执行位置环、速度环、电流环 关键参数 粗插补周期:1~10ms 精插补周期:0.1~1ms 周期比建议 ≤ 10:1 常见问题 粗插补点太疏 → 轨迹锯齿 精插补周期太长 → 电机抖动 周期比太大 → 误差累积

从图上你能看到,轨迹规划层负责解析 G 代码,生成连续的轨迹描述(比如直线、圆弧、样条)。粗插补层把轨迹切成离散的路径点。精插补层在路径点之间做线性插值,生成给伺服驱动器的位置指令。最后伺服驱动器执行位置环、速度环、电流环,让电机真正动起来。

我个人的习惯是,在粗插补层用时间分割法处理直线和圆弧,用数据采样法处理样条曲线。精插补层统一用线性插值,简单可靠。你想想看,精插补如果也用复杂算法,CPU 负载就上去了,而且没必要——粗插补已经把轨迹形状算好了,精插补只是做平滑过渡。

3.5 实战中的参数选择建议

说了这么多理论,最后给点干货。这是我多年调试总结出来的参数选择经验,直接拿去用。

应用场景 粗插补周期 精插补周期 插补方法
普通两轴直线插补 5ms 1ms 时间分割法
三轴圆弧插补 2ms 0.5ms 时间分割法 + 数据采样法
五轴样条插补 1ms 0.2ms 数据采样法
高速高精度加工 0.5ms 0.1ms 数据采样法 + 前瞻处理

调试小技巧:

如果你不确定参数怎么设,先按粗插补 2ms、精插补 0.5ms 起步。跑一段轨迹,用示波器看位置指令的平滑度。如果指令有毛刺,说明精插补周期太长或粗插补点太疏。如果 CPU 负载超过 70%,说明周期设得太短了。

嗯,插补算法这块就聊到这儿。记住一句话:粗插补管形状,精插补管平滑。两者配合好了,电机走出来的轨迹才漂亮。