3. 信号调理:放大、滤波、隔离、线性化

大家好,我是你们的嵌入式实战讲师。今天咱们聊聊信号调理。

你可能会问:传感器出来的信号,直接送给ADC不就行了?为什么还要折腾什么放大、滤波、隔离?

嗯,这个问题问得好。我刚开始做数据采集那会儿,也这么想过。结果呢?第一次调试,采集回来的数据全是毛刺,根本没法用。后来才明白——传感器出来的信号,就像刚从泥地里挖出来的土豆,不洗一洗、削一削皮,是没法直接下锅的。

信号调理,就是给信号“洗菜切菜”的过程。

3.1 为什么需要信号调理?

说白了,真实世界的信号太“脏”了。

  • 幅度太小:热电偶输出只有几毫伏,ADC根本分辨不出来
  • 噪声太大:工频干扰、射频干扰,全混在信号里
  • 共模电压高:传感器和采集系统地电位不同,一接就烧
  • 非线性严重:比如热敏电阻的阻值-温度曲线,弯弯曲曲的

所以,信号调理要干四件事:放大、滤波、隔离、线性化。

核心观点:没有信号调理的数据采集,就像用漏勺打水——看似在干活,其实啥也没捞着。

3.2 放大——把微弱的信号“撑大”

放大是最基本的操作。我见过很多新手,选ADC时只看分辨率,不看输入范围。结果呢?传感器输出0-10mV,ADC输入范围0-5V,中间差了500倍,根本测不到。

放大电路的核心参数:

参数 说明 我的建议
增益 放大倍数,比如100倍 别贪心,增益太大噪声也放大
带宽 能放大的频率范围 够用就行,带宽太宽反而引入噪声
输入阻抗 对传感器信号的“负载” 越高越好,至少1MΩ以上
共模抑制比 抑制共模干扰的能力 至少80dB,最好100dB+

我个人习惯用仪表放大器,比如AD620、INA128。为什么?因为它的输入阻抗高、共模抑制比好,而且只需要一个电阻就能调增益,特别方便。

实战技巧:我曾经在一个项目中,用AD620放大热电偶信号。增益设了100倍,结果输出一直在漂。查了半天,发现是供电电源纹波太大。后来加了RC滤波,问题就解决了。记住:放大器的电源质量,直接影响信号质量。

3.3 滤波——把噪声“筛掉”

放大之后,噪声也跟着放大了。这时候就需要滤波。

滤波器的种类很多,但数据采集中最常用的是低通滤波器。为什么?因为大多数有用信号都是低频的,而噪声往往是高频的。

举个例子:

  • 温度信号:变化很慢,0.1Hz都算快了
  • 压力信号:一般也就几十Hz
  • 振动信号:可能到几kHz
  • 工频干扰:50Hz(中国)/60Hz(美国)

所以,低通滤波器的截止频率,一般设在信号最高频率的3-5倍。比如测温度,截止频率设1Hz就够了。

我常用的滤波方案:

// 一阶RC低通滤波器,软件实现
// 输入:raw_value 原始采样值
// 输出:filtered_value 滤波后的值
// alpha = 0.1 表示滤波强度,越小越平滑

float low_pass_filter(float raw_value) {
    static float filtered_value = 0;
    float alpha = 0.1;  // 滤波系数
    filtered_value = alpha * raw_value + (1 - alpha) * filtered_value;
    return filtered_value;
}

避坑指南:我曾经在一个项目中,用了二阶有源低通滤波器,结果相位延迟太大,导致控制系统的响应跟不上。后来换成一阶无源RC滤波,虽然滤波效果差一点,但延迟小了很多。记住:滤波不是越强越好,要平衡噪声抑制和信号保真度。

3.4 隔离——把危险的“隔开”

隔离,说白了就是保护。保护你的ADC,保护你的单片机,保护你自己。

什么时候需要隔离?

  • 传感器和采集系统距离很远(比如几十米)
  • 传感器工作在高电压环境(比如电机驱动)
  • 医疗设备,需要保证患者安全
  • 工业现场,地电位差很大

隔离的方式有三种:

隔离方式 原理 适用场景
光耦隔离 电-光-电转换 数字信号,低速(<1MHz)
磁耦隔离 变压器耦合 模拟信号,高速(可达100MHz)
电容隔离 电容耦合 数字信号,中速(<100MHz)

我个人习惯用隔离放大器,比如ISO124、AD202。它能把模拟信号完整地隔离过去,不需要先转成数字信号再隔离,省事很多。

实战经验:有一次在工厂调试,传感器和采集板距离50米。不隔离的时候,采集的数据一直在跳,幅度有几十mV。后来加了ISO124隔离放大器,数据一下子就稳了。你想想看,50米的电缆,地电位差可能有好几伏,不隔离怎么行?

3.5 线性化——把弯曲的“捋直”

很多传感器的输出和被测物理量不是线性关系。比如:

  • 热电偶:电压-温度曲线是多项式关系
  • 热敏电阻:阻值-温度曲线是指数关系
  • 应变片:电阻变化-应变关系有非线性

线性化的方法有两种:

硬件线性化:用模拟电路做补偿。比如用对数放大器来补偿热敏电阻的指数特性。优点是实时性好,缺点是电路复杂、精度有限。

软件线性化:在单片机里用查表法或多项式拟合。我强烈推荐这种方法,因为:

  • 灵活:换传感器只需要改表
  • 精度高:用高阶多项式可以做到很高精度
  • 成本低:不需要额外的硬件
// 热电偶线性化:查表法
// 输入:热电偶电压(mV)
// 输出:温度(℃)

float thermocouple_linearize(float voltage_mV) {
    // 简化的K型热电偶查表,实际应用需要更精细的表
    const float table[] = {0, 0.397, 0.798, 1.203, ...};  // 省略中间数据
    int index = (int)(voltage_mV / 0.1);  // 每0.1mV一个点
    if (index < 0) return 0;
    if (index > 99) return 999;
    return table[index];
}

核心观点:软件线性化是性价比最高的方案。硬件线性化就像用锤子砸核桃——能砸开,但容易砸碎。软件线性化就像用核桃夹子——精准、可控、可调。

3.6 信号调理的整体架构

好了,四个环节都讲完了。它们是怎么组合在一起的呢?

下面这张图,是我画的一个典型信号调理链路:

传感器 放大 滤波 隔离 线性化 ADC 信号调理链路 从传感器到ADC,信号经过四个关键环节 注意:实际应用中,这四个环节的顺序可能调整 比如隔离有时放在最前面,线性化有时放在软件里做

这张图展示的是最典型的链路。实际项目中,顺序可能会调整。比如:

  • 如果传感器信号特别弱,先放大再滤波,避免滤波器引入噪声
  • 如果现场干扰特别强,先滤波再放大,避免放大器饱和
  • 如果安全要求高,隔离放在最前面,先隔离再处理

重要提醒:信号调理的每个环节都会引入误差。放大器的温漂、滤波器的相位延迟、隔离器的非线性、线性化的拟合误差——这些都会叠加。所以,不是环节越多越好,够用就行。我见过有人把信号调理做得特别复杂,结果精度反而下降了。

好了,关于信号调理,今天就聊到这里。记住四个关键词:放大、滤波、隔离、线性化。下次你设计数据采集系统时,先问问自己:这四个环节,我做了几个?

可可精品资料库