记录_啃ADS1292芯片手册

Explanatory Notes

在做心电采集的时候看了很多天这个芯片手册,总觉得不得其旨,所以记录以下,细细体会。

https://www.ti.com.cn/cn/lit/ds/symlink/ads1292r.pdf

从Functional Block Diagram开始

image
这个图可以说是整个芯片手册最重要的一张,我们还会不断回看这张图
从这个图里我们可以看到其每个外部引脚的内部连接,以及这款AFE的内部资源
我们读图最少要得到以下信息

  • 需要模拟数字的供电
  • 通过spi进行配置(图右)
  • 两个24位ADC资源,各自具有独立的PGA,且PGA可以通过外部进行配置(框内)。而且PGA1与呼吸Mod有关,这决定了CH1用来得到呼吸数据
  • IN3可以复用位呼吸mod,同时IN1和IN2有独立的EMI滤波
  • 具有RLD相关的三个外部引脚
  • 有四种信号可以直接作用在MUX信号选择器上,这四种信号可以对后续相关配置进行测试
    image

Register Maps

读懂寄存器映射配置表,我们才能正确、适合的使用这款芯片
image
这是一张总表,芯片手册之后还详细告诉了我们每个寄存器的每一位的含义
我们按需来看

ID Control Register

在凌志电子的例程中对该寄存器的值进行读取,依次来判断设备的正确性

下表是每种芯片对应的寄存器值

芯片 value
ADS1191 0101 0000
ADS1192 0101 0001
ADS1291 0101 0010
ADS1292 0101 0011
ADS1292R 0111 0011

8位寄存器编码了5种芯片

Config1 0000 0010b

这个寄存器用来配置每个ADC采样率

  • bit7 用来设置单次转换(1)还是连续转换(0)
  • bit[2:0]设置采样率
    image

Config2 1110 0000b(release) 1110 0011(debug)

这个寄存器用来管理时钟,测试信号,以及LOFF

  • bit6 脱落比较寄存器,置1开启
  • bit5 参考缓冲区,置1开启
    这一位控制的就是image
  • [1:0]位我还打开了测试信号,选用1hz的方波,用来测试PGA和调试代码

Loff 0001 0000b(release)

这个寄存器用来配置检测脱落比较器的阈值,检测电流,检测模式(dc,ac)
这个关键在于比较器阈值的设定,000阈值较低,条件宽松,脱落不易检测到,111阈值高,脱落容易检测到,也容易误检测。
我选用了000,不容易误触

CHSET

通道寄存器的设置1,2是完全对照的
CH1SET 0100 0000b
CH2SET 0000 0000b (debug:0000 0101b)

  • bit7 该通道是否启用,置0通道开启
  • bit[6:4] PGA增益
    这是信号检测的关键,如何选择合适的增益来将信号放大来比配ADC的量程,这直接决定了信号采样的质量
  • bit[3:0]
    这四位用来控制MUX选择输入信号,正常使用肯定是0000
    测试时候使用0101,根据需要配置
    image

RLD_SENS 1110 1100b

这个用于配置右腿驱动部分
image

  • bit[7:6] 选择PGA斩波频率
    TI官方资料指出,在需要高质量信号(如起搏信号检测)的场景下,应首选将PGA切至高频率(32kHz或64kHz)

Lead-Off Detection

在Loff 中配置了检测脱落比较器和检测模式
在LOFF_SENS中要决定电流方向和具体的检测通道 0000 1111b
在LOFF_STAT中值就表明了电极的状态 0000 0000b

RESP

RESP1 用于配置是否使用呼吸波,对于ads1292直接写入0x02
在这个寄存器里设定了参考时钟来源,以及解调控制信号的相位 1110 1010b
image

RESP2中 就是设定参考时钟的具体值,以及RLD的参考电压 0000 0011b
image

GPIO

用于控制GPIOPIN 0000 1100b

spi 读取通道值

配置好每个寄存器的值后,我们还需要知道如何读取通道值

方案一:使用RDATAC模式(推荐用于连续采集)

这是大多数ECG/呼吸波应用的优选方案,也是芯片上电后的默认模式。流程如下:
退出连续模式:为确保芯片处于已知状态,先发送 SDATAC (0x11) 命令,使其退出可能存在的连续数据输出状态。
配置寄存器:按照你的应用需求(如我们之前讨论过的增益、采样率等)配置所有寄存器。
同步并开启转换:确保 START 引脚为高电平,或发送 START (0x08) 命令,启动ADC转换。
进入连续读取模式:发送 RDATAC (0x10) 命令,芯片即进入连续数据输出状态。
等待数据就绪:通过轮询或中断方式,等待DRDY引脚变为低电平。这标志着新的转换数据已准备就绪。
读取数据:一旦检测到DRDY为低,立即产生所需的SCLK时钟,将数据从DOUT引脚读出。你必须在下一次DRDY信号来临之前完成本次的数据读取,否则新数据会覆盖旧数据,导致数据损坏。
解析数据:按照协议解析读回的数据。
重复步骤:持续进行数据采集。

方案二:使用RDATA模式(适用于按需采集)

此模式适用于间歇性采样或在采样间隙需要灵活配置寄存器的场景。
退出连续模式:发送 SDATAC (0x11) 命令,确保芯片不在RDATAC模式。
配置寄存器:根据需要配置所有寄存器。
开启转换:确保 START 引脚为高电平,或发送 START (0x08) 命令。
等待数据就绪:通过轮询或中断方式,等待DRDY引脚变为低电平。
发送RDATA命令:当DRDY为低时,立即发送 RDATA (0x12) 命令。
读取数据:发送完RDATA命令后,紧接着提供所需的SCLK时钟,从DOUT引脚读出数据。
解析数据:按照协议解析读回的数据。
重复步骤:进行下一次按需采集。

接下来就是对72位数据的解析

当在DRDY为低后读取SPI总线,ADS1292R会输出总共72位的数据。其结构如下:

  • 状态字 (24位):位于数据包的最前面,包含导联脱落等状态信息。其位分配为:
    bit 23-20: 固定为 1100。
    bit 19-15: 导联脱落状态 (LOFF_STAT[4:0])。
    bit 14-13: GPIO引脚状态 (GPIO[1:0])。
    bit 12-0: 全为零(填充位)。
  • 通道1数据 (24位):来自第一通道的转换结果,以二进制补码格式表示,MSB(最高有效位)在先。
  • 通道2数据 (24位):来自第二通道的转换结果,格式同上。
    notice:
    读出的24位原始数据是一个有符号的整数(范围从 0x800000 到 0x7FFFFF)
    用下面的式子来获得原始电压值

\[V_{I N}(V)=\frac{C O D E}{2^{23}-1} \times \frac{V_{R E F}}{\text { Gain }} \]

posted @ 2026-06-02 21:31  loong2525  阅读(124)  评论(0)    收藏  举报