0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

血氧飽和度傳感器MAX30102模塊的原理及參數(shù)

CHANBAEK ? 來源:CSDN-_會飛_的魚 ? 作者:CSDN-_會飛_的魚 ? 2023-03-07 14:51 ? 次閱讀

一. 簡介

MAX30102是一個集成的脈搏血氧儀和心率監(jiān)測儀生物傳感器的模塊(芯片)。 它集成了一個660nm紅光LED、880nm紅外光LED、光電檢測器、光器件,以及帶環(huán)境光抑制的低噪聲電子電路。 可通過軟件關(guān)斷模塊,待機電流為零,實現(xiàn)電源始終維持供電狀態(tài),可運用于低功耗產(chǎn)品中。

MAX30102采用一個1.8V電源和一個獨立的3.3V用于內(nèi)部LED的電源,標準的I2C兼容的通信接口。 市面很多都將MAX30102芯片集成在一個PCB模塊上,內(nèi)部增加一個1.8V和3.3V LDO穩(wěn)壓電路,可對模塊單獨供5.0V電源,方便開發(fā)者進行開發(fā)。

二. MAX30102原理及參數(shù)

1. 芯片內(nèi)部框圖

截圖20230301181839.png

從框圖看,芯片可分為兩部分,一部分為模擬信號采集電路,通過RED和IR燈發(fā)出特定波長的光,采集人體反射回來的光,經(jīng)過PD管將光信號轉(zhuǎn)化為電信號,最終通過18bit ADC轉(zhuǎn)換器轉(zhuǎn)化為數(shù)字信號。

第二部分為數(shù)字處理電路,將ADC轉(zhuǎn)換出來的原始數(shù)據(jù)進行濾波處理后放置于緩沖區(qū)內(nèi); 單片機通過IIC接口讀寫芯片內(nèi)部寄存器,讀取出相應的數(shù)據(jù);

2. 模塊電路

截圖20230301181839.png

芯片內(nèi)部有3.3V-5.0V的LED電源和1.8V的邏輯電源,所以模塊帶有兩路穩(wěn)壓電路,將5V電源分別轉(zhuǎn)化為3.3V和1.8V;由于LED驅(qū)動電源的供電范圍為3.3V-5.0V,3.3V穩(wěn)壓電路可省去。

由于MAX30102的邏輯電路的IIC通信電平為1.8V,這與我們常用的51單片機STM32單片機的引腳電平不匹配。

這里有個解決方法,因為MAX30102的SDA、SCL、INT引腳為開漏,

截圖20230301181839.png

可以將模塊上的R1、R2、R3電阻去掉,對于51單片機來說,在SDA、SCL、INT引腳上分別加一個4.7-10k電阻上拉至5V;對于STM32單片機,只需要將相應的控制引腳配置為上拉模式即可。

模塊只需要接上5V電源,SDA、SCL、INT引腳與單片機連接即可; IRD、RD一般不接,以STM32單片機接線為例(單片機采用模擬IIC的控制方式),如圖:

截圖20230301181839.png

三. MAX30102編程

MAX30102內(nèi)部集成了一整套完整信號采集電路,包括光信號發(fā)射及接收、AD轉(zhuǎn)換、環(huán)境光干擾消除及數(shù)字濾波部分,只將數(shù)字接口留給用戶。 用戶只需通過單片機的IIC接口(可用模擬IIC),對MAX30102內(nèi)部的寄存器進行讀寫操作,就可以得到轉(zhuǎn)換后的光強度數(shù)值。 最后需要通過相應的處理算法計算出心率值和血氧飽和度。

對于MAX30102的驅(qū)動程序,將其拆分出來,可分為標準IIC程序和MAX30102寄存器的讀寫操作,實現(xiàn)這兩部分的編程,便完成MAX30102的驅(qū)動; 由于IIC程序比較常用,這里就不例舉出來。 在完成IIC的通信程序后,實現(xiàn)以下程序;

(1)MAX30102寫寄存器函數(shù)

