4. 模拟前端设计:从传感器到数字信号的关键一步

做肌电采集,说白了就是跟微弱的生物电信号打交道。我刚开始接触这个领域时,总觉得模拟前端不就是放大滤波嘛,有什么难的?结果第一次搭出来的电路,噪声比信号还大,50Hz工频干扰直接把波形淹没了。嗯,从那以后我再也不敢小看模拟前端设计了。

这一节,我们重点聊聊肌电采集的模拟前端。核心器件就是仪表放大器,配合高通、低通和陷波器,把微弱的肌电信号从噪声中「捞」出来。

核心思路:肌电信号幅度在几十微伏到几毫伏之间,频率主要集中在20-500Hz。我们的任务就是:放大信号,滤除干扰。

4.1 仪表放大器选型:INA128 vs AD620

仪表放大器是整个模拟前端的「心脏」。我个人的习惯是,先看共模抑制比(CMRR),再看噪声指标。为什么?因为肌电信号是差分信号,而人体就是一根大天线,会耦合进来大量共模噪声。CMRR不够高,这些噪声就会混进信号里。

市面上最常用的两款芯片:INA128和AD620。我两个都用过,说说我的感受。

参数 INA128 AD620
CMRR (G=100) 120dB 典型值 110dB 典型值
输入偏置电流 5nA 最大 2nA 最大
噪声 (0.1-10Hz) 0.2µVpp 0.28µVpp
增益设置 单电阻,G=1+50kΩ/RG 单电阻,G=1+49.4kΩ/RG
静态电流 700µA 900µA

我个人更偏爱INA128。为什么?它的CMRR在G=100时能到120dB,比AD620高了10dB。别小看这10dB,在强干扰环境下,这就是信号能不能看和能不能用的区别。我在一个工厂车间做肌电测试时,周围全是电机,AD620出来的波形全是毛刺,换成INA128立马干净了。

当然,AD620也有它的优势——输入偏置电流更小,适合电极阻抗很高的场景。如果你用的是干电极,AD620可能更合适。

4.2 增益设置:到底放大多少倍?

增益设置是个权衡问题。放大倍数太小,信号进ADC时分辨率不够;放大倍数太大,又容易饱和。

我一般这样算:

  • 肌电信号典型幅度:0.1-5mVpp
  • ADC参考电压:3.3V(单端)或 ±2.5V(差分)
  • 目标:让最大信号占满ADC量程的70-80%

举个例子,如果ADC是3.3V单端输入,我们希望5mV的信号放大后能达到2.5V左右。那么总增益就是:2.5V / 5mV = 500倍。

但我不建议一级放大500倍。为什么?因为直流偏置也会被放大。电极和皮肤接触会产生几十毫伏的直流偏置,放大500倍后就是十几伏,早就饱和了。

我的做法是:

  1. 第一级(仪表放大器):增益设为50-100倍。这个阶段信号还比较小,不容易饱和。
  2. 第二级(后级放大器):增益设为5-10倍。此时信号已经经过高通滤波,直流分量被去掉了。

对于INA128,增益电阻的计算公式是:

RG = 50kΩ / (G - 1)

// 举例:想要G=100
RG = 50kΩ / (100 - 1) = 50kΩ / 99 ≈ 505Ω

// 实际取标准值:499Ω 或 510Ω
// 用499Ω时,实际增益 G = 1 + 50kΩ/499Ω ≈ 101.2

小技巧:增益电阻一定要用精密电阻(0.1%或更高),温度系数要低。我曾经图省事用了1%的普通电阻,结果温度一变,增益就飘了,数据根本没法用。

4.3 高通滤波器:去掉直流和低频漂移

高通滤波器的目的是去掉直流偏置和低频运动伪迹。肌电信号的有用成分从20Hz左右开始,所以截止频率设在10-20Hz比较合适。

我一般用一阶无源高通,放在仪表放大器后面。为什么不用有源?因为这时候信号还比较小,运放的噪声会引入额外干扰。

电路很简单:一个电容串联,一个电阻对地。

// 设计目标:截止频率 fc = 15Hz
// 公式:fc = 1 / (2π * R * C)

// 方案一:取 C = 1µF
R = 1 / (2π * 15 * 1e-6) ≈ 10.6kΩ
// 取标准值:10kΩ,实际 fc ≈ 15.9Hz

// 方案二:取 C = 0.47µF
R = 1 / (2π * 15 * 0.47e-6) ≈ 22.6kΩ
// 取标准值:22kΩ,实际 fc ≈ 15.4Hz

