血压实时监测系统设计与实现
2021-08-24吴云龙程武山
吴云龙,程武山,2
(1.上海工程技术大学机械与汽车工程学院,上海 201620;2.安徽非禾科技有限公司,安徽 芜湖 241003)
0 引言
我国医疗器械研发还处于初级阶段,不能完全满足社会需求[1-2]。血压是人体健康的重要指标,国内的血压测量方式大多为直接测量,即水银式测压法,该方法存在携带不便、技术要求高等缺点。国外的血压测量方式多为间接测量。本文结合以上两种测量方式,设计了一种基于STM32F407 的血压动态监测系统。通过对血压的测量原理分析,设计了微型气泵、电磁阀、信号放大电路、滤波电路等[3-4],通过软件设计将压力曲线和测量值显示在屏幕上,并通过无线局域网上传到上位机界面实现实时监控。
1 总体设计
本文采用32 位的STM32F407 作为微控制器,主要负责血压数据的采样及与串口屏进行通讯。压力传感器采集到的信号经过直流信号放大电路、交流信号滤波电路送到STM32 内部进行模数转换,通过串口与显示屏进行数据通讯,最终显示在屏幕上。采用无线局域网上传到上位机界面数据库,实现实时监控。采用定时器输出PWM 方波控制气泵的充气速度以适应人体的压力反馈。最后根据相应算法进行滤波、拟合,计算出血压值[5]。系统总体设计架构如图1 所示。
Fig.1 Overall system architecture图1 系统总体架构
2 血压形成原理及测量
2.1 血压形成原理
血压是血液作用于单位面积上的侧压力。血压主要由3 个基本因素形成:①心室收缩射血所产生的动力和血液在血管内流动所受到的阻力间的相互作用。当心脏收缩射血时,血液就对血管壁产生侧压力,此为动脉压力的直接来源,如果心脏没有跳动也就没有血压了;②循环血量必须足够大。足够大的循环血量是形成血压的重要因素。假如血量不够大,血管壁处于凹陷状态就不能形成血压;③大血管壁的弹性。在心脏收缩喷射出血液时,因为阻力的原因动脉血流速度缓慢。在压力的作用下,弹力纤维被拉长,弹力变大,能量从之前的动能转化为位能。与此相反,心脏舒张时,管腔变小,位能又转化为动能,促使血液流动,保持血液对于血管壁的侧压力。当心脏收缩时,大动脉流入大量血液致使压力升高,在心室收缩中期达到最高,这时的压力称为收缩压。当心脏舒张时,血液暂停进入动脉,在这之前进入动脉的血液利用血管的弹性和张力作用继续向前流动,此时动脉内压力下降,于心室舒张末期达到最低值,称为舒张压(或低压)。
2.2 血压测量方法
柯式音法即水银测压法,是将袖套绑在人的胳臂上不断充气,当压力值在180mmhg 左右时停止加压,打开泄气阀,当听诊器听到明显搏动声时血压计的读数即为收缩压。然后不断放气,当听诊器听不到搏动声时即为舒张压。由此可知,柯式音法人为因素影响较大,存在很大的误差。示波法基于统计学原理,其血压检测由血液撞击血管壁产生的振动来计量。寻找来自于血管壁的搏动包络痕迹并根据包络痕迹与动脉血压之间的关系得到血压值。示波法主要有幅度系数法和波形特征法两种。幅度系数法旨在通过高压、低压、平均压之间的关系来确定血压值。示波法测血压如图2 所示。
Fig.2 Measuring blood pressure by oscillographic method图2 示波法测血压
图2 中,①为表袖带的压力曲线,②为脉搏波曲线。t1时刻,脉搏波中出现明显的脉搏跳动,对应收缩压;t2时刻对应平均压;t3时刻对应舒张压。
3 硬件电路设计
3.1 微处理器
采用基于内核Cortex-M4 的STM32F407 系列微控制器,其系统时钟为168MHz,具有传输速度快、集成单精度FPU 等优点,拥有2 个全双工的I2S,17 个定时器,6 个串口,3 个SPI,运行 速度可达到10.5Mbit/s。2 个12 位的DAC,3个12 位的ADC,可达到2.4MSPS 或在交替模式中达到7.2MSPS 等丰富的外设资源。
3.2 血压测量电路
血压测量采用压力传感器MPS-2107-006GC,其可以提供精确的、与外界压力感线性相关的电压输出,广泛应用于电子血压计、心率检测仪、汽车等领域。MPS-2107-006GC 内部电路由4 个电阻组成电桥,通过4 个电阻阻值的变化间接反映压力的变化,通过传感器转化的电压信号进行输出,传感器输出的电压模拟信号通过模数转换芯片转换成数字量,通过IIC 与控制器进行通讯[6]。
3.2.1 直流信号放大电路
因压力传感器输出的信号很小,因此需要对直流信号放大。直流信号放大电路采用MPS2107 芯片、ICL7660 芯片、AD620 放大器。MPS2107 芯片实现对压力信号的实时采集,AD620 芯片将微弱信号进行放大,ICL7660 芯片输出对应的负压值。通过改变电位计的值调整放大倍数[7]。直流放大电路如图3 所示。
Fig.3 DC amplifier circuit图3 直流放大电路
3.2.2 交流信号滤波放大电路
交流信号滤波放大电路采用LM324N 芯片,将采集到的直流信号经过三级放大,将输出信号作为脉搏跳动时的信号。系统开始运行时,气泵开始工作,当压力值为180mmhg 时,通过模数转换为21mV。STM32F407 的ADC芯片供电来自系统电源,为3.3V,所以要将21mV 放大157倍,电位计阻值应设计为317Ω。最后,将直流信号经放大器由PC0 口送入模数转换器[8]。交流信号滤波放大电路如图4 所示。
Fig.4 AC signal filtering and amplifying circuit图4 交流信号滤波放大电路
3.3 血压数据通信
本文采用IIC 与STM32F407 通讯,传感器采集数据后由芯片进行模数转换,将转换得到的数字量通过IIC 与下位机进行通讯。IIC 是一种半双工通信方式,主要包括数据线(SDA)与时钟线(SCL),可实现数据传输。IIC 协议主要由空闲状态、开始信号、停止信号、应答信号、数据的有效性、数据传输等组成。当时钟线电平为高电平时,数据线的电平由高变为低即为起始信号,与此相反就是停止信号。由此可见,起始信号与停止信号都是一个电平跳变信号,并不是一个电平信号[9]。当主机向从机发送一个字节时,在第9 个时钟周期内释放数据线,由从机向主机发出一个应答信号。当反馈回来的应答信号为低电平时就认为有效,说明从机已经成功接收该字节;反之,则说明应答无效,从机没有接收到数据[10]。
4 系统软件设计
4.1 血压测量算法设计
给控制板上电,对串口、WiFi、ADC、TIM3、IIC 等初始化,然后启动电机给袖带充气,采用定时器输出PWM 方波改变电机的充气速度,将电磁阀打开并将出气口关闭。将触摸屏显示在初始界面[11-12]。通过执行Get_Adc(10)函数判断袖带压力是否达到180mmhg,若满足条件,匀速泄气,开始进行数据采集。对直流信号以及交流信号采集1 000个数据,交流信号通过调用Get_Adc(13)函数将数值存到valueAC[j]中,将所得到的数据通过USART2 赋值给数据寄存器。将交流信号通过调用Get_Adc(10)函数将值存到valueDC[j]中,所得到的数据通过USART2 赋值给数据寄存器。血压测量流程如图5 所示[13]。
Fig.5 Blood pressure measurement process图5 血压测量流程
4.2 血压计算方法
4.2.1 高斯曲线原理分析
高斯曲线拟合方法如下:
假设采集的一组实验数据为(xi,yi)(i=1,2,3,...,N),则高斯函数表达式为:
式(1)中,待定系数为a,b 和c,代表高斯曲线的峰高、半宽度和峰位置。对式(1)两边取自然对数,化为:
在不考虑总量误差E 影响的情况下,根据最小二乘法原理可求得拟合常数b0,b1,b2,构成的矩阵B 的广义最小二乘解为:
4.2.2 传感器信号采集分析
压力信号主要由袖带压力信号即直流信号和脉搏波信号即交流信号组成。将采集到的血压波形实时显示在屏幕上,如图6 所示(彩图扫OSID 码可见,下同)。红线代表脉搏波包络线,绿色代表袖带压力的包络线。
4.2.3 选取脉搏波包络线峰值点
压力传感器采集到信号之后需要进行滤波处理。将每个单波的最大值作为单波的峰值点[14-15]。在峰值点中存在一些干扰,对曲线的拟合精度以及血压值确定有很大影响,因此需要对峰值点进行处理。具体方案如下:假设第i-1 与i-2 个峰值点是正常的,如果满足第i个峰值点的值在第i-1 个峰值点的值在0.6~1 内,那么第i个峰值点就不是干扰点,保留;否则说明该峰值点是干扰点,去除。当泄气阀开始匀速泄气时,袖带压也不是匀速减小。由屏幕显示选取脉搏波最大的峰值的0.4~0.6 倍之间的波形曲线拟合效果较好。
4.2.4 曲线拟合与血压计算
得到脉搏波峰值点后就可对曲线进行拟合。最小二乘法广泛应用于曲线拟合,如果选取的函数为幂函数就为多项式拟合,如果选取的函数为高斯函数就为高斯拟合[16]。本文采用高斯拟合,拟合曲线如图7 所示。
Fig.6 Blood pressure waveform图6 血压波形
Fig.7 Gaussian curve fitting图7 高斯曲线拟合
其中,x代表时间,单位为s;y代表血压值,单位为mmhg。
平均压为脉搏波最大峰值点对应的袖带压值,收缩压为脉搏波明显跳动时对应的袖带压值(第i+1 脉搏波的峰值大于第i个脉搏波的峰值5 倍),舒张压为脉搏波逐渐趋于不变并且第i个脉搏波峰值点的值大于第i-1 的脉搏波峰值的值对应的袖带压值。根据经验公式,平均压等于1/3的收缩压加上2/3 的舒张压[17-18]。
4.3 串口屏组态与上位机界面
串口屏采用迪文科技公司研发的产品,采用5V 供电,分辨率为480*320,采用FPC 软排线与STM32 进行通讯,通讯的IO 口为PA2,PA3。采用DGUS Tool 软件进行组态,通过R1 寄存器设置通讯的波特率为115 200,R3 寄存器设置串口帧高字节为0x5A,RA 寄存器串口帧低字节为0xA5。血压测量界面由收缩压显示框、舒张压显示框以及压力曲线显示框组成。变量数据显示指令格式是:“5A A5 05 82 00 00 00 26”,5A A5 是数据信息的针头,固定不变,05 表示实际需要发送的数据为5 个字节,82 对应的是写数据指令,00 00 表示该数据所要存储在屏幕寄存器的具体地址,00 26 表示需要显示的数据值[19]。Char Systolic_pressure[8]={0x5A,0XA5,0X05,0X82,0X00,0x00,0x00,0x00};发送收缩压数据组charDiastolic_pressure[8]={0x5A,0XA5,0X05,0X82,0X00,0x01,0x00,0x00};发送舒张压数据组,0x84 指令:写曲线缓冲区,0x82 指令:变量地址(2 个字节)+数据(2个字节)。
上位机显示界面采用C#语言设计,显示血压、心率、呼吸、体温、血氧等五大参数,界面右上角标示生命体征测量仪是否通过WiFi 连接到上位机,界面上给“归档”按钮注册了一个点击事件,将每次测得的数据自动归档到数据库,以便掌握自己的身体情况,实现实时监控[20-22]。WiFi 通讯模块采用ESP8266,设置为AP 模式,TCP 通讯协议,采用AT指令集对其初始化,设置IP 地址、端口号以及热点名称与密码。能作为热点被其他设备连接,也可主动连接其他AP热点,以保证多设备之间进行数据传输与共享。
5 实验与分析
5.1 准确性验证
实验选用160 名志愿者,其中有100 位老年自愿者,50男,50 女,年龄在45-80 岁之间,60 名年轻志愿者,男30 名,女30 名,年龄在21-40 岁之间。测试之前在25℃环境静坐10min,同一志愿者测试两次,保证袖带的位置与心脏的位置处于相同高度。电子血压计与水银测量仪测量结果如表1 所示。
Table 1 Measurement results of electronic sphygmomanometer and mercury meter表1 电子血压计与水银测量仪测量结果
5.2 重复性验证
对30 名志愿者使用电子血压计进行血压测量,步骤是第一观测者、第二观测者、第一观测者。3 次测得的血压值为:舒 张 压60~93mmhg(69.13±7.77mmHg),收 缩 压80~133mmhg(101.73±11.59 mmHg),由此可见,使用本电子测量仪测得血压值无显著差异,舒张压的相关系数为0.898,收缩压的相关系数为0.872。
5.3 数据上传到界面
血压数据测好之后,通过无线局域网上传到上位机界面,界面显示某次测得的数据。将每次测得的数据上传到界面,并且归档到数据库,实现实时监控。
6 结语
本文针对血压实时监控需求设计了基于STM32F407的血压动态监测系统。对血压形成原理、血压测量方法进行了分析,设计了直流信号放大电路、交流信号滤波放大电路及其软件。通过采集大量数据,绘制曲线并拟合进行血压动态监测。实验展示血压动态监测系统运行稳定、可靠、精度高,可以广泛应用到医疗领域。后续工作是优化算法以进一步提升测量准确度,针对不同人群设计出通用的算法,使血压计得到更广泛的应用。