3. 误差补偿原理

定位误差补偿,说白了就是「知道它偏了多少,想办法拉回来」。我在现场调试时见过太多工程师一上来就调PID,调了半天还是抖,最后发现是机械背隙和丝杠螺距误差根本没处理。嗯,今天我们就把这几种补偿方式彻底讲透。

核心观点:没有万能的补偿方式。前馈管「已知偏差」,反馈管「实时偏差」,复合补偿才是工程常态。

3.1 前馈补偿——提前算好,主动出击

前馈补偿的思路很简单:既然我知道这个位置会偏,那我提前给一个修正量。它不依赖实际反馈,而是基于模型预测。

我个人习惯把前馈补偿比作「开卷考试」——你提前知道答案,直接写上去就行。

前馈补偿的典型应用场景

  • 丝杠螺距误差补偿:丝杠每转一圈,实际位移和理论位移有固定偏差,查表提前修正。
  • 齿轮间隙补偿:换向时齿轮啮合间隙导致丢步,提前多走一个间隙值。
  • 温度漂移补偿:热膨胀导致丝杠伸长,根据温度传感器查表修正。
我的经验:前馈补偿的精度完全取决于模型准确度。我在一条3米龙门铣上吃过亏——模型没考虑导轨直线度,前馈补了反而更差。后来加了激光干涉仪重新标定,才把误差从0.15mm压到0.02mm。

3.2 反馈补偿——实时纠偏,闭环修正

反馈补偿是「闭卷考试」——我不知道答案,但每做一题就对一下标准答案,错了马上改。

在PLC里,反馈补偿通常走PID闭环。编码器或光栅尺实时反馈实际位置,与目标位置比较后生成修正量。

对比项 前馈补偿 反馈补偿
信息来源 模型/经验数据 实时传感器反馈
响应速度 快(无滞后) 慢(有采样周期)
抗干扰能力 弱(模型不准就偏) 强(实时修正)
典型应用 丝杠螺距、齿轮间隙 负载变化、摩擦力波动
注意:反馈补偿不能解决「系统滞后」问题。如果机械响应太慢,反馈调得再猛也会震荡。我曾经在一条旧生产线上遇到过——伺服周期4ms,机械响应要80ms,反馈增益一高就啸叫,最后只能降速。

3.3 前馈+反馈复合补偿——工程最优解

你想想看,前馈快但不准,反馈准但慢,那把它们结合起来呢?这就是复合补偿。

复合补偿的典型结构:前馈做主修正,反馈做微调。前馈吃掉大部分已知误差,反馈处理剩余的非线性扰动。

工程口诀:前馈管「大数」,反馈管「小数」。大数算准了,小数就好调了。

复合补偿的实现步骤

  1. 建立误差模型:用激光干涉仪或标准件标定全行程误差曲线。
  2. 生成前馈补偿表:将误差曲线离散化为查表数据。
  3. 设定反馈阈值:前馈补偿后残余误差在±0.01mm以内,反馈只在这个范围内微调。
  4. 联动调试:先单独调前馈,再叠加反馈,最后整体跑循环验证。

我记得有一次在包装机项目上,切刀定位总是偏0.3mm。单独加前馈后降到0.08mm,再加反馈微调,最终稳定在0.02mm。客户验收时拿塞尺量了半天,最后竖了个大拇指。

3.4 补偿表的建立与查表法

补偿表,说白了就是一张「偏差-修正量」对照表。PLC运行时根据当前位置查表,取出修正值叠加到指令上。

补偿表的建立流程

  1. 全行程采样:从原点开始,每走10mm(或更密)记录一次实际位置与理论位置的偏差。
  2. 数据平滑:原始数据可能有毛刺,用滑动平均或样条曲线平滑。
  3. 离散化存储:将平滑后的偏差值存入PLC的DB块或数组。
  4. 边界处理:行程两端可能超出标定范围,设定限幅或外推策略。
避坑指南:我曾经在一条长行程(6米)直线电机上做补偿表,采样点间距设了50mm,结果中间有段导轨不平,补偿后反而更差。后来改成10mm间距,才把误差压下去。采样密度取决于机械精度——导轨越差,采样越密。

查表法的实现(SCL示例)

// 查表法补偿函数
FUNCTION Compensate : REAL
VAR_INPUT
  TargetPos : REAL;       // 目标位置 (mm)
END_VAR
VAR
  Index     : INT;        // 查表索引
  Fraction  : REAL;       // 线性插值系数
  CompTable : ARRAY[0..100] OF REAL; // 补偿表
END_VAR

// 计算索引(假设采样间距10mm)
Index := REAL_TO_INT(TargetPos / 10.0);
Fraction := (TargetPos / 10.0) - INT_TO_REAL(Index);

// 边界保护
IF Index < 0 THEN
  Compensate := CompTable[0];
ELSIF Index >= 99 THEN
  Compensate := CompTable[100];
ELSE
  // 线性插值
  Compensate := CompTable[Index] + 
                Fraction * (CompTable[Index+1] - CompTable[Index]);
END_IF;
END_FUNCTION
注意:查表法依赖线性插值,如果机械特性非线性严重(比如丝杠两端磨损不同),建议用分段二次插值或样条插值。我见过一个项目直接用线性插值补反向间隙,结果换向点附近反而震荡——因为间隙曲线在换向点有突变,线性插值根本拟合不了。

3.5 三种补偿方式的对比与选型

补偿方式 适用场景 调试难度 精度提升 典型误差源
前馈补偿 规律性、可预测的误差 低(查表即可) 60%~80% 丝杠螺距、齿轮间隙
反馈补偿 随机性、时变的误差 中(PID调参) 40%~60% 负载波动、摩擦力
复合补偿 高精度、复杂工况 高(需联调) 90%以上 综合误差

选型建议:如果机械本身精度还行(比如滚珠丝杠C3级),单用前馈就够了。如果机械老旧或者负载变化大,老老实实上复合补偿。别想着一个PID通吃——我见过太多人把反馈增益调得老高,结果系统像抽风一样抖。

误差补偿知识体系结构图 误差补偿知识体系 误差补偿方式 前馈补偿 反馈补偿 前馈+反馈复合 丝杠螺距 / 齿轮间隙 / 温度漂移 PID闭环 / 编码器 / 光栅尺 前馈主修正 + 反馈微调 补偿表的建立与查表法 全行程采样 → 数据平滑 → 离散化存储 → 边界处理 查表时线性插值,非线性严重时用分段二次插值

这张图把三种补偿方式的关系和补偿表的建立流程串起来了。你调试时可以先从左上角的前馈补偿入手,如果精度不够再叠加反馈。记住:补偿不是越多越好,够用就行。我见过有人把补偿表做到1000个点,结果PLC扫描周期从1ms拖到8ms,得不偿失。