社区导航

 

搜索
查看: 1111|回复: 16

[其他] 基于STM32F103的血氧心率监测装置

[复制链接]

617

TA的帖子

3

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2019-4-13 14:27 | 显示全部楼层 |阅读模式
春节期间正忙于会客,忽然接到一个标注为“XX国际货运代理公司”的电话,我想这骗子也太唬人了,改天我还去注册一个“宇宙开发公司”,比你的“国际代理公司”要更气派的多呢,立马挂断了电话。第二天这个电话又来了,出于礼貌我接通了电话:“您好!”对方说:“您是H先生吗?”得到我的确定并核实了我的名字后说:“您有一个从菲律宾寄来的包裹,请问你的详细住址,我们将通过XX快递寄给您。”这时我忽然想起在去年末曾经申请过一个血氧心率检测芯片的评测,之后就一直没有音讯,我还以为此事不了了之呢。
不多久就接到快递送来的包裹,这是一个20多厘米见方的纸箱(见下图),箱子外边还附着几张发货装箱单,猜想大概是海关通关需要的吧。
a_001.jpg
    开箱后映入眼帘的是几个大小不一的静电包装袋。
a_002.jpg
    还有一份与箱外类似的发货装箱单,另外还有几张彩页。
a_003.jpg
从粉红色的防震包装袋里取出一个精制的硬纸盒,打开纸盒后在空空如也的海绵垫中间插了一块1厘米见方的小芯片,这就是本次评测的主角(见下图)。
a_004.jpg
a_005.jpg
    下图就是芯片的特写,是一块有8个焊盘的小PCB板,大约1厘米见方,仔细查看和分析后才知道左右两个焊盘分别是电源及地线,上下的6个焊盘是分别连通的,实际上就是芯片的中断INT引脚和I2C通讯用的SCLSDA引脚。
a_006.jpg
    从另外一个小的静电包装袋里取出了一个用乳胶制品,开始还不知道用途,看完说明书之后才知道这是一个卡片袋,可以用来存放银行卡或身份证。
a_007.jpg
    另外还有一支精制的圆珠笔(见下图)。
a_008.jpg
    还有一个厚实的静电包装袋,我起初以为里面是开发用的器材或资料,打开后才发现是一本笔记本。不过这个笔记本也非常精制,不光有封口的松紧带和作书签用的丝带,里面印刷的不象我们常用的横格,而是横竖交错的方格,方便绘图定位。
a_009.jpg
    拆开最后一个静电包装袋,里面是十根带鳄鱼夹的测试线。在这些小礼品中,我认为这个是最实用的了。
a_010.jpg
    整个包装箱里没有找到我所需要的技术手册或使用说明等资料,好在宣传彩页上印有网址,可以去官网下载资料。
a_011.jpg
从美信官网下载的全是英文资料,这可难倒了我这个“文盲”,全靠百度翻译才勉强了解了一点皮毛,但始终没有找到对芯片引脚作用的描述和如何使用的说明。经过反复阅读程序后才知道INT引脚是芯片提供信号,以便主机开始读取I2C总线上的检测数据,SCLSDA显然是I2C总线通讯用的。
官方提供的例程主要是后缀为cpp的文件,开始我还按网上说的将其后缀名改为.c后再进行编译,后来才知道根本不用修改后缀名,完全可以正常编译的。
官方提供的文件主要有:1MAX30102.cpp(初始化芯片和读写数据);2algorithm.cpp(算法);3main.cpp(主函数),其他引脚设置和I2C驱动则在mbed文件夹中,在mbed里面除了头文件外都是编译过的.o文件。
我开始准备用现有的GD32E230开发板的驱动,可是无法成功与检测芯片建立起I2C通讯,之后换用STM32F103最小系统板也没有成功,检测芯片的LED灯始终没有亮起,以致于我都怀疑芯片是不是已经损坏了。为了判定准备模拟I2C使用的引脚是否正常,我还用逻辑分析仪来检测相关引脚的功能,看是否能正常控制(见下图)。
b_001.jpg
后来我从网上找到一个基于STM32F103C8T6 MCU的应用,下载后由于其没有包含关键的mbed文件夹内容,编译一直通不过,而我又不知道该到哪里去找这些文件。最后又在另一个论坛里找到同样基于STM32F103C8T6的项目包,这个压缩包资料完整,解压后编译顺利通过了,不仅成功地驱动了检测芯片,而且通过串口通讯在电脑上可以得到检测数据(参见下图)。
test20190331_0.jpg

