3. 误差补偿原理
定位误差补偿,说白了就是「知道它偏了多少,想办法拉回来」。我在现场调试时见过太多工程师一上来就调PID,调了半天还是抖,最后发现是机械背隙和丝杠螺距误差根本没处理。嗯,今天我们就把这几种补偿方式彻底讲透。
核心观点:没有万能的补偿方式。前馈管「已知偏差」,反馈管「实时偏差」,复合补偿才是工程常态。
3.1 前馈补偿——提前算好,主动出击
前馈补偿的思路很简单:既然我知道这个位置会偏,那我提前给一个修正量。它不依赖实际反馈,而是基于模型预测。
我个人习惯把前馈补偿比作「开卷考试」——你提前知道答案,直接写上去就行。
前馈补偿的典型应用场景
- 丝杠螺距误差补偿:丝杠每转一圈,实际位移和理论位移有固定偏差,查表提前修正。
- 齿轮间隙补偿:换向时齿轮啮合间隙导致丢步,提前多走一个间隙值。
- 温度漂移补偿:热膨胀导致丝杠伸长,根据温度传感器查表修正。
我的经验:前馈补偿的精度完全取决于模型准确度。我在一条3米龙门铣上吃过亏——模型没考虑导轨直线度,前馈补了反而更差。后来加了激光干涉仪重新标定,才把误差从0.15mm压到0.02mm。
3.2 反馈补偿——实时纠偏,闭环修正
反馈补偿是「闭卷考试」——我不知道答案,但每做一题就对一下标准答案,错了马上改。
在PLC里,反馈补偿通常走PID闭环。编码器或光栅尺实时反馈实际位置,与目标位置比较后生成修正量。
| 对比项 | 前馈补偿 | 反馈补偿 |
|---|---|---|
| 信息来源 | 模型/经验数据 | 实时传感器反馈 |
| 响应速度 | 快(无滞后) | 慢(有采样周期) |
| 抗干扰能力 | 弱(模型不准就偏) | 强(实时修正) |
| 典型应用 | 丝杠螺距、齿轮间隙 | 负载变化、摩擦力波动 |
注意:反馈补偿不能解决「系统滞后」问题。如果机械响应太慢,反馈调得再猛也会震荡。我曾经在一条旧生产线上遇到过——伺服周期4ms,机械响应要80ms,反馈增益一高就啸叫,最后只能降速。
3.3 前馈+反馈复合补偿——工程最优解
你想想看,前馈快但不准,反馈准但慢,那把它们结合起来呢?这就是复合补偿。
复合补偿的典型结构:前馈做主修正,反馈做微调。前馈吃掉大部分已知误差,反馈处理剩余的非线性扰动。
工程口诀:前馈管「大数」,反馈管「小数」。大数算准了,小数就好调了。
复合补偿的实现步骤
- 建立误差模型:用激光干涉仪或标准件标定全行程误差曲线。
- 生成前馈补偿表:将误差曲线离散化为查表数据。
- 设定反馈阈值:前馈补偿后残余误差在±0.01mm以内,反馈只在这个范围内微调。
- 联动调试:先单独调前馈,再叠加反馈,最后整体跑循环验证。
我记得有一次在包装机项目上,切刀定位总是偏0.3mm。单独加前馈后降到0.08mm,再加反馈微调,最终稳定在0.02mm。客户验收时拿塞尺量了半天,最后竖了个大拇指。
3.4 补偿表的建立与查表法
补偿表,说白了就是一张「偏差-修正量」对照表。PLC运行时根据当前位置查表,取出修正值叠加到指令上。
补偿表的建立流程
- 全行程采样:从原点开始,每走10mm(或更密)记录一次实际位置与理论位置的偏差。
- 数据平滑:原始数据可能有毛刺,用滑动平均或样条曲线平滑。
- 离散化存储:将平滑后的偏差值存入PLC的DB块或数组。
- 边界处理:行程两端可能超出标定范围,设定限幅或外推策略。
避坑指南:我曾经在一条长行程(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通吃——我见过太多人把反馈增益调得老高,结果系统像抽风一样抖。
这张图把三种补偿方式的关系和补偿表的建立流程串起来了。你调试时可以先从左上角的前馈补偿入手,如果精度不够再叠加反馈。记住:补偿不是越多越好,够用就行。我见过有人把补偿表做到1000个点,结果PLC扫描周期从1ms拖到8ms,得不偿失。