第二章 心电数据采集:从生物电到数字信号
好,咱们进入正题。上一章聊了心电信号的基本特征,这一章我带你看看——这些微弱的生物电信号,到底是怎么被「抓」到电路里,变成我们能处理的数字数据的。
说白了,心电采集就是一场与噪声、干扰、微弱信号的博弈。我做了这么多年嵌入式,踩过的坑有一半都在这块。
2.1 生物电传感器原理
先讲个最基础的问题:电极是怎么检测到心电信号的?
人体本质上是个电解质溶液。心脏跳动时,心肌细胞膜电位变化,会在体表产生微弱的电位差——大概0.5mV到4mV之间。这个信号有多弱?你想想看,一节干电池是1500mV,心电信号连它的千分之一都不到。
电极贴在皮肤上,就形成了一个「金属-电解质」界面。这里会产生半电池电位,也叫极化电压。嗯,这个极化电压很讨厌,它可能高达几百毫伏,比心电信号本身大几百倍。
我个人习惯用Ag/AgCl电极,也就是银-氯化银电极。为什么?因为它的极化电压相对稳定,噪声也低。我在项目中遇到过用普通不锈钢电极的情况,结果基线漂移得一塌糊涂,后来老老实实换回了Ag/AgCl。
2.2 ADS1292/ADS1298芯片介绍
聊完电极,咱们看看核心芯片。TI的ADS1292和ADS1298,可以说是心电采集领域的「标配」了。
| 参数 | ADS1292 | ADS1298 |
|---|---|---|
| 通道数 | 2通道 | 8通道 |
| 分辨率 | 24位 | 24位 |
| 采样率 | 125SPS ~ 8kSPS | 125SPS ~ 32kSPS |
| 内置功能 | 右腿驱动、导联检测 | 右腿驱动、导联检测、威尔逊网络 |
| 典型应用 | 单导联/双导联心电 | 12导联心电 |
ADS1292我用的最多。它内部集成了可编程增益放大器(PGA),增益可以设成1、2、3、4、6、8、12倍。再加上24位的Δ-Σ ADC,理论上能分辨到微伏级别。
ADS1298则是8通道版本,适合做12导联心电。它内部甚至集成了威尔逊中心端和右腿驱动电路——这些要是自己搭,光运放就得用好几个。
2.3 SPI通信协议
ADS1292和ADS1298都通过SPI接口与MCU通信。SPI这东西,说白了就是四根线:
- SCLK:时钟线,由主机提供
- MOSI:主机输出,从机输入
- MISO:从机输出,主机输入
- CS:片选,低电平有效
ADS1292的SPI时序有个特点:它要求CS在整个通信过程中保持低电平,不能像普通SPI设备那样每发一个字节就拉高一次。我曾经因为这个坑,调试了整整一个下午。
来看看典型的初始化代码:
// ADS1292 初始化序列
void ADS1292_Init(void) {
// 1. 复位芯片
CS_LOW();
SPI_SendByte(0x06); // RESET命令
delay_ms(10);
CS_HIGH();
// 2. 配置寄存器
// CONFIG1: 采样率 250SPS
WriteReg(0x01, 0x01); // 0x01 = 250SPS
// CONFIG2: 测试信号关闭
WriteReg(0x02, 0x10); // 内部参考使能
// 3. 启动连续转换模式
CS_LOW();
SPI_SendByte(0x08); // RDATAC命令
CS_HIGH();
}
2.4 数据采集电路设计要点
电路设计这块,我踩过的坑最多。给你总结几个关键点:
2.4.1 输入保护
人体可能带有静电,尤其是干燥的冬天。所以输入端必须加ESD保护。我习惯用BAT54S双二极管,钳位到电源轨。
2.4.2 右腿驱动
右腿驱动电路是抑制共模干扰的关键。它的原理很简单:把共模信号反相放大后,反馈到人体右腿,从而抵消共模干扰。
ADS1292内部集成了右腿驱动放大器,只需要外接几个电阻电容。我曾经试过不用右腿驱动,结果50Hz工频干扰大得没法看。
2.4.3 导联检测
电极脱落了怎么办?芯片得知道。ADS1292内置了导联检测功能,通过注入微弱电流来判断电极是否接触良好。
2.4.4 电源设计
模拟电路对电源噪声很敏感。我的做法是:
- 模拟电源和数字电源分开
- 每个电源引脚加0.1μF+10μF去耦电容
- PCB上模拟地和数字地单点连接
嗯,这里要注意:ADS1292的模拟电源建议用3.0V,数字电源可以用3.3V。如果混用,可能会影响ADC的线性度。
2.5 实际调试经验
最后分享一个我自己的案例。有一次做便携心电设备,采集到的信号总是有周期性的毛刺。查了三天,最后发现是SPI时钟线跟模拟输入线在PCB上平行走了5厘米,串扰了。
解决办法很简单:把SPI线包地,或者干脆走不同层。从那以后,我设计PCB时都会刻意把数字信号和模拟信号隔开。
另一个常见问题是:上电后读不到数据。别慌,先检查复位时序。ADS1292要求复位后至少等待18个时钟周期才能开始配置。我习惯在复位后加10ms延时,稳妥。
下一章,咱们聊聊采集到的数据怎么处理——滤波、基线校正、QRS检测,这些才是真正出活儿的地方。