u8 max30102_Bus_Write(u8 Register_Address, u8 Word_Data)
{
  /* 采用串行EEPROM隨即讀取指令序列,連續(xù)讀取若干字節(jié) */
  /* 第1步:發(fā)起I2C總線啟動信號 */
  i2c_Start();
  /* 第2步:發(fā)起控制字節(jié),高7bit是地址,bit0是讀寫控制位,0表示寫,1表示讀 */
  i2c_SendByte(max30102_WR_address | I2C_WR);/* 此處是寫指令 */
  /* 第3步:發(fā)送ACK */
  if (i2c_WaitAck() != 0)
  {
    goto cmd_fail;/* EEPROM器件無應答 */
  }
/* 第4步:發(fā)送字節(jié)地址 */
  i2c_SendByte(Register_Address);
  if (i2c_WaitAck() != 0)
  {
    goto cmd_fail;/* EEPROM器件無應答 */
  }
/* 第5步:開始寫入數(shù)據(jù) */
  i2c_SendByte(Word_Data);
/* 第6步:發(fā)送ACK */
  if (i2c_WaitAck() != 0)
  {
    goto cmd_fail;/* EEPROM器件無應答 */
  }
/* 發(fā)送I2C總線停止信號 */
  i2c_Stop();
  return 1;/* 執(zhí)行成功 */
   cmd_fail: /* 命令執(zhí)行失敗后,切記發(fā)送停止信號,避免影響I2C總線上其他設備 */
/* 發(fā)送I2C總線停止信號 */
  i2c_Stop();
  return 0;
}

(2)MAX30102讀寄存器函數(shù)

u8 max30102_Bus_Read(u8 Register_Address)
{
  u8  data;
/* 第1步:發(fā)起I2C總線啟動信號 */
  i2c_Start();
/* 第2步:發(fā)起控制字節(jié),高7bit是地址,bit0是讀寫控制位,0表示寫,1表示讀 */
  i2c_SendByte(max30102_WR_address | I2C_WR);/* 此處是寫指令 */
/* 第3步:發(fā)送ACK */
  if (i2c_WaitAck() != 0)
  {
    goto cmd_fail;/* EEPROM器件無應答 */
  }
/* 第4步:發(fā)送字節(jié)地址, */
  i2c_SendByte((uint8_t)Register_Address);
  if (i2c_WaitAck() != 0)
  {
    goto cmd_fail;/* EEPROM器件無應答 */
  }
/* 第6步:重新啟動I2C總線。下面開始讀取數(shù)據(jù) */
  i2c_Start();
/* 第7步:發(fā)起控制字節(jié),高7bit是地址,bit0是讀寫控制位,0表示寫,1表示讀 */
  i2c_SendByte(max30102_WR_address | I2C_RD);/* 此處是讀指令 */
/* 第8步:發(fā)送ACK */
  if (i2c_WaitAck() != 0)
  {
    goto cmd_fail;/* EEPROM器件無應答 */
  }
/* 第9步:讀取數(shù)據(jù) */
  {
    data = i2c_ReadByte();/* 讀1個字節(jié) */
    i2c_NAck();/* 最后1個字節(jié)讀完后,CPU產(chǎn)生NACK信號(驅(qū)動SDA = 1) */
  }
/* 發(fā)送I2C總線停止信號 */
  i2c_Stop();
  return data;/* 執(zhí)行成功 返回data值 */
  cmd_fail: /* 命令執(zhí)行失敗后,切記發(fā)送停止信號,避免影響I2C總線上其他設備 */
/* 發(fā)送I2C總線停止信號 */
  i2c_Stop();
  return 0;
}

(3)MAX30102讀緩沖器FIFO

