4、同步误差的定义与测量

各位工程师朋友,这一节我们来聊聊同步误差。说实话,这是双轴同步控制里最核心的概念之一。你连误差都测不准,后面整定PID参数就是瞎忙活。我见过不少同行,一上来就调参数,结果发现两个轴根本没对齐——那调出来的参数能有用吗?

4.1 同步误差的数学定义

先给个严谨的定义。同步误差,说白了就是两个轴实际位置的差值。假设我们有轴1和轴2,它们的目标位置都是θref,实际位置分别是θ1和θ2,那么同步误差esync就是:

e_sync(t) = θ₁(t) - θ₂(t)

嗯,就这么简单。但这里有个坑——很多人会把同步误差和跟随误差搞混。跟随误差是每个轴自己的目标与实际之差,而同步误差是两个轴之间的差值。我刚开始做项目时也犯过这个迷糊,后来才明白这两者是完全不同的概念。

关键区别:

  • 跟随误差:ef1 = θref - θ1,ef2 = θref - θ2
  • 同步误差:esync = θ1 - θ2

你想想看,如果两个轴的跟随误差都是10个脉冲,但方向相反,那同步误差就是20个脉冲。这时候只看跟随误差,你会觉得两个轴都还行,但实际上它们已经跑偏了。

4.2 同步误差的测量方法

测量同步误差,常用的方法有几种。我个人习惯用直接差分法,简单粗暴但有效。

方法一:直接差分法

直接从两个编码器读取位置值,然后做差。这是最直观的方法:

// 伪代码示例
float theta1 = readEncoder1();
float theta2 = readEncoder2();
float sync_error = theta1 - theta2;

但要注意,两个编码器的采样必须同步。我在一个项目中遇到过,两个编码器采样时间差了0.5ms,结果测出来的误差曲线全是锯齿——其实不是真误差,是采样不同步造成的假象。

方法二:硬件差分电路

对于高速应用,可以用硬件直接做差分。比如用差分放大器或者FPGA内部的减法器。这种方法延迟小,适合实时控制。

方法三:软件滤波差分

在软件里先对每个轴的位置做滤波,然后再做差。这种方法能抑制噪声,但会引入一些延迟。

我的建议:对于大多数工业应用,直接差分法配合软件滤波就够用了。除非你的系统要求微秒级的同步精度,否则没必要上硬件差分。

4.3 采样周期对误差的影响

采样周期这个事,很多人不重视。其实它直接影响你看到的误差长什么样。

举个例子。假设两个轴的实际同步误差是1ms的正弦波,幅值0.1mm。如果你的采样周期是2ms,那刚好每个周期采两个点——你看到的误差可能只有0.05mm。为什么?因为采样点正好落在波峰和波谷之间。

这就是所谓的欠采样问题。采样周期太长,你会漏掉误差的真实峰值。

采样周期 可观测误差频率 典型问题
0.1ms ≤5kHz 数据量大,处理压力大
1ms ≤500Hz 适合大多数伺服系统
5ms ≤100Hz 可能漏掉高频抖动
10ms ≤50Hz 只适合低速大惯量系统

我曾经调试一台高速贴片机,两个轴的同步误差总是看起来很小,但实际贴装精度就是上不去。后来用示波器一看,原来误差频率在800Hz左右,而我的采样周期是2ms——刚好把高频成分全滤掉了。换了0.2ms采样后,问题一目了然。

避坑指南:采样周期至少要比你关心的误差频率高10倍。比如你怀疑有100Hz的同步误差,采样周期至少0.5ms。我曾经因为采样周期设得太长,白白浪费了两周调试时间。

4.4 误差滤波处理

测出来的同步误差信号,通常都带着噪声。直接拿这个信号去调PID,你会被噪声牵着鼻子走。所以滤波是必须的。

常用滤波方法

  1. 移动平均滤波:简单,但会引入延迟。窗口越大,延迟越大。
  2. 一阶低通滤波:y[n] = α·x[n] + (1-α)·y[n-1],α越小越平滑,但延迟也越大。
  3. 中值滤波:对脉冲噪声特别有效,但计算量大一些。
  4. 卡尔曼滤波:效果最好,但实现复杂。我一般只在高端项目里用。
// 一阶低通滤波示例
float alpha = 0.2;  // 滤波系数,越小越平滑
float filtered_error = 0;

void filterSyncError(float raw_error) {
    filtered_error = alpha * raw_error + (1 - alpha) * filtered_error;
    return filtered_error;
}

这里有个平衡点要把握。滤波太强,误差信号延迟大,PID响应变慢。滤波太弱,噪声混进来,PID输出乱跳。我个人的经验是:先不滤波,看看原始噪声有多大。然后从α=0.3开始试,逐步减小,直到曲线平滑且延迟可接受。

核心原则:滤波的目的是去掉噪声,不是掩盖问题。如果你发现滤波后的误差曲线太平滑,反而要警惕——是不是把真实误差也滤掉了?

知识体系总览

下面这张图,是我自己总结的同步误差处理流程。从定义到测量,再到滤波,每一步都有讲究。

同步误差处理流程 同步误差定义 e_sync = θ₁ - θ₂ 测量方法 直接差分 / 硬件 / 软件 采样周期影响 欠采样 / 延迟 误差滤波处理 移动平均 | 一阶低通 | 中值 | 卡尔曼 滤波后的同步误差信号 用于PID参数整定 每个环节都影响最终的控制精度,缺一不可

嗯,这一节的内容就到这里。同步误差的定义、测量、采样周期影响、滤波处理,这四个环节环环相扣。你只要把每一步都做扎实了,后面调PID参数就会顺手很多。

最后提醒一句:别急着调参数。先把误差测准了、滤好了,这才是正经事。我见过太多人一上来就调PID,结果调了三天发现是编码器接线有问题——你说冤不冤?


公众号:蓝海资料掘金营,微信deep3321