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.csdn.net/detail/devintt/9849642



你可能感兴趣的:(STM32,生理信号采集,stm32,ADS1292R,生理信号采集)