直接说个实际场景:我之前调一块电容式麦克风阵列板,传感器输出端直接接示波器,看到的除了想要的声波信号,还叠着一层50Hz工频干扰、几毫伏的直流偏置,以及高频毛刺。这种信号要是不过处理电路直接送ADC,采集回来的数据基本就是噪声词典,后面的算法再漂亮也没用。传感器的信号处理,说白了就是把这堆又弱又脏的信号掰成控制器能读、能信、能用的样子,它决定了传感器系统能测多准、量程多大、抗干扰能力多强。这篇笔记是传感器技术系列的第十二篇,把信号调理、阻抗匹配、ADC采样、噪声抑制这些环节从头到尾捋一遍,适合正在做传感器电路设计、嵌入式采集系统,或者被信号噪声折磨过的工程师参考。
很多人觉得传感器选型是重点,型号一挑,数据手册一翻,电路照着画就行。真到实际项目里你会发现,传感器本体只占系统工作量的一小部分,信号处理才是大头。同一个光电传感器,前面加一级合理的跨阻放大和滤波,和直接接比较器输出,测距精度能差出一个量级;同一颗霍尔传感器,电源做不做去耦、输出做不做滤波,在电机附近实测的波动幅度完全是两个世界。这期笔记我把信号处理链路拆开讲,从第一级模拟调理一直讲到ADC采样和基础数字滤波,把里面的原理和工程取舍讲清楚。
1. 先说结论:为什么传感器信号不能直接拿来用
核心不是传感器坏了,而是传感器的输出天生就不适合直接进控制器。
1.1 传感器输出的,从来不是“干净”的信号
绝大多数传感器的原始输出都有三个特点:弱、小、乱。以电阻应变式称重传感器为例,一个满量程几十公斤的传感器,电桥输出灵敏度通常在2mV/V左右,也就是给5V激励电压时,满量程输出只有10mV。这10mV里还叠加了电桥不平衡产生的零点偏置、温度变化引起的漂移、电源纹波耦合进来的干扰。热电偶更夸张,K型热电偶每摄氏度只有约41μV的热电动势,这种微伏级别的信号,随便一根长走线串进来的噪声都比它大。工业现场的雷达信号处理系统也一样,雷达回波信号幅度动态范围极大,近距离强反射和远距离弱目标的信号可能相差60dB以上,不经过完善的信号处理链,小目标信息直接淹没在噪声和大信号拖尾里。
生活里有个特别好的类比:你对着麦克风说话,麦克风输出的电压只有几毫伏,如果直接把它接到音箱功放上,听到的基本是电流底噪和啸叫;必须经过前置放大器把微弱信号放大到功放能处理的电平,再经过滤波把不必要的频段去掉,声音才正常。传感器系统就是一个测量版的“麦克风系统”,信号处理就是那个前置放大器和滤波器。
1.2 从传感器到控制器,信号要过的五道关
我一般把传感器信号处理链路分成五个环节,每个环节都有明确的任务:
- 第一道关:信号拾取与变换。传感器把物理量(压力、温度、位移、浓度)变成电学量,可能是电阻变化、电容变化、电荷产生,也可能直接是电压或电流输出。
- 第二道关:信号调理。把微弱的、带偏置的、高阻抗的信号,变成适合ADC输入范围的、低阻抗的、干净的低电平信号。这包括放大、衰减、滤波、电平搬移、阻抗变换。
- 第三道关:模数转换。把模拟电压变成数字量,涉及采样率、分辨率、基准电压等参数选择。
- 第四道关:数字信号处理。在MCU或FPGA里做滤波、标定、线性化、特征提取。比如雷达信号处理里的脉冲压缩、动目标检测,分布式阵列信号处理里的波束形成,都是这一层的事。
- 第五道关:输出与传输。把处理好的数据通过I2C、SPI、CAN、RS485等协议送出去,比如胎压监测传感器不仅要感知气压温度,还得按照规定的通讯协议在低频125kHz和高频433MHz两个通道上把数据帧发出去。
我见过不少项目,前面四道关都做得不错,最后栽在第五道关上——协议时序不对、波特率配错、数据帧格式理解偏差,导致上位机收不到有效数据。信号处理是一个完整链条,哪一环的短板都会拉低整体性能。
2. 前端调理电路:信号进ADC前的关键一步
调理电路是信号处理里最容易被低估的部分。很多新手觉得自己用的是24位ADC,分辨率够了,传感器输出直接接ADC就行。实际做出来往往问题一堆:读数漂、跳动大、精度上不去。问题就出在调理环节。
2.1 放大电路选型:仪表放大器为什么是首选
传感器输出常见的形式有两种:差分输出和单端输出。应变片电桥、电磁传感器通常是差分输出,信号线上一根正一根负,真正有用的信号是两根线之间的差值,而两根线上同时存在的噪声叫共模干扰。普通运放做差分会遇到一个问题——它的共模抑制比不够高,而且输入阻抗不够大,会从传感器端“抢”电流,影响测量结果。
仪表放大器(INA,Instrumentation Amplifier)就是专门为这种场景设计的。它有三级结构:第一级是两个Buffer,提供极高的输入阻抗,几乎不从传感器抽电流;第二级是差分放大,把两输入线的差值放大,同时把共模信号压掉;第三级是输出级,可以灵活调整增益。以TI的INA128为例,共模抑制比在G=100时典型值能做到120dB以上,输入阻抗高达10^10Ω这个量级,增益只需要一个外部电阻Rg就能设定,公式是G = 1 + 50kΩ / Rg。
选择仪表放大器时,我最看重的三个参数是共模抑制比、输入偏置电流和增益带宽积。共模抑制比决定它能“无视”多少叠加在信号线上的共模干扰;输入偏置电流决定了它适合高阻抗源还是低阻抗源;增益带宽积决定了它能处理的信号频率上限。考虑到传感器信号一般都比较慢,增益设得比较高时带宽会相应变窄,这一点务必核对数据手册里的增益-带宽曲线。
2.2 滤波器的设计与工程取舍
传感器输出信号经过放大之后,噪声也被放大了。最常见的噪声源是工频50Hz干扰、开关电源的高频纹波、电机或继电器产生的尖峰脉冲。滤波器的作用就是把有用信号频带之外的噪声压下去。
一个很实用的原则:在调理电路里先做一级无源RC低通,再做一级有源低通,最后到ADC输入端再放一个小电容做高频去耦。无源RC简单便宜,但有负载效应——后级输入阻抗不够高会影响截止频率。有源滤波器用运放做缓冲,可以避免这个问题。实际做的时候,Sallen-Key拓扑是最常用的二阶有源滤波器结构,用一个运放加四个阻容元件就能实现,设计公式不算复杂,但建议直接用TI的FilterPro或ADI的Filter Wizard这类工具算,省得手推传递函数。
截止频率怎么定?我的经验是取有用信号最高频率的5到10倍。取太低会把有用的信号边缘削平,取太高又起不到滤除噪声的作用。比如一个响应时间要求200ms的土壤湿度传感器,信号带宽其实只有几赫兹,低通截止频率取10到50Hz就够了,这样做能大幅衰减工频干扰。但如果是音响里的麦克风阵列,需要处理20kHz的音频信号,那滤波器的截止频率至少要到40kHz以上。雷达信号处理的抗混叠滤波器就更讲究了,它必须保证在整个ADC采样带宽内没有高于奈奎斯特频率的强干扰进入,否则混叠之后没法通过数字滤波补救。
2.3 电平匹配和阻抗匹配,最容易翻车的细节
传感器信号经过放大后,必须落进ADC的输入范围。比如MCU内置ADC的参考电压是3.3V,那么信号就要在0到3.3V之间;如果是双极性信号(比如交流信号),还得做电平搬移,把它抬到0附近以上才行。那些标注“rail-to-rail”的运放,输出并不是真能到电源轨,实际最高只能到VCC减去几十毫伏,最低也只能到VEE加上几十毫伏。如果设计的满量程输出恰好贴着电源轨,ADC就会削波。
阻抗匹配这个坑,我踩过好几次。有些传感器内阻很高,比如pH电极内阻能到几十兆欧到几百兆欧,若直接接普通运放,信号会被内阻和运放输入电容构成的分压吃掉一大截。正确做法是先用一个输入偏置电流极小的运放做成电压跟随器,把高阻抗信号源变成低阻抗源,然后再做后续处理。五路循迹传感器在智能车上的应用也一样,光电管输出阻抗不低,若不经过比较器或运放的阻抗变换直接进MCU,误触发的概率会显著上升。
3. 三种主流传感器的信号处理实例拆解
理论讲多了容易飘,直接上手拆三个最常见的传感器类型,看看它们的信号处理到底怎么做。这三种类型覆盖了电阻型、电容型、电荷型,基本能代表工业传感器的大多数场景。
3.1 电阻式传感器:电桥+仪表放大器的经典组合
应变片、热电阻、铂电阻温度传感器,本质上都属于电阻式传感器——被测物理量变化导致电阻值变化。但电阻变化量通常非常小。应变片的应变系数大约是2,当应变是1000微应变时,电阻变化率只有0.2%。一个350Ω的应变片,电阻只变了0.7Ω。直接用万用表是测不出这么小的变化的,必须用电桥电路把电阻变化转换成电压变化。
惠斯通电桥的原理本身不复杂:四个桥臂电阻,一个变化时,电桥输出电压正比于电阻变化率。实际使用中,我推荐用半桥或全桥配置,而不是单臂。全桥的好处是灵敏度高,而且能自动抵消温度引起的共模误差——四个应变片都贴在弹性体上,温度变化时四个电阻一起变,电桥输出不受影响。仪表放大器的第一级用两个运放做缓冲,正好匹配电桥的高输出阻抗。
称重模块HX711内部就是一颗专为电桥传感器设计的24位Σ-Δ ADC,它把仪表放大器、ADC、稳压电源全部集成在一个芯片里,可编程增益从32到128。用HX711的时候特别注意一点:它的模拟电源AVDD和数字电源DVDD必须分开走线,最后再单点汇合,不然数字开关噪声会直接耦合进模拟前端,导致输出码值跳动。我实际对比过,电源没处理好时,HX711的读数峰峰值偏差能到20个码以上;处理好之后,稳定在3到5个码以内。
3.2 电容式传感器:参考电容才是低调的功臣
电容传感器的工作方式分为变极距式、变面积式、变介电常数式。比如电容式触摸按键是人手靠近改变介电常数和电场分布,电容液位计是靠液位变化改变极板间介质的等效介电常数。电容传感器的共性是电容量变化量极小,常见范围从皮法级到几十皮法,测量精度要求高时,即便0.01pF的变化也要能分辨出来。
直接把电容变化变成电压变化,常见做法是交流激励加C/V转换。一个实用方案是用一个已知频率的方波或正弦波去激励由参考电容和传感电容构成的分压电路,输出交流电压的幅度和相位就反映了传感电容的变化,再用同步解调或整流滤波把交流变成直流。这里的核心关键是参考电容。参考电容的温度系数和稳定性,直接决定了整个测量链路对温度的敏感程度。C0G/NP0材质的电容温漂能做到±30ppm/°C以内,X5R/X7R的温漂就大得多,用在参考位置很容易让零点跟着温度漂。
如果信号频率不高,也可以用电荷转移法,原理是先把传感电容充电到已知电压,再把它放电到一个积分电容上,重复多次积分后得到一个正比于传感电容的电压值。这种方案对激励频率稳定性和开关电荷注入比较敏感,PCB布局上开关管离积分电容越近越好,走线越短越好。还有一点是寄生电容问题,传感器的引线本身就是一道电容,实测中普通杜邦线的寄生电容可能远大于传感器的变化量。所以电容传感器的前端电路一定要靠近传感器本体,实在没法靠近的话,要用有源屏蔽驱动,也就是用电压跟随器把屏蔽线的电位钳到和信号线相同的电位,让屏蔽线内外没有电位差,寄生电容就不起作用了。
3.3 压电传感器:电荷放大器的秘密
压电传感器(比如压电加速度计、压电压力传感器)的输出信号本质是电荷,而不是电压。它的内阻极高,等效为一个电荷源并联一个很大的内阻和一个小电容。如果直接接电压放大器,信号会受电缆电容影响,电缆一换读数就漂,这是早期压电测量最头疼的问题。
解决办法是电荷放大器。核心是一个带反馈电容的积分器结构——运放的反相输入端接传感器,反馈电容跨接在输出和反相输入端之间。由于运放的虚短虚断特性,传感器产生的电荷几乎全部流入反馈电容,输出电压就等于Q/Cf。只要Cf是固定的,输出就只和电荷量有关,与电缆长度、传感器内阻都无关。电荷放大器的设计难点在于反馈电容两端必须并一个大电阻提供直流偏置路径,这个电阻和Cf共同决定了电路的低频时间常数。
这个时间常数直接决定了系统的最低可用频率。时间常数等于Rf乘以Cf,如果Rf是100MΩ、Cf是100pF,时间常数是10ms,对应的-3dB低频转折频率大约16Hz。测量一个几十Hz的振动信号,这个响应勉强够用,但要测0.5Hz的慢变化压力,时间常数必须拉到秒级以上,Rf得上GΩ级别。实际选Rf时还要考虑它带来的噪声,电阻值越大热噪声越大,这是一个折中。还有一个容易忽略的点:电荷放大器的输入端对电流噪声极其敏感,建议把传感器输出的屏蔽层可靠接地,避免电缆摩擦产生摩擦电荷噪声。我做一个局放TEV传感器项目时,安装一根铠装电缆后波形里出现一系列诡异毛刺,排查到最后发现是电缆弯曲时屏蔽层和绝缘层摩擦产生了静电电荷,通过屏蔽层耦合进信号线,换用低噪声电缆并在两端做好应力释放后才算彻底解决。
4. 从模拟到数字:ADC采样和数字滤波实战
信号调理完毕,下一步就是数字化。ADC的选型与用法直接决定了信号处理的精度上限,同时也是很多隐蔽问题的温床。
4.1 ADC采样率和位数的工程选择
选择ADC,先看采样率,再看位数,顺序不能反。按照奈奎斯特采样定理,采样率至少是信号最高频率的两倍才能无失真重建,但那是理论极限。工程上一般取5到10倍以上。拿声音信号举例,语音的频带大约300Hz到3.4kHz,电话系统用8kHz采样率就够;但做高保真音频要用44.1kHz甚至96kHz采样率,多出来的余量是给滤波器的过渡带留空间。做雷达信号处理时,中频信号的采样率会直接受系统带宽约束,实采样至少两倍带宽,复采样至少一倍带宽,这是雷达系统设计的基础共识。传感器分系统,比如加速度计测振动,如果关心的是1kHz以下的振动,采样率设在5kHz到10kHz比较合理,既留足频率余量,又不会产生海量冗余数据。
关于ADC分辨率,核心不是位数越高越好,而是看有效位数ENOB,而不是标称位数。一颗标称24位的Σ-Δ ADC,在增益128、采样率10SPS时有效位数可能只有20位左右,受噪声影响,低位的几位基本在随机跳变。选择ADC时,不要只盯着数据手册上“24-bit”这个数字,要去噪声曲线里找有效分辨率。HX711在10SPS、增益128时有效分辨率大约20位,用在全桥称重传感器上,配合好的电源和布线,做到十万分之一的显示分辨率并不难。而MCU内置的12位ADC,理论上是4096级,但由于参考电压噪声和布局问题,实际有效位数常常只有10位或11位。
还要提一下基准电压。ADC的精度上限就是基准电压的精度。用MCU内置的3.3V LDO给ADC做参考电压,如果LDO的温漂是±50ppm/°C,温度变化10°C就会带来0.05%左右的读数变化。对浊度传感器来说,输出信号本身就受温度影响,还需要做温度补偿,而浊度传感器的温度补偿公式在不同浊度区间补偿系数还不一样,通常需要通过标定实验拟合——在这种情况下,如果基准电压再不稳,误差就更难控制了。高精度应用建议用独立的基准源芯片,比如REF5025这类,它的温漂能做到几个ppm/°C。
4.2 数字滤波不是越多越好
MCU收到ADC数据后,通常还会做数字滤波。常见手段是滑动平均、中值滤波、一阶低通滤波。但滤波是要付出代价的——延迟。比如滑动平均窗口设100个点,在10Hz采样率下等于引入了10秒的延迟,用来做温度这种慢变量没问题,用来做碰撞检测就完全不能接受。所以数字滤波的设计必须和系统响应时间需求挂钩。
我的建议是优先做中值滤波,再做轻量级滑动平均。中值滤波对尖峰脉冲有奇效,ADC偶发的毛刺会被直接剔除,滑动平均用来平滑随机噪声。两者叠加带来的延迟在3到5个采样周期内,对大多数传感器应用都可以接受。如果响应时间要求特别严苛,可以考虑卡尔曼滤波,但它本质是“用模型换噪声抑制”,需要你对被测量的动态特性有一定认知,否则模型设错,结果反而是震荡发散。我在实际做水平测量时用过一阶互补滤波融合加速度计和陀螺仪数据,那个本质是在频域上选择信任谁——低频信加速度计,高频信陀螺仪,其实也是一种变体的数字滤波,思路可以借鉴到多传感器融合场景里。现在做具身智能里的六维力/力矩传感器,数字滤波通常还要格外小心,因为力控制环路的相位滞后直接关系机器人稳定性,滤波器的群延迟必须严格控制,往往是能不过滤就不过滤,转入机械谐振频率以上的专用陷波器。
注意:数字滤波不能替代模拟滤波。ADC采样之前必须有一级抗混叠滤波器,否则高于采样率一半的信号会折叠回低频区,变成永远滤不掉的虚假信号。这是采样定理的铁律,任何数字算法都补救不了。
5. 干扰、噪声与系统级的信号处理隐患
信号处理不只是拿电路公式算算增益和截止频率,很多时候最后决定成败的是系统级的抗干扰设计。这一节的几个问题,我几乎在每个项目里都碰到过。
5.1 地回路和共模干扰
传感器信号通过长长的屏蔽线连到采集板,屏蔽层两端都接地,这是最常见的地回路隐患——两端接地点电位不同,地线上就会流过电流,这个电流会在屏蔽层上产生压降,再通过屏蔽层和信号线之间的分布电容耦合进信号通道,形成50Hz工频干扰。正确做法是屏蔽层单端接地,一般在信号源那一端接地。如果信号源和采集板之间电位差较大,还需要考虑用隔离放大器或隔离ADC来切断地环路。我做一个电涡流传感器探头线圈结构仿真配套的采集电路时,就因为传感器探头和主控板分别接在不同的配电箱,两地之间的地电位差导致数据一直缓慢漂移,加了隔离DC-DC和隔离运放之后,问题才彻底消失。
共模干扰也一样。如果你测一个连接在强电设备附近的两线制传感器,两根信号线上可能同时感应出几十伏的共模电压,虽然仪表放大器能抑制大部分共模信号,但如果共模电压超出仪表放大器的输入共模范围,放大器就会饱和,输出完全错误。所以选放大器时要留足共模电压余量,或者在输入端加保护二极管,限制意外的过压冲击。
5.2 传感器自热、温漂和非线性
传感器本身也会发热。热电阻和热敏电阻需要通电流才能测电阻,电流越大灵敏度越高,但同时自热效应会抬高传感器自身温度,带来额外误差。工程上一般把热电阻的功耗限制在几毫瓦以内,比如PT100在1mA激励下自身功耗约0.1mW,自热温升在空气中可能只有零点几摄氏度,但如果在静止液体中,热传导变差,温升会更明显。测温和测湿度项目里,这是一个需要根据具体工况评估的参数。
信号处理还必须处理传感器的非线性。热电偶输出电压与温度的关系是非线性的,反射式传感器光强与距离也不是线性关系,MQ-3酒精传感器的输出电阻与浓度之间隔着一张典型的“响应曲线”,不同浓度区间的灵敏度差异很大。处理方式通常是硬件上做对数放大或在软件里做查表/多项式补偿。MQ-3这类气敏传感器更麻烦的地方是它的基线会受环境温湿度影响,在电路上需要加温湿度补偿和定期校准,否则报出的“酒精浓度”数据只能算相对值,不能算绝对值。软件上的多项式补偿一般用数据手册给的典型曲线拟合一个分段函数,例如在单片机里存一张间隔较密的查找表,线性插值就够用。
6. 常见问题排查速查表
信号处理系统出问题时,先别急着怀疑算法和元件,按照下面的顺序排查,至少能解决八成的问题。
| 现象 | 可能原因 | 排查方向 |
|---|---|---|
| 读数跳动大、码值乱跳 | 供电纹波、基准不稳、采样走线太长、地线处理不当 | 示波器看电源纹波,看ADC输入端噪声,检查模拟地与数字地是否分开汇合 |
| 输出有明显50Hz工频成分 | 地回路、屏蔽层两端接地、共模干扰 | 屏蔽层改单端接地,检查信号线是否与动力线并行走线过长 |
| 读数缓慢漂移 | 传感器自热、温漂、基准电压温漂 | 测量传感器自身温度变化,检查基准源选型是否合适 |
| 信号幅值偏小 | 激励电压不足、增益电阻误差、传感器负载效应 | 校准激励电压,核对放大电路增益电阻是否焊错或精度不够 |
| 有规律的尖峰毛刺 | ADC采样瞬间数字噪声耦合、开关电源尖峰 | 在ADC输入端加RC去耦,采样点避开数字通信时刻 |
| 量程高端非线性压缩 | 放大器接近饱和、ADC输入超范围 | 检查各级输出波形是否削顶,调整增益或电平搬移 |
| 触摸感应板误触发 | 电源去耦不足、参考电容温漂、电极走线过长寄生电容大 | 检查参考电容材质,缩短传感走线,加有源屏蔽 |
以一个现象再说细一点。HX711称重模块读数在空载时反复跳动,这是新手最常见的求助问题。通常不是HX711坏了,而是模块上的模拟电源没有和数字电源分开布线,或者传感器线太长导致电磁干扰窜入。检查方式是先用示波器看HX711的AVDD引脚的纹波,如果纹波超过20mV,问题大概率在电源侧;再看传感器线缆有没有和电机驱动线捆在一起,如果有,把它们分开走线就能解决。
7. 写在最后:信号处理的能力边界
把这期笔记的内容浓缩成一句话:传感器的信号处理,本质是对信噪比的管理。传感器给的是物理量的一个弱映射,你的任务就是通过调理、滤波、数字化、校准,把有用的那部分信息尽可能完整地保留下俩,把没用的噪声尽可能多地滤掉。每一级处理都会引入新的噪声和误差——放大器有输入噪声和失调,电阻有热噪声和温漂,ADC有量化噪声和参考漂移,算法有延迟和模型误差——系统性能是由最弱的一环决定的,而不是最强的一环。
我在实际调试中最大的体会是:信号处理要分层去诊断,但要从系统去设计。新上手时容易在某一级局部较劲,比如反复改滤波器的系数,其实问题可能出在电源没处理好,或者传感器安装时的机械应力传到了敏感元件上。如果数据不对,先拿示波器去看最原始的信号,再逐级往后找,通常比闷头调参数有效得多。另外一个习惯是每次调试完都把波形截图和参数记录下来,这种现场记录对排查间歇性故障的帮助非常大——很多问题不是稳定出现的,恰恰是记录下来的蛛丝马迹指向了最后的根因。传感器信号处理这门手艺,一半是理论,一半是现场经验,希望这篇笔记能帮你少走几个我当年绕过的弯路。