概述
MAX30102 是一款集成式脉搏血氧检测和心率监测模块。它内置发光二极管(LED)、光电探测器、光学元件以及具备环境光抑制功能的低噪声电子元件。该模块为移动设备和穿戴式设备提供了完整的系统解决方案,能有效简化设计流程。
MAX30102 采用 1.8V 单电源供电,内部 LED 则需单独使用 3.3V 电源。模块通过标准 I2C 兼容接口进行通信,可通过软件关闭,待机电流为零,电源轨可始终保持供电状态。
- 采用 LED 反射式方案,集成心率监测器和脉搏血氧传感器
- 超小尺寸:5.6mm × 3.3mm × 1.55mm,14 引脚光学模块
- 内置防护玻璃,确保最佳且稳定的性能
- 超低功耗运行,适配移动设备
- 可编程采样率和 LED 电流,实现节能
- 低功耗心率监测器(功耗<1mW)
- 超低关断电流(典型值 0.7µA)
- 快速数据输出能力
- 高采样率
- 强大的运动伪影抗干扰能力
- 高信噪比(SNR)
- 工作温度范围:-40°C 至 +85°C
引脚

| 引脚 | 名称 | 功能 |
|---|---|---|
| 1、5、6、7、8、14 | N.C. | 无连接。连接至印刷电路板(PCB)焊盘以保证机械稳定性。 |
| 2 | SCL | I2C |
| 3 | SDA | I2C |
| 4 | PGND | LED |
| 9、10 | VLED+ | LED 电源(阳极连接)。为获得最佳性能,需连接旁路电容至 PGND。 |
| 11 | VDD | 模拟电源输入。为获得最佳性能,需连接旁路电容至 GND。 |
| 12 | GND | 模拟地 |
| 13 | INT | 低电平有效中断(开漏)。需通过上拉电阻连接至外部电压。 |
框图、原理图


FIFO
MAX30102 可通过软件寄存器进行全面调节,数字输出数据可存储在芯片内部 32 深度的先进先出存储器(FIFO)中。FIFO 允许 MAX30102 通过共享总线连接至微控制器或处理器,无需持续从 MAX30102 的寄存器中读取数据。
血氧饱和度(SpO₂)子系统
MAX30102 的血氧饱和度(SpO₂)子系统包含环境光消除(ALC)、连续时间 Σ-Δ 模数转换器(ADC)和专有离散时间滤波器。环境光消除(ALC)具备内部采样 / 保持电路,可抵消环境光并提高有效动态范围。血氧饱和度(SpO₂)模数转换器(ADC)的满量程范围可在 2µA 至 16µA 之间编程设置,环境光消除(ALC)可抵消高达 200µA 的环境电流。
内部模数转换器(ADC)是一款连续时间过采样 Σ-Δ 转换器,分辨率为 18 位,采样率为 10.24MHz。模数转换器(ADC)输出数据率可在 50sps(每秒采样数)至 3200sps 之间编程设置。
温度传感器
MAX30102 内置片上温度传感器,用于校准血氧饱和度(SpO₂)子系统的温度依赖性。温度传感器的固有分辨率为 0.0625°C。
器件输出数据对红外光 LED 的波长相对不敏感,但红光 LED 的波长对数据的正确解读至关重要。配合 MAX30102 输出信号使用的血氧饱和度(SpO₂)算法,可补偿环境温度变化带来的相关血氧饱和度(SpO₂)误差。
LED 驱动器
MAX30102 集成红光和红外光 LED 驱动器,可为血氧饱和度(SpO₂)和心率(HR)测量提供 LED 脉冲调制。在供电电压合适的情况下,LED 电流可在 0 至 50mA 之间编程设置。LED 脉冲宽度可在 69µs 至 411µs 之间编程设置,使算法能根据使用场景优化血氧饱和度(SpO₂)和心率(HR)的测量精度及功耗。
寄存器

Interrupt Status (0x00--0x01)
当中断触发时,MAX30102 会将低电平有效中断引脚拉至低电平,直至中断被清除。
- A_FULL:FIFO 接近满标志。在血氧饱和度(SpO₂)和心率(HR)模式下,当 FIFO 写指针剩余一定数量的空闲空间时,该中断触发。触发数量可通过 FIFO_A_FULL [3:0] 寄存器设置。读取中断状态 1 寄存器(0x00)可清除该中断。
- PPG_RDY:FIFO 新数据就绪。在血氧饱和度(SpO₂)和心率(HR)模式下,当数据 FIFO 中有新样本时,该中断触发。读取中断状态 1 寄存器(0x00)或 FIFO_DATA 寄存器可清除该中断。
- ALC_OVF:环境光消除溢出。当血氧饱和度(SpO₂)/ 心率(HR)光电二极管的环境光消除功能达到最大限制,导致环境光影响模数转换器(ADC)输出时,该中断触发。读取中断状态 1 寄存器(0x00)可清除该中断。
- PWR_RDY:电源就绪标志。上电时或掉电后,当电源电压 VDD 从低于欠压锁定(UVLO)电压升至高于欠压锁定(UVLO)电压时,会触发电源就绪中断,表明模块已上电并准备好采集数据。
- DIE_TEMP_RDY:内部温度就绪标志。当内部芯片温度转换完成后,该中断触发,处理器可读取温度数据寄存器。读取中断状态 2 寄存器(0x01)或 TFRAC 寄存器(0x20)可清除该中断。
读取中断状态寄存器或触发中断的寄存器时,中断会被清除。例如,若血氧饱和度(SpO₂)传感器完成转换后触发中断,读取 FIFO 数据寄存器或中断寄存器均可清除中断引脚(使其返回正常高电平状态),同时将中断状态寄存器中的所有位清零。
Interrupt Enable (0x02-0x03)
除电源就绪中断外,其他所有硬件中断源均可通过 MAX30102 芯片内部的软件寄存器禁用。电源就绪中断无法禁用,因为掉电(电源电压过低)时模块的数字状态会复位,且默认状态下所有中断均处于禁用状态。此外,系统需要知晓是否发生过掉电,以及模块内数据是否因此复位。
正常工作时,未使用的位应始终设置为 0。
FIFO (0x04--0x07)

