STM32HAL-血氧心率MAX30102模块_OLED显示心率图—蓝牙上传心率数据。

前言:本次要实现的功能是心率与血氧浓度的检测,在OLED显示心率与血样的数值以及心率的图新,通过蓝牙模块将检测到的数据发给手机。


目录:

目录

一.实验结果图片展示

二.心率血氧模块MAX3012

 1.概括:MAX30102是一个集成的脉搏血氧仪和监测仪生物传感器的模块。它集成了一个红光LED和一个红外光LED、光电检测器、光器件,以及带环境光抑制的低噪声电子电路。MAX30102采用一个1.8V电源和一个独立的5.0V用于内部LED的电源,应用于可穿戴设备进行心率和血氧采集检测,佩戴于手指、耳垂和手腕等处。标准和12C兼容的通信接口可以将采集到的数值传输给

2.引脚介绍:

3.测量心率和血氧功能原理:

2.数字电路部分:

1.内部 ADC 是一个连续时间过采样的 sigma-delta 变换器,具 有 18 位分辨率。ADC 采样率为 10.24MHz。ADC 输出数据速率可以从 50sps(每秒样本)到 3200sps。滤波器用于去除噪声并提取有用的信号。

2.滤波器可以有效地处理各种复杂信号,从而得到更准确的测量结果 。

3.过滤之后的信号存储在数据寄存器中。     

3.模拟电路部分:

1.环境光消除 ALC 有一个内部轨道/保持电路来消除环境光的影响和增加有效的动态范围。

2.温度传感器,用于校准SpO2子系统的温度依赖性。

4.最外围:两个LED灯分别示发出红光的LED与发出红外的LED.

5.功能图中引脚介绍:

三.寄存器

1.中断使能:0x02~0x03

2.FIFO:        0X04~0X07

1. FIFO Write Pointer:

2.FIFO Overflow Counter:

3.FIFO Read  Pointer: 

4.FIFO Data Register:

5. FIFO Data:

6. FIFO Data is Left or Right Justified:

3.FIFO配置:0x08

 1.SMP_AVE[2:0]:

2.FIFO_ROLLOVER_EN:

3.FIFO_A_FULL[3:0]:

4.模式配置:0x09

1.SHDN:

​编辑

3.MODE[2:0]:

5.SPO2配置 : 0xA0

1.SPO2_ADC_RGE[1:0]:

2.SPO2_SR[2:0] :

3. LED_PW[1:0] :

6.LED脉冲幅度 :0x0C~0X10

四.代码讲解:

1.主函数:

 2.MAX初始化配置:

3.max30102读取心率血氧:

4.PPG算法:

五.代码资料获取方式



一.实验结果图片展示

没有检测界面
没有检测时无数据接收

有检测时接收数据
有检测界面

二.心率血氧模块MAX3012

原理图

 

 1.概括MAX30102是一个集成的脉搏血氧仪和监测仪生物传感器的模块。它集成了一个红光LED和一个红外光LED、光电检测器、光器件,以及带环境光抑制的低噪声电子电路。MAX30102采用一个1.8V电源和一个独立的5.0V用于内部LED的电源,应用于可穿戴设备进行心率和血氧采集检测,佩戴于手指、耳垂和手腕等处。标准和12C兼容的通信接口可以将采集到的数值传输给


2.引脚介绍

GND:接地线;

