MAX30102分析

前言

这篇主要是从数据手册的角度,解释初始化的过程。里面不包含代码,但是对初始化过程中用到的参数做了一些描述。

初始化

模式配置

地址功能B7B6B5B4B3B2B1B0R/W
0x09模式配置SHDN:当为1时,关机RESET:当为1时,复位---MODE[2]MODE[1]MODE[0]RW

其中MODE有三种可以取用的值,分别是010,011和111。

配置值模式有源led的状态
010心率模式仅红色
011SpO2模式红色和红外线
111多led模式红色和红外线

网上代码向模式配置的地址传递0x40是执行复位操作,并不设置模式,所以直接传递了0。

传递0x40,这里主要说的时复位功能,后面还有模式配置

中断1使能

地址功能B7B6B5B4B3B2B1B0R/W
0x02中断1使能A_FULL_ENPPG_RDY_ENALC_OVF_EN-----RW

A_FULL_EN:只能在心率模式和SpO2模式模式下有效,是开启先进先出(FIFO)存储器的一个状态标志。表示的是数组已经满了的标志。

PPG_RDY_EN:只能在心率模式和SpO2模式模式下有效,开启PPG数据就绪的中断使能,每当有一组新的PPG数据准备好,就会有一个标志。

ALC_OVF_EN:环境光消除溢出的标志,当SpO2/HR光电二极管的环境光抵消功能达到其最大极限时,此中断就会被触发,此时,环境光正在影响ADC的输出。

传递0xE0,开启三个中断的使能

中断2使能

地址功能B7B6B5B4B3B2B1B0R/W
0x03中断2使能------DIE_TEMP_ RDY_EN-RW

DIE_TEMP_ RDY_EN:内部温度标准标志使能,当内部模具温度转换完成时,将触发此中断,以便处理器可以读取温度数据寄存器。

传递0x02,开启温度处理的中断

FIFO写指针

地址功能B7B6B5B4B3B2B1B0R/W
0x04FIFO写指针---FIFFO_WR_PTR[4]FIFFO_WR_PTR[3]FIFFO_WR_PTR[2]FIFFO_WR_PTR[1]FIFFO_WR_PTR[0]RW

FIFO写指针指向MAX30102写入下一个示例的位置,这个指针在FIFO上写完一个数据之后会向前移动一位。当MODE[2:0]为010、011或111时,也可以通过I2C接口进行更改。

传递0x00,清除数据,防止残留数据的影响。一种是设备断电后,数据会自动清零的,但是断电时间太短,电容里面的电还没有消耗完,再次启动,会导致数据有残留。另一种是上电时会因为电流的不确定性,导致内部有数据乱码,这种在oled的显示上特别明显,所以oled初始化的时候都会清一下屏幕。不知道是哪种情况,但是总归是清理一下比较好

FIFO溢出计算器

地址功能B7B6B5B4B3B2B1B0R/W
0x05FIFO溢出计算器---OVF_COUNTER[4]OVF_COUNTER[3]OVF_COUNTER[2]OVF_COUNTER[1]OVF_COUNTER[0]RW

当FIFO满时,样品不会被推到FIFO上,样品就会丢失。OVF_COUNTER计算丢失的样本数量。它在0x1华氏度时达到饱和。当一个完整的样本从FIFO中“弹出”(即,删除旧的FIFO数据并将样本向下移位)时(当读取指针前进时),OVF_COUNTER被重置为零。

传递0x00,清除数据,同上

FIFO读指针

地址功能B7B6B5B4B3B2B1B0R/W
0x06FIFO溢出计算器---FIFO_RD_PTR[4]FIFO_RD_PTR[3]FIFO_RD_PTR[2]FIFO_RD_PTR[1]FIFO_RD_PTR[0]RW

FIFO读取指针指向处理器通过I2C接口从FIFO获取下一个样本的位置。每次从FIFO中弹出样本时,这都会推进。处理器还可以在读取样本后写入这个指针,以便在出现数据通信错误时允许从FIFO中重读取样本。

传递0x00,清除数据,同上

FIFO配置

地址功能B7B6B5B4B3B2B1B0R/W
0x08FIFO配置SMP_AVE[2]SMP_AVE[1]SMP_AVE[0]FIFO_ROL LOVER_ENFIFO_A_FULL[3]FIFO_A_FULL[2]FIFO_A_FULL[1]FIFO_A_FULL[0]RW

SMP_AVE:平均值,为了减少数据吞吐量,通过设置这个寄存器,相邻的样本(在每个单独的通道中)可以在芯片上进行平均和抽取。

SMP_AVE平均量
0001(不平均)
0012
0104
0118
10016
10132
11032
11132

FIFO_ROL LOVER_EN:FIFO被填满之后的控制。如果是0,在你读取之前都不会更新,如果是1,会更新覆盖之前的数据

FIFO_A_FULL:设置在什么时刻发出中断,当为0时,没有数据时发生中断,当为F时在数据被填满之后发出中断

FIFO_A_FULL当发出中断时,FIFO中的空数据样本当发出中断时,FIFO中的未读数据样本
0032
1131
2230
3329
4428
5527
6626
7725
8824
9923
A1022
B1121
C1220
D1319
E1418
F1517

传递0x0F,在还有15个空数据样本时产生中断

模式配置

地址功能B7B6B5B4B3B2B1B0R/W
0x09模式配置SHDN:当为1时,关机RESET:当为1时,复位---MODE[2]MODE[1]MODE[0]RW

其中MODE有三种可以取用的值,分别是010,011和111。

