当前位置:   article > 正文

MAX30102分析

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/491457
推荐阅读
相关标签
  

闽ICP备14008679号