注意:电容要用CBB或聚丙烯电容,漏电流小。千万别用普通电解电容,漏电流会引入额外的直流偏置。我踩过这个坑,调试了整整两天才发现是电容的问题。

4.4 低通滤波器:抗混叠滤波

低通滤波器的截止频率设在500Hz,主要目的是:

  • 滤除高频噪声(肌肉收缩产生的高频分量很少超过500Hz)
  • 作为抗混叠滤波器,防止采样时高频信号折叠到低频段

我推荐用二阶巴特沃斯有源低通。为什么是巴特沃斯?因为它在通带内最平坦,不会扭曲肌电信号的波形。

电路用Sallen-Key拓扑结构,简单可靠:

// 设计目标:fc = 500Hz,二阶巴特沃斯
// 巴特沃斯系数:Q = 0.707

// 取 C1 = C2 = 0.1µF
// 计算 R1 = R2 = R

R = 1 / (2π * 500 * 0.1e-6) ≈ 3.18kΩ
// 取标准值:3.16kΩ(1%精度)

// 实际截止频率:
fc = 1 / (2π * 3.16e3 * 0.1e-6) ≈ 503.7Hz

// 运放推荐:TL072、OPA2134(低噪声、双运放)

关键点:运放的增益带宽积(GBW)要足够。对于500Hz的滤波器,GBW至少要10倍以上,也就是5kHz。TL072的GBW是3MHz,绰绰有余。

4.5 50Hz陷波器:干掉工频干扰

50Hz工频干扰是肌电采集的头号敌人。你想想看,肌电信号也就几十微伏到几毫伏,而电网的50Hz干扰可能达到几百毫伏。不把它干掉,信号根本没法看。

我常用的方案是双T型陷波器,也叫带阻滤波器。它的特点是:对特定频率衰减很大,对其他频率影响很小。

// 设计目标:中心频率 f0 = 50Hz,Q = 5-10
// 双T型陷波器参数:

// 取 C = 0.1µF
R = 1 / (2π * 50 * 0.1e-6) ≈ 31.8kΩ
// 取标准值:31.6kΩ

// 反馈电阻决定Q值:
// Q = 5 时,Rf = R / (2 - 1/Q) ≈ 31.6k / 1.8 ≈ 17.6kΩ
// Q = 10 时,Rf = R / (2 - 1/10) ≈ 31.6k / 1.9 ≈ 16.6kΩ

// 实际电路:
// R1 = R2 = R3 = 31.6kΩ
// C1 = C2 = C3 = 0.1µF
// Rf 用可调电阻,方便微调

调试经验:陷波器的中心频率很容易偏。我建议Rf用100kΩ可调电阻,配合50Ω固定电阻串联。上电后用示波器观察,微调Rf直到50Hz衰减最大。记住,电容的精度也很关键,最好用1%或更高精度的。

4.6 整体信号链路

把上面几部分串起来,完整的模拟前端信号链路是这样的:

电极 → 仪表放大器(INA128, G=100) 
      → 一阶高通(15Hz) 
      → 二阶低通(500Hz) 
      → 50Hz陷波器 
      → 后级放大(G=5) 
      → ADC输入

总增益:100 × 5 = 500倍。这个增益对于大多数肌电信号来说刚刚好。

布局布线提醒:模拟前端对PCB布局非常敏感。我的经验是:

  • 仪表放大器尽量靠近电极接口
  • 模拟地和数字地要分开,单点连接
  • 电源去耦电容要靠近芯片引脚
  • 信号走线要短,远离时钟线和数字信号线

我曾经在一块板上把模拟信号线和SPI时钟线平行走了5cm,结果50Hz干扰直接增加了20dB。后来改成垂直走线,问题就解决了。

4.7 本章小结

模拟前端设计,说白了就是跟噪声做斗争。选对芯片(INA128),算好增益(500倍),搭好滤波器(高通+低通+陷波),再注意布局布线,一套能用的肌电采集前端就出来了。

我刚开始做这个的时候,总觉得理论算好了就万事大吉。实际上,每一级滤波器都会引入相移,每一级放大器都会增加噪声。所以我的建议是:先搭出来,用信号发生器测试,再用示波器看实际波形。理论计算只是起点,调试才是关键。

下一节我们会聊ADC采样和数字滤波,到时候这些模拟信号就要变成数字信号了。嗯,那是另一个有意思的话题。


公众号:蓝海资料掘金营,微信deep3321