第三章:心电信号采集前端

大家好,我是你们的讲师。今天我们来聊聊除颤仪最关键的物理层——信号采集前端。说实话,这部分我当年刚入行时也踩过不少坑。你想想看,心电信号才0.5mV到4mV,周围全是几十伏的除颤高压、射频干扰、工频噪声。能把这么微弱的信号干净地捞出来,本身就是一门艺术。

3.1 模拟前端电路设计

模拟前端,说白了就是信号进入ADC之前的"预处理车间"。我习惯把它分成三个核心模块:仪表放大器、右腿驱动、以及抗混叠滤波器。咱们一个一个说。

3.1.1 仪表放大器(INA)

仪表放大器是整个链路的"第一道门"。它的任务很简单:把差分的心电信号放大,同时把共模的干扰压下去。

我个人习惯用三运放结构的INA。为什么?因为它的共模抑制比(CMRR)能做到100dB以上。我在项目中遇到过一款号称120dB CMRR的芯片,实际焊上去一测,只有95dB。嗯,这里要注意:数据手册上的值都是在理想条件下测的,实际PCB布局、电源噪声都会拉低它。

选型时我建议关注这几个参数:

  • CMRR:至少100dB,最好110dB以上
  • 输入偏置电流:心电信号源阻抗高,偏置电流要小于1nA
  • 增益带宽积:心电带宽只有0.05-100Hz,但为了抑制高频干扰,我一般选GBW在1MHz以上的
  • 输入噪声:峰峰值要小于10μV,否则信号会被噪声淹没

重要提示:INA的增益我一般设在10-20倍。为什么不是100倍?因为后面还有二级放大。增益太高,直流偏置电压也会被放大,容易让信号饱和。我曾经吃过这个亏,调试时发现波形全削顶了,查了半天才发现是电极极化电压被放大了。

3.1.2 右腿驱动电路

右腿驱动,英文叫Right Leg Drive,简称RLD。这玩意儿是抑制工频干扰的"杀手锏"。

原理其实不复杂:人体相当于一个天线,会耦合50Hz/60Hz的工频干扰。右腿驱动电路把共模电压反相放大后,再反馈到右腿电极上,形成一个负反馈环路。这样共模电压就被"抵消"了。

设计时我习惯这样算:

  • 反馈电阻Rf取1MΩ左右
  • 输入电阻Ri取10kΩ
  • 这样增益就是Rf/Ri = 100倍
  • 但要注意,增益不能太高,否则容易振荡

我的小技巧:在RLD输出端串一个100kΩ的电阻,再并一个10nF的电容到地。这能限制反馈电流,防止除颤时的高压损坏运放。我曾经在原型机上没加这个保护,结果一次除颤测试直接把运放烧了,教训深刻啊。

3.2 抗混叠滤波器设计

抗混叠滤波器,名字听着高大上,其实作用就一个:在ADC采样之前,把高于奈奎斯特频率的信号滤掉。否则这些高频信号会"伪装"成低频信号混进来,你根本分不清真假。

我建议用二阶巴特沃斯低通滤波器。为什么是巴特沃斯?因为它在通带内最平坦,不会把心电信号的ST段、T波给"滤歪了"。

设计参数如下:

参数 推荐值 说明
截止频率 100Hz 心电信号带宽上限
滤波器阶数 2阶 滚降特性足够,元件少
滤波器类型 巴特沃斯 通带最平坦
运放 低噪声、低偏置 比如OPA2333

具体电路我习惯用Sallen-Key结构。电阻电容取值可以这样算:

// 二阶巴特沃斯 Sallen-Key 低通滤波器
// 截止频率 fc = 100Hz
// 取 C1 = C2 = 100nF
// 则 R1 = R2 = 1 / (2 * PI * fc * C)
// R1 = R2 ≈ 15.9kΩ,取标称值 16kΩ

// 实际电路:
// R1 = R2 = 16kΩ
// C1 = C2 = 100nF
// 运放:OPA2333

注意:电容一定要用C0G或NP0材质的,不能用X7R。X7R的电容值会随电压变化,滤波器特性就飘了。我见过有人用X7R做滤波器,结果不同病人测出来的截止频率都不一样,这哪行啊。

3.3 ADC配置与采样率选择

ADC是模拟世界和数字世界的"桥梁"。选对了,信号保真度就高;选错了,前面花再多功夫也白搭。

3.3.1 采样率怎么定

根据奈奎斯特定理,采样率至少是信号最高频率的两倍。心电信号最高频率约100Hz,所以理论上200Hz就够了。但实际中我从来不用这么低的采样率。

为什么?因为心电信号的QRS波群上升沿很陡,采样率太低会把R波的峰值"削掉"。我建议:

  • 常规监护:250Hz - 500Hz
  • 诊断级心电:500Hz - 1000Hz
  • 除颤仪:我个人习惯用500Hz

采样率500Hz时,每个R波能采到10-15个点,做QRS检测和心率计算都够用了。再高的话,数据量太大,MCU处理不过来,功耗也上去了。

3.3.2 ADC分辨率

分辨率决定了你能看到多小的信号变化。心电信号动态范围大约±5mV,经过前端放大后变成±2.5V左右。

我算给你看:

// 假设 ADC 参考电压 Vref = 3.3V
// 心电信号放大后范围 ±2.5V,即 5V 峰峰值
// 用 12-bit ADC:分辨率 = 3.3V / 4096 ≈ 0.8mV
// 折算到输入端:0.8mV / 放大倍数(1000) ≈ 0.8μV

// 用 16-bit ADC:分辨率 = 3.3V / 65536 ≈ 50μV
// 折算到输入端:50μV / 1000 ≈ 0.05μV

12-bit其实够用,但我建议用16-bit。为什么?因为留有余量。你想想看,电极接触不好时信号会漂,16-bit能给你更多的"容错空间"。

3.3.3 ADC配置要点

实际配置时,我习惯这样设置:

  • 采样模式:连续转换模式,不要用单次触发
  • 参考电压:内部参考或外部精密参考,别用VDD
  • 数据对齐:右对齐,方便做平均滤波
  • DMA传输:一定要用DMA,别用CPU轮询

经验之谈:ADC采样时钟我一般设在1MHz左右。太快了功耗高,太慢了采样率上不去。另外,每次采样前加一个短延时,让采样电容充分充电,这样采样值更准。这个技巧是我在调试一款低功耗MCU时发现的,不加延时的话,采样值总是偏小一点点。

3.4 整体链路设计要点

好了,三个核心模块都讲完了。最后我总结一下整个模拟前端的链路设计要点:

  1. 信号流向:电极 → ESD保护 → INA(增益10-20) → 高通滤波(0.05Hz) → 二级放大(增益50-100) → 低通滤波(100Hz) → ADC
  2. 电源去耦:每个运放旁边放一个10μF钽电容+100nF陶瓷电容
  3. PCB布局:模拟地和数字地要分开,单点接地。我习惯在ADC下方做分割
  4. 保护电路:输入端加TVS管和限流电阻,防止除颤高压打进来

最后说一句:模拟前端设计没有"一招鲜"的解决方案。每个项目都有自己的约束条件——成本、功耗、尺寸、精度。我建议你从最基础的电路开始搭,用信号发生器模拟心电信号,用示波器看每个节点的波形。只有亲手调过,才能真正理解每个元件的作用。

下一章我们会讲数字信号处理部分,包括滤波算法和QRS检测。到时候你会看到,前端采得好,后面算法就轻松;前端采得烂,后面算法再牛也救不回来。所以,这一章的内容值得你多花点时间消化。