
直接说个实际场景我之前调一块电容式麦克风阵列板传感器输出端直接接示波器看到的除了想要的声波信号还叠着一层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 放大电路选型仪表放大器为什么是首选传感器输出常见的形式有两种差分输出和单端输出。应变片电桥、电磁传感器通常是差分输出信号线上一根正一根负真正有用的信号是两根线之间的差值而两根线上同时存在的噪声叫共模干扰。普通运放做差分会遇到一个问题——它的共模抑制比不够高而且输入阻抗不够大会从传感器端“抢”电流影响测量结果。仪表放大器INAInstrumentation Amplifier就是专门为这种场景设计的。它有三级结构第一级是两个Buffer提供极高的输入阻抗几乎不从传感器抽电流第二级是差分放大把两输入线的差值放大同时把共模信号压掉第三级是输出级可以灵活调整增益。以TI的INA128为例共模抑制比在G100时典型值能做到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有量化噪声和参考漂移算法有延迟和模型误差——系统性能是由最弱的一环决定的而不是最强的一环。我在实际调试中最大的体会是信号处理要分层去诊断但要从系统去设计。新上手时容易在某一级局部较劲比如反复改滤波器的系数其实问题可能出在电源没处理好或者传感器安装时的机械应力传到了敏感元件上。如果数据不对先拿示波器去看最原始的信号再逐级往后找通常比闷头调参数有效得多。另外一个习惯是每次调试完都把波形截图和参数记录下来这种现场记录对排查间歇性故障的帮助非常大——很多问题不是稳定出现的恰恰是记录下来的蛛丝马迹指向了最后的根因。传感器信号处理这门手艺一半是理论一半是现场经验希望这篇笔记能帮你少走几个我当年绕过的弯路。