随着人们越来越重视医疗健康,相对应的产品也随之推出。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