配置值模式有源led的状态
010心率模式仅红色
011SpO2模式红色和红外线
111多led模式红色和红外线

传递0x03,这里是进行模式设置,在开头用的只是复位功能。设置为SpO2模式

SpO2配置

地址功能B7B6B5B4B3B2B1B0R/W
0x0ASpO2配置-SPO2_ADC_RGE[1]SPO2_ADC_RGE[0]SPO2_SR[2]SPO2_SR[1]SPO2_SR[0]LED_PW[1]LED_PW[0]RW

SPO2_ADC_RGE:SpO2 ADC范围控制。

SPO2_ADC_RGELSB SIZE (pA)FULL SCALE (nA)
007.812048
0115.634096
1031.258192
1162.516384

这里的ADC检测的是电流,以01为例,最低要有15.63pA的电流才能有数值,最大的电流是4096nA,也是说到这个数值后,ADC到达检测的最大值。这是18位分辨率的ADC,理论上此时数值应该是262144

SPO2_SR:SpO2的采样率控制。这些位定义了一个样本的有效采样率,该采样由一个红外脉冲/转换和一个红色脉冲/转换组成。采样率和脉冲宽度是相关的,因为采样率设置了脉冲宽度时间的上限。如果用户选择的采样率对于所选LED_PW设置来说太高,则将尽可能高的采样率编程到寄存器中。

SPO2_SRSAMPLES PER SECOND
00050
001100
010200
011400
100800
1011000
1101600
1113200

SAMPLES PER SECOND代表的是每秒的采样数,也就是Hz

LED_PW:LED 脉宽控制和 ADC 分辨率。这些位设置LED脉冲宽度(IR和Red具有相同的脉冲宽度),因此间接设置每个样本中ADC的积分时间。ADC分辨率与积分时间直接相关。

LED_PWPULSE WIDTH (µs)ADC RESOLUTION (bits)
0069 (68.95)15
01118 (117.78)16
10215 (215.44)17
11411 (410.75)18

传递0x26,最低启动电流是15.63pA,采样率为100Hz,LED脉宽为215us。

LED脉冲宽度设置

地址功能B7B6B5B4B3B2B1B0RW
0x0CLED脉冲幅度LED1_PA[7]LED1_PA[6]LED1_PA[5]LED1_PA[4]LED1_PA[3]LED1_PA[2]LED1_PA[1]LED1_PA[0]RW
0x0DLED脉冲幅度LED1_PA[7]LED1_PA[6]LED1_PA[5]LED1_PA[4]LED1_PA[3]LED1_PA[2]LED1_PA[1]LED1_PA[0]RW

传递0x2F,用于设置脉冲。官方数据手册上说由于修剪问题,所以每个LED电流都可能有很大差异,而且数据手册上的数据并没有给全,暂时不写对应对应关系表

模具温度配置

地址功能B7B6B5B4B3B2B1B0RW
0x21模具温度配置-------TEMP_ENRW

TEMP_EN:这是一个自清除位,当设置时,将从温度传感器启动单个温度读数。当该位设置为1时,该位在温度读数结束时自动清除为零。

传递0x01

  • 17
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MicroPython是一种适用于嵌入式系统的Python解释器,能够运行在各种微控制器上,包括Maxim Integrated的MAX30102心率传感器模块。MAX30102是一款集成了红外发光二极管、LED以及光电检测器等多个传感器的模块,主要用于心率检测、脉搏检测等医疗健康领域。 使用MicroPython进行MAX30102的操作,可以方便地进行编写、烧写和调试程序,避免了繁琐的C语言编译、链接和烧入等过程。通过简单的几行代码,可以实现心率检测、脉搏检测等功能,并将数据输出到显示器、无线模块等设备上。 使用MicroPython和MAX30102,可以方便地开发出各种医疗设备、穿戴式健康设备等应用,为人们健康提供更加方便的监测方式,同时也为科技的创新和进步贡献力量。 ### 回答2: MicroPython是一种基于Python的嵌入式系统开发语言,它实现了Python3.4语言规范,并针对微控制器和嵌入式系统进行了优化。而MAX30102是一款完整集成的心率传感器模块,可通过LED反射强度来检测脉搏信号。 使用MicroPython可以方便地对MAX30102进行程序开发和控制。通过编写Python程序,可以定制化地控制MAX30102的工作模式、LED亮度、采样率等参数。同时,MicroPython还提供了丰富的库函数,如I2C、SPI等通信协议库,方便与其他设备进行通信。 除了控制MAX30102功能,MicroPython还可以轻松实现数据的处理和显示。例如,可以读取MAX30102的输出数据,并进行心率的计算和存储,最终通过串口或无线模块,将数据传输至其他设备或云端进行数据分析和处理。 综上所述,使用MicroPython开发MAX30102,可以简化开发流程,提高开发效率和可维护性,同时也可以实现定制化的功能和数据处理。 ### 回答3: Micropython Max30102是一款基于Micropython语言开发的Max30102心率血氧传感器模块,该模块可实现测量血氧饱和度和心率等生理指标。Max30102传感器模块采用高精度AD转换器和专业信号处理器来获取人体的生物反应信号,然后通过I2C协议将获取到的数据传输到主控板上。Micropython Max30102传感器模块充分发挥了Micropython语言的高效性和便捷性,无需编写繁琐的底层驱动程序,仅需简单的代码就能实现数据采集和处理的功能,大大提高了开发效率和应用范围。Micropython Max30102模块可广泛应用于医疗健康监测、体育运动检测及科研等领域。同时,该模块还具有体积小、功耗低、便携性强等特点,适合用于对硬件成本和设备大小有要求的场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值