基于STM32F030、MAX30102血氧心率监测仪的设计(二)

这篇具有很好参考价值的文章主要介绍了基于STM32F030、MAX30102血氧心率监测仪的设计(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        上篇主要讲解了MAX30102寄存器相关知识,这篇主要看下程序配置。

MAX30102寄存器配置

        在一般的配置中我们让设备开机直接开始进入SpO2/HR 模式(PROX_INT_EN 置 0),设置两个LED的电流都为0x40,然后开启 RDY 中断使能。这样每次数据采集ok就可以中断一次去处理数据。

int8_t maxim_max30102_init(void)
{


	max30102_Bus_Write(REG_MODE_CONFIG,0x40);
	HAL_Delay(20);
	
	max30102_Bus_Write(REG_INTR_ENABLE_1,0xE0);//C0	// INTR setting  
	max30102_Bus_Write(REG_INTR_ENABLE_2,0x00);
	
	max30102_Bus_Write(REG_FIFO_WR_PTR,0x00);  	//FIFO_WR_PTR[4:0]
	max30102_Bus_Write(REG_OVF_COUNTER,0x00);  	//OVF_COUNTER[4:0]
	max30102_Bus_Write(REG_FIFO_RD_PTR,0x00);  	//FIFO_RD_PTR[4:0]
	
	max30102_Bus_Write(REG_FIFO_CONFIG,0x4f); //0F 	//sample avg = 1, fifo rollover=false, fifo almost full = 17
	max30102_Bus_Write(REG_MODE_CONFIG,0x03);  	//0x02 for Red only, 0x03 for SpO2 mode 0x07 multimode LED
	max30102_Bus_Write(REG_SPO2_CONFIG,0x2A);  //27	// SPO2_ADC range = 4096nA, SPO2 sample rate (100 Hz), LED pulseWidth (400uS)  
	max30102_Bus_Write(REG_LED1_PA,0x2F);   //24	//Choose value for ~ 7mA for LED1
	max30102_Bus_Write(REG_LED2_PA,0x2F);   //24	// Choose value for ~ 7mA for LED2
//  max30102_Bus_Write(REG_PILOT_PA,0x7f);   	// Choose value for ~ 25mA for Pilot LED
	
	max30102_Bus_Write(REG_TEMP_CONFIG,0X01);
	
	max30102_Bus_Read(REG_INTR_STATUS_1);
	max30102_Bus_Read(REG_INTR_STATUS_2);


}

以上配置不是绝对的,根据自己的需求进行配置。

FIFO读取数据

MAX30102 FIFO 的深度为32,每个buf是6个字节(两通道数据,每通道3字节)。可以开启 PPG_RDY_EN,这样就能每来一个新的数据,就会中断一次通知我们去取数据。读FIFO_DATA 就会自动清掉中断标志位。

基于STM32F030、MAX30102血氧心率监测仪的设计(二)

 

 FIFO 寄存器

        FIFO相关的寄存器有4个。虽然是显示均可读写(R/W),但是实际上只有 FIFO Read Pointer可以写(应用在读数据出错,往回重读一次的情况)。其他 FIFO 寄存器均为只读。

 FIFO Write Pointer:

        写指针寄存器。保存下一个新数据在 FIFO 中的写地址。每次来一个数据,这个写指针会自动移动一位。

Over Flow Counter:

        如果32个FIFO深度满了,就会在这里增加1,表示溢出。


FIFO Read Pointer:

        FIFO读指针,始终指向下一个待读取的FIFO地址。如果数据读取后,读地址也会自动增加。

FIFO Data Register:

        可以简单的理解为 *FIFO_RD_PTR,始终指向下一个数据。

        I2C寄存器映射中的FIFO_DATA寄存器指向要从FIFO读取的下一个样本。 FIFO_RD_PTR指向此样本。所以虽然通过连续读 FIFO_DATA 不会使该寄存器自增,但是 FIFO_DATA 寄存器实际是映射到FIFO_RD_PTR,而FIFO_RD_PTR 寄存器始终指向下一个待读取的数据,所以对FIFO_DATA 连续读,是能够实现的。读 FIFO 函数如下:

void max30102_fifo_read(float *output_data)
{
    uint8_t receive_data[6];
		uint32_t data[2];
		max30102_i2c_read(REG_FIFO_DATA,receive_data);
    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);
		*output_data = data[0];
		*(output_data+1) = data[1]; 
}

采样率和精度设置

        简单的说想要更高的ADC精度(位数),就得提高脉宽(增加ADC的采样时间)。但是脉宽又会受限制于采样率,如果采样率太高,这个每个周期的时间短可能太短,就不足以满足高采样率的脉宽要求。所以具体的设置参考下表:

基于STM32F030、MAX30102血氧心率监测仪的设计(二)

                                        两种模式各自允许设置采样率表
        由上表可知,如果我们在SpO2模式想要ADC的精度为 17bits,脉宽只能为215us,且采样率最高只能到800Hz(也即灰色部分是我们不可设置的)。

        

        还有一个接近功能检测,程序中未使用,我使用的是软件检测手指,这个博主写的很清楚,可以学习一下

