做个决定之前,先吐槽一句:如果你是因为搜“Thompson Sampling”误打误撞点进来,那得先提醒你,那是机器学习里的“汤普森采样”,多臂老虎机用的贝叶斯决策算法,跟咱要聊的电子信号采样完全不是一回事。这篇文章的Small Signal Sampling,说的是那种幅度小到微伏、毫伏级别的模拟信号,怎么把它从噪声堆里捞出来,再高质量地送进ADC的整套方法论。
这类需求太常见了:热电阻测温、称重传感器、心电信号、光电二极管检测、电池内阻测量,全是小信号采样的典型场景。问题在于,信号小意味着信噪比天然吃亏,噪声、失调、分辨率、参考源、接地,任何一个环节漏了,出来的数据就是飘的。这篇文章把这些点全部拆开讲清楚,从硬件调理到ADC选型,再到软件层的过采样和校准,最后给一个完整的调试实录。电子工程入门到进阶的读者,尤其是正在做采集电路、传感器接口或者精密仪表的,这篇可以直接照着改。
1. 小信号采样到底难在哪
1.1 先定义清楚:什么才算“小信号”
做工程最怕定义含糊。我一般把“小信号”分成两个档次:
- 毫伏级(1mV~100mV):比如电流检测电阻上的压降、热电偶的输出。这类信号普通万用表能测,但要稳定采样,前级增益和噪声抑制就得认真设计了。
- 微伏级(1μV~1mV):比如称重传感器的差分输出、心电信号、热敏电阻的微弱变化。这个量级,PCB布局的地噪声、热电动势、甚至你手靠近都会影响读数。
区分这两个档次不是较真,而是直接决定方案:前者用普通精密运放加放大电路就够了;后者必须上仪表放大器加差分结构,而且大概率要做长时间积分或过采样。
还有一个容易被忽视的点:小信号大小是相对的,跟你的基准电压和ADC满量程对比才有意义。一个5V满量程的12位ADC,LSB就是1.22mV,你给个10mV的信号采出来只有8个码,根本没法用。所以判断“信号小不小”,本质上是在问“信号幅度相对于系统噪声和量化步长够不够大”。
1.2 三大敌人:噪声、失调、分辨率
采样小信号,真正要对付的其实就三个东西。
噪声。噪声是全域的,热噪声、1/f噪声、环境工频干扰、电源纹波,任何一个都能骑在微伏信号头上。热噪声有个经典公式:一个10kΩ电阻在室温下带宽1kHz就有约12.8μVrms噪声,光这个就快赶上信号了。所以小信号采样从来不是“放大信号”,而是“抑制噪声的同时放大信号”。
失调。运放的输入失调电压(Vos)和失调温漂,是直流和低频采样的隐形杀手。普通运放Vos动辄1~5mV,比你信号还大。所以小信号前端要么选低失调精密运放(几μV等级),要么在软件里做自动校准。给个参考,我在仪表放大器上见过最坑的一次,厂家标称漂移0.1μV/℃,看着很美,结果PCB旁边就是一个电源电感,热风一吹,读数直接跳了几十个码。
分辨率。ADC位数决定了你最终能把信号细分到什么程度。好在现代ADC便宜,24位Σ-Δ的到处都是。但这里有个陷阱:标称24位不等于有效24位。后面会细说ENOB这个概念,在这里先记住一句话——有效位数才是真分辨率,标称位数是营销数字。
1.3 为什么“直接采”必死:一个估算例子
我经常拿一个例子教育组里的新人,你算一遍就永远记住了。
假设有一个0~10mV的传感器信号,直接接到一个16位ADC上,满量程5V。那么信号只占满量程的0.2%,量化后能用的码值只有:
(10mV / 5V) × 2^16 ≈ 131个码
131个码是什么概念?理想情况下分辨率只有满量程的0.076%,稍微叠加一点系统噪声,信号就是个“毛刺里游泳”的状态。更致命的是,这还没有算ADC本身的失调和增益误差,很多16位SAR的失调误差就有±3mV的级别,比你整个信号还大。
这就是为什么100个做小信号采集的项目里,99个都要加前级放大。你需要的不是“直接采”,而是“先把信号搬到ADC擅长的区间”,比如放大100倍到1V级别,这样信号占满量程20%,码值才有13100个,才能谈精度。
2. 采样之前的信号调理:硬件设计的四步棋
2.1 放大:仪表放大器还是普通运放
小信号前端放大,选放大器是第一关。我见过太多人拿个LM358之类上去就干,然后回来问为什么测不准——大哥,LM358的Vos是2mV,你的信号才2mV,这账根本没法算。
选型基本就两条路:
- 单端信号,参考地,幅度大于1mV:选精密低失调运放,比如OPA2188(Vos 25μV,温漂0.05μV/℃)、ADA4522这类自动稳零(chopper)运放。这类运放噪声低、失调极小,适合放大后直接送ADC。
- 差分信号,或者共模干扰大:上仪表放大器,比如INA128、AD8421、AD8221。仪表放大器能用电阻设定增益(一般1~1000),更重要的是有接近90dB以上的共模抑制比,能把传感器两根线上的同相干扰(比如工频)抵消掉。
一个实用的经验:仪表放大器选型时别只看带宽和增益,要看“增益×共模抑制比”的乘积。很多普通运放接成差分电路,理论CMRR不错,但电阻匹配度稍差就崩了。仪表放大器内部激光校准,电阻匹配做到极致,这才是小信号差分采样的底气。
另外提一个我踩过好多次的细节:绝大多数精密放大器的输出驱动能力都很弱,带不动后级ADC的采样电容。如果ADC是SAR型,采样瞬间会抽取一个电流尖峰,直接污染输出。稳妥做法是放大器到ADC之间加一个RC低通,并选一个能驱动ADC的缓冲级,或者用Σ-Δ ADC那种内部集成缓冲器的型号。
2.2 滤波:抗混叠与去噪的平衡
滤波在小信号链路里有两个功能,很多人只想到去噪,但抗混叠才是ADC的前置硬性要求。
先搞明白奈奎斯特定理:采样率fs,理论上能无混叠恢复的最高频率是fs/2。如果输入信号里混入高于fs/2的高频噪声(比如手机射频、开关电源的毛刺),这些分量会被“折叠”回低频段,变成你根本分辨不出来的伪信号。所以ADC前必须有低通滤波器。
但这里有个小信号特有的矛盾:滤波器的截止频率越低,对噪声抑制越好,但它会把信号的有用带宽也砍掉。比如心电信号主要能量在0.05~100Hz,你放个1kHz低通,工频干扰还是漏进去了。
我的习惯做法是分两级:
- 无源RC一阶低通放在放大器前:截止频率放到信号带宽的5~10倍,主要滤高频射频干扰,避免放大器被强干扰“全波整流”。
- 二阶有源低通放在放大器后、ADC前:用运放搭MFB即多重反馈结构,做到模拟巴特沃斯响应,截止频率按信号带宽的1.5~3倍留余量。
计算公式很简单,MFB结构的截止频率是:
f_c = 1 / (2π × √(R1 × R2 × C1 × C2))
不过我不会在这里堆公式,给个经验值:如果信号带宽是1kHz,我会把后级低通做到2kHz左右,这样既能压住10kHz以上的开关噪声,又不伤信号边沿。
2.3 差分采样:用共模抑制撕开信号
小信号如果来自传感器,八成是差分输出,比如惠斯通电桥、应变片、热敏电阻桥。这种场景采样端务必用差分结构,别把一端接地变成单端。
关键的直觉理解:传感器到ADC之间有很长一段走线,两根线会同时感应到相同的噪声(共模),比如工频电场耦合。如果单端采样,这个共模噪声直接叠加在信号里;如果差分采样,仪表放大器的核心做法是对两根线的差值放大,共模部分被抵消。CMRR是100dB的话,10V的共模干扰只剩0.1mV出现在输出端,这就是差分采样能“撕开”信号的原因。
实操上有几个细节,可能比选什么型号更重要:
- 传感器和放大器之间的“地”必须干净。差分只对共模有效,如果整个系统参考地是脏的,差分也救不了你。
- 用双绞线传输传感器的差分信号,让两根线受到的电磁耦合尽量一致,这样共模干扰相关性高,CMRR才能发挥。
- 确保共模电压不超过放大器的输入共模范围。仪表放大器虽然CMRR高,但输入共模范围有限,超出后内部放大器饱和,输出就废了。
2.4 保护与阻抗:没人提的两个坑
第一个坑是静电保护。小信号放大器输入阻抗极高,几根飞线就是一根天线,静电打一下就报废。所以输入前最好加保护,比如BAT54S双二极管对电源轨钳位,或者用专门的输入保护芯片。这里有个参数要注意:保护二极管的漏电流要低,否则漏电本身就是新的噪声源。
第二个坑是源阻抗。很多传感器源阻抗很高,特别是光电二极管(等效一个电流源并联几十兆欧电阻),这时候不能用普通电压放大器直接采,否则输入偏置电流在源阻抗上形成压降,误差巨大。正确做法是接成跨阻放大器(TIA),把电流先变成电压。也就是说,小信号采样的前端设计,必须先搞清楚信号的“性格”是什么:是低阻电压型,还是高阻电流型,方案完全不同。这个判断错了,后面全白干。
3. ADC选型与参考源:精度工程的另一半
3.1 别只看位数,ENOB才是真实力
前级信号调理做得再好,ADC不给力也白搭。很多人选ADC只看“24位”“16位”标称,实际有效位数(ENOB)直接打个对折。
ENOB这个概念的意思是:这个ADC在实际条件下(有噪声、有失真)能达到的等效理想位数。比如一个标称24位的Σ-Δ ADC,在100SPS采样率下ENOB可能到21~22位,但如果你把采样率拉到十万级,有效位数可能掉到16位以下,比很多SAR ADC还差。
所以选ADC的正确姿势是:先看频率特性表里的ENOB曲线,再查“无噪声分辨率”(Noise-free bits)指标。我用过一个简单的经验换算:
无噪声分辨率 ≈ ENOB - 2.7位
举例:某24位ADC在20SPS时ENOB是21.5位,无噪声分辨率就是18.8位,也就是说输出在188万码左右波动。如果信号峰峰只有满量程的10%,那真实分辨率只剩约17.8位。要评测一个采集系统到底能分辨多少微伏,算这个比直接看位数靠谱得多。
3.2 参考源噪声被人低估了
小信号采样系统里,参考源(VREF)的噪声是“倍增”的。ADC把模拟电压和VREF做比例比较,如果VREF自己在那抖,ADC就会把这抖动当成信号变化。
很多工程师在VREF上翻车,我见过一个案例,用了标准三端稳压器给ADC供电,结果采集数据周期性抖动,怎么查都查不到,最后在VREF上串了个1μF电容,抖动好了。原因就是三端稳压器的宽带噪声大概在几百μV级别,直接污染了比较基准。
选参考源的几个硬指标:
- 温漂:低温度系数用ADR441、LM4140这类,精度0.5ppm/℃起步。
- 宽带噪声:典型值应该在几μVpp以下,比如REF5025的0.1~10Hz噪声约3μVpp。
- 负载调节能力:选带缓冲输出的参考源,别让ADC的动态电流直接抽参考源。
实操上有个建议:无论参考源芯片多好,都必须在VREF引脚到地加一个至少10μF的电容并联一个0.1μF瓷片电容,用于吸收微分噪声。位置要尽量靠近ADC引脚,走线加粗,别绕弯。
3.3 采样时钟的孔径抖动
这个细节教科书写得多,现场做的人倒很少注意。简单说,ADC采样有个精确的时刻,如果这个时刻不准,采到的电压就是“飘”的。孔径抖动(Aperture Jitter)表示这个时刻的不确定性,它会直接转化为电压噪声,信号频率越高越明显:
ΔV = dV/dt × Δt
对于直流或慢变信号,孔径抖动基本可以忽略;但对高频采样,这个误差就成了主要噪声源。所以如果项目里要用单片机定时器产生AD触发信号,你还会发现单片机内部锁相环抖动较大,想测好100kHz以上的信号,就开始吃力了。
小信号采样的场景往往是低频慢变信号,这时候孔径抖动不算主要矛盾。但如果你的数采板要兼顾高速采样,就老老实实用外部晶振给ADC提供可靠的转换时钟,别用系统里那颗省成本的振荡器。
3.4 从ADS1256到AD7606,常见ADC怎么挑
市面上常见的ADC选型,我按使用场景做一个对比,方便你快速定位:
| ADC型号 | 架构 | 标称位数 | 典型有效位数 | 适用场景 | 注意事项 |
|---|---|---|---|---|---|
| ADS1256 | Σ-Δ | 24 | 21~22位(2.5SPS) | 高精度称重、温度、低频传感器 | 需要干净的模拟电源和参考源 |
| ADS1220 | Σ-Δ | 24 | 20位左右 | 小体积、低功耗传感器前端 | 内置温度传感器,但别依赖 |
| AD7606 | SAR | 16 | 15.5位 | 8通道同步采样,电力/振动 | 内置参考和驱动,但输入带宽有限 |
| AD7768 | Σ-Δ | 24 | 21位以上 | 高通道数、高精度 | 价格偏高 |
| MCU内置ADC | SAR | 12~16 | 11~14位 | 一般信号采集 | 千万别拿来测微弱信号,除非外挂放大 |
结论不复杂:做小信号精密采样,闭着眼睛选Σ-Δ架构的24位ADC基本不会错。Σ-Δ架构靠内部过采样和数字抽取滤波,对模拟前端的要求比SAR低很多,自带数字滤波也帮忙压噪声。但代价是采样率上不去,一只ADS1256在最高精度模式下只有2.5SPS,只适合慢速变化信号。
4. 软件层挖信噪比:过采样、滤波与校准
4.1 过采样+抽取:用速度换分辨率
硬件做到位了,软件还能再抠一点。最经典的手段就是过采样加抽取,用速度换分辨率。
原理是:如果噪声近似白噪声,那么把采样率提高到原来的4倍,再做平均抽取,信噪比提升约6dB,等效分辨率增加1位。写成公式:
过采样率OSR = f_actual / f_required
有效位数每增加1位,过采样率需要提高4倍。
这个技术对Σ-Δ ADC是天然内建的,但你用MCU内置12位ADC时也能自己实现。比如你用100kHz采样率采一个1kHz的信号,每100个点平均成一个输出,等效位能提升约:
log2(√100) ≈ 3.3位
也就是12位变15位左右。当然,前提是噪声确实接近白噪声,如果噪声主要是50Hz工频这种确定性干扰,简单平均没用,得上陷波滤波器。
我一般把这个技术用在高分辨率慢速采集上。一个实操建议:过采样平均之后别忘了去掉直流偏移,有时候你平均出来的那个值,包含ADC和运放的固定失调,还得在软件里做一次零点校准才能变成真正的物理量。
4.2 滑动平均和加权滤波的取舍
平均滤波虽然好,但对突变信号响应太慢,会“抹平”有用细节。这时候需要用滑动平均(Moving Average)或者加权平均。
滑动平均的典型实现就是开个环形缓冲区,每次来新数据就去掉最旧的数据,求一次平均。它的好处是实时性好,每个新采样就能出一个平滑值。但要注意窗口长度:窗口越长,噪声抑制越强,但对阶跃信号的响应越迟钝。
如果既要低噪声又要快响应,可以用一阶IIR滤波:
y[n] = α × x[n] + (1 - α) × y[n-1]
α通常取0.01~0.1之间,越小滤波越平滑但响应越慢。这种滤波器的优点CPU占用极低,适合单片机里做实时处理。
不过这里要提醒一个很多人踩过的坑:IIR滤波器作为信号链的一部分会改变信号的相位,如果你做的是需要实时控制的系统,相位延迟会导致控制环变慢甚至震荡。这种场景下用有限冲激响应(FIR)滤波器更好,虽然计算量大,但可以做线性相位。
4.3 基线校准与数字去漂移
小信号系统最大的麻烦其实是漂移。电路一热,整个基线就在那爬,你以为是信号,其实是温漂。
软件校准的思路分三层:
- 零点校准:上电后或者定期让输入短路到地,记录零点码值,之后每次采样都减去这个值。
- 增益校准:用精密基准源输入一个已知电压,记录增益误差,之后按比例修正。
- 动态漂移补偿:对温漂进行多项式补偿,用板上温度传感器的读数乘以温度系数,把基线拉回来。
我最常做的是前两种,已经能解决绝大多数问题。动态漂移补偿建议只在零点长期稳定性要求极高的场景再上,因为温度系数标定本身就是一道极其麻烦的工序,搞不好越补越乱。
另外一个能用软件做的好东西是数字陷波滤波器,专门用来吃50Hz/60Hz工频。可以做一个二阶IIR陷波器,中心频率50Hz,Q值取20左右,对工频干扰的抑制能到30dB级别。不过这套东西在信号本身含50Hz成分时会误伤,使用前要确认信号带宽。
5. 一个实测场景:毫伏级电流信号的采集调试记录
5.1 系统结构和指标预算
用一个实际做过的项目来把上面的内容串起来。需求是测一个电池放电回路的电流,采用低侧采样方案,采样电阻10mΩ,最大电流5A,采样电阻上最大压降50mV。目标分辨率是1mA,对应采样电阻上10μV的分辨能力。
系统结构是这样的:
采样电阻 -> 仪表放大器(INA128, G=100) -> 二阶有源低通滤(1kHz) -> ADS1256 -> STM32指标预算:50mV信号放大100倍是5V,接近ADS1256的满量程。1mA对应放大后1mV,ADS1256在100SPS下ENOB大概20位,满量程5V的LSB是4.77μV,看起来绰绰有余,但实际上要把系统噪声算进去。
计划好的信号链路和供电:
- 模拟部分用单独的线性稳压(LT3045)供电,跟数字电源彻底分开
- 放大器靠近采样电阻放,走线越短越好
- 地线采用星形接地:模拟地、数字地在ADC处单点汇合
5.2 从示波器上看噪声来源
第一次上电,测量的数据噪声峰峰值大概30mV@输出端,折算到输入端是0.3mV,也就是30mA误差,完全不合格。示波器一测,就看到几个明显特征:
- 50Hz密集的正弦叠加:工频干扰,原因是采样电阻到放大器之间的走线比较长,形成等效天线。用差分输入加双绞线,工频大幅下降。
- 高频毛刺同步于电源开关:这是开关电源的纹波直接耦合进了参考地。解决办法是把电流采样的模拟地单独走线,汇合点从电源端改到ADC的地。
- 低频漂移:开机后几分钟内基线一直往上走。查下来是放大器旁边一颗功率电阻发热,热辐射导致INA128温漂。后来把功率元件挪远,顺带在放大器底下铺了接地铜皮散热,漂移好了一半。
5.3 三次改造后的实测提升
第一次改造:把仪表放大器的输入改成真正的差分(之前有一端误接了地),并用双绞线连采样电阻。输出噪声从30mVpp降到12mVpp。
第二次改造:模拟地单独走线,切断和数字地上的开关噪声耦合,同时把参考源旁边加了10μF电解电容和0.1μF陶瓷电容。噪声从12mVpp降到5mVpp。
第三次改造:软件里做了64次过采样平均,等于OSR=64,信噪比理论上又提升约9dB,再加上零点校准。最终输出数据的峰峰值噪声约1.2mV@输出端,折算8mA@输入端,虽然还没到完美,但已经能满足项目10mA的精度要求。
这个调试过程一方面验证了前面讲的每个环节的重要性,另一方面也提醒大家:小信号系统的噪声是“每个环节贡献一点”的叠加,排查时永远不要期待一个灵丹妙药,一处处检查才是正路。
6. 常见问题与排查技巧实录
6.1 故障现象速查表
| 现象 | 可能的元凶 | 验证方法 | 解决办法 |
|---|---|---|---|
| 读数持续跳动,幅度大 | 接地回路不正确 | 用示波器看ADC输入波形 | 星形接地,模拟地单点汇合 |
| 只在小信号时噪声大 | 放大器增益不足 | 算一下信号占ADC满量程比例 | 增加前级增益,匹配满量程 |
| 有固定周期毛刺 | 开关电源耦合 | 看毛刺频率是否与DC-DC开关频率一致 | 加LC滤波,模拟区域远离功率电感 |
| 上电后基线漂移 | 温漂 | 热像仪或手摸查发热元件 | 移开热源,选低漂移放大器,软件校准 |
| 信号频率高时误差变大 | 孔径抖动/抗混叠不足 | 降低采样率看是否改善 | 换低抖动时钟,加抗混叠滤波器 |
| 差分输入读数仍被共模干扰 | 输入共模超范围 | 测输入引脚对地电压 | 改用仪表放大器,或电平搬移 |
6.2 几条成本极低的接地与屏蔽经验
这些经验都是花钱买来的,但分享出来成本很低。
第一条:模拟地和数字地单点汇合,放在ADC的地引脚。别做一整块地平面,在小信号板上反而容易被数字电流搅浑。两边各自铺地,中间用0Ω电阻或者磁珠连一次,位置一定要选在ADC的地附近,这样数字电流不会流经模拟区分。
第二条:采样电阻用四线开尔文接法。我见过太多人在两个焊盘上直接焊两根线就去测微欧级电阻的压降,结果导线电阻和焊锡电阻完全淹没信号。四线制让采样线与电流路径分开,放大器只测电压,不流过负载电流,精度能提高一个数量级。
第三条:屏蔽罩不是随便扣的。屏蔽罩必须接模拟地,并且只在一点接地。如果多点接地,反而会形成环路电流,把噪声引进来。还有一个常被忽略的点:屏蔽罩别把发热元件罩进去,里面闷着热,温漂更严重。
第四条:放大器底下的铺地,既是屏蔽也是散热。但这块地要跟信号地的连接位置选好,否则就是增加寄生电容,影响高频响应。低频小信号场景基本没有这个问题,直接连模拟地就行。
6.3 给新手的一句话总结
做小信号采样最忌讳的是“一步到位”的幻想——指望选个好ADC就什么都解决了。我在实际调试中反反复复验证过,系统性能是由信号调理、ADC、参考源、布局布线、软件滤波共同决定的,每个环节都会吃你一点信噪比。与其迷信高端芯片,不如把每个环节的噪声预算搞清楚,一块一块地扣。这样即使最后指标还是差一点,你至少知道差在哪、该往哪个方向补。