MAX30100是能夠讀取心率、血氧的傳感器,通信方式是通過IIC進行通信。
其工作原理是通過紅外led燈照射,能夠得到心率的ADC值。
圖為MAX30100的寄存器。
可以分為五類,狀態寄存器、FIFO、控制寄存器、溫度寄存器、ID寄存器。
溫度寄存器是讀取芯片的溫度值,以矯正因為溫度而產生的偏差。
ID寄存器是讀取芯片的ID號。
重點在於另外三類寄存器。
STATUS寄存器
其中,STATUS寄存器有兩個,一個是中斷狀態寄存器,一個是中斷使能寄存器。
例如,當你使能了心率中斷,當心率轉換結束時,其狀態位就會置1。
FIFO寄存器
數據存儲在FIFO_DATA寄存器,我們主要去讀取他就可以了。其余三個是溢出次數以及讀寫指針。
DATA存的數據是每次讀到的ADC值。每一次會讀四次,依次是IR的高低數據、RED的高低數據。
Configured寄存器
Mode寄存器中 SHDN是低功耗控制位、RESET是復位、TEMP_EN是溫度檢測使能,MODE是模式選擇。
SPO2設置寄存器 主要是設置血氧濃度相關的參數的,以及LED_PW的功率。
LED寄存器是設置兩顆燈的脈沖時間。
程序編寫
首先要對max30100進行初始化配置。
max30100_write(0x06,0x0B); //設置模式 max30100_write(0x01,0xF0); //開啟中斷 max30100_write(0x09,0x33); //LED設置 max30100_write(0x07,0x43); max30100_write(0x02,0x00); // set FIFO write Pointer reg = 0x00 for clear it max30100_write(0x03,0x00); // set Over Flow Counter reg = 0x00 for clear it max30100_write(0x04,0x00); // set FIFO Read Pointer reg = 0x00 for clear it
然后在循環里讀取max30100的中斷狀態寄存器,查詢心率中斷是否置位
init_flag=max30100_read(max_reg_init_stat_add);
if(init_flag==0x20) { max30100_buff_read(buf); max30100_write(0x02, 0x00); //set FIFO write Pointer reg = 0x00 for clear it max30100_write(0x03, 0x00); //set Over Flow Counter reg = 0x00 for clear it max30100_write(0x04, 0x00); //set FIFO Read Pointer reg = 0x00 for clear it ir_value=buf[0]*256+buf[1]; red_value=buf[2]*256+buf[3];
}
既可以得到心率的ADC值。
再通過相關算法(如檢測其峰值間隔時間)既可以得出心率