基于STM32的心率实时监测系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子电路设计与方案
0 引言
心率是指正常人安静状
态下每分钟心跳的次数,受
性别、年龄或其他因素的影
响。
成人静息时正常心率为
60~100次每分钟。
心率
过高容易导致心力衰竭,缩
短寿命;心率过低则会导致
供血供氧不足。
因此,在医
学上,通过对心率的实时监
测来判断病人的身体状态是
非常必要的。
1 系统总体设计
如图1所示,STM32主控通过I2C通信方式控制MAX30100模块采集心率数据,同时通过串口将采集到的数据发送给电脑端的MATLAB软件进行相应处理,处理完成后,MATLAB通过串口返回给主控处理结果,最后STM32控制OLED模块显示测量结果。
图1 系统总体架构图
2 各模块设计分析
■2�1 MAX30100模块
2�1�1 模块介绍及检测原理
MAX30100综合了心率和脉搏血氧饱和度检测的传感器解,它集成了两个LED、一个光电探测器以及经过优化的光学器件和低噪声模拟信号处理器,可检测脉搏血氧及心率信号。
主要典型应用有健身辅助设备、医疗监控设备等。
MAX30100测量原理:光电容积脉搏波描记法(PhotoPlethysmoGraphy,PPG)是借助光电手段在活体组织中检测血液容积变化的一种无创检测方法。
当一定波长的光照射到指端皮肤表面时,光束通过反射到达光电检测器。
光检测器接收的光强呈脉动性变化,将此光强变化信号转化成电信号,便可获得脉搏的变化从而检测出心率。
2�1�2 MAX30100功能原理
MAX30100集成了一个660nm的发光二极管(红色)和一个880nm的红外二极管,流过二极管的电流可通过配置相应的寄存器来控制,即二极管的发光强度可控。
其中,脉搏血氧饱和度需要光电检测器同时检测到两个波长的反射光后才能进行测量,而心率检测仅需要用到红外二极管。
基于STM32的心率实时监测系统
涂颖,刘会衡(通讯作者)
(湖北文理学院物理与电子工程学院,湖北襄阳,441053)
基金项目:湖北文理学院校级教学研究项目(No�JY2018003);湖北省教育厅科学研究计划重点项目资助(No�D2*******)。
摘要:本设计是基于STM32的心率实时监测系统,采用较为成熟的光电容积脉搏波描记法PPG,通过心率传感器采集心率数据,电脑端通过MATLAB实现客户端,可实时显示接收数据和数据曲线,直观且具备良好的分析价值,最后经过数字信号处理后得到心率值,并发送到OLED模块显示测量结果。
检测者只需通过手指触摸即可实时获得相应的心率数据,简单方便,操作性强。
关键词:心率;监测;STM32;数据采集
图2 MAX30100的结构框图
图3 MAX30100程序流程图
www�ele169�com | 11
12 | 电子制作 2019年04月
电子电路设计与方案
仅对心率进行检测时,当没有手指挡住检测器时,无反射光被接受;而用手指挡住检测器时,光检测器接收的光强随脉搏同步变化,将此光强变化信号转化成电信号,经过ADC 处理后通过I 2C 通信方式输出数据。
2�1�3 MAX30100用IIC 与CPU 通信
初始化包括IIC 的初始化以及配置
MAX30100相关的寄存器来设置工作模式,LED 脉冲宽度,采样速率等,在采样时间到来后,从FIFO 数据缓存器读取采样数据作为原数。
图4 FIFO 数据缓存器格式
■2�2 MATLAB 界面
2�2�1 MATLAB 界面设计
如图5根据系统所需实现的功能对MATLAB 界面进行功能划分;图6为根据功能图设计的实际界面。
图5 matlab 界面功能图
(1)数据导入或查看区用来保存和查询采集到的心率数据,同时可以导入过去保存的采集数据;(2)数据曲线
显示区对采集到的心率数据用曲线进行实时显示;(3)测量控制区用来让用户控制MATLAB 处理的每一个步骤;(4)串口设置区用来进行串口号和波特率的设置,保证MATLAB 和STM32主控成功进行通信;(5)数据处理区对采集到的数据进行截取,滤波,FFT 处理,最终得到心率测量结果。
2�2�2 信号变换和滤波
原始数据测量的是光强信号,心率信号的信息包含在光强信号中。
光强信号包括了直流DC 信号和交流AC 信号。
需要经过去直流处理提取其中的AC 信号,或者将原始信号等效变换成低幅信号,再经过低通滤波处理,便可得到比较纯净的反映血液流动特点的信号。
本设计采用了等效变换的原理,低通滤波器采用了凯撒窗设计的FIR 滤波器,滤波范围为0�5-3Hz,对应心率范围是30到180次每分钟,正常的心率落在该范围内,其余频率均可认为是噪声干扰。
2�2�3 信号截取
在每次测量心率前后的两个极短时间段内,信号数据会有剧烈的变化,即刚开始测量时指尖接触心率传感器,和结束测量时指尖离开传感器,为了避免这两段剧烈变化的信号对后面提取心率信息产生影响,因此采用截取的方法:先设定一个最小阈值和最大阈值,开始时对信号进行监测,当信号幅值小于设定的最小阈值时,即可认为检测到了刚开始测量时的剧烈变化信号,此时从该点算起,延时60个点后才标记为信号起始点,即丢弃前面的干扰信号。
同理,当信号幅值大于设定的最大阈值时,即可认为检测到了结束测量时的剧烈变化信号,此时从该点算起,提前50个点标记为信号结束点,丢弃后面的干扰信号。
则截取出来的这一段信号是纯净的稳定的信号。
注意截取后的信号长度必须大于800个点,否则后面的处理不容易得到准确的结果,当测量时间不够,或者测量过程中意外导致中途采集的信号产生剧烈变化时,都会导致测量失败。
2�2�4 信号FFT 变换
对截取后的信号作FFT 变换,显然对一次测量的所有数据进行一次FFT 变换得到的结果不足以说明实际。
对此采取以下数据分析处理方法:以FFT 变换的大小划分为20个等级(400:10:600),在每个等级下对截取的信号进行FFT 变换,由于信号长度大于FFT 长度,因此从信号的起始点开始,每隔50个点时就以该点作为起始点作FFT 变换,这样在每个等级下,会得到一组FFT 变换的结果。
调用findpeaks 函数获取每个FFT 变换的第一个极大值,(在使用findpeaks 函
图6 matlab 界面
www�ele169�com | 13
电子电路设计与方案
数查找峰值时,设定的峰值的最小高度为频域最大值的0�8倍,并且取第一个查找到的峰值作为结果)该极大值点对应的就是心率频率,那么获取到的这一组极大值点的众数就可以认为是该等级下较为准确的测量结果。
在每个等级下重复以上步骤,可得到在不同的FFT 变换大小下的测量结果,取这20个数的中位数作为最终结果,就可以保证获得准确的测量结果。
我们需要提取截取信号中的心率信息,即对应信号在时域上的周期值,因此在FFT 变换后,频域上的峰值对应的频率就是我们要求取的周期的倒数,第一个峰值恰好就对应了这个重要的频率,之后的第二个,第三个峰值等都是这个频率的倍数,可认为是非理想周期信号产生的干扰。
该频率为归一化的频率,通过乘以采样值30后得到正确的心率频率,再乘以60s 的时间,即可得到准确的心率值。
■2�3 OLED 模块介绍及使用
本设计使用0�96寸OLED 显示屏,采用了串行SPI 接口方式,分辨率为128×64,其中纵向的像素点被分成8组,每组8个像素,在调用具体的功能函数时,应注意坐标x 和y 代表的意义不同,x 代表横向的像素点,范围0到127,y 代表纵向的分组,范围0到7。
(1)设置STM32与OLED 模块相连接的IO:先将我们与OLED 模块相连的IO 口设置为输出,具体使用哪些IO
口,需要根据连接电路以及OLED 模块所设置的通讯模式来确定。
(2)初始化OLED:通过对OLED 相关寄存器的初始化来启动OLED 的显示,为后续显示字符和数字做准备。
驱动IC 的初始化代码,我们直接使用厂家推荐的设置就可以。
(3)显示:即通过自行编写的函数,将要显示的字符或数字发送到OLED 模块上。
3 结束语
稳定性、实时性和准确性是检验心率实时监测系统的重要指标,本设计通过使用MATLAB 编程设计界面完成信号处理功能以及编写STM32主控程序控制心率传感器和OLED 显示屏后得到准确的心率值,实用性可操作性强。
参考文献
* [1]李华志,尹俊峰,王亚飞等�基于MATLAB GUI 界面的MCU 串口实时绘图设计[J]�城市建设理论研究(电子版),2011,(23)�* [2]李大国,张庆明�A/D 高速采集模拟信号的阈值设定[J]�单片机与嵌入式系统应用, 2005, 5(11):72-73�
* [3]李学波�基于光电容积脉搏波的人体生理指数检测算法研究与实现[D]�东北大学,2011�
* [4]张鹤林,张康,张国龙�基于MATLAB 的脉搏波数字滤波器的设计[J]�科技广场
, 2013(11):41-44�
图7 当环境温度值为25℃,目标温度值与温差电势的三次拟合曲线
■2�5 补偿算法设计
被测温度的计算受设计放大电路设计的影响,为了得到更准确的被测温度,运放电路在设计时通过三个变位器来进行调节。
通过调用adc_get 函数对温度数据采集20次,求其平均值,程序如下:
adc_get(fd_adc , 2 ,&ain_2 , 20 , 20000); adc_get(fd_adc ,3 ,&ain_3 , 20 , 20000);
根据计算温度的公式对采集到的数据进行校正计算,最后得到计算环境温度和目标温度的算法公式,如公式(4)、(5)。
计算环境温度
temp1=((3�3 /1024* ain_2)/((vol-3�3/1024*ain_2)/R4)-1000)/6�17
(4)
计算目标温度
Temp2=(((3�3 / 1024 * ain_3)/G2-vol-0�000022)/G1-0�000022)/0�00004+temp1
(5)3 结语
TS 系列红外传感器只要解决好温度和温差电势的拟合补偿问题,配合嵌入式控制系统能够达到高可靠性、灵敏度,宽测温范围,快速响应时间。
参考文献
* [1]APOLLO.thermopile sensor TS118-3 User’s manual[J/OL].USA,2015
* [2]杨余柳等.基于ARM Cortex-M3的STM32微控制器实战教程(第2版)[M].北京:电子工业出版社,2017�
(上接第28页)。