-
FIFO 写指针
FIFO 写指针指向 MAX30102 下一个样本的写入位置。每向 FIFO 中写入一个样本,该指针就会递增。当 MODE [2:0] 为 010、011 或 111 时,也可通过 I2C 接口修改该指针。
-
FIFO 溢出计数器
当 FIFO 满时,新样本无法写入,会发生数据丢失。溢出计数器(OVF_COUNTER)用于统计丢失的样本数,最大值为 0x1F(31)。当从 FIFO 中 "弹出" 一个完整样本(即移除旧的 FIFO 数据并向下移位样本)时,溢出计数器(OVF_COUNTER)会复位为 0。
-
FIFO 读指针
FIFO 读指针指向处理器通过 I2C 接口从 FIFO 中读取下一个样本的位置。每从 FIFO 中弹出一个样本,该指针就会递增。处理器读取样本后,也可写入该指针,以便在发生数据通信错误时重新读取 FIFO 中的样本。
-
FIFO 数据寄存器
循环 FIFO 的深度为 32,最多可存储 32 个样本数据。样本大小取决于配置为激活的 LED 通道数(又称通道数)。每个通道的信号以 3 字节数据形式存储,因此 FIFO 的宽度可为 3 字节或 6 字节。
I2C 寄存器映射中的 FIFO_DATA 寄存器指向即将从 FIFO 中读取的下一个样本,由 FIFO_RD_PTR 指针指向该样本。读取 FIFO_DATA 寄存器不会自动递增 I2C 寄存器地址,突发读取该寄存器时会反复读取同一地址。每个样本每个通道为 3 字节数据(即红光 3 字节、红外光 3 字节等)。
FIFO 相关寄存器(0x04--0x07)均可读写,但实际工作中通常仅需写入 FIFO_RD_PTR 寄存器。其他寄存器由 MAX30102 自动递增或填充数据。开始新的血氧饱和度(SpO₂)或心率(HR)转换时,建议先将 FIFO_WR_PTR、OVF_COUNTER 和 FIFO_RD_PTR 寄存器清零(0x00),以确保 FIFO 为空且处于已知状态。通过 I2C 突发读取事务读取 MAX30102 寄存器时,寄存器地址指针通常会递增,因此下一个发送的数据来自下一个寄存器,以此类推。但 FIFO 数据寄存器(地址 0x07)例外,读取该寄存器时地址指针不会递增,而 FIFO_RD_PTR 指针会递增,因此下一个发送的数据为 FIFO 中的下一个字节数据。
-
从 FIFO 读取数据
通常,从 I2C 接口读取寄存器时会自动递增寄存器地址指针,因此可通过突发读取一次性读取所有寄存器,无需额外的 I2C 起始事件。但在 MAX30102 中,除 FIFO_DATA 寄存器(地址 0x07)外,其他寄存器均遵循此规则。
读取 FIFO_DATA 寄存器不会自动递增寄存器地址,突发读取该寄存器时会反复读取同一地址的数据。每个样本包含多个字节数据,因此需在同一事务中从该寄存器读取多个字节以获取一个完整样本。
另一个例外是地址 0xFF,读取 0xFF 寄存器后的更多字节时,地址指针不会回滚至 0x00,读取的数据无意义。
-
FIFO 数据结构
数据 FIFO 包含一个 32 样本存储区,可存储红外光和红光的模数转换器(ADC)数据。每个样本包含两个通道的数据,因此每个样本为 6 字节数据,FIFO 总共可存储 192 字节数据。
FIFO 数据采用左对齐格式(如表 1 所示);也就是说,无论模数转换器(ADC)分辨率如何设置,最高有效位(MSB)始终位于第 17 位数据位置。FIFO 数据结构的可视化展示如表 2 所示。

-
FIFO 数据每个通道 3 字节
FIFO 数据采用左对齐格式,即无论模数转换器(ADC)分辨率如何设置,最高有效位(MSB)始终位于同一位置。FIFO_DATA [18]--[23] 未使用。表 2 展示了每组 3 字节数据的结构(包含每个通道的 18 位模数转换器(ADC)数据输出)。
血氧饱和度(SpO₂)模式下,每个数据样本包含两组数据(每组 3 字节)。读取一个样本需通过 I2C 读取每个字节,因此读取血氧饱和度(SpO₂)模式下的一个样本需进行 6 次 I2C 字节读取。读取每个样本的第一个字节后,FIFO 读指针会自动递增。
-
写 / 读指针
写 / 读指针用于控制 FIFO 中的数据流向。每向 FIFO 中添加一个新样本,写指针就会递增;每从 FIFO 中读取一个样本,读指针就会递增。如需重新读取 FIFO 中的某个样本,可将读指针减 1 后再次读取数据寄存器。
进入血氧饱和度(SpO₂)模式或心率(HR)模式时,应清除 FIFO 写 / 读指针(重置为 0x00),以确保 FIFO 中无旧数据。若 VDD 电源循环或 VDD 降至欠压锁定(UVLO)电压以下,指针会自动清除。

。。。