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);
}
-
傳感器
+關注
關注
2551文章
51089瀏覽量
753475 -
物聯網
+關注
關注
2909文章
44631瀏覽量
373249 -
STM32
+關注
關注
2270文章
10900瀏覽量
355927 -
開發板
+關注
關注
25文章
5048瀏覽量
97442 -
血氧計
+關注
關注
0文章
5瀏覽量
7669
發布評論請先 登錄
相關推薦
評論