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

2020-11-26 07:58
科海故事博览 2020年6期
关键词:上位串口加速度

(西华大学,四川 成都 610039)

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]

图1

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

2.5.2 基于MATLB 的数字陷波

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

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

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

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

c 语言响应代码:

2.5.3 基于MATLAB 的高通滤波器

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

得到响应函数:[5]

2.6 运动状态监测

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

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

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

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

表1

表2

表3

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 传输即可)。

图2

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%;

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

猜你喜欢
上位串口加速度
“鳖”不住了!从26元/斤飙至38元/斤,2022年甲鱼能否再跑出“加速度”?
基于NPORT的地面综合气象观测系统通信测试方法及故障处理
基于API函数库实现串口数据通信的分析与设计
基于EM9000工控板高性能双串口通信模型设计与实现
天际加速度
创新,动能转换的“加速度”
死亡加速度
特斯拉 风云之老阿姨上位
船舶电子设备串口数据的软件共享方法
基于ZigBee和VC上位机的教室智能监测管理系统