欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式
概要
在这个系统设计上,采用了以STM32芯片中的F103系列芯片来作为总处理终端,在通过BUTTERWORTH滤波等之后将放大的心率信号进行除杂、去噪,也相对的对电路进行了优化。数据显示方面将用到一块OLED屏幕将个人的动态心率进行纪律以及同步在屏幕中显示出来,其显示的内容将包括心率的单独显示已经更显而易见的图标模式。利用心跳脉搏波形的特点以及心电图的基础将平均心率计算出来,从而展示出心率的“脉象图谱”。
关键词:心率检测 STM32 动态光谱 脉象图谱
一、系统总体设计
2.1 总体设计思想
该设计在基于STM32控制板外,另一个主要的板块就是做到如何去采集到心率数据的样本。关于MAX30100,其在简易心率检测仪中使用量非常的大,是一个优质的心率监测器传感器。MAX30100利用其本身含有的LED和光电检测端来检测信号的接收,以显示心率数据。其工作原理等会在后面讲到。另外,在该系统中STM32是主要微控制器和数据处理器;利用OLED屏实现动态心率的实时监控,即数据显示;利用蓝牙串口可以将数据输出显示。电源将设置一个3.5V-8V的电源,在选择合适电源电压供给的情况下输出电源给各模块进行使用。结构图如下图2.1所示:
图2.1 整体结构图
2.2 心率脉象图谱原理及实现
2.2.1 心电图
心脏的跳动是有序,在医学学术上讲到的心电脉冲就是心电图的形成基本。当人体血液流动进入心脏时,血液的流向以及血压都会对心脏内壁造成压迫,从而使心脏肌肉形成了周期性的收缩与放松。而脉冲信号就是由于心脏肌肉收缩,并且在左右压差下传递产生的周期性的电信号。但是人体是一个导体,并且心脏脉冲也会血液中产生传播规律,而这就是脉搏的产生。从而说明了改脉冲信号,可以利用身体内任意一个电极去检测到,心电图(EKG或ECG)便是将这个原理进行的数据可观性的改变,即可视电信号。下图2.2显示的是心脉波形的截断:
图2.2 心电图心搏波形
由上图可见的P波、T波、U波等。Q-R-S波在医学上会被统称为一个波群,即QRS波群。其中U波的存在就犹如空气中的氮气一般,正常心跳波频中U波的占比常常会达到50%以上、75%以下 。如图2.2中,T波与P波之间的波形缓冲通常被称作为等电势线,而这正好的心电图形成的基线。波形及其波动间期如表2-1。
二、软件系统设计
4.1 主软件设计
由于单片机的快速数据处理速度和易于编程的原因,单片机用于数据处理可以避免大量蓝牙数据传输。 MAX30100通过I2C通信进行读取。平衡光电数据转化,然后确定脉搏,在测量脉搏后,随时间计算心率。
4.2 MAX30100
I2C接口的最大速度为400KHz。该项目中,使用的通信技术为I2C通信,因此采样速率比传输速率慢。由于存储器写操作是通过I2C执行的,所以需要保证主控制芯片的高速通信操作,并且不影响其他子例程。
4.2.1 MAX30100运作流程
在该传感器模块处于SpO2的模式下,会开启心率记录与调取的功能。遮罩HR_ RDY。利用LED发出的光信号在手指上收集转化完成的PPG信号波形,完成采样。在此模式下中断将会在收集完每个数据样本之后在触发,即当FIFO仅剩一个空白空间时,产生中断。心率样本包括仅一个IR数据点。当读取FIFO数据寄存器时,终端HR_RDY位自动清零。新样本存储在新的读取指针位置,实际上,它是现在是FIFO中的第一个样本。
图4.1 心率模式下的数据采集和通讯时序
MAX30100的I2C地址:0x57,数据存储在FIFO缓冲区中。它最多可以存储16个测量值,每个样本的大小为4个字节。前两个字节用于IR测量,后两个字节用于RED测量。由于FIFO指向相同的地址,因此用I2C无法读取FIFO缓冲区。您必须完成事务以使FIFO输出地址包含下一个值。MAX30100内置50/60Hz滤波器,在只需要检测脉冲心率信号的情况下,则只需红外线,也就是启用RED LED就可以了。由于采样率和脉冲宽度直接相互关联,我们可以通过更改LED的采样率和脉冲宽度,更改ADC分辨率。
图4.2心率信号的采样率与脉冲宽度配置图
4.2.1.1 关于MAX30100的初始化
要开始从MAX30100读取数据,只需要做两件事:一是设置模式,也就是为其开启心率模式。二是设置红外灯的电流。所以我们需要将其初始化,包括设置中断使能以及模式的选择。
(1)中断使能:首先初始化的寄存器是中断口輸出使能INT,当触发中断后可设定是否输出到IO口,触发中断有温度触发、心率测量、血氧数据收集完成这几个使能中断的寄存器,读取中断寄存器后中断复位。
(2)模式选择:MAX30100包含了血氧心率等的模式,在该设计下直接选择了心率模式。在运行的状态下,可以转换成低耗模式,该模式开启后将直接进入节能模式。该模式适用于各种设计上。复位重置就是初始化上电状态,重启配置寄存器
4.2.1.2 数据读取流程
数据读取基本是靠中断引脚触发主控芯片中断,触发中断后由主控芯片进行读取MAX30100的中断寄存器,从而判断是由哪个触发。例如温度中断就读取温度值,过一段时间再发送采集温度指令然后过一段时间产生中断,这样重复进行。血氧不用发送指令,当FIFO数据快满了后就会发出中断提醒单片机读取,进入待机和省电模式将会关闭这些功能。数据读取流程图如图4.3。
图4.3 数据读取中断
4.2.1.3 红外线数据读取及数字滤波
设法将MAX30100设置为HR模式并读取原始IR数据后,绘制完成后,其外观应如图4.4所示:
图4.4原始IR数据,可见振荡
为了正确读取心律,我们需要去除DC信号,仅保留AC部分。可以使用以下两个方程式完成:
w(t)=x(t)+∝∗w(t−1)
y(t)=w(t)−w(t−1)
y(t):是滤波器的输出
x(t):当前输入/值
w(t):中间值,类似于直流值的历史记录
α:是滤波器的响应常数
如果α= 1,则一切都通过,如果α= 0,那么没有任何直流去除通过。这样看来α的理想值应当相当接近1,所以我假设将α= 0.95。
struct fifo_t {
uint16_t rawIR;
uint16_t rawRed;
};
dcFilter_t MAX30100::dcRemoval(float x, float prev_w, float alpha)
{
dcFilter_t filtered;
filtered.w = x + alpha * prev_w;
filtered.result = filtered.w - prev_w;
return filtered;
}
一旦使信号通过直流去除滤波器,我们将获得类似于图4.5中的信号:
图4.5 红外信号通过直流去除滤波器
五、结论
在系统设计方面前前后后总共构思设计了很长一段时间。为了设计并实现出心电图的动态显示,查询了很多相关资料文献,更加了解ECG波形与PPG信号相关的内容。如何在关于心率计算传感器的选择在MAX30102、MAX30100以及S等相关芯片上最后选择了MAX30100。它相对便宜,而且在单单测量心率的数据样本上,单体承载的最大样本采集率为0.1-1KHz,并且与其对的样本分辨率可以达到10-17Bit的ADC分辨率,已经是绰绰有余的了。在进行信号放大及其滤波的时候,滤掉直流波后所选择的BUTTERWORTH滤波器更是一个十分简易的滤波器,操作相对简单而且在其推导下,能更精确的计算出心率的值。包括在电路设计上和PCB排布上、代码设计并应用在系统上在都花了挺多的心思。
在设计时由于自身的经验不足以及技术不够过关,无法在原设计的基础上加入APP显示以及危险提醒,这确实为该系统美中不足的一个地方。还有就是MAX30100的设置在手指检测上,当其固定不稳时,检测到的数据是除此之外,系统中对于信号处理部分并没有做到过于完美以至于会出现信号断崖式中断的状态。在检测过硬件保证其正常性下把该以原因定在软件系统设计的不完善上。言下之意,该系统的改进空间十分大,现阶段缺陷还是会有很多,包括其精密程度,稳定程度等都仍需要有所优化。在现阶段的智能医学发展来说,心率检测仪的发展前景十分巨大,未来的智能科技发展以及计算机技术研创也会使其发展到一个更新的高度。在检测心率的基础上,心率检测仪可以增加APP辅助,人们能在APP中得到自己选定时间段里的心率监测,同时得到专家的意见以及建议,不再只是单单的自己观察自己监控,变得更加智能。
六、 文章目录
目 录
1 绪论 1
1.1 关于心率检测仪的研究背景 1
1.2 心率检测仪的意义与目的 1
1.3 关于心率检测仪的发展历程 2
2 设计方案 3
2.1 总体设计思想 3
2.2 心率脉象图谱原理及实现 3
2.2.1 心电图 3
2.2.2 心率的算法 5
2.2.3 脉象图谱的分析方法的研究 5
2.2.4 脉图的判别方法 6
2.2.5光电容积脉搏波(PPG信号) 7
3 硬件电路设计分析 9
3.1 主控芯片 9
3.1.1 芯片介绍 9
3.1.2 低功耗特点 9
3.1.3 主芯片电路设计 9
3.2 MAX30100心率血氧模块 10
3.2.1 MAX30100简介 10
3.2.2 MAX30100传感器工作原理 11
3.2.3 MAX30100电路设计 11
3.3 OLED显示 12
3.4 蓝牙模块 13
4 软件部分设计分析 15
4.1 主软件设计 15
4.2 MAX30100 15
4.2.1 MAX30100运作流程 15
4.2.2 FIFO寄存器 22
4.3 OLED 23
总结 25
参 考 文 献 26
致谢 27