4、套色偏差信号处理:信号滤波与放大、模数转换、偏差信号的特征提取

各位同行,咱们接着聊。上一章我们把传感器怎么抓取偏差信号讲清楚了,但说实话,传感器出来的原始信号,根本没法直接用。为什么?因为太脏了。

我刚开始干这行的时候,就吃过这个亏。当时调试一台八色机,套色偏差老是跳来跳去,我以为是机械问题,折腾了两天。后来老师傅过来看了一眼,说:「你小子先看看信号波形。」我一测,好家伙,噪声比信号还大。嗯,从那以后我就记住了——信号处理这步,省不了。

4.1 信号滤波:把脏东西洗掉

传感器采集到的电信号,里面混杂着各种干扰。比如电机转动带来的电磁干扰、车间里变频器的谐波、甚至日光灯的频闪都能耦合进来。你想想看,这些乱七八糟的东西叠在偏差信号上,控制器根本分不清哪个是真偏差。

我个人习惯,第一道防线用低通滤波器。套色偏差的变化频率其实不高,一般几十赫兹以内。那些高频噪声,直接切掉。

核心思路:保留低频偏差信号,滤除高频噪声。

模拟滤波器我常用二阶巴特沃斯,电路简单,衰减特性也够用。给你看个典型电路参数:

参数 典型值 说明
截止频率 50 Hz 高于套色偏差变化频率
增益 1 (0 dB) 通带内不放大
阻带衰减 -40 dB/dec 二阶特性

当然,现在很多设备直接用数字滤波了。我在项目里常用移动平均滤波,代码简单,效果也还行:

// 移动平均滤波,窗口长度 N=8
#define FILTER_N 8
int filter_buf[FILTER_N];
int filter_index = 0;
long filter_sum = 0;

int moving_average(int new_sample) {
    filter_sum -= filter_buf[filter_index];
    filter_buf[filter_index] = new_sample;
    filter_sum += new_sample;
    filter_index = (filter_index + 1) % FILTER_N;
    return filter_sum / FILTER_N;
}

小技巧:窗口长度N选2的幂次,比如8、16、32。这样除法可以用移位操作,MCU跑起来快很多。

4.2 信号放大:把微弱信号提上来

滤波之后,信号干净了,但幅度可能还不够。光电传感器出来的信号,往往只有几毫伏到几十毫伏。ADC(模数转换器)的输入范围通常是0~5V或者0~3.3V,你想想看,几毫伏的信号进去,量化误差就能把它吃掉。

所以必须放大。我建议用仪表放大器,比如AD620、INA128这类。共模抑制比高,适合传感器这种差分信号。

放大倍数怎么定?举个例子:传感器输出最大偏差对应10 mV,ADC满量程5V,那放大倍数就是5V / 10 mV = 500倍。但实际要留余量,我一般取400倍左右,防止信号偶尔超限。

注意:放大倍数不是越大越好。放大倍数太大,噪声也被放大了。而且运放本身有失调电压,放大倍数高了,失调也会被放大,导致零点漂移。我曾经遇到过一台设备,开机半小时后偏差值慢慢飘了0.1mm,查了半天就是运放温漂的问题。

4.3 模数转换:把模拟量变成数字量

信号调理好了,接下来要进ADC。这一步决定了整个系统的精度上限。

选ADC主要看三个指标:

  • 分辨率:常用12位或16位。12位对应4096个码值,16位对应65536个。对于套色偏差,12位基本够用,但要求高的时候我会上16位。
  • 采样率:套色偏差变化不快,几百赫兹的采样率就足够了。但要注意,采样率太低会丢失细节,太高又浪费资源。
  • 参考电压:一定要稳定。我见过有人直接用板子上的5V供电做参考,结果电源纹波大,ADC读数跳个不停。

采样时机也很关键。我建议在色标信号到达的时刻触发采样。这样可以保证每次采到的都是色标位置的偏差值,而不是随机时刻的值。很多MCU的ADC支持外部触发,正好用色标传感器的脉冲信号来触发。

// 伪代码:外部触发采样
void ADC_IRQHandler(void) {
    uint16_t adc_value = ADC_GetValue();
    // 此时 adc_value 就是当前色标位置的偏差值
    process_deviation(adc_value);
}

4.4 偏差信号的特征提取:从数据到信息

ADC出来的是原始数字量,还不是我们想要的偏差值。需要做特征提取。

这一步说白了,就是把数字量换算成物理量,再提取出有用的特征。我一般做三件事:

  1. 标定转换:把ADC码值换算成毫米或微米。比如ADC读数是2048,对应0偏差;读数是1024,对应-0.1mm。这个线性关系需要在设备校准时确定。
  2. 去直流分量:有些传感器会有固定的偏置电压,需要减去。我通常在设备初始化时采集100次取平均,作为零点基准。
  3. 提取偏差值:对于套色偏差,我们关心的是当前色标与基准色标的位置差。这个差值就是套色偏差信号。

特征提取的核心公式:

偏差值 = (当前色标位置 - 基准色标位置) × 标定系数

这里有个坑,我踩过。有些设备的色标传感器安装位置有机械误差,导致即使套色对准了,传感器读出来的偏差也不为零。解决办法是在设备初始化时做一次零点校准,把这个固定偏差记录下来,后续实时减去。

好了,信号从传感器出来,经过滤波、放大、模数转换、特征提取,最终变成了控制器能用的偏差数值。这一步走扎实了,后面的PID调节才有意义。否则,你调得再好,也是基于错误的数据在瞎调。

套色偏差信号处理流程 传感器 原始电信号 低通滤波 去除高频噪声 信号放大 仪表放大器 模数转换 12/16位ADC 特征提取 标定转换 · 去直流 · 提取偏差 偏差数值输出 模拟信号域 数字信号域 模拟 / 数字 分界

经验之谈:信号处理链路上的每一个环节都会引入延迟。滤波器的延迟、ADC的转换时间、特征提取的计算时间,加起来可能有好几毫秒。对于高速印刷机,这几毫秒的延迟可能造成相位滞后。我一般会在控制器里做一个延迟补偿,把信号处理链路的群延迟测量出来,然后在控制算法里反向补偿。

最后说一句,信号处理这块,理论是一回事,实际调试是另一回事。同样的电路,在不同车间、不同设备上表现可能完全不同。我建议你拿到新设备后,先用示波器看看原始信号长什么样,再决定滤波参数和放大倍数。别偷懒,这一步省了,后面有你哭的。


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