一种简易可穿戴的人体健康监测设计

    张峻豪 尹鑫 贡振琦 张文杰

    

    

    

    摘 要 本次设计是基于Cortex-M3内核的信号采集与数据处理的系统以实现人体生理信号的实时监控。通过Agcl电极片采集到人体肢体导联电压波形,利用模拟预先抗混叠处理滤除奈奎斯特区间以外的频率,再经过模拟前端将信号放大1000倍,得到放大后的波形。利用STM32单片机实现IIR实时滤波消除50HZ的工频干扰与基线漂移,通过LMT70和MPU6050测得人体实时的体温和运动状态,再通过串口透传将数据传输到PC端上位机,PC端进行数据分析与信息反馈到电脑中,实现医生对病人的情况进行实时监控。

    关键词 心电图 IIR滤波 健康监测 运动检测

    中图分类号:R1 文献标识码:A 文章编号:1007-0745(2020)02-0024-04

    1 研究目的

    本设计达成了对人体心率、体温和运动状态的实时监控,通过无线传输将数据传输到上位机加以处理和显示。通过对单个方案的改进,来实现以下特点:

    (1)具有低功耗和便携性,以方便长时间的穿戴。

    (2)達到高精度的心率和温度测量,具有很好的抗干扰能力。

    (3)实现低延时高功率的无线传输,已实现实时显示的目的。

    2 实施方案

    2.1 总体流程图(如图1)

    2.2 电源设计方案

    方案所需的温度采集芯片、心电信号采集芯片以及运动传感监测都需要3.3v的电压保障其正常工作,所以我们通过LM2596稳压芯片将12v的电池输入调节成稳定的3.3v输出电压,用来供给整个系统。

    同时注意到由于本设计采用的温度采集芯片为TI公司的LMT70,其特点是高精度的16位AD采样。为避免LM2596产生的电压波动影响温度的精准性,需使用3.3v的基准电压给LMT70以实现温度补偿,达到测量人体体温高精度的目的。

    2.3 模拟前端放大器

    采用AgCl电极片,减小基线漂移。心电信号通过二级放大,放大倍数1000倍以上,第一级采用仪表放大器AD620进行放大,二级电路用LM358和OP07构成放大。通过ebyte串口透传,用于STM32与电脑串口通信,附加MPU6050用于测步和测距以及跌倒检测。心电部分采用右腿驱动,减小工频干扰。通过RC与运算放大器构成有源带通滤波器,0.3HZ-106Hz的频率可以通过。电源部分采用AMS11175.0V和7660s构成一对正负5的电压为运放供电。通过AMS11173.3V稳压到3.3V为STM32进行供电。[1]

    2.4 单片机部分

    2.4.1 主控单元选取

    由于心电采集芯片使用了TI公司的ADS1292芯片,具有24位的高精度AD采样。STM32系列的单片机具有片内的AD转换器和多个外设接口,具有很好的扩展和移植性,因此适合完成IIR实施滤波和应用扩展。

    2.4.2 配置关键的ads1292芯片的寄存器

    ADS1292_REG[CONFIG1] =0x00;//连续转换模式

    ADS1292_REG[CONFIG1] |=Ads1292_Config1.Data_Rate;// 设置采样率125HZ

    ADS1292_REG[CONFIG2] =0x00;//设置测试信号

    ADS1292_REG[CONFIG2] |=Ads1292_Config2.Pdb_Loff_Comp<<6;//是否脱落

    ADS1292_REG[CONFIG2] |=Ads1292_Config2.Pdb_Refbuf<<5;//缓冲器是否掉电ADS1292_REG[CONFIG2] |=Ads1292_Config2.Vref<<4;//参考电压2.4v

    ADS1292_REG[CONFIG2] |=Ads1292_Config2.Clk_EN<< 3;//时钟脉冲

    ADS1292_REG[CONFIG2] |=Ads1292_Config2.Int_Test<< 1;//是否打开测试信号

    ADS1292_REG[CONFIG2] |=0x81;//默认位

    2.4.3 配置关键的MPU6050寄存器

    MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X80);//复位MPU6050

    MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X00);//唤醒MPU6050

    MPU_Set_Gyro_Fsr(3);//陀螺仪传感器,±2000dps

    MPU_Set_Accel_Fsr(0);//加速度传感器,±2g

    MPU_Set_Rate(50);//设置采样率50Hz

    MPU_Write_Byte(MPU_INT_EN_REG,0X00);//关闭所有中断

    MPU_Write_Byte(MPU_USER_CTRL_REG,0X00);//I2C主模式关闭

    MPU_Write_Byte(MPU_FIFO_EN_REG,0X00);//关闭FIFO

    MPU_Write_Byte(MPU_INTBP_CFG_REG,0X80);//INT引脚低电平有效

    2.5 信号干扰

    2.5.1 干扰来源

    通常由于电源线产生的50hz的工频干扰以及被测对象人体产生的热噪声干扰。[2]

    工频干扰多数是因为空间辐射、电源、电路与外界的接触所产生的50hz信号,一般采用屏蔽、滤波、使用差分信号(提高共模抑制)来减低其对信号的影响。人体干扰常见的是肌肉震颤,其产生是因为人体肌肉颤动所造成的噪声信号(寒冷导致的战栗以及紧张引起的肌肉抽搐)。

    2.5.2 基于MATLB的数字陷波

    用陷波器来过滤50hz信号,高通滤波器来过滤人体产生的0.5hz以下的频率干扰。通常在设计中使用IIR或FIR滤波器,其中FIR虽然具有良好的线性相位,但是其运算量和阶数都比IIR更大,因此无论是陷波器还是高通滤波都采用IIR来设计。[3]

    借助MATLAB可以帮助我们快速的生成相关的参数。再将其翻译成c语音形式即可直接应用于单片机平台。

    导出滤波系数得到转移函数:[4]

    再根据滤波器直接II型实现框图,翻译成c语言代码并烧录到主控芯片中运行。

    c语言响应代码:

    w4 = (float)p_Temp[1] - (-1.53589)*w2 - 0.898466*w3;

    cannle[1]= (u32)(0.94923 * w4 + (-1.53589)*w2+0.949 23*w3);

    w3 = w2;

    w2 = w4;

    2.5.3 基于MATLAB的高通濾波器

    同样采用MTLAB生成的IIR的II阶高通滤波器来过滤掉人体产生的0.5hz以下的频率干扰,我们配置好相应参数后即可导出滤波系数。

    得到响应函数:[5]

    s32IIR_I_Filter(s32 InData,float *x,float *y,float *b,float nb, float *a,float na)

    {

    s32 z1,z2;

    u8 i;

    s32? OutData;

    for (i=nb-1;i>0;i--)? {x[i]=x[i-1];}

    x[0]=InData;

    for (z1=0,i=0;i<nb;i++){z1+=x[i]*b[i];}

    for (i=na-1;i>0;i--)? ? {y[i]=y[i-1];}

    for (z2=0,i=1;i<na;i++) {z2+=y[i]*a[i];}

    y[0]=z1-z2;

    OutData=y[0];

    return (s32)OutData;

    }

    2.6 运动状态监测

    2.6.1基于MPU6050六轴模块设计运动状态监测

    通过读取MPU6050内置的x、y、z轴上的加速度,通过高斯滤波将其3个方向的数值合一得到一个预算的峰值,一个峰值变换对应一步数,同时将所得加速度经过积分得到速度,即可计算出运动步伐。

    由于产品佩戴于胸前,所以选取X轴方笔直朝下,使用I2C通讯协议,提取MPU6050各轴数据,消除零点漂移之后,对加速度计的数据进行均值滤波,通过加速度计数据得到x轴与重力加速度方向的角度,然后通过卡尔曼滤波融合陀螺仪的加速度,得到修正之后X轴与重力加速度方向的倾角,实际实验测试出临界阈值。

    2.6.2加速度的C语言计算代码

    mpu6050_get_data(&gx,&gy,&gz,&ax,&ay,&az,&temperature);

    acc_filter();

    ax-=AX_OFFSET;

    ay-=AY_OFFSET;

    az-=AZ_OFFSET;

    gx-=GX_OFFSET;

    gy-=GY_OFFSET;

    gz-=GZ_OFFSET;

    angle_dot = gz * GZRO_SCALE;

    angle =atan(sqrt(ax * ax + ay * ay )/az );

    angle =angle * 57.295780;

    kalman_filter(angle, angle_dot, &f_angle, &f_angle_dot);

    2.7 体温监测

    TI公司的LMT70是低功耗高精度的模拟温度传感器。其16位精度的AD采样使其工作在20°C-42°C范围时,误差为±0.05°C。由于人体温度刚好囊括在这一范围,因此在确保其基准电压的精准时,能准确的返回所需的数据。

    由于LMT70电压传递函数不是标准的线性,所以采用三阶传递函数方程来确保其工作在所需的最佳拟合中。

    三阶传递函数C语言如下:

    double a= -1.064200E-09;

    double f= -5.759725E-06;

    double c= -1.789883E-01;

    double m=? 2.048570E+02;

    temp=a*(temp)*(temp)*(temp)+f*(temp)*(temp)+c*(temp)+m; //temp初始温度值

    3 传输方式

    3.1 方案选择

    方案一:使用蓝牙3.0模块搭建单片机--手机或者单片机---单片机通讯,完成数据传输。

    方案二:使用nrf24L-01模块搭建单片机--手机或者单片机---单片机通讯,完成数据传输。

    方案三:使用串口无线透传完成单片机---电脑的无线通讯,使用串口传输发送与接收数据。

    由于蓝牙模块传输速率为24Mb/s,而ECG要求传输数据大,所以使用蓝牙传输会有一定的延时接收,同时由于蓝牙的传输距离有限,无法实现远距离的传输,因此不采用。Nrf模块在传输速率上达到了1ms一包,一包大概32字节,完全能满足ECG庞大的数据量。但是Nrf需要与单片机搭配才能接收数据,提高了成本和电路复杂性,不予考虑。

    而ebyte公司的串口透传具有自动调频功能,抗干扰能力强,传输效率高,传输距离远。且减少了接收端的电路复杂性(只需要将usb插上电脑即可)和发送端的操作难度(只需将数据通过printf传输即可)。

    3.2 理论分析

    设计通过NRF24L01无线串口透传来实现人机无线传输。搭建的系统由下位机与上位机人机界面2部分组成:先使下位机主机板STM32控制芯片将采集的人体信息发送给无线透传模块,然后无线传送到下位机从机板无线接收模块,无线接收系统结合串行通信接口,把数据送往上位机PC端实现数据的显示并在上位机界面上实现无线视屏监控,并且不需要无线路由器构建的局域网环境进行通讯,摆脱了传统有线传输的束缚,实现了无线实时监测数据和人机互动功能。

    系统流程图:(如图2)

    4 上位机

    采用QT对上位机进行开发,通过串口读取数据。由于使用的是串口透传模块进行单片机与PC端的通信,所以只需要区分每段数据的数据类型即可。

    传输的数据格式如下:printf("<%d,%d,%d,%d,%d,%d,%d,%d>", nrfSendData.bytes.heartRate,

    nrfSendData.bytes.stepNum,

    nrfSendData.bytes.tempture,

    nrfSendData.bytes.adsData[0],nrfSendData.bytes.adsData[1],

    nrfSendData.bytes.adsData[2],

    nrfSendData.bytes.adsData[3],

    nrfSendData.bytes.adsData[4],

    nrfSendData.bytes.adsData[5]);

    一個数据包有32Byte的大小,传输顺序按照心率、步数、温度、和ECG,大小分别为2Byte、2Byte、4Byte以及24Byte。当数据传输到上位机后,PC端上位机按照传输方式提取数据,并把数据转换为十进制显示到QT编写的页面中。

    5 测量结果

    5.1 测试数据

    距离显示:(如表1)

    温度显示:(如表2)

    心率显示:(如表3)

    5.2 测试结论

    (1)心率精度高,误差不超过1%;

    (2)温度精度受基准电源影响,在±2℃内;

    (3)距离显示受摆动加速度影响,误差不大于10%;

    在完成简易穿戴和低功耗要求前提下,保证了低延迟的传输。同时完成了人体运动的监测、体温和心率的实时显示,已达到测试要求。

    参考文献:

    [1] 邓海涛,张桂珊,邹秋云, 等.基于STM32处理器的心电信号系统[C].//中国计算机学会.第五届全国可穿戴计算学术会议暨2015可穿戴与医学变革研讨会论文集.2015:1-10.

    [2] 同[1].

    [3] 邓海涛,张桂珊,邹秋云, 等.基于STM32处理器的手机监控心电的设计[J].集成技术,2015(05):78-86.

    [4] 同[1].

    [5] 孙迎,宋健.基于Android的远程心电检测系统[J].计算机应用与软件,2013,30(04):326-329.

    西华大学,四川 成都