logo
当前位置:首 页 > 硬件技术 > 查看文章

随着人们越来越重视医疗健康,相对应的产品也随之推出。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之后芯片稳定后再进行寄存器写入。 copy

  1. /**ADS1292R上电复位 **/
  2. void ADS1292R_PowerOnInit(void)
  3. {
  4.     __IO uint8_t device_id ;
  5.  
  6.     ADS1292R_START_L;
  7.     ADS1292R_CMD(ADS1292R_SDATAC);//发送停止连续读取数据命令
  8.  
  9.     delay_ms(1);
  10.     while(device_id!=0x73)       //识别芯片型号,1292r为0x73
  11.     {
  12.         device_id = ADS1292R_REG(ADS1292R_RREG|ADS1292R_ID,0X00);
  13.         LED0_Toggle;
  14.         delay_ms(200);
  15.         OLED_PrintfString(0,1,“ADS1292R NO FOUND”);
  16.         OLED_PrintfNum(100,1,device_id,4);
  17.     }
  18.     OLED_PrintfString(0,1,“ADS1292R Detected”);
  19.  
  20.     ADS1292R_REG(ADS1292R_WREG|ADS1292R_CONFIG2,    0XE0);  //使用内部参考电压
  21.     delay_ms(10);//等待内部参考电压稳定
  22.     //ADS1292R_REG(ADS1292R_WREG|ADS1292R_CONFIG1,    0X02);    //设置转换速率为500SPS
  23.     ADS1292R_REG(ADS1292R_WREG|ADS1292R_CONFIG1,    0X01);  //设置转换速率为250SPS
  24.     //ADS1292R_REG(ADS1292R_WREG|ADS1292R_CONFIG1,    0X00);    //设置转换速率为125SPS
  25.     ADS1292R_REG(ADS1292R_WREG|ADS1292R_LOFF,       0XF0);
  26.     ADS1292R_REG(ADS1292R_WREG|ADS1292R_CH1SET,     0X00);<span style=“white-space:pre”>    </span>//放大倍数6倍
  27.     ADS1292R_REG(ADS1292R_WREG|ADS1292R_CH2SET,     0x00);
  28.     ADS1292R_REG(ADS1292R_WREG|ADS1292R_RLD_SENS,   0x30);
  29.     ADS1292R_REG(ADS1292R_WREG|ADS1292R_LOFF_SENS,  0x3F);
  30.     ADS1292R_REG(ADS1292R_WREG|ADS1292R_RESP1,      0xDE);<span style=“white-space:pre”>    </span>//开启呼吸检测(ADS1292R特有)
  31.     ADS1292R_REG(ADS1292R_WREG|ADS1292R_RESP2,      0x07);
  32.     ADS1292R_REG(ADS1292R_WREG|ADS1292R_GPIO,       0x0C);
  33. }

读取ADS1292R的数据使用SPI连续读的方式,一次读取9个字节。其中前3个字节包含了电极状态,后面3+3个字节分别表示两个通道的数据。 copy

  1. void ADS1292R_ReadData(void)
  2. {
  3.     ADS1292R_CS_L;
  4. //  HAL_SPI_TransmitReceive(&SPI1_Handler, temp1292r, ads1292r_data_buff, 9, 10);
  5. //  ADS1292R_CS_H;
  6.     HAL_SPI_Receive_DMA(&SPI1_Handler, ads1292r_data_buff, 9);
  7. }

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

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

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

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

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

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

说说梦想,谈谈感悟 ,聊聊技术,有啥要说的来github留言吧 https://github.com/cjx2328

—— 陈 建鑫

陈建鑫
你可能也喜欢Related Posts
footer logo
未经许可请勿自行使用、转载、修改、复制、发行、出售、发表或以其它方式利用本网站之内容。站长联系:cjx2328#126.com(修改#为@)
Copyright ©ziao Studio All Rights Reserved. E-mail:cjx2328#126.com(#号改成@) 沪ICP备14052271号-3