MAX30102采集心率數據


一個100行的代碼調試都可能會讓程序員遇到很多挫折,所以,面對挫折,我們永遠不能低頭。

關於MAX30102驅動配置程序,網上搜索博客有一堆資料,c/c++寫的驅動代碼都有,

可參考博客:

MAX30102 血氧調試筆記

以及官方數據手冊

軟件流程:

*  中斷向量初始化

*  串口初始化

*  定時器初始化

*  IIC初始化

*  max30102初始化

*  循環讀取max30102數據寄存器的值

*  每隔10s計算一次心率值

基本的單片機配置不用多說,不會的可以區正點原子官網下載例程好好學一學

正點原子資料鏈接

stm32系列基本上都是庫函數,非常適合新手上手

我這里使用的是stm32f405單片機

單片機調試會出現很多莫名其妙的bug,有軟件產生的,有硬件產生的,要學會逐個問題的分析排查

調試max30102尤其要注意的點;

*  搞清楚測心率是紅燈還是紅外,官方英文手冊有寫:紅燈是心率模式,紅燈+紅外是血氧模式

*  一定要保證IIC配置正確,這樣才能讀到數據

*  一定要注意max30102的采樣頻率,采樣頻率的設置直接關系到心率計算的准確度

*  根據采樣頻率如設置100hz,說明每10ms采樣一個數據,那么就可以采用定時器每定時10ms設置標志位,然后再在應用程序里判斷標志位從而把數據讀出來

*  讀取數據可采用fifo模式,需看懂官方手冊,如何利用fifo讀取數據以及每個數據是如何組成的,如心率模式下,讀FIFO是六個字節,前后三個字節都是紅燈數據 

*  10s即可讀到1000個數據,利用此1000個數據即可計算心率值

硬件准備就緒,軟件驅動配置正確的情況下,將手指頭貼在max30102上面靜止不動,采集數據如下:

112539
112514
112534
112523
112548
112631
112578
112663
112591
112636
112669
112644
112436
112386
112262
112296
112183
112234
112138
112155
112143
112205
112162
112158
112178 

 采集到數據后需要對數據進行預處理,再經過心率提取算法,計算出心率值,可先離線分析,再將代碼實現在單片機上。

數據預處理部分基本上包含如下:

*  環境光處理(硬件處理)

*  去除運動偽影

*  三軸加速度數據估計噪聲(運動下配合維納濾波器,可搜索相關論文

*  維納濾波衰減噪聲(適合運動下測量)

*  巴特沃茲去低頻噪聲

*  rolling去除基線漂移,只能線性補償,非線性待測試解決

*  均值濾波->滑動平均使波形更平滑

python實現效果如下:

 

經過和華為watch測試對比,靜止情況下,誤差在1%之內

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM