ADS1292R的使用

  随着人们越来越重视医疗健康,相对应的产品也随之推出。TI的计划就很好的走在前面,对于生理电采集方面相继推出了ADS124x系列和ADS129x系列。

这篇博文主要介绍ADS1292R这片芯片是如何使用的,可以方便的采集到心电和呼吸信号。同理ADS1291和ADS1292也可以参考此设计。

ADS1292R具有特性:
1、两个低噪声可编程增益放大器器(PGA)和和两个高分别率模数转换器器(ADC),集成了心电采集所需要的部件,方便设备小型化。
2、低功耗:每通道道335μW,使得可以作为长时间监控成为可能。
3、输入参考噪音::8μVPP(150HzBW,G=6),共模抑制比比(CMRR):–105dB。这个参数足以进行心电采集。
ADS1292R应用范围:
医疗测量仪器(心电图图(ECG))包括:病人看护:动态心电图图(Holter)、、事件、应激、和包括心电图图(ECG)在在内的生命体征、自动体外除颤器、和远程医疗。体育运动和健身(心率、呼吸、和和ECG)高精度、同步、多通道信号采集。


数据手册介绍到此结束。不废话,接下来介绍电路原理图和PSB布局有关事项。

原理图也是根据数据手册的典型应用得到的。


图中部分电路1是呼吸检测的滤波电路。呼吸检测是使用了阻抗检测的方法,使用了的32KHz(或者64KHz)高频方波输入到人体,然后经过电路滤波后可以计算出两片电极之间的阻抗变化的大小。这里有趣的是呼吸检测和心电检测使用的是同一电极,由于心电信号一般在100Hz下,对于高频的检测呼吸的方波是可以通过ADS1292R里面EMI电路滤掉的。

图中部分电路2是右腿驱动电路,对于右腿驱动的作用,在这里有两大作用,其中一点是书上所说的去除共模电压,通过放大器反向放大之后输入到人体,第二个作用是提供了一个电压抬升,将测量电压抬升到(AVDD+AVSS)/2左右,保证了输入电压是在芯片的检测范围内。

电路介绍之后就是驱动程序方面,博主用的是STM32驱动的,使用了硬件SPI接口,但是驱动部分代码与平台无关。

初始化ADS1292R需要根据数据手册上面所说的,需要一个复位信号,等待1S之后芯片稳定后再进行寄存器写入。

/**ADS1292R上电复位 **/
void ADS1292R_PowerOnInit(void)
{
	__IO uint8_t device_id ;

	ADS1292R_START_L;
	ADS1292R_CMD(ADS1292R_SDATAC);//发送停止连续读取数据命令
	
	delay_ms(1);
	while(device_id!=0x73)       //识别芯片型号,1292r为0x73
	{
		device_id = ADS1292R_REG(ADS1292R_RREG|ADS1292R_ID,0X00);
		LED0_Toggle;
		delay_ms(200);
		OLED_PrintfString(0,1,"ADS1292R NO FOUND");
		OLED_PrintfNum(100,1,device_id,4);
	}
	OLED_PrintfString(0,1,"ADS1292R Detected");
	
	ADS1292R_REG(ADS1292R_WREG|ADS1292R_CONFIG2,    0XE0);	//使用内部参考电压
	delay_ms(10);//等待内部参考电压稳定
	//ADS1292R_REG(ADS1292R_WREG|ADS1292R_CONFIG1,    0X02);	//设置转换速率为500SPS
	ADS1292R_REG(ADS1292R_WREG|ADS1292R_CONFIG1,    0X01);	//设置转换速率为250SPS
	//ADS1292R_REG(ADS1292R_WREG|ADS1292R_CONFIG1,    0X00);	//设置转换速率为125SPS
	ADS1292R_REG(ADS1292R_WREG|ADS1292R_LOFF,       0XF0);
	ADS1292R_REG(ADS1292R_WREG|ADS1292R_CH1SET,     0X00);	//放大倍数6倍
	ADS1292R_REG(ADS1292R_WREG|ADS1292R_CH2SET,     0x00);
	ADS1292R_REG(ADS1292R_WREG|ADS1292R_RLD_SENS,   0x30);
	ADS1292R_REG(ADS1292R_WREG|ADS1292R_LOFF_SENS,  0x3F);
	ADS1292R_REG(ADS1292R_WREG|ADS1292R_RESP1,      0xDE);	//开启呼吸检测(ADS1292R特有)
	ADS1292R_REG(ADS1292R_WREG|ADS1292R_RESP2,      0x07);
	ADS1292R_REG(ADS1292R_WREG|ADS1292R_GPIO,       0x0C);
}

读取ADS1292R的数据使用SPI连续读的方式,一次读取9个字节。其中前3个字节包含了电极状态,后面3+3个字节分别表示两个通道的数据。
void ADS1292R_ReadData(void)
{
	ADS1292R_CS_L;
//	HAL_SPI_TransmitReceive(&SPI1_Handler, temp1292r, ads1292r_data_buff, 9, 10);
//	ADS1292R_CS_H;
	HAL_SPI_Receive_DMA(&SPI1_Handler, ads1292r_data_buff, 9);
}

这里给出的代码使用了DMA传输,CS片选信号需要在DMA传输完成之后置1,保证数据传输完成,若使用轮询读数据的方式则选用注释掉的代码。

读取到的数据是一补码的形式存储的,需要经过处理再传给上位机,为避免上位机不好处理24位的数据,博主在单片机程序中做了数据处理,简单来说就是3字节的数据最高位(数据的24位)做了异或(^)处理。


最后通过蓝牙发送到手机编写的APP中,画图显示波形。上图是呼吸波,下图是心电。由于没有使用右腿驱动,噪声略微明显。



如果将PGA放大倍数设置为12倍,使用右腿驱动的话,效果更好,如下图所示:



ADS1292R性能还是很强的,不仅在被试不动的情况下可以精确地检测到心电信号,细节也非常清晰,同时也能在被试运动的情况下也能检测到心电的波形,通过实验可以清晰的辨认出RS波,下图是被试在奔跑的状态下检测到的波形(使用了40Hz的低通滤波):





最后附上ADS1292R的驱动代码:http://download.youkuaiyun.com/detail/devintt/9849642



11-02
由于提供的引用中未涉及ads1292的相关内容,下面是基于专业知识的介绍。 ADS1292是德州仪器(TI)推出的一款低功耗、2 通道、24 位模拟前端 (AFE),专为生物电位测量应用而设计,如心电图 (ECG)、脑电图 (EEG) 和肌电图 (EMG) 等。 ### 功能特点 - **高精度数据采集**:具备 24 位分辨率,能够精确采集生物电信号,有效捕捉微弱的生物电位变化,为后续的分析提供准确的数据基础。 - **低功耗设计**:采用低功耗架构,适合电池供电的便携式医疗设备,可延长设备的续航时间,满足移动医疗场景的需求。 - **集成多种功能**:内部集成了可编程增益放大器 (PGA)、模数转换器 (ADC)、右腿驱动 (RLD) 等功能模块,减少了外部元件的使用,简化了电路设计。 - **高抗干扰能力**:具备良好的共模抑制比 (CMRR) 和电源抑制比 (PSRR),能够有效抑制外界干扰和电源噪声,保证信号采集的稳定性和可靠性。 ### 使用方法 1. **硬件连接**:将 ADS1292 与微控制器、电源、传感器等外部设备进行正确连接。通常需要连接电源引脚、通信接口引脚 (如 SPI)、信号输入引脚等。 2. **软件配置**:通过微控制器编写程序,对 ADS1292 进行初始化配置,设置采样率、增益、滤波器等参数。 3. **数据采集与处理**:启动 ADS1292 进行数据采集,将采集到的数字信号通过通信接口传输到微控制器,然后进行进一步的处理和分析。 ### 技术文档获取 可以从德州仪器官方网站获取 ADS1292 的详细技术文档,包括数据手册、应用笔记、参考设计等。这些文档提供了芯片的详细规格参数、电气特性、引脚定义、工作原理、典型应用电路等信息,是深入了解和使用 ADS1292 的重要参考资料。 以下是一个简单的使用SPI接口与ADS1292通信的Python代码示例(假设使用树莓派): ```python import spidev import time # 初始化SPI接口 spi = spidev.SpiDev() spi.open(0, 0) # 打开SPI总线 0,设备 0 spi.max_speed_hz = 1000000 # 设置SPI通信速率 # 发送命令到ADS1292 def send_command(command): spi.xfer2([command]) # 读取ADS1292的数据 def read_data(): data = spi.xfer2([0x00] * 6) # 读取6个字节的数据 return data # 主程序 try: while True: send_command(0x08) # 发送启动采集命令 time.sleep(0.1) data = read_data() print("Received data:", data) time.sleep(1) except KeyboardInterrupt: spi.close() # 关闭SPI接口 ```
评论 116
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值