社区导航

 

搜索
查看: 16468|回复: 10

[设计过程分享] MAX32630FTHR板的学习(四):使用MAX30102进行心率和血氧测量

[复制链接]

227

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2017-8-8 17:36 | 显示全部楼层 |阅读模式
本帖最后由 anning865 于 2017-8-8 19:24 编辑

      在上一篇中简单对MAX30102进行了读写并解释了其测量心率和血氧饱和度的原理。这篇主要写MAX32630FTHR板和MAX30102具体配合测量心率和血氧的步骤。
1.     硬件改进
     上一篇中已经提到目前淘宝上卖的MAX30102模块存在明显的硬件错误,其将I2C的上拉电压固定在了1.8V稳压器的输出端,导致与其他I2C电平不兼容,比如一些常用的arduino板和STM32板都不能与其进行正常的通信。想做实验还要先飞线。
美信官方也推出了一个基于MAX30102的模块设计MAXREFDES117。模块很小巧,图1就是实物图,图2是原理框图。可以看出官方很明智地选用一片电平转换芯片MAX14595来解决I2C总线电平不兼容的问题。但是无奈这个设计成本有点高,况且芯片不好买。
1.png

1. MAXREFDES117实物图

2.png

2. MAXREFDES117结构框图
     本着精简够用的原则,我重新设计了原理图并制板实验了一下,效果还是不错的。具体改动很简单,就是将MAX30102的上拉电平连接到了输入电源同时也是LED供电电源上。这样保证了I2C电平始终和输入电源一样,而绝大多数情况下我们通过单片机开发板提供给MAX30102模块的电源往往也是和单片机本身IO口电源是同一个。同时根据MAX30102的手册,LED的电源要求大于3.1V就可以(见图3),所以输入电源采用3.3V和5V均可。最后修改后的原理图如图4所示。
3.png
3.MAX30102LED电源要求
4.png
4.MAX30102模块的原理图
5.jpg
5.焊接后的实物图(MAX30102封装不好焊啊)
2.     软件移植
      官方的MAXREFDES117套件给出了基于arduino和mbed两种平台的心率和血氧计算程序,其可以顺利应用于如下6种开发板:
mbed:

  • Maxim Integrated MAX32600MBED#
  • Freescale FRDM-K64F
  • Freescale FRDM-KL25Z
Arduino:

  • Adafruit Flora
  • Lilypad USB
  • Arduino UNO

    下图6是算法程序的流程图
6.png
6.心率血氧算法流程图
      单片机在复位MAX30102后等待串口输入,当串口有任意字符输入,单片机即开始对MAX30102进行功能初始化,RED LED和IR LED交替点亮来检测人体皮肤下血液的搏动和血氧含量。单片机将一段时间内MAX30102采集的LED反射数据储存在内部RAM中,然后分别计算RED LED和IR LED的直流成分(DC)和交流成分(AC),最后算出数值R并通过预先储存在FLASH中的查找表来确定当前的SPO2(图7)。而心率值可以通过对单个LED的交流成分相邻两波峰之间的时间差T来确定,每分钟心跳数BPM=60/T。
7.png
7.R值与血氧的线性关系图
      由于arduino UNO板所使用的mega328p单片机内存只有2KByte, 无法储存长时间的原始数据,因此程序中设定MAX30102的采样率为25HZ,每个数据只有16位(ADC的位数是18位,舍弃了最低2位数据)并只采了4S的数据。而MBED平台下的开发板都具有较大的内存,所以程序中设定MAX30102的采样率为100HZ,数据为32位并始终储存5S的数据进行计算。通过对比可以发现,使用MBED平台下开发板算出的心率和血氧值数值更精确,更稳定,性能超过了arduino UNO板。而本次实验使用的MAX32630FTHR板性能更强,其片上内存有512KB,远远超出了程序需求,编译后的程序RAM只有11.7KB。因此还可以进一步提升算法的性能和复杂度,使可穿戴设备具有更大的发展空间。
8.png
8.程序编译后的空间占用情况
3.实验过程
     针对MAX32630FTHR板进行程序的移植,并定义相应接口连接:
