




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
任務(wù)1心率血氧采集功能設(shè)計(jì)與開(kāi)發(fā)成都職業(yè)技術(shù)學(xué)院成都卓物科技有限公司任務(wù)情報(bào)本次任務(wù)使用MAX30102是一個(gè)典型的心率血氧傳感器芯片,由美信(Maxim)公司生產(chǎn)。該傳感器搭載在可穿戴系統(tǒng)應(yīng)用板卡ZW-M607中。如圖所示,MAX30102一共有8個(gè)引腳,利用I2C總線進(jìn)行通信,SDA為PC07,SCL為PC08,該模塊使用簡(jiǎn)單的兩線I2C接口與微控制器進(jìn)行通信。它有一個(gè)固定的I2C地址:0xAE(用于寫操作)和0xAF(用于讀操作)。MAX30102嵌入了一個(gè)用于存儲(chǔ)數(shù)據(jù)樣本的FIFO緩沖器。FIFO具有32個(gè)樣本存儲(chǔ)庫(kù),這意味著它可以容納多達(dá)32個(gè)SpO2和心率樣本。FIFO緩沖區(qū)可以減輕微控制器從傳感器讀取每個(gè)新數(shù)據(jù)樣本的負(fù)擔(dān),從而節(jié)省系統(tǒng)功耗。MAX30102FIFO的深度為32,每個(gè)buf是6個(gè)字節(jié)(兩通道數(shù)據(jù),每通道3字節(jié))。我么可以開(kāi)啟PPG_RDY_EN,這樣就能每來(lái)一個(gè)新的數(shù)據(jù),就會(huì)中斷一次通知我們?nèi)ト?shù)據(jù)。讀FIFO_DATA就會(huì)自動(dòng)清掉中斷標(biāo)志位。FIFO相關(guān)的寄存器有4個(gè)。如圖所示,雖然是顯示均可讀寫(R/W),但是實(shí)際上只有FIFOReadPointer可以寫(應(yīng)用在讀數(shù)據(jù)出錯(cuò),往回重讀一次的情況)。其他FIFO寄存器均為只讀。FIFOWritePointer:好理解,就是寫指針寄存器。保存下一個(gè)新數(shù)據(jù)在FIFO中的寫地址。每次來(lái)一個(gè)數(shù)據(jù),這個(gè)寫指針會(huì)自動(dòng)移動(dòng)一位。OverFlowCounter:如果32個(gè)FIFO深度滿了,就會(huì)在這里增加1,表示溢出。FIFOReadPointer:FIFO讀指針,始終指向下一個(gè)待讀取的FIFO地址。如果數(shù)據(jù)讀取后,讀地址也會(huì)自動(dòng)增加。FIFODataRegister:可以簡(jiǎn)單的理解為*FIFO_RD_PTR,始終指向下一個(gè)數(shù)據(jù)。心率血氧庫(kù)函數(shù)說(shuō)明打開(kāi)MAX30102.h文件,定義了心率血氧傳感器使用的I2C單元、時(shí)鐘和超時(shí)時(shí)間。/*I2Cunitdefine*/#defineMAX30102_I2C_UNIT(CM_I2C3)#defineMAX30102_I2C_FCG(FCG1_PERIPH_I2C3)#defineMAX30102_I2C_TIMEOUT(0xFFFFU)定義了心率血氧傳感器I2C地址和長(zhǎng)度。//MAX30102IIC器件地址#define MAX30102_IIC_ADDR (0x57)//地址長(zhǎng)度#defineMAX30102_ADDR_LEN(1)定義了心率血氧傳感器中斷引腳PC06。//MAX30102中斷引腳#defineMAX30102_INT_PORT(GPIO_PORT_C)#defineMAX30102_INT_PIN(GPIO_PIN_06)相應(yīng)的I2C引腳定義在BSP_I2C.h文件中,對(duì)應(yīng)修改I2C3的引腳SCL為PC08,SDA為PC07。/*DefineI2C3portandpinforSDAandSCL*/#defineI2C3_SCL_PORT(GPIO_PORT_C)#defineI2C3_SCL_PIN(GPIO_PIN_08)#defineI2C3_SDA_PORT(GPIO_PORT_C)#defineI2C3_SDA_PIN(GPIO_PIN_07)#defineBSP_I2C3_BAUDRATE(100000)心率血氧傳感器初始化打開(kāi)MAX30102.c文件,找到maxim_max30102_init()函數(shù)為心率血氧傳感器初始化函數(shù),在該函數(shù)初始化之前,需要初始化I2C3,否則此函數(shù)初始化不成功,在maxim_max30102_init()函數(shù)里首先初始化INT引腳,設(shè)置為輸入模式,開(kāi)啟引腳上拉電阻。stc_gpio_init_tstcGpioInit;(void)GPIO_StructInit(&stcGpioInit);stcGpioInit.u16PinDir=PIN_DIR_IN;//設(shè)置輸入模式stcGpioInit.u16PullUp=PIN_PU_ON;//開(kāi)啟上拉電阻(void)GPIO_Init(MAX30102_INT_PORT,MAX30102_INT_PIN,&stcGpioInit);復(fù)位心率血氧傳感器。maxim_max30102_reset();//resetstheMAX30102配置心率血氧傳感器相應(yīng)參數(shù),這些參數(shù)是根據(jù)官方代碼移植過(guò)來(lái)的,配置的代碼過(guò)長(zhǎng)此處省略。
if(!maxim_max30102_write_reg(REG_INTR_ENABLE_1,0xc0))//INTRsettingreturnFALSE;if(!maxim_max30102_write_reg(REG_INTR_ENABLE_2,0x00))returnFALSE;………………if(!maxim_max30102_write_reg(REG_PILOT_PA,0x7f))//Choosevaluefor~25mAforPilotLEDreturnFALSE;returnTRUE;主要配置了這些參數(shù):中斷使能FIFO指針SpO2配置LED電源設(shè)置采樣率在main函數(shù)里先初始化I2C總線,然后初始化maxim_max30102_init()函數(shù),串口初始化是為了后面打印心率和血氧數(shù)據(jù)。
/*MCUPeripheralregisterswriteunprotected*/LL_PERIPH_WE(LL_PERIPH_ALL);//解除MCU寄存器寫保護(hù)
BSP_CLK_Init();//時(shí)鐘初始化
TMR0_USART_Config();//串口接收超時(shí)定時(shí)器初始化
USART1_Init(57600);//串口1初始化
BSP_I2C3_Init();maxim_max30102_init();//心率血氧初始化
/*MCUPeripheralregisterswriteprotected*/LL_PERIPH_WP(LL_PERIPH_ALL);//MCU寄存器寫保護(hù)然后在主循環(huán)里延時(shí)50毫秒一直讀取心率血氧數(shù)據(jù)。
DDL_DelayMS(50);max30102Test();//心率血氧讀取溫濕度數(shù)據(jù)測(cè)試打開(kāi)MAX30102.c文件,定義了關(guān)于采集心率和血氧的一些參數(shù),該參數(shù)有很多,可針對(duì)代碼慢慢理解。#defineCALCULATE_TIMES4//有效值運(yùn)算次數(shù)#definePPG_DATA_THRESHOLD100000//檢測(cè)閾值#definen_ir_buffer_length500//定義血氧和心率數(shù)據(jù)長(zhǎng)度/*IRLEDsensordata紅外數(shù)據(jù),用于計(jì)算血氧*/uint32_taun_ir_buffer[n_ir_buffer_length];/*RedLEDsensordata紅光數(shù)據(jù),用于計(jì)算心率曲線以及計(jì)算心率*/uint32_taun_red_buffer[n_ir_buffer_length];int32_tn_sp02;//血氧數(shù)據(jù)int8_tch_spo2_valid;//血氧原始數(shù)據(jù)int32_tn_heart_rate;//心率數(shù)據(jù)int8_tch_hr_valid;//心率原始數(shù)據(jù)uint8_tfinger_touch_flag=0; //采集標(biāo)志位staticuint8_tcalculate_times=0;int32_tn_heart_rate_array[CALCULATE_TIMES]={0};//心率原始數(shù)據(jù)數(shù)組int32_tn_sp02_array[CALCULATE_TIMES]={0};//血氧原始數(shù)據(jù)數(shù)組看到max30102Test()函數(shù),首先需要在心率血氧傳感器INT引腳低電平時(shí)讀取數(shù)據(jù)。if(GPIO_ReadInputPins(MAX30102_INT_PORT,MAX30102_INT_PIN)==0)將500個(gè)樣例心率和血氧數(shù)據(jù),移除100個(gè)樣例,留下400個(gè)樣例。
for(uint16_ti=100;i<n_ir_buffer_length;i++){aun_red_buffer[i-100]=aun_red_buffer[i];aun_ir_buffer[i-100]=aun_ir_buffer[i];}然后開(kāi)始采集100個(gè)樣例心率和血氧數(shù)據(jù),在INT引腳低電平時(shí)采集數(shù)據(jù),一般情況下將手放在心率血氧傳感器上,才會(huì)把finger_touch_flag標(biāo)志位置1,采集到的數(shù)據(jù)此時(shí)有效。
//take100setsofsamplesbeforecalculatingtheheartrate.for(uint16_ti=(n_ir_buffer_length-100);i<n_ir_buffer_length;i++){while(GPIO_ReadInputPins(MAX30102_INT_PORT,MAX30102_INT_PIN)==1);//waituntiltheinterruptpinassertsmaxim_max30102_read_fifo((aun_red_buffer+i),(aun_ir_buffer+i));if((aun_red_buffer[i]>PPG_DATA_THRESHOLD)&&(aun_ir_buffer[i]>PPG_DATA_THRESHOLD))finger_touch_flag=1;//置標(biāo)志位}當(dāng)采集到的數(shù)據(jù)有效時(shí),記錄有效值次數(shù),并把采集的有效數(shù)據(jù)存入心率血氧數(shù)組中,同時(shí)將有效數(shù)據(jù)打印出來(lái)。
if(finger_touch_flag){finger_touch_flag=0;//記錄有效值次數(shù)
calculate_times++;n_heart_rate_array[calculate_times-1]=n_heart_rate;n_sp02_array[calculate_times-1]=n_sp02;printf("HR=%i,",n_heart_rate);printf("SpO2=%i,\r\n",n_sp02);當(dāng)記錄的有效值大于設(shè)定的值后,計(jì)算心率和血氧的平均值,此處代碼過(guò)長(zhǎng)省略,請(qǐng)?jiān)谠次募胁榭聪鄳?yīng)代碼。if(calculate_times>CALCULATE_TIMES){………………/*去頭尾計(jì)算均值*/
heart_rate_average=(n_heart_rate_sum-n_heart_rate_max– n_heart_rate_min)/(CALCULATE_TIMES-2);sp02_average=(n_sp02_sum-n_sp02_max-n_sp02_min)/ (CALCULATE_TIMES-2);printf("HR_average=%d,",heart_rate_average);printf("SpO2_average=%d,\r\n",sp02_average);calculate_times=0;}計(jì)算出的平均數(shù)據(jù),通過(guò)串口打印出來(lái)。任務(wù)實(shí)現(xiàn)第一步: 可穿戴系統(tǒng)應(yīng)用板卡(ZW-M607)使用12VDC電源供電,插入后按下電源開(kāi)關(guān)。第二步: 使用USB
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年詞匯英語(yǔ)中考試題及答案
- 古詩(shī)考試題型選擇及答案
- 2025年理論考查課考試題及答案
- 師大附小筆試題目及答案
- 化學(xué)與極地科學(xué)研究(極地環(huán)境)聯(lián)系試題
- 化學(xué)情景判斷題專項(xiàng)試題
- 古羅馬考試題目及答案
- 中國(guó)工商考試試題及答案
- 2025年高考物理“壓軸題解密”思路方法試題(一)
- 2025廣西科技大學(xué)招聘附屬醫(yī)院(臨床醫(yī)學(xué)院)領(lǐng)導(dǎo)干部3人考前自測(cè)高頻考點(diǎn)模擬試題及1套參考答案詳解
- 自考:【00107現(xiàn)代管理學(xué)】自考真題2018年4月、10月2套真題
- 組織學(xué)與胚胎學(xué)課件 組織與胚胎學(xué)筆記學(xué)習(xí)資料
- 《公路技術(shù)狀況評(píng)定》課件-任務(wù)六:公路技術(shù)狀況指數(shù)MQI
- Unit 3 Amazing animals Section A What pets do you know 說(shuō)課(教學(xué)設(shè)計(jì))-2024-2025學(xué)年人教PEP版(2024)英語(yǔ)三年級(jí)上冊(cè)
- 中級(jí)財(cái)務(wù)會(huì)計(jì)知到課后答案智慧樹(shù)章節(jié)測(cè)試答案2025年春云南財(cái)經(jīng)大學(xué)
- 2025青海省建筑安全員B證考試題庫(kù)及答案
- 現(xiàn)代紡織物清潔技術(shù)培訓(xùn)匯報(bào)教程
- 臨床檢驗(yàn)基礎(chǔ)知到智慧樹(shù)章節(jié)測(cè)試課后答案2024年秋上海健康醫(yī)學(xué)院
- 鑄牢中華民族共同體意識(shí)心得感悟7篇
- 《中國(guó)海洋大學(xué)》課件
- 神話故事民間故事《后羿射日》繪本課件
評(píng)論
0/150
提交評(píng)論