芯片驱动成功后,我开始着手LCD显示功能,看似简单的事情,可就在固件库的选择上走了弯路。开始我使用的是标准库,编译总是出错,最后反复查看代码和文件夹中的文件才发现这个项目中使用的是HAL库,修改相应的代码后才完成了在LCD显示屏上显示数据的功能。
为了测试方便,我用洞洞板焊接了一块扩展板,用鼠标线来连接扩展板与检测芯片,同时LCD屏也可以直接插在扩展板上(参见下图)。这样可以避免杜邦线的杂乱和松动引起接触不良。
b_002.jpg
b_003.jpg

为了使用方便,我找了一个塑料瓶盖,将检测芯片缝在瓶盖内,正好可以套在手指上,这样仅方便使用,检测时还可以减少杂光影响。
b_004.jpg

接下来准备在LCD上显示脉搏的动态图形,在选择数据源上又费了一番周折。开始我使用的是从检测芯片读入的数据,但显示效果不理想,后来改用驱动PWM发光管的变量。在显示方式上开始用的是曲线,因为我的LCD显示屏分辨率太低,显示效果不好,后来改为用竖线组成黑色区域显示,效果才好上一点(参见下图)。
b_005.jpg
b_006.jpg

至此,这个项目算是基本完成了。从使用的情况看,因为在程序中采用了存储500组数据后再计算,因此明显存在滞后现象,开始使用时要稳定几秒后才逐步显示正常数据,而且在检测过程中稍有活动,数据便不正常,血氧数值相对波动不大,但心率波动时最大甚至超过200/秒。另外在使用过程中偶尔还出现过芯片死锁现象,复位单片机都无效,一定要断电重新加载才恢复正常。

下一步的测试计划是添加蓝牙模块,同时开发一个安卓APP,将检测数据发送到手机上显示,以便让心率波形显示更美观,取得更好的体验效果。

这是我从网上找到的基于STM32F103C8T6文件包
MAX30102_uvision5_stm32f103c8.rar (2.69 MB, 下载次数: 27)


回复

使用道具 举报

810

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2019-4-13 14:51 | 显示全部楼层
这个好玩


回复

使用道具 举报

617

TA的帖子

3

TA的资源

纯净的硅(初级)

Rank: 4

 楼主| 发表于 2019-4-13 15:54 | 显示全部楼层
是还好玩,假如家里有年老体弱的病人,还可以起一定的监护作用。


回复

使用道具 举报

1

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2019-4-28 17:05 | 显示全部楼层
楼主大大可以开源一下程序吗,最近买了一个这个模块打算拿来玩玩,移植美信的程序 数据总是不对头

点评

1楼已经开源了的,下载解压后即可编译运行,通过串口调试助手在电脑上可以看到血氧和心率数据。  详情 回复 发表于 2019-4-28 21:22


回复

使用道具 举报

617

TA的帖子

3

TA的资源

纯净的硅(初级)

Rank: 4

 楼主| 发表于 2019-4-28 21:22 | 显示全部楼层
Pandaz_ 发表于 2019-4-28 17:05
楼主大大可以开源一下程序吗,最近买了一个这个模块打算拿来玩玩,移植美信的程序 数据总是不对头

1楼已经开源了的,下载解压后即可编译运行,通过串口调试助手在电脑上可以看到血氧和心率数据。


回复

使用道具 举报

9

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-6-17 15:11 | 显示全部楼层
hujj 发表于 2019-4-28 21:22 1楼已经开源了的,下载解压后即可编译运行,通过串口调试助手在电脑上可以看到血氧和心率数据。

楼主  可以开源一下你自己后面改的程序吗?带LCD显示的程序,最近也是在搞这个血氧仪

点评

已经上传。  详情 回复 发表于 2019-6-17 15:29


回复

使用道具 举报

617

TA的帖子

3

TA的资源

纯净的硅(初级)

Rank: 4

 楼主| 发表于 2019-6-17 15:28 | 显示全部楼层

应邀将我修改后的整个项目文件打包上传,供大家参考和优化。

Nucleo_MAX30102.rar (5.55 MB, 下载次数: 11)



回复

使用道具 举报

617

TA的帖子

3

TA的资源

纯净的硅(初级)

Rank: 4

 楼主| 发表于 2019-6-17 15:29 | 显示全部楼层
tangjch11 发表于 2019-6-17 15:11 楼主  可以开源一下你自己后面改的程序吗?带LCD显示的程序,最近也是在搞这个血氧仪

已经上传。



回复

使用道具 举报

9

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-6-22 11:12 | 显示全部楼层

楼主   大神!  我是最近刚刚接触这个指尖血氧仪,因为准备做这么一个项目,不知可否加个微信或者QQ联系     便于请教! 打扰之处还请谅解



回复

使用道具 举报

9

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-6-22 11:41 | 显示全部楼层
本帖最后由 tangjch11 于 2019-6-22 11:44 编辑

我现在使用的检测方式是光电的检测方式  发射LED发射出660nm  和905nm的红光和红外光   再使用一个接收管接收透光率,接收管会输出占空比为50%不同频率的PWM 波形,我现在就是不知道这个PWM波形代表的什么意思,继而怎么这个脉宽信号转换成数字值,不然我就可以套用美信的算法了!!

发射管图片

发射管图片


回复

使用道具 举报

9

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-6-22 11:55 | 显示全部楼层

有许多问题还想请教了! Q 906529016



回复

使用道具 举报

617

TA的帖子

3

TA的资源

纯净的硅(初级)

Rank: 4

 楼主| 发表于 2019-6-22 14:33 | 显示全部楼层

我只知其然,不知其所以然。对下载的程序未作任何修改,仅仅是添加了LCD5110的显示功能。



回复

使用道具 举报

9

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-6-22 17:13 | 显示全部楼层
hujj 发表于 2019-6-22 14:33 我只知其然,不知其所以然。对下载的程序未作任何修改,仅仅是添加了LCD5110的显示功能。

了解了!多谢你的分享! 另外你LCD 显示那个心率的柱状条 是根据那个值进行实时更新显示的了?还是固定显示!

点评

是根据LED的pwm值,这个值是根据心率数据计算的,这个计算是原程序就有的。  详情 回复 发表于 2019-8-19 15:38


回复

使用道具 举报

6

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-8-19 15:06 | 显示全部楼层

我使用这些算法,心率和血氧的数据始终不稳定,是怎么回事呢?哪位大神可以指点指点?谢谢!

点评

    我是直接用下载的程序,监测和计算部分未作任何修改。从代码初步分析的结果,程序是将测得的最后500组数据加权平均得到结果,下次剔除最早的一部分数据,然后补充新获得的数据再计算加权平均数,这样  详情 回复 发表于 2019-8-19 15:44


回复

使用道具 举报

617

TA的帖子

3

TA的资源

纯净的硅(初级)

Rank: 4

 楼主| 发表于 2019-8-19 15:38 | 显示全部楼层
tangjch11 发表于 2019-6-22 17:13 了解了!多谢你的分享! 另外你LCD 显示那个心率的柱状条 是根据那个值进行实时更新显示的了?还是固定显 ...

是根据LED的pwm值,这个值是根据心率数据计算的,这个计算是原程序就有的。



回复

使用道具 举报

617

TA的帖子

3

TA的资源

纯净的硅(初级)

Rank: 4

 楼主| 发表于 2019-8-19 15:44 | 显示全部楼层
不!努力 发表于 2019-8-19 15:06 我使用这些算法,心率和血氧的数据始终不稳定,是怎么回事呢?哪位大神可以指点指点?谢谢!

    我是直接用下载的程序,监测和计算部分未作任何修改。从代码初步分析的结果,程序是将测得的最后500组数据加权平均得到结果,下次剔除最早的一部分数据,然后补充新获得的数据再计算加权平均数,这样就平滑了数据的波动。



回复

使用道具 举报

6

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-8-19 16:11 | 显示全部楼层

特别是血氧一直都是错的

 



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 /5 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-9-22 21:59 , Processed in 0.452706 second(s), 17 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表