3、信号调理电路:滤波、放大、隔离、线性化处理
说实话,很多刚入行的工程师容易忽略一个事实:传感器出来的原始信号,基本没法直接用。你想想看,一个热电偶输出才几毫伏,一个4-20mA变送器在长距离传输后可能带了一堆共模干扰。这时候直接往PLC模拟量模块里送?那数据基本没法看。
我做了十几年现场,见过太多因为信号调理没做好导致的奇葩故障。有一次在化工厂,一个压力值跳得像心电图,查了三天,最后发现是信号线跟动力电缆走了同一个桥架,共模干扰直接干翻了整个采集链路。从那以后,我对信号调理电路这块格外上心。
信号调理,说白了就是四个字:滤波、放大、隔离、线性化。咱们一个一个说。
3.1 滤波:把噪声挡在门外
滤波的目的很简单——把有用的信号留下,把没用的噪声滤掉。但实际做起来,门道不少。
低通滤波是最常用的。工业现场50Hz工频干扰无处不在,你采集一个缓慢变化的温度信号,高频噪声基本全是干扰。我习惯在模拟量输入端先加一个一阶RC低通滤波器,截止频率设在10Hz左右。公式很简单:
fc = 1 / (2π × R × C)
举例:R=15kΩ,C=1μF
fc = 1 / (2 × 3.14 × 15000 × 0.000001) ≈ 10.6Hz
嗯,这里要注意:RC滤波会引入相位延迟。如果你做快速响应控制,这个延迟可能会坏事。我在一个伺服压力控制项目里就吃过这个亏——滤波太狠,响应慢了半拍,结果过冲直接超了。
3.2 放大:把小信号变成大信号
传感器输出信号太小,PLC模拟量模块的分辨率再高也白搭。比如一个应变片电桥,满量程输出才20mV,你直接接到0-10V输入的PLC模块上,那精度损失得让人心疼。
放大电路的核心是仪表放大器。我推荐AD620、INA128这类经典芯片,共模抑制比高,温漂小。一个典型电路是这样的:
增益公式:G = 1 + (49.4kΩ / Rg)
想要放大100倍:Rg = 49.4kΩ / (100 - 1) ≈ 499Ω
我在一个称重系统里用过AD620,把0-20mV的信号放大到0-10V,配合24位ADC,分辨率做到了十万分之一。但有个坑——电源纹波。仪表放大器对电源噪声非常敏感,我建议在电源引脚上加10μF电解电容并联0.1μF瓷片电容,能干掉大部分高频噪声。
3.3 隔离:保护你的PLC
隔离这件事,很多人觉得可有可无。直到有一次,一个现场工程师把24V电源接到了传感器信号线上,整个模拟量模块直接冒烟。嗯,从那以后,我再也不敢省隔离的钱了。
常用的隔离方式有三种:
| 隔离方式 | 原理 | 适用场景 | 我推荐 |
|---|---|---|---|
| 光耦隔离 | LED+光敏管 | 数字信号、低速模拟 | HCNR201 |
| 磁耦隔离 | 变压器耦合 | 高速模拟信号 | ISO124 |
| 电容隔离 | 电容耦合 | 高精度、低功耗 | ISO7240 |
我个人习惯在4-20mA信号回路里用隔离变送器。这东西三端隔离——输入、输出、电源互相隔离,能扛住2500V的共模电压。价格虽然贵点,但想想一块PLC模拟量模块多少钱?值。
3.4 线性化:让数据说真话
很多传感器的输出和被测物理量不是线性关系。最典型的就是热电偶——温度每升高一度,输出电压的变化量都不一样。如果你直接拿电压值去算温度,那误差能到几十度。
线性化处理有两种做法:
- 硬件线性化:用模拟电路做非线性补偿。比如热电阻的桥式电路,通过合理选电阻值,可以在一定范围内近似线性。但说实话,现在很少人这么干了——电路复杂,调试麻烦,精度还一般。
- 软件线性化:在PLC或上位机里用查表法或公式法。这是主流做法。比如热电偶,IEC标准给出了分度表,你直接存一个数组,采集到电压后查表插值就行。
我常用的软件线性化方法:
// 以K型热电偶为例,0-500℃范围
// 使用分段线性插值
float lookup_table[][2] = {
{0, 0.000}, // 0℃ -> 0mV
{100, 4.096}, // 100℃ -> 4.096mV
{200, 8.138}, // 200℃ -> 8.138mV
{300, 12.209}, // 300℃ -> 12.209mV
{400, 16.397}, // 400℃ -> 16.397mV
{500, 20.644} // 500℃ -> 20.644mV
};
float linearize(float mv) {
// 找到所在区间,线性插值
for(int i=0; i<5; i++) {
if(mv >= lookup_table[i][1] && mv < lookup_table[i+1][1]) {
float ratio = (mv - lookup_table[i][1]) /
(lookup_table[i+1][1] - lookup_table[i][1]);
return lookup_table[i][0] + ratio *
(lookup_table[i+1][0] - lookup_table[i][0]);
}
}
return -1; // 超出范围
}
说到线性化,还有一个容易被忽略的点——冷端补偿。热电偶测量的是热端和冷端的温差,冷端温度一变,测量值就跟着跑。我习惯在接线端子附近装一个NTC或者DS18B20,实时测量冷端温度,然后在程序里做补偿。这个细节,很多新手会忘。
好了,信号调理这块就聊到这儿。总结一下我的经验:滤波要适度,放大要精准,隔离不能省,线性化要细致。这四个环节做好了,你的数据采集系统就成功了一大半。下一章咱们聊聊PLC模拟量模块的选型和配置,到时候再细说。