文章目录

  • 前言(文末获取源码)
  • 一、PPG信号简介
  • 二、MAX30102简介
    • 1.总体结构
    • 2.寄存器
  • 三、使用步骤
    • 1.I2C通信
    • 2.MAX30102初始化
    • 3.读取数据
    • 4.数据分析
  • 四、存在的问题(已修正,详情在下一章)
  • 获取工程源码

前言(文末获取源码)

Maxim MAX30102传感器是一款集成脉搏血氧仪和心率监测器模块。MAX30102 包括内部 LED、光电探测器、光学元件以及低噪声电子元件,具有环境光反射特征。该高灵敏度器件由 1.8V 单电源供电,其内部 LED 由独立的 5.0V 电源供电。通过标准的 I2C 兼容接口进行通信。该传感器可通过软件来关断电源,待机模式下的电流消耗量几乎为零。


一、PPG信号简介

简单来说PPG信号就是光照照射在皮肤组织上时,由于血液流动造成对光的吸收率不同,而其它组织(例如骨骼,肌肉)对光的吸收率基本不变,导致光的反射率随血液流动情况改变的信号。如下图所示,直流信号DC反映的是组织、骨骼、肌肉、静脉血等等,交流信号AC则是反映了动脉血流动情况。根据AC、DC信号能够计算出心率、血氧详细的计算公式在下一章进行介绍

二、MAX30102简介

1.总体结构


可以看到,MAX30102结构包括两个光电二极管(RED:红光 IR:红外)、接收器、ADC通道、数字滤波器、数据寄存器和I2C通信模块。

2.寄存器

寄存器包括三大部分:状态寄存器、设置寄存器、温度寄存器。另外还有版本号和设备ID的寄存器,如下图。

三、使用步骤

1.I2C通信

和一般的I2C通信方式不同,MAX30102的读写时序如下


程序如下:

void max30102_i2c_write(uint8_t reg_adder,uint8_t data)
{uint8_t transmit_data[2];transmit_data[0] = reg_adder;transmit_data[1] = data;i2c_transmit(transmit_data,2);
}void max30102_i2c_read(uint8_t reg_adder,uint8_t *pdata, uint8_t data_size)
{uint8_t adder = reg_adder;i2c_transmit(&adder,1);i2c_receive(pdata,data_size);
}

2.MAX30102初始化

对照datasheet设置采样率,工作模式,led电流等等参数的设置。下面作为参考,实际使用的效果还是很好的。

void max30102_init(void)
{ uint8_t data;max30102_i2c_write(MODE_CONFIGURATION,0x40);  //reset the devicedelay_ms(5);max30102_i2c_write(INTERRUPT_ENABLE1,0xE0);max30102_i2c_write(INTERRUPT_ENABLE2,0x02);  //interrupt enable: FIFO almost full flag, new FIFO Data Ready,//                   ambient light cancellation overflow, power ready flag, //                                    internal temperature ready flagmax30102_i2c_write(FIFO_WR_POINTER,0x00);max30102_i2c_write(FIFO_OV_COUNTER,0x00);max30102_i2c_write(FIFO_RD_POINTER,0x00);   //clear the pointermax30102_i2c_write(FIFO_CONFIGURATION,0x0F); //FIFO configuration: sample averaging(1),FIFO rolls on full(0), FIFO almost full value(15 empty data samples when interrupt is issued)  max30102_i2c_write(MODE_CONFIGURATION,0x03);  //FIFO configuration:SpO2 modemax30102_i2c_write(SPO2_CONFIGURATION,0x26); //SpO2 configuration:ACD resolution:15.63pA,sample rate control:100Hz, LED pulse width:215 us max30102_i2c_write(LED1_PULSE_AMPLITUDE,0x2f);max30102_i2c_write(LED2_PULSE_AMPLITUDE,0x2f); //LED currentmax30102_i2c_write(TEMPERATURE_CONFIG,0x01);  //temperturemax30102_i2c_read(INTERRUPT_STATUS1,&data,1);max30102_i2c_read(INTERRUPT_STATUS2,&data,1);//clear the flag
}

3.读取数据

采用轮询的方式,未用到引脚中断信号。用过中断引脚的信息,发现读出来的数据波形不太好,用10-15ms延时读取是比较好的。

void max30102_fifo_read(uint32_t *data)
{uint8_t receive_data[6],temp_data=0;max30102_i2c_read(INTERRUPT_STATUS1,&temp_data,1);while((temp_data&0x40)!=0x40){max30102_i2c_read(INTERRUPT_STATUS1,&temp_data,1);}max30102_i2c_read(FIFO_DATA,receive_data,6);data[0] = ((receive_data[0]<<16 | receive_data[1]<<8 | receive_data[2]) & 0x03ffff);data[1] = ((receive_data[3]<<16 | receive_data[4]<<8 | receive_data[5]) & 0x03ffff);
}

4.数据分析

max30102的灵敏度是很高的,手指未接近和接触后如下图。

红光和红外光两路信号,似乎红外光灵敏度更高一些。

PPG信号波形也是比较漂亮的。

四、存在的问题(已修正,详情在下一章)

  • 每过若干个周期会出现莫名的噪声,原因未知,可能是硬件问题,又或者是读取数据方式出现了问题,待解决。

下一章将讨论心率、血氧的计算


获取工程源码

关注下方公众号,回复 “MAX30102” 获取源码;若有疑问,请在公众号回复“交流群”,进群一起讨论分享!

