2、数据采集与传感器:心电传感器选型、AD转换原理、采样率与分辨率
好,咱们进入第二章。这一章聊的是整个系统的「触角」——传感器和数据采集。说白了,你算法再牛、界面再炫,原始信号要是脏的、丢的、失真的,后面全白搭。我当年第一个心电项目就吃过这个亏,后面细说。
2.1 心电传感器选型:别只看参数表
心电传感器,市面上主流就那几颗。我个人习惯把它们分成三类:
- 模拟前端芯片:比如 AD8232、ADS1292R、MAX30003。这类芯片把仪表放大器、滤波、右腿驱动都集成好了,你外面加几个电容电阻就能用。
- 分立方案:用运放自己搭。不推荐,除非你在做科研或者想折腾。
- 模块化成品:比如 PulseSensor、AD8232 模块。适合快速原型验证,但别用在正式产品里。
选型时,我建议你重点关注三个指标:
| 指标 | 说明 | 我的经验值 |
|---|---|---|
| 共模抑制比 (CMRR) | 抑制工频干扰的能力 | 至少 80dB,最好 100dB+ |
| 输入噪声 | 决定了你能看到多微弱的信号 | 低于 10μVpp 才算及格 |
| 输入偏置电流 | 影响电极极化电压的耐受 | nA 级别即可 |
避坑指南:我曾经选了一颗号称「低功耗」的芯片,结果它的 CMRR 在低频段掉得厉害。50Hz 工频干扰直接淹没了 P 波。嗯,从那以后我选型必看 datasheet 里的 CMRR vs 频率曲线图。
2.2 AD转换原理:从模拟到数字的那一步
心电信号是连续的模拟量,但单片机只认 0 和 1。中间这个翻译官,就是 ADC(模数转换器)。
常见的 ADC 架构有几种:
- 逐次逼近型 (SAR):速度快、精度适中。我大部分项目都用它。
- Σ-Δ 型:精度极高,但速度慢。适合心电这种低频信号。
- 双积分型:抗干扰好,但太慢。老古董了。
心电领域,我推荐 Σ-Δ 型 ADC。为什么?因为它内部有过采样和数字滤波,能帮你省掉一级模拟低通滤波器。ADS1292R 内部就是 Σ-Δ 架构,24 位分辨率,直接输出数字信号。
小技巧:如果你用 SAR 型 ADC,记得在输入端加一个抗混叠滤波器。不然高频噪声折叠到低频段,你会在心电波形上看到一些「幽灵」信号。我见过有人折腾了三天,最后发现是没加这个滤波器。
2.3 采样率:不是越高越好
采样率决定了你每秒采集多少个点。心电信号的主要能量集中在 0.05Hz ~ 100Hz 之间。根据奈奎斯特定理,采样率至少是最高频率的两倍,也就是 200Hz。
但实际中,我建议这样选:
- 常规心电监测:250Hz ~ 500Hz。够用,数据量适中。
- 心率变异性 (HRV) 分析:500Hz ~ 1000Hz。因为需要精确检测 R 波峰值位置。
- 诊断级心电图:1000Hz 以上。医院里的设备通常跑这个。
你想想看,采样率太高会怎样?数据量暴增,存储和传输都扛不住。我有个学生做无线心电,采样率设到 2000Hz,蓝牙直接卡死。后来降到 500Hz,一切正常。
注意:采样率不是越高越好,够用就行。过高的采样率会引入更多高频噪声,而且你的 MCU 可能根本处理不过来。我曾经在 STM32F103 上跑 1000Hz 采样,结果 CPU 占用率飙到 80%,其他任务全被饿死了。
2.4 分辨率:看得清细节的关键
分辨率决定了 ADC 能区分的最小电压变化。公式很简单:
最小分辨率 = 参考电压 / (2^N)
其中 N 是 ADC 的位数。
举个例子:参考电压 3.3V,12 位 ADC:
3.3V / 4096 ≈ 0.8mV
心电信号的 R 波大约 1mV,P 波只有 0.1mV ~ 0.2mV。你想想看,0.8mV 的分辨率,P 波根本看不见。所以心电系统至少需要 16 位 ADC,推荐 24 位。
| 位数 | 分辨率 (3.3V 参考) | 能否看清 P 波 |
|---|---|---|
| 10 位 | 3.2mV | ❌ 完全不行 |
| 12 位 | 0.8mV | ⚠️ 勉强看到 R 波 |
| 16 位 | 50μV | ✅ 可以 |
| 24 位 | 0.2μV | ✅ 绰绰有余 |
核心观点:分辨率决定了你的「视力」。16 位是底线,24 位是舒适区。别为了省几块钱选低分辨率 ADC,后面做信号处理时会哭的。
2.5 实际电路设计要点
纸上谈兵差不多了,咱们看看实际电路怎么搭。以 AD8232 为例,我给出一个最小系统配置:
// AD8232 典型配置
// 引脚连接:
// 1 - 右腿驱动输出 (RLD) → 电极
// 2 - 反相输入 (-IN) → 电极
// 3 - 同相输入 (+IN) → 电极
// 6 - 输出 (OUTPUT) → ADC 输入
// 7 - 参考电压 (REF) → 1/2 电源电压
// 外部元件:
// C1 = 10μF (去耦电容)
// R1 = 10kΩ (反馈电阻)
// C2 = 1μF (滤波电容)
这里有几个坑,我帮你列出来:
- 电源去耦:每个电源引脚都要加 0.1μF + 10μF 电容。别偷懒,不然噪声会让你怀疑人生。
- 走线布局:模拟信号线尽量短,远离数字信号线。我见过有人把 ADC 输入线和 SPI 时钟线并行走,结果采集到的全是时钟噪声。
- 右腿驱动:一定要接。它能有效抑制共模干扰。不接的话,你摸一下电极,波形就飞了。
我的习惯:在 PCB 上预留一个测试点,直接引出 ADC 输入信号。调试时用示波器看这个点,能快速判断是前端电路问题还是后端处理问题。这招帮我省了无数排查时间。
2.6 本章小结
嗯,这一章内容不少。核心就三件事:
- 传感器选型:优先选集成模拟前端芯片,关注 CMRR 和噪声。
- ADC 配置:Σ-Δ 架构 + 16 位以上分辨率,采样率 250Hz ~ 500Hz 够用。
- 电路设计:注意电源去耦、走线隔离、右腿驱动。
下一章咱们聊信号处理——怎么把原始数据里的噪声滤掉,提取出干净的心电波形。到时候我会分享一个我常用的数字滤波器设计,保证让你眼前一亮。
公众号:蓝海资料掘金营,微信deep3321