第二章 心电数据采集:从生物电到数字信号

好,咱们进入正题。上一章聊了心电信号的基本特征,这一章我带你看看——这些微弱的生物电信号,到底是怎么被「抓」到电路里,变成我们能处理的数字数据的。

说白了,心电采集就是一场与噪声、干扰、微弱信号的博弈。我做了这么多年嵌入式,踩过的坑有一半都在这块。

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,理论上能分辨到微伏级别。

我的经验: 实际项目中,增益设成6倍就够了。太高了反而容易饱和,因为电极接触不好时会有很大的直流偏置。

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();
}

注意: SPI时钟频率不要超过10MHz。ADS1292的datasheet上写的是最高20MHz,但实际测试发现,频率高了容易丢数据。我一般用4MHz,稳定可靠。

2.4 数据采集电路设计要点

电路设计这块,我踩过的坑最多。给你总结几个关键点:

2.4.1 输入保护

人体可能带有静电,尤其是干燥的冬天。所以输入端必须加ESD保护。我习惯用BAT54S双二极管,钳位到电源轨。

2.4.2 右腿驱动

右腿驱动电路是抑制共模干扰的关键。它的原理很简单:把共模信号反相放大后,反馈到人体右腿,从而抵消共模干扰。

ADS1292内部集成了右腿驱动放大器,只需要外接几个电阻电容。我曾经试过不用右腿驱动,结果50Hz工频干扰大得没法看。

2.4.3 导联检测

电极脱落了怎么办?芯片得知道。ADS1292内置了导联检测功能,通过注入微弱电流来判断电极是否接触良好。

小技巧: 导联检测的电流不要设太大,否则病人会感觉到刺痛。我一般用6nA档位,够用又安全。

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检测,这些才是真正出活儿的地方。