主页 > 互联网 > 内容页

每日报道:基于STM32物联网开发板(7)--心率血氧采集MAX30102

2023-05-24 11:08:00 来源:嵌入式技术

1.概述

MAX30102是一种集成的脉搏血氧计心率监测模块。它包括内部LED,光电探测器、光学元件和低噪声电子器件具有环境光抑制。MAX30102提供简化设计过程的完整系统解决方案用于移动和可穿戴设备。

MAX30102在单个1.8V电源上运行以及用于内部LED的单独3.3V电源。通信通过标准I2C兼容。

MAX30102的SpO2(经皮动脉血氧饱和度)子系统包含环境光消除(ALC),连续时间∑-ΔADC和专有的离散时间滤波器。ALC有内部跟踪/保持电路,用于消除环境光,以及增加有效动态范围。SpO2 ADC具有可编程满量程范围从2µA到16µA。这个ALC可抵消高达200µA的环境电流。内部ADC是连续时间过采样∑-Δ转换器,分辨率为18位。ADC采样率为10.24MHz。ADC输出数据速率可以从50sps(每秒采样)编程到3200sps。


(资料图片)

MAX30102具有片上温度传感器,用于校准SpO2子系统的温度依赖性。温度传感器的固有分辨率为0.0625°C。设备输出数据对IR LED的波长相对不敏感,其中红色LED的波长对于正确解释数据至关重要。与MAX30102输出信号一起使用的SpO2算法可以补偿与环境温度变化相关的SpO2误差。

MAX30102模块集成了红色和红外LED驱动器,以调制用于SpO2和HR测量的LED脉冲。使用适当的电源电压,LED电流可以从0编程到50mA。LED脉冲宽度可从69µs编程到411µs,以允许算法根据使用情况优化SpO2和HR精度和功耗。

应用

可穿戴设备健身辅助设备智能手机

硬件接口:

引脚

说明

MAX30102_INT

PC9信号检测

MAX30102_SDA

PC7 I2C数据线

MAX30102_SCL

PC8 I2C时钟线

2.通讯协议

本模块采用I2C通讯方式,具有I2C/SMBus兼容的2线制由串行数据线(SDA)和串行时钟线(SCL),时钟速率高达400kHz。

设备地址:I2C接口时序:

2.1 起始信号和停止信号

起始信号:时钟为高电平时,数据由高电平变为低电平。
//产生IIC起始信号void IIC_Start(void){SDA_OUT();     //sda线输出IIC_SDA(1);    IIC_SCL(1);Delay_Us(4); IIC_SDA(0);//START:when CLK is high,DATA change form high to low Delay_Us(4);IIC_SCL(0);//钳住I2C总线,准备发送或接收数据 }  
停止信号:时钟线为高电平时,数据线由低变高。
//产生IIC停止信号void IIC_Stop(void){SDA_OUT();//sda线输出IIC_SCL(0);IIC_SDA(0);//STOP:when CLK is high DATA change form low to high Delay_Us(4);IIC_SCL(1); IIC_SDA(1);//发送I2C总线结束信号Delay_Us(4);   }

2.2 发送数据和发送应答

时钟线为低电平时发送数据。应答信号本身就是一位数据。

//产生ACK应答void IIC_Ack(void){IIC_SCL(0);SDA_OUT();IIC_SDA(0);Delay_Us(2);IIC_SCL(1);Delay_Us(2);IIC_SCL(0);}//不产生ACK应答    void IIC_NAck(void){IIC_SCL(0);SDA_OUT();IIC_SDA(1);Delay_Us(2);IIC_SCL(1);Delay_Us(2);IIC_SCL(0);}//IIC发送一个字节  void IIC_Send_Byte(u8 txd){                            u8 t;   SDA_OUT();         IIC_SCL(0);//拉低时钟开始数据传输    for(t=0;t<8;t++)    {         if(txd&0x80)IIC_SDA(1);      else IIC_SDA(0);      txd<<=1;         Delay_Us(2);         IIC_SCL(1);      Delay_Us(2);       IIC_SCL(0);      Delay_Us(2);    } }

2.3 读取数据和读取应答

时钟线为高时读取数据。应答信号本身就是一位数据。

//等待应答信号到来//返回值:1,接收应答失败//        0,接收应答成功u8 IIC_Wait_Ack(void){u8 ucErrTime=0;SDA_IN();      //SDA设置为输入  IIC_SDA(1);Delay_Us(1);   IIC_SCL(1);Delay_Us(1); while(READ_SDA){ucErrTime++;if(ucErrTime>250){IIC_Stop();return 1;}}IIC_SCL(0);//时钟输出0    return 0;  } //读1个字节,ack=1时,发送ACK,ack=0,发送nACK   u8 IIC_Read_Byte(unsigned char ack){  unsigned char i,receive=0;  SDA_IN();//SDA设置为输入  for(i=0;i<8;i++ )  {    IIC_SCL(0);     Delay_Us(2);    IIC_SCL(1);    receive<<=1;    if(READ_SDA)receive++;       Delay_Us(1);   }   if (!ack)  IIC_NAck();//发送nACK  else  IIC_Ack(); //发送ACK     return receive;}

2.4 数据读写

void IIC_Read_One_Byte(u8 daddr,u8 addr,u8* data){           IIC_Start();  IIC_Send_Byte(daddr);   //发送写命令IIC_Wait_Ack();IIC_Send_Byte(addr);//发送地址IIC_Wait_Ack(); IIC_Start();      IIC_Send_Byte(daddr|0X01);//进入接收模式   IIC_Wait_Ack();   *data = IIC_Read_Byte(0);     IIC_Stop();//产生一个停止条件    }void IIC_Write_One_Byte(u8 daddr,u8 addr,u8 data){            IIC_Start();  IIC_Send_Byte(daddr);    //发送写命令IIC_Wait_Ack();IIC_Send_Byte(addr);//发送地址IIC_Wait_Ack();         IIC_Send_Byte(data);     //发送字节   IIC_Wait_Ack();           IIC_Stop();//产生一个停止条件 HAL_Delay(10); }

标签:

上一篇:最高法:坚决依法严惩性侵未成年人犯罪
下一篇:最后一页