void max30102_FIFO_Read(u8 Register_Address,u16  Word_Data[][2],u8 count)
{
  u8 i=0;
  u8 no = count;
  u8 data1, data2;
/* 第1步:發(fā)起I2C總線啟動信號 */
  i2c_Start();
/* 第2步:發(fā)起控制字節(jié),高7bit是地址,bit0是讀寫控制位,0表示寫,1表示讀 */
  i2c_SendByte(max30102_WR_address | I2C_WR);/* 此處是寫指令 */
/* 第3步:發(fā)送ACK */
  if (i2c_WaitAck() != 0)
  {
    goto cmd_fail;/* EEPROM器件無應答 */
  }
/* 第4步:發(fā)送字節(jié)地址, */
  i2c_SendByte((uint8_t)Register_Address);
  if (i2c_WaitAck() != 0)
  {
    goto cmd_fail;/* EEPROM器件無應答 */
  }
/* 第6步:重新啟動I2C總線。下面開始讀取數(shù)據(jù) */
  i2c_Start();
/* 第7步:發(fā)起控制字節(jié),高7bit是地址,bit0是讀寫控制位,0表示寫,1表示讀 */
  i2c_SendByte(max30102_WR_address | I2C_RD);/* 此處是讀指令 */
/* 第8步:發(fā)送ACK */
  if (i2c_WaitAck() != 0)
  {
    goto cmd_fail;/* EEPROM器件無應答 */
  }
/* 第9步:讀取數(shù)據(jù) */
  while (no)
  {  
    data1 = i2c_ReadByte();
    i2c_Ack();
    data2 = i2c_ReadByte();
    i2c_Ack();
    Word_Data[i][0] = (((u16)data1 << 8) | data2);  //
    data1 = i2c_ReadByte();
    i2c_Ack();
    data2 = i2c_ReadByte();
    if(1==no)
      i2c_NAck();/* 最后1個字節(jié)讀完后,CPU產(chǎn)生NACK信號(驅(qū)動SDA = 1) */
    else
      i2c_Ack();
     Word_Data[i][1] = (((u16)data1 << 8) | data2);
    no--;
    i++;
  }
/* 發(fā)送I2C總線停止信號 */
  i2c_Stop();
  cmd_fail: /* 命令執(zhí)行失敗后,切記發(fā)送停止信號,避免影響I2C總線上其他設備 */
/* 發(fā)送I2C總線停止信號 */
  i2c_Stop();
}

(4)MAX30102初始化(可根據(jù)自己的實際情況更改相應的配置)

void max30102_init()
{
  max30102_Bus_Write(0x09, 0x0b);  //mode configuration : temp_en[3]      MODE[2:0]=010 HR only enabled    011 SP02 enabled
  max30102_Bus_Write(0x01, 0xF0); //open all of interrupt
  max30102_Bus_Write(INTERRUPT_REG, 0x00); //all interrupt clear
  max30102_Bus_Write(0x03, 0x02); //DIE_TEMP_RDY_EN
  max30102_Bus_Write(0x21, 0x01); //SET   TEMP_EN
  max30102_Bus_Write(0x0a, 0x47); //SPO2_SR[4:2]=001  100 per second    LED_PW[1:0]=11  16BITS
  max30102_Bus_Write(0x0c, 0x47);
  max30102_Bus_Write(0x0d, 0x47);
}

(5)數(shù)據(jù)采集

此程序只演示讀取出溫度,讀取血氧數(shù)據(jù)需要通過max30102_FIFO_Read函數(shù)讀出;

