1.概述
MAX30102是一種集成的脈搏血氧計心率監(jiān)測模塊。它包括內(nèi)部LED,光電探測器、光學(xué)元件和低噪聲電子器件具有環(huán)境光抑制。MAX30102提供簡化設(shè)計過程的完整系統(tǒng)解決方案用于移動和可穿戴設(shè)備。
MAX30102在單個1.8V電源上運行以及用于內(nèi)部LED的單獨3.3V電源。通信通過標(biāo)準(zhǔn)I2C兼容。
MAX30102的SpO2(經(jīng)皮動脈血氧飽和度)子系統(tǒng)包含環(huán)境光消除(ALC),連續(xù)時間∑-ΔADC和專有的離散時間濾波器。ALC有內(nèi)部跟蹤/保持電路,用于消除環(huán)境光,以及增加有效動態(tài)范圍。SpO2 ADC具有可編程滿量程范圍從2μA到16μA。這個ALC可抵消高達(dá)200μA的環(huán)境電流。內(nèi)部ADC是連續(xù)時間過采樣∑-Δ轉(zhuǎn)換器,分辨率為18位。ADC采樣率為10.24MHz。ADC輸出數(shù)據(jù)速率可以從50sps(每秒采樣)編程到3200sps。
MAX30102具有片上溫度傳感器,用于校準(zhǔn)SpO2子系統(tǒng)的溫度依賴性。溫度傳感器的固有分辨率為0.0625°C。設(shè)備輸出數(shù)據(jù)對IR LED的波長相對不敏感,其中紅色LED的波長對于正確解釋數(shù)據(jù)至關(guān)重要。與MAX30102輸出信號一起使用的SpO2算法可以補償與環(huán)境溫度變化相關(guān)的SpO2誤差。
MAX30102模塊集成了紅色和紅外LED驅(qū)動器,以調(diào)制用于SpO2和HR測量的LED脈沖。使用適當(dāng)?shù)碾娫措妷?,LED電流可以從0編程到50mA。LED脈沖寬度可從69μs編程到411μs,以允許算法根據(jù)使用情況優(yōu)化SpO2和HR精度和功耗。
應(yīng)用
- 可穿戴設(shè)備
- 健身輔助設(shè)備
- 智能手機(jī)
引腳 |
說明 |
MAX30102_INT |
PC9信號檢測腳 |
MAX30102_SDA |
PC7 I2C數(shù)據(jù)線 |
MAX30102_SCL |
PC8 I2C時鐘線 |
2.通訊協(xié)議
本模塊采用I2C通訊方式,具有I2C/SMBus兼容的2線制由串行數(shù)據(jù)線(SDA)和串行時鐘線(SCL),時鐘速率高達(dá)400kHz。
- 設(shè)備地址:
- I2C接口時序:
2.1 起始信號和停止信號
- 起始信號:時鐘為高電平時,數(shù)據(jù)由高電平變?yōu)榈碗娖健?/li>
//產(chǎn)生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總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù)
}
- 停止信號:時鐘線為高電平時,數(shù)據(jù)線由低變高。
//產(chǎn)生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);//發(fā)送I2C總線結(jié)束信號
Delay_Us(4);
}
2.2 發(fā)送數(shù)據(jù)和發(fā)送應(yīng)答
時鐘線為低電平時發(fā)送數(shù)據(jù)。應(yīng)答信號本身就是一位數(shù)據(jù)。
//產(chǎn)生ACK應(yīng)答
void IIC_Ack(void)
{
IIC_SCL(0);
SDA_OUT();
IIC_SDA(0);
Delay_Us(2);
IIC_SCL(1);
Delay_Us(2);
IIC_SCL(0);
}
//不產(chǎn)生ACK應(yīng)答
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發(fā)送一個字節(jié)
void IIC_Send_Byte(u8 txd)
{
u8 t;
SDA_OUT();
IIC_SCL(0);//拉低時鐘開始數(shù)據(jù)傳輸
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 讀取數(shù)據(jù)和讀取應(yīng)答
時鐘線為高時讀取數(shù)據(jù)。應(yīng)答信號本身就是一位數(shù)據(jù)。
//等待應(yīng)答信號到來
//返回值:1,接收應(yīng)答失敗
// 0,接收應(yīng)答成功
u8 IIC_Wait_Ack(void)
{
u8 ucErrTime=0;
SDA_IN(); //SDA設(shè)置為輸入
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個字節(jié),ack=1時,發(fā)送ACK,ack=0,發(fā)送nACK
u8 IIC_Read_Byte(unsigned char ack)
{
unsigned char i,receive=0;
SDA_IN();//SDA設(shè)置為輸入
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();//發(fā)送nACK
else
IIC_Ack(); //發(fā)送ACK
return receive;
}
2.4 數(shù)據(jù)讀寫
void IIC_Read_One_Byte(u8 daddr,u8 addr,u8* data)
{
IIC_Start();
IIC_Send_Byte(daddr); //發(fā)送寫命令
IIC_Wait_Ack();
IIC_Send_Byte(addr);//發(fā)送地址
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(daddr|0X01);//進(jìn)入接收模式
IIC_Wait_Ack();
*data = IIC_Read_Byte(0);
IIC_Stop();//產(chǎn)生一個停止條件
}
void IIC_Write_One_Byte(u8 daddr,u8 addr,u8 data)
{
IIC_Start();
IIC_Send_Byte(daddr); //發(fā)送寫命令
IIC_Wait_Ack();
IIC_Send_Byte(addr);//發(fā)送地址
IIC_Wait_Ack();
IIC_Send_Byte(data); //發(fā)送字節(jié)
IIC_Wait_Ack();
IIC_Stop();//產(chǎn)生一個停止條件
HAL_Delay(10);
}
-
傳感器
+關(guān)注
關(guān)注
2550文章
51035瀏覽量
753049 -
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2909文章
44557瀏覽量
372745 -
STM32
+關(guān)注
關(guān)注
2270文章
10895瀏覽量
355713 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5032瀏覽量
97371 -
血氧計
+關(guān)注
關(guān)注
0文章
5瀏覽量
7666
發(fā)布評論請先 登錄
相關(guān)推薦
評論