RD:MAX30102芯片的RED,LED接地端,一般不接(驱动红色LED

IRD: MAX30102芯片的RLED接地端,一般不接(驱动红外LED

INT:MAX30102芯片的中断引脚

 VIN:主电源电源输入端, 1.8V-5V;3位焊盘:选择总线的上拉电平,取决于引脚主控电压,可选1.8V端或者3.3V端(此端包含3.3V及以上);

SCL:接I2C总线的时钟;

SDA:接12C总线的数据;

在本此工程量只用到了引脚:VIN,SDA,SCL,GND,INT。

接线图



3.测量心率和血氧功能原理:

功能图

1.通讯部分:MAX30102通过I2C与MCU通讯。

I2C时序图
2.数字电路部分
1.内部 ADC 是一个连续时间过采样的 sigma-delta 变换器,具 有 18 位分辨率。ADC 采样率为 10.24MHz。ADC 输出数据速率可以从 50sps(每秒样本)到 3200sps。滤波器用于去除噪声并提取有用的信号。
2.滤波器可以有效地处理各种复杂信号,从而得到更准确的测量结果 。
3.过滤之后的信号存储在数据寄存器中。     
3.模拟电路部分
1.环境光消除 ALC 有一个内部轨道/保持电路来消除环境光的影响和增加有效的动态范围。
2.温度传感器,用于校准SpO2子系统的温度依赖性。
4.最外围:两个LED灯分别示发出红光的LED与发出红外的LED.
5.功能图中引脚介绍

引脚 名称                       功能
1、7、8、14 N.C. 没有连接。连接 PCB 板以实现机械稳定性
2 SCL I2C 时钟输入
3 SDA I2C数据双向传输
4 PGND LED 驱动器块的电源接地
5 R_DRV 红色 LED 驱动程序
6 IR_DRV 红外 LED 驱动程序
9,10 V LED+ LED电源(阳极连接)。使用旁路电容到PGND以获得最佳性能。
11 VDD 模拟电源输入,使用旁路电容到GND以获得最佳性能。
12 GND 模拟接地
13 ~INT Active-Low中断(开漏)低电平有效,用上拉电阻连接到外部电压。

三.寄存器

1.中断使能:0x02~0x03


2.FIFO:        0X04~0X07

### MAX30102 STM32驱动代码及实现方案 #### 驱动概述 MAX30102 是一款集成光学传感器,用于测量心率血氧饱和度 (SpO2),其通过 I²C 接口与微控制器通信。STM32 微控制器可以通过 HAL 库轻松实现对 MAX30102 的控制和数据采集。 #### 系统架构设计 为了完成 MAX30102STM32 的交互,通常需要以下几个部分: - **硬件连接**:MAX30102 通过 SDA 和 SCL 连接到 STM32 的 I²C 引脚。 - **软件框架**:利用 STM32HAL 库编写驱动程序,包括初始化、寄存器配置以及数据读取功能[^1]。 #### 初始化流程 以下是 MAX30102 初始设置的主要步骤: ```c #include "stm32l4xx_hal.h" #include "max30102.h" void MX_I2C_Init(I2C_HandleTypeDef* hi2c); uint8_t max30102_init(void); // 主函数入口 int main(void) { HAL_Init(); MX_I2C_Init(&hi2c); // 初始化I2C外设 if (!max30102_init()) { // 调用MAX30102初始化函数 Error_Handler(); // 如果失败则进入错误处理逻辑 } while (1) { uint32_t red_led_data, ir_led_data; // 获取红光和红外光原始数据 max30102_read_fifo(&red_led_data, &ir_led_data); // 数据进一步处理... } } // MAX30102初始化函数 uint8_t max30102_init() { uint8_t result = 0; // 复位设备 max30102_write_reg(MAX30102_REG_MODE_CONFIG, MODE_RESET); // 设置模式为心率检测+脉搏氧化计模式 max30102_write_reg(MAX30102_REG_MODE_CONFIG, MODE_HR_SPO2_EN); // 配置采样速率和其他参数 max30102_write_reg(MAX30102_REG_SPO2_CONFIG, SAMPLE_RATE_100 | PULSE_WIDTH_1600); // 启用FIFO存储并清空现有数据 max30102_write_reg(MAX30102_REG_FIFO_CONFIG, FIFO_ROLL_OVER_ENABLE | FIFO_ALMOST_FULL_INT); max30102_clear_fifo(); return result; // 返回成功状态 } ``` 上述代码展示了如何使用 HAL 函数 `HAL_I2C_Master_Transmit` 或封装好的 API 来写入 MAX30102 寄存器,并启用特定的工作模式[^2]。 #### 数据获取与处理 MAX30102 提供了一个 FIFO 缓冲区来存储连续的 LED 测量值。这些数据可以被提取出来并通过信号处理算法计算心率和 SpO2 值。 ```c void max30102_read_fifo(uint32_t *red_data, uint32_t *ir_data) { uint8_t fifo_data[6]; // 请求读取六个字节的数据(两个样本) max30102_read_regs(MAX30102_REG_FIFO_DATA, fifo_data, sizeof(fifo_data)); // 解析数据包中的红色LED和IR LED数值 *red_data = ((fifo_data[0] << 16) | (fifo_data[1] << 8) | fifo_data[2]); *ir_data = ((fifo_data[3] << 16) | (fifo_data[4] << 8) | fifo_data[5]); } ``` 此方法从 FIFO 中取出最新的两组数据点,分别对应于红光和红外光强度变化情况[^3]。 #### OLED 显示支持 如果希望将结果显示OLED 屏幕上,则需额外引入 SSD1306 控制库或其他兼容图形接口。例如,在每次循环结束时更新屏幕上的实时波形或统计指标。 --- #### 总结 以上介绍了基于 STM32 平台下 MAX30102 的基本操作原理及其典型应用实例。完整的解决方案不仅涉及底层硬件对接,还需要配合高效的算法模型才能达到预期效果。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值