int main(void)
{
  u8 temp_num=0;
  main_init();
  max30102_init();
  printf("\\r\\n MAX30102  init  \\r\\n");
  while(1)
  {
    delay_ms(1000);            
    max30102_init();
    temp_num = max30102_Bus_Read(0x1f);
    printf("當前溫度 = %d\\r\\n",temp_num);
  }
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2551

    文章

    51097

    瀏覽量

    753526
  • 芯片
    +關(guān)注

    關(guān)注

    455

    文章

    50812

    瀏覽量

    423574
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2706

    瀏覽量

    47468
  • pcb
    pcb
    +關(guān)注

    關(guān)注

    4319

    文章

    23099

    瀏覽量

    397846
  • MAX30102
    +關(guān)注

    關(guān)注

    4

    文章

    13

    瀏覽量

    2602
收藏 人收藏

    評論

    相關(guān)推薦

    MAX30102心律脈搏傳感器的原理及使用說明

    MAX30102 是一個集成的脈搏儀和心率監(jiān)測儀生物傳感器模塊。它集成了一個紅光 LED和一個紅外光 LED、光電檢測
    發(fā)表于 10-18 11:03 ?3.2w次閱讀

    利用CMOS影像傳感器飽和度監(jiān)測系統(tǒng)

    利用CMOS影像傳感器飽和度監(jiān)測系統(tǒng)動脈飽和度
    發(fā)表于 11-30 10:55

    max30102、心率傳感器

    請問有人用過max30102傳感器么? 手冊里面有個Proximity Function 功能。大概意思就是 設置完
    發(fā)表于 07-24 15:42

    MAX30102 濃度+心率傳感器

    淘寶上雖然都賣MAX30102傳感器模塊,但是帶的資料里面都沒有相關(guān)程序。下面是STM32F103的使用程序,大家參考下
    發(fā)表于 07-28 18:24

    MAX30102脈搏模塊AT指令串口輸出

    `MAX30102脈搏模塊AT指令串口輸出芯片說明MAX30102是一個集成的脈搏
    發(fā)表于 03-10 17:14

    MAX30102模塊的原理及編程 精選資料分享

    一.簡介MAX30102是一個集成的脈搏儀和心率監(jiān)測儀生物傳感器模塊(芯片)。它集成了一個660nm紅光LED、880nm紅外光LED
    發(fā)表于 07-19 09:15

    STM32是如何去MAX30102心率傳感器

    STM32F103單片機通過IIC控制MAX30102心率傳感器MAX30102的VCC引腳連接STM32F103mini單片機的5伏引
    發(fā)表于 08-19 08:33

    基于MAX30100/MAX30102傳感器設計的和心率檢測相關(guān)資料分享

    基于美信MAX30100/MAX30102傳感器設計的和心率檢測,以單片機STM32F103CBT6為主控核心,其中涉及電源
    發(fā)表于 11-10 07:27

    心率MAX30102模塊資料分享

    心率MAX30102模塊資料話不多說,
    發(fā)表于 01-07 08:02

    基于MAX30102的心率傳感器設計

    最近的一個項目需要用到一款心率傳感器,選型選擇了MAX30102,可以在ArduinoIDE中搜到MAX3010X庫,包含了簡單讀取、心
    發(fā)表于 01-13 06:24

    MAX30102模塊的原理及編程

    一.簡介MAX30102是一個集成的脈搏儀和心率監(jiān)測儀生物傳感器模塊(芯片)。它集成了一個660nm紅光LED、880nm紅外光LED
    發(fā)表于 11-11 15:51 ?93次下載
    <b class='flag-5'>MAX30102</b><b class='flag-5'>血</b><b class='flag-5'>氧</b><b class='flag-5'>模塊</b>的原理及編程

    高靈敏脈搏儀和心率傳感器max30102說明書

    高靈敏脈搏儀和心率傳感器max30102說明書
    發(fā)表于 11-16 17:05 ?74次下載

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

    DFRobot Gravity: MAX30102 心率傳感器模塊搭載了美信(maxim)的MAX3
    的頭像 發(fā)表于 02-22 16:27 ?5599次閱讀
    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 是一個集成的脈搏儀和心率監(jiān)測儀生物傳感器模塊。它集成了一個紅光 LED和一個紅外光 LED、光電檢測
    的頭像 發(fā)表于 11-16 16:18 ?6929次閱讀

    max30100和max30102的區(qū)別

    30100和MAX30102都是用于非侵入性測量的傳感器,可以通過脈搏波檢測和光電測量來監(jiān)測心率和飽和度。它們采用的技術(shù)原理是脈搏
    的頭像 發(fā)表于 12-28 16:54 ?5368次閱讀