第1章 误差补偿:反向间隙补偿、螺距误差补偿、摩擦补偿策略

各位工程师朋友,大家好。今天我们来聊聊运动控制里一个绕不开的话题——误差补偿。

说实话,我刚入行那会儿,总觉得只要算法够快、电机够好,精度自然就上去了。后来在一条精密磨床上栽了跟头,才明白一个道理:机械系统的“先天不足”,必须靠算法来“后天弥补”。你想想看,再好的伺服驱动器,也架不住丝杠反向间隙那几十微米的空行程。

这一章,我就把三种最常用的补偿策略掰开揉碎了讲:反向间隙补偿、螺距误差补偿、摩擦补偿。它们不是花架子,是真正能让你的设备精度“上一个台阶”的硬功夫。

1.1 反向间隙补偿:解决“来回不一致”的顽疾

什么是反向间隙?说白了,就是电机反转时,丝杠螺母副之间的那点“空行程”。

举个例子:你让工作台从A点走到B点,精度没问题。但如果你让它从A走到B,再走回A,你会发现回不到原点——差了那么几个微米甚至几十个微米。这就是反向间隙在作怪。

补偿原理很简单:系统检测到运动方向改变时,额外多走一个“间隙值”。

核心公式:

P_compensated = P_command + sign(ΔP) × B/2

其中 B 是反向间隙值,sign(ΔP) 是方向符号(+1 或 -1)。

我在项目中遇到过一台三轴雕刻机,X轴反向间隙高达0.12mm。一开始操作员总抱怨铣圆不圆,我测了一下,发现每次过象限时都有明显的“台阶”。后来加了反向间隙补偿,圆度误差从0.15mm降到了0.02mm以内。

我的经验:反向间隙不是固定不变的。它随磨损、温度、负载变化。我建议在设备启动时做一次“自学习”——让轴走一个往返行程,自动测量间隙值。别用死参数。

1.2 螺距误差补偿:修正丝杠的“先天缺陷”

丝杠再精密,也有螺距误差。你想想看,一根一米长的丝杠,不同位置的螺距不可能完全一致。这就导致一个问题:同样的脉冲数,在不同位置走的实际距离不一样

螺距误差补偿,就是针对这个问题的。

怎么做? 用激光干涉仪实测丝杠全行程的误差曲线,然后分段补偿。一般做法是:

  1. 将丝杠行程等分成N段(比如每10mm一个点)
  2. 用激光干涉仪测出每个点的实际位置误差
  3. 生成一张“误差-位置”对照表
  4. 运行时根据当前位置查表,修正指令位置

补偿表示例:

指令位置 (mm) 实际位置 (mm) 误差 (μm) 补偿值 (μm)
0 0.000 0 0
100 99.987 -13 +13
200 200.015 +15 -15
300 299.992 -8 +8

我曾经调试一台大型龙门铣,Y轴行程6米。不补偿时,两端和中间的位置误差能差到0.3mm。做完螺距误差补偿后,全行程精度控制在0.02mm以内。嗯,这里要注意:补偿点之间的误差用线性插值就行,别搞太复杂的曲线拟合,容易过拟合。

警告:螺距误差补偿依赖温度。丝杠热膨胀会改变误差分布。我建议在设备稳定运行30分钟后再做标定,或者加装温度传感器做实时修正。

1.3 摩擦补偿:对付“低速爬行”的利器

摩擦补偿,可能是三种补偿里最“玄学”的一个。为什么?因为摩擦力是非线性的,而且方向依赖、速度依赖、位置依赖。

低速时,静摩擦力和动摩擦力的切换,会导致“爬行现象”——轴一抖一抖地走,根本稳不住。高速时,摩擦力又变成粘滞阻尼,影响跟随精度。

常见的摩擦模型:

  • 库仑摩擦: 大小恒定,方向与速度相反
  • 粘滞摩擦: 与速度成正比
  • Stribeck效应: 低速时摩擦力随速度增加而下降

我个人的习惯是,先用一个简单的库仑+粘滞模型做基础补偿,再根据实际效果微调。别一上来就搞复杂的Stribeck模型,参数调到你怀疑人生。

摩擦补偿的简化实现:

// 伪代码示例
if (velocity > 0) {
    friction_compensation = +F_c + B_v * velocity;
} else if (velocity < 0) {
    friction_compensation = -F_c + B_v * velocity;
} else {
    friction_compensation = 0; // 零速时不做补偿,防止震荡
}

我曾经调试一台高精度转台,低速时总是有0.1°的抖动。查了半天,发现是摩擦补偿在零速附近反复切换方向,导致系统震荡。后来加了一个“零速死区”——速度绝对值小于某个阈值时,不做摩擦补偿。问题立刻解决。

避坑指南:摩擦补偿不要做得太“完美”。我曾经试图用神经网络拟合摩擦曲线,结果在实验室跑得好好的,一到现场就崩。后来老老实实换回分段线性模型,反而稳定可靠。记住:工业现场,稳定压倒一切

1.4 三种补偿的协同策略

在实际系统中,这三种补偿不是孤立的。它们需要协同工作。

我的建议是:

  1. 先做螺距误差补偿——这是“静态”的,不依赖运动方向
  2. 再做反向间隙补偿——这是“方向依赖”的,但和速度无关
  3. 最后做摩擦补偿——这是“动态”的,需要在线调整

顺序不能乱。你想想看,如果先做摩擦补偿,再做反向间隙补偿,那摩擦补偿的修正量会被反向间隙“吃掉”,等于白做。

另外,这三种补偿的更新频率也不一样:

补偿类型 更新频率 典型周期
螺距误差补偿 低(标定一次管很久) 每月或每季度
反向间隙补偿 中(每次开机自检) 每天或每次启动
摩擦补偿 高(实时调整) 每个控制周期(1ms以内)

好了,这一章的内容就到这里。三种补偿策略,说白了就是“对症下药”——反向间隙解决方向切换问题,螺距误差解决位置依赖问题,摩擦补偿解决速度依赖问题。把它们用好,你的设备精度至少能提升一个数量级。

下一章,我们聊聊更高级的“前馈控制”和“扰动观测器”。到时候见。