0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

嵌入式技术 来源:嵌入式技术 作者:嵌入式技术 2023-05-24 11:10 次阅读

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精度和功耗。

应用

pYYBAGRjOomAB14PAABglh52fT8692.pngpoYBAGRjOp-ANiqAAAUcknd1-kQ527.png

硬件接口

引脚

说明

MAX30102_INT

PC9信号检测

MAX30102_SDA

PC7 I2C数据线

MAX30102_SCL

PC8 I2C时钟线

2.通讯协议

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

  • 设备地址:
poYBAGRtfI2APRNAAABGGNsJ_xc497.png
  • I2C接口时序:
poYBAGRtfNuADb53AAApVDPk4g4781.png

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);	 
}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2548

    文章

    50765

    浏览量

    752166
  • 物联网
    +关注

    关注

    2904

    文章

    44325

    浏览量

    371513
  • STM32
    +关注

    关注

    2266

    文章

    10877

    浏览量

    354960
  • 开发板
    +关注

    关注

    25

    文章

    4965

    浏览量

    97226
  • 血氧计
    +关注

    关注

    0

    文章

    5

    浏览量

    7664
收藏 人收藏

    评论

    相关推荐

    有人用过MAX30102么,

    max30102的一个心率,检测模块,
    发表于 06-01 20:10

    max30102心率传感器

    请问有人用过max30102传感器么? 手册里面有个Proximity Function 功能。大概意思就是 设置完模式后,设备会
    发表于 07-24 15:42

    MAX30102脉搏模块AT指令串口输出

    `MAX30102脉搏模块AT指令串口输出芯片说明MAX30102是一个集成的脉搏仪和
    发表于 03-10 17:14

    MAX30102调试遇到问题

    MAX30102测试手指的心率的时候,数据比较稳定,我们想测量额头的
    发表于 03-24 23:15

    MAX30102模块的原理及编程 精选资料分享

    一.简介MAX30102是一个集成的脉搏仪和心率监测仪生物传感器的模块(芯片)。它集成了一个660nm红光LED、880nm红外光LED、光电检测器、光器件,以及带环境光抑制的低噪
    发表于 07-19 09:15

    MAX30100和MAX30102是什么

    MAX30100和MAX30102是常用的测量心率的模块,MAX30100是能够读取心率
    发表于 08-03 06:37

    STM32是如何去MAX30102心率传感器的

    STM32F103单片机通过IIC控制MAX30102心率传感器MAX30102的VCC引脚
    发表于 08-19 08:33

    基于MAX30100/MAX30102传感器设计的心率检测相关资料分享

    基于美信MAX30100/MAX30102传感器设计的心率检测,以单片机STM32F103
    发表于 11-10 07:27

    心率MAX30102模块资料分享

    心率MAX30102模块资料话不多说,
    发表于 01-07 08:02

    基于MAX30102心率传感器设计

    最近的一个项目需要用到一款心率传感器,选型选择了MAX30102,可以在ArduinoIDE中搜到MAX3010X库,包含了简单读取、
    发表于 01-13 06:24

    MAX30102脉搏仪和心率监测模块的数据手册免费下载

    MAX30102是一个集成的脉搏仪和心率监测模块。它包括内部发光二极管,光电探测器,光学元件,以及低噪音的电子设备。MAX30102提供
    发表于 04-13 08:00 0次下载
    <b class='flag-5'>MAX30102</b>脉搏<b class='flag-5'>血</b><b class='flag-5'>氧</b>仪和<b class='flag-5'>心率</b>监测模块的数据手册免费下载

    MAX30102脉搏仪和心率监测模块的中文数据手册免费下载

    MAX30102是一个集成的脉搏仪和心率监测模块。它包括内部发光二极管,光电探测器,光学元件,以及低噪音的电子设备。MAX30102提供
    发表于 06-11 08:00 138次下载
    <b class='flag-5'>MAX30102</b>脉搏<b class='flag-5'>血</b><b class='flag-5'>氧</b>仪和<b class='flag-5'>心率</b>监测模块的中文数据手册免费下载

    高灵敏度脉搏仪和心率传感器max30102说明书

    高灵敏度脉搏仪和心率传感器max30102说明书
    发表于 11-16 17:05 74次下载

    DFRobot心率传感器有哪些,心率传感器的原理

    DFRobot Gravity: MAX30102 心率传感器模块搭载了美信(maxim)的MAX30102
    的头像 发表于 02-22 16:27 5494次阅读
    DFRobot<b class='flag-5'>心率</b><b class='flag-5'>血</b><b class='flag-5'>氧</b>传感器有哪些,<b class='flag-5'>心率</b><b class='flag-5'>血</b><b class='flag-5'>氧</b>传感器的原理

    基于MAX30102模块的心率测量仪

    项目采用MAX30102心率监视模块、Arduino UNO、OLED显示器和蜂鸣器,搭建了一个简单的
    发表于 04-11 10:44 4763次阅读
    基于<b class='flag-5'>MAX30102</b>模块的<b class='flag-5'>心率</b>测量仪