MAX30102 血氧调试笔记_YulongHe的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-462174.html

到了这里,关于基于STM32F030、MAX30102血氧心率监测仪的设计(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32+ MAX30102通过指尖测量心率+血氧饱和度

            重要的事情放在最前面:max30102只适用于指尖手指测量,不适用与手腕手指测量,如需做成可穿戴样式选择传感器的小伙伴请pass掉他,因为他只有红光和红外2种光,不够充足的数据源去运算。         由于一些原因,本篇文章所有下载资源不收取任何积分,让你不

    2024年02月03日
    浏览(46)
  • ESP32设备驱动-MAX30102脉搏血氧饱和度和心率监测传感器驱动

    MAX30102是一款集成脉搏血氧饱和度和心率监测生物传感器模块。 它包括内部 LED、光电探测器、光学元件和具有环境光抑制功能的低噪声电子设备。 MAX30102提供完整的系统解决方案,简化移动和可穿戴设备的设计流程。 MAX30102具有如下特性: LED 反射式解决方案中的心率监测器

    2023年04月18日
    浏览(40)
  • MAX30102心率血氧传感器

    目前,基本上所有的可穿戴式设备都集成了心率血氧测量的功能,在手表/手环中尤为常见。一般情况下,开发人员用于评估的心率血氧传感器型号用的都是MAX30102/MAX30100。MAX30102EFD如下图所示。 为上图所示的MAX30102传感器增加外围电路后就成为了常见的MAX30102模组,如下图所示

    2024年02月07日
    浏览(37)
  • 基于STM32F030驱动MQ7一氧化碳传感器

    了解一氧化碳传感器 MQ7 的驱动原理,通过配置 STM32F030 的GPIO及外设ADC和DMA,采集一氧化碳浓度数据。 MQ-7气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。采用高低温循环检测方式低温(1.5v加热)检测一氧化碳,高温(5.0v加热)清洗低温时吸附的

    2023年04月26日
    浏览(50)
  • 心率血氧传感器模块MAX30102

    心率血氧传感器模块MAX30102实物图   模块简介 MAX30102是一个集成的脉搏血氧仪和心率监测仪生物传感器的模块。 它集成了一个红光LED和一个红外光LED、光电检测器、光器件,以及带环境光抑制的低噪声电子电路。 MAX30102采用一个1.8V电源和一个独立的5.0V用于内部LED的电源,应

    2024年02月12日
    浏览(32)
  • 84、基于STM32单片机的心率MAX102血氧浓度脉搏检测系统设计

    毕设帮助、开题指导、技术解答(有偿)见文末。 目录 摘要 一、硬件方案 二、设计功能 三、实物图 四、原理图 五、PCB图 六、硬件框图 七、流程图  八、程序源码  九、 资料包括 血氧饱和度是人体生理参数检测的一个重要指标。但是传统的血氧监测仪造价成本太高,只

    2024年02月07日
    浏览(71)
  • MAX30102脉搏血氧仪和心率传感器(三)心率计算——时域法

    本章介绍PPG信号的心率计算方法——时域法。基本思想是计算动态阈值曲线,利用波形与曲线相交来确定PPG信号的周期。 如下图,当PPG波形在相同的位置两次经过动态阈值曲线的交点时, 这段时间的间隔就能认为是PPG的一个周期 ,根据此周期即可求出 心率 。 动态阈值曲线

    2024年02月03日
    浏览(46)
  • 【开源】ESP8266_MAX30102_OLED屏幕实现血氧心率检测

    本系列,是记录自己入门嵌入式领域的学习笔记。 看看能坚持多久。 今天是2023年5月2日 源代码的来源:https://github.com/yangqingyuan-byte/MAX30102-0.96_4pin_oled-esp8266_HR_and_SPO2 * ESP8266 --- OLED * GND --- GND * * 5V --- VCC  * D1 --- SCL  * D2 --- SDA  * ESP8266 --- MAX30102 * 5V --- VIN * G --- GND * D0 --- INT

    2024年02月03日
    浏览(41)
  • STM32传感器外设集--心率模块(MAX30102)

    目录 ​​​​​​​ 一、模块介绍 二、资料获取连接  欢迎关注微信公众号--星之援工作室 发送(MAX30102) 三、接线方式 四、代码编写 main.c max30102.c max30102.h myiic.c myiic.h algorithm.c algorithm.h 五 、参考 MAX30102模块是一种集成了光学传感器和信号处理器的模块,广泛应用

    2024年01月22日
    浏览(47)
  • STM32F030硬件I2C代码及解析

    刚接触STM32的时候,第一个学习的就是I2C,当时去网上学习别人写得I2C代码,虽然能用,但是当时并不理解为什么要这么配置,特别希望有人把代码掰碎了讲讲看,今天突然想起来,就把以前写的I2C代码拿出来掰碎了捋捋,希望对新手有些帮助。 先说说STM32的I2C: ST的M3系列还

    2024年02月08日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包