来源:http://blog.csdn.net/devintt/article/details/72636642 点击阅读原文可直接进入作者博客
随着人们越来越重视医疗健康,相对应的产品也随之推出。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
-
/**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");
三极管在数字电路里的开关特性,最常见的应用有2个:一个是控制应用,一个是驱动应用。所谓的控制就是,我们可以通过单片机控制三极管的基极来间接控制后边的小灯的亮灭,用法大家基本熟悉了。
-
-
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);<span style="white-space:pre"> </span>//放大倍数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);<span style="white-space:pre"> </span>//开启呼吸检测(ADS1292R特有)
-
ADS1292R_REG(ADS1292R_WREG|ADS1292R_RESP2, 0x07);
-
ADS1292R_REG(ADS1292R_WREG|ADS1292R_GPIO, 0x0C);
-
}
读取ADS1292R的数据使用SPI连续读的方式,一次读取9个字节。其中前3个字节包含了电极状态,后面3+3个字节分别表示两个通道的数据。 copy
-
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
仿真器具有全系列单片机的系统设计、系统测试、故障在线分析以及单片机系统解剖分析等功能。在使用中,它能以与用户单片机相同的时序运行程序,可按需要设置断点,可随时接受命令,对用户系统进行全面测试和完整的数据传送。仿真器还应具有较丰富的开发软件。