MAX30102脉搏血氧仪和心率传感器(一)驱动程序相关推荐

  1. MAX30102脉搏血氧仪和心率传感器(四)血氧+心率完整版(STM32)

    文章目录 前言 一.先上测试结果 1.测试步骤 2.测试结果 3.后续处理方法 二.血氧饱和度 1.原理 2.计算方法 三.源码获取(STM32例程) 前言 相较于上一章,增加和改进的地方有:①增加了 ...

  2. MAX30102脉搏血氧仪和心率传感器(三)心率计算——时域法

    文章目录 前言 一.算法思想 二.算法详解 1.阈值检测 2.等待波形稳定 3.FIR滤波.存入缓存区 4.检测PPG信号与阈值曲线的交点 5.心率计算 三.实际测试 1.静止测试 2.动态测试 四. ...

  3. MAX30102脉搏血氧仪和心率传感器(二)FIR滤波器

    文章目录 前言 一.修正上一章产生的错误 二.FIR滤波器设计 1.对采集的信号进行频谱分析 2.滤波器设计 3.滤波器仿真 三.ARM_MATH库实现(以STM32为例) 实际效果测试 滤波前 滤波 ...

  4. Ardunio开发实例-MAX30102脉搏血氧饱和度和心率监测传感器

    MAX30102脉搏血氧饱和度和心率监测传感器 MAX30102是集成的脉搏血氧饱和度和心率监测器生物传感器模块. 它包括内部LED,光电探测器,光学元件以及具有环境光抑制功能的低噪声电子设备. MA ...

  5. 【模块】脉搏血氧仪和心率监测仪生物传感器MAX30102

    公众号关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达.  模块介绍 MAX30102是一个集成的脉搏血氧仪和心率监测仪生物传感器的模块.它集 ...

  6. ESP32设备驱动-MAX30102脉搏血氧饱和度和心率监测传感器驱动

    MAX30102脉搏血氧饱和度和心率监测传感器驱动 文章目录 MAX30102脉搏血氧饱和度和心率监测传感器驱动 1.MAX30102介绍 2.硬件准备 3.软件准备 4.驱动实现 1.MAX3010 ...

  7. Arduino使用 MAX30102心率传感器

    1.1 介绍: MAX30102心率传感器主要用到MAX30102EFD元件,它是一个集成脉搏血氧仪和心率监视仪的传感器.它集成了一个红外LED和一个红外光LED.光电检测器.光器件,以及带环境光抑制 ...

  8. Arduino开发实例-MAX30100 脉搏血氧仪传感器驱动

    MAX30100 脉搏血氧仪传感器驱动 1.MAX30100介绍 MAX30100 脉搏血氧仪和心率传感器是一款基于 I2C 的低功耗即插即用生物识别传感器. MAX30100 是一款集成脉搏血氧饱和 ...

  9. spo2数据集_自己翻译的Max30100寄存器中文资料(血氧心率传感器IC)

    Max30100 可穿戴光电式的血氧心率传感器IC 总体描述: Max30100是一款集成的脉搏血氧和心率检测传感器.它使用了两个LED灯,一个用来优化光学的光电探测器,和低噪声模拟信号处理器,用来检 ...

  10. 史上最全脉搏心率传感器PulseSensor资料(电路图+中文说明书+最全源代码)

    准确度说明: 1 输入引脚一定要接在模拟输入口上 ESP-D1  只有一个模拟输入口  A0  0-3.3V  心跳不要接在5v上,否则电压不准  ESP-D1开发板有一个5V和一个3.3v 普通ar ...

最新文章

  1. 微软图像加密算法被破解,谷歌等大厂都在用,MIT硕士小哥开源逆向所用方法...
  2. java集合类根接口:Collection和Map
  3. 常见的HTML元素及常见检查点
  4. gcd(欧几里得算法)
  5. ubuntu 国内源
  6. python语言的变量特点随时_【Python】Python语言特点
  7. 进程线程之pid,tid
  8. python平方和psum_P19 python sum()函数和.sum(axis=0)函数的使用
  9. 批处理保存windows10开机壁纸
  10. 反编译 APK 的基本步骤
  11. 迄今为止最完整的DDD实践
  12. nrm详解,nrm是什么,nrm源管理器,nrm 与npm 的区别
  13. mysql 报错Incorrect string value: '\xF0\x9F\x98\x84' 解决方案
  14. python end用法_Python turtle.end_fill方法代码示例
  15. Windows10环境下自己配置Pytracking详细流程(有参考博客)
  16. 转载---about Amazon EC2
  17. 域控无法同步OUTLOOK提示“该姓名与地址列表中的的姓名不匹配”
  18. 三步简单实现直播干货
  19. 解决命名空间缺少引用问题
  20. 学海记录项目测试报告

热门文章

  1. Springboot+ssm高校会议预约系统javaweb
  2. 【最新版win10 adb环境变量配置】
  3. spring三大核心
  4. 项目管理和产品立项流程图
  5. 黑马程序员——面试题之银行业务调度系统
  6. 食堂点餐小程序,智慧食堂小程序,食堂预约点餐小程序毕设作品
  7. Android8 for 9300,三星G9300官方固件rom刷机包 G9300ZCS3CRI1 安卓8.0
  8. IDEA如何设置资源目录
  9. SQLExpress免费版配置本地数据库实例
  10. RIP、OSPF、ISIS协议的区别