MAX32630FTHR<->MAX30102
3V3<->VIN
SCL(P3_5)<->SCL
SDA(P3_4)<->SDA
P3_2<->INT
GND<->GND
     程序中使用板上的LED1(红色)来实时模拟心跳强弱。最后导出的keil程序如下

FTHR_MAX30102_uvision5_max32630fthr.zip (4.65 MB, 下载次数: 4612)
心率传感器:https://shop108071095.taobao.com


回复

使用道具 举报

62

TA的帖子

0

TA的资源

宇宙尘埃

发表于 2017-8-8 17:43 | 显示全部楼层
感谢分享
液晶拼接屏 - http://www.chinapinjie.com


回复

使用道具 举报

9661

TA的帖子

133

TA的资源

管理员

Rank: 13Rank: 13Rank: 13Rank: 13

发表于 2017-8-14 07:23 | 显示全部楼层
汇总贴在此:
MAX32630FTHR板的学习——by anning865
http://bbs.eeworld.com.cn/forum. ... 8387&fromuid=536508

玩板看这里:

http://bbs.eeworld.com.cn/elecplay.html

EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!



回复

使用道具 举报

359

TA的帖子

2

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2017-12-22 10:51 | 显示全部楼层
本帖最后由 snoweaglemcu 于 2017-12-22 10:53 编辑

感觉帖子内容很有价值
祝楼主新年快乐,工作顺心!一年更比一年好!


回复

使用道具 举报

1

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-5-8 10:40 | 显示全部楼层


回复

使用道具 举报

2

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-11-14 18:11 来自手机 | 显示全部楼层
您好,我把你的代码移植到stm32f767开发版后,读出的红光数据为10w左右,红外光为14w左右。但是通过你提供的算法计算出的心率一般都在好几百或者返回-999,血氧数据也不对。不知道为什么我直接使用你程序中对max30102的I2C的配置代码无法读出数据,而我用的HAL库中的函数就可以读取出来,现在在电脑上看到的波形噪声很大(没有经过算法处理),不太清楚是我读取数据不完全正确还是算法的细节需要修改,楼主遇到过类似的情况吗,希望解答一下

点评

有可能是外界的光线干扰。  详情 回复 发表于 2018-11-15 13:54


回复

使用道具 举报

227

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

 楼主| 发表于 2018-11-15 13:54 | 显示全部楼层
夜之向日葵 发表于 2018-11-14 18:11
您好,我把你的代码移植到stm32f767开发版后,读出的红光数据为10w左右,红外光为14w左右。但是通过你提供 ...

有可能是外界的光线干扰。
心率传感器:https://shop108071095.taobao.com


回复

使用道具 举报

2

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-11-20 11:35 来自手机 | 显示全部楼层
anning865 发表于 2018-11-15 13:54
有可能是外界的光线干扰。

您好,您能提供QQ,微信这些联系方式,我想详细咨询下您


回复

使用道具 举报

641

TA的帖子

3

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2019-4-4 19:34 | 显示全部楼层
好资料,下载学习了。我用STM32F103,能读出数据,但不稳定,尤其是脉搏,经常是200以上,不知原因出在哪?
另外我想显示动态波形,也不知道该取哪个值。


回复

使用道具 举报

1

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2019-7-23 15:51 | 显示全部楼层
夜之向日葵 发表于 2018-11-14 18:11 您好,我把你的代码移植到stm32f767开发版后,读出的红光数据为10w左右,红外光为14w左右。但是通过你提供 ...

请问你解决了吗,我最近也在调这个,用的stm32f103的板子,出来的心率也是好几百



回复

使用道具 举报

10

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-8-3 20:34 | 显示全部楼层
silence2019 发表于 2019-7-23 15:51 请问你解决了吗,我最近也在调这个,用的stm32f103的板子,出来的心率也是好几百

我用读出来的数据值 浮动很大,心率值 0到400多。



回复

使用道具 举报

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

关闭

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

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

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

GMT+8, 2019-12-7 20:05 , Processed in 0.342531 second(s), 19 queries , Gzip On, MemCache On.

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