耳朵是僅次于手指尖,毛細(xì)血管次豐富的地方,相對(duì)于手腕而言,光學(xué)式測(cè)量方案,從耳機(jī)會(huì)更容易到得到高質(zhì)量的PPG信號(hào),更有利于更高精準(zhǔn)運(yùn)動(dòng)心率與血氧效果的測(cè)試。
本方案是基于原相的PAH8013ES +主控SMT32F411+ Gsensor LIS3DH, 實(shí)現(xiàn)在耳機(jī)環(huán)境下實(shí)現(xiàn)高精性實(shí)時(shí)運(yùn)動(dòng)心率與血氧的測(cè)試方案,提供從硬件、FW、結(jié)構(gòu)產(chǎn)品級(jí)應(yīng)用指導(dǎo)。原相PAH8013是針對(duì)耳機(jī)應(yīng)用方向的原相第二代光學(xué)PPG傳感器,相比第一代8003產(chǎn)品,除性能提供外,運(yùn)行功耗和待機(jī)功耗進(jìn)一步降低,同時(shí)改用IR光源不可見光源測(cè)量PPG信號(hào),改善第一代產(chǎn)品綠光方式會(huì)從耳朵背面看到綠光閃問題。PAH8013除測(cè)量運(yùn)動(dòng)心率外,還可以測(cè)量血氧飽和度。 血氧飽和度(SpO2)是血液中被氧結(jié)合的氧合血紅蛋白(HbO2)的容量占全部可結(jié)合的血紅蛋白(Hb)容量的百分比,即血液中血氧的濃度,它是呼吸循環(huán)的重要生理參數(shù)。PAH8013通過IR和紅光 兩種光源,通過檢測(cè)打入皮膚反射回的 IR和紅光的比例,通過算法算出相關(guān)的血氧值。
STM32F411 是Cortex?-M4內(nèi)核(具有浮點(diǎn)單元)的性能MCU,最高可工作在100 MHz主頻,芯片內(nèi)置高達(dá)256至512KB的Flash存儲(chǔ)器和高達(dá)128KB的SRAM,為算法及后續(xù)的應(yīng)用功能再擴(kuò)展提供充足的空間。另外STM32F411 具有封裝小,出色的低功耗性能,同時(shí)性價(jià)比高,更適用于對(duì)性能體積與價(jià)錢有需求的耳機(jī)產(chǎn)品。
硬件部分
PAH8013ES與STM32F411采用i2c方式的通信接口,并加上中斷狀態(tài)線INT和休眠控制線。其中8013的9腳與10腳接到SMT32F411的PB8和PA11的i2c接口連接腳,采用400HZ速率;8013的13腳中斷信號(hào)INT1與MCU PA10連接,8013的休眠控制線PD與MCU PA12連接,其中INT1用于中斷方式用于接到PPG數(shù)據(jù);PD腳用于在不使用PAH8013ES時(shí),通過MCU接高PD腳讓PAH8013進(jìn)入休眠省電狀態(tài)。
Gsensor Lis3dh采用SPI方式與STM32F411通信接口, Lis3dh的SPI接到STM32F411的PA15、PB4、PB4、PB5 的芯片腳上,通信速率1M,外加中斷通信線INT1和INT2,使用STM32F411的PA8、PA9。
板上的供電系統(tǒng)由一個(gè)3.3V和一個(gè)1.8V的LDO組成,給MCU、Gsensor及PAH8013ES提供所需的電壓,各器件的IO通信電平使用3.3V。
原理圖
主板部分
光學(xué)小板模組部分
PCB layout
軟件接口部分
心率與血氧的算法放在STM32F411上運(yùn)行,STM32F411每200ms從PAH8013讀取40筆PPG數(shù)據(jù)及從LIS3DH讀取約45筆左右 MENS,通過PPG數(shù)據(jù)與MENS數(shù)據(jù)運(yùn)算出心率與血氧值,而MENS數(shù)據(jù)負(fù)責(zé)對(duì)運(yùn)動(dòng)作狀態(tài)下的數(shù)據(jù)進(jìn)行精度補(bǔ)嘗。
在主函數(shù)調(diào)用demo_ppg_dri_HRD_SPO2();啟動(dòng)心率與血氧測(cè)試,約8~10秒算出第一個(gè)心率與血氧值,之后約每秒更新一次數(shù)值
心率與血氧的獲取接口如下:
pah8series_get_hr(&hr);------是獲取心率數(shù)據(jù)的接口,由于算法是算浮點(diǎn)數(shù),在數(shù)值顯示直接顯示整數(shù)部分
SpO2_GetSpO2(&mySpO2);---是獲取血氧數(shù)據(jù)的接口,輸出整數(shù),直接顯示整數(shù)百分比就可
PROTING簡(jiǎn)介
pah8series_config.h文件的修改
1.#define ENABLE_MEMS_ZERO 關(guān)掉
如果系統(tǒng)的Gsensor還沒有調(diào)好,可以先把此宏打開,先測(cè)試靜態(tài)心率。此時(shí)會(huì)送入全0的Gsensor給算法,
注意:Gsensor調(diào)好后,不論靜態(tài)動(dòng)態(tài),都需送入真實(shí)的Gsensor數(shù)據(jù)
2.設(shè)定Gensor量程,目前用的是-+8G量程,所以設(shè)定#define ALG_GSENSOR_MODE 4
3.根據(jù)所用的芯片型號(hào),Cover設(shè)計(jì)方式、IO通信方式,打開以下宏定義
//-------Sensor IC Type---------//
#define __PAH8013ES
//-------Cover Type---------//
#define _DI_COVER
//-------IO Interface---------//
#define _I2C
main.c修改
1.設(shè)定中斷回調(diào)函數(shù) gpio_in_interrupt_handler(GPIO_IN gpio)
2.送入正確的系統(tǒng)的tick時(shí)間,get_tick_count()-----單位為ms
pah_hrd_function.c修改
1.啟動(dòng)ppg數(shù)據(jù)采樣時(shí),同時(shí)啟動(dòng)Gsensor數(shù)據(jù)采樣,調(diào)用accelerometer_start();這樣可確保數(shù)據(jù)同步,
2.接收到的Gsensor數(shù)據(jù)送入指定的下面地方以便算法取得,accelerometer_get_fifo(&_state.pxialg_data.mems_data, &_state.pxialg_data.nf_mems);
3.進(jìn)入touch mode或離開心率模式,停止Gsensor數(shù)據(jù)采樣,調(diào)用accelerometer_stop();
關(guān)于同步說明,PPG第一筆數(shù)據(jù)要與Gsensor第一筆數(shù)據(jù)時(shí)間上對(duì)齊,這樣算法在插補(bǔ)后,每個(gè)ppg時(shí)間點(diǎn)才能與gsensor時(shí)間點(diǎn)一致,否則可以導(dǎo)致運(yùn)動(dòng)心率異常。目前是以ppg中斷去接收Gsensor
pah_comm.c
根據(jù)通信方式與STM平臺(tái)接口,補(bǔ)全讀、與及 連讀接口代碼
bool pah_comm_write(uint8_t addr, uint8_t data)
bool pah_comm_read(uint8_t addr, uint8_t *data)
bool pah_comm_burst_read(uint8_t addr, uint8_t *data, uint16_t num)
算法接口簡(jiǎn)介
PXIALG_API uint32_t pah8series_version(void);---讀取算法版本
PXIALG_API uint32_t pah8series_query_open_size(void);----確認(rèn)申請(qǐng)?jiān)谙到y(tǒng)上所需開內(nèi)存大小
PXIALG_API uint8_t pah8series_open(void *pBuffer);-----給算法開啟pah8series_query_open_size確認(rèn)的內(nèi)存空間
PXIALG_API uint8_t pah8series_close(void);---算法關(guān)閉
PXIALG_API uint8_t pah8series_reset(void);---算法重啟
PXIALG_API uint8_t pah8series_set_param(pah8series_param_idx_t idx, float p1);---算法參考設(shè)定1
PXIALG_API uint8_t pah8series_get_param(pah8series_param_idx_t idx, float *p1);;---算法參考設(shè)定2
PXIALG_API uint8_t pah8series_get_hr(float *hr);---算法心率接口,0~255
PXIALG_API uint8_t pah8series_get_hr_trust_level(int *hr_trust_level);---信號(hào)可信度,0~4,數(shù)值越大,可信度就越高
PXIALG_API uint8_t pah8series_entrance(pah8series_data_t *pah8series_data);----PPG與Gsensor數(shù)據(jù)傳入接口
PXIALG_API uint8_t pah8series_get_signal_level(int ch, uint8_t *signal_level);---信號(hào)分?jǐn)?shù),0~100,,數(shù)值越大,信號(hào)就越好
PXIALG_API uint8_t pah8series_get_motion_flag(uint8_t *motion_flag);---檢查用戶運(yùn)動(dòng)狀態(tài),0靜止,1運(yùn)動(dòng)
PXIALG_API uint8_t pah8series_get_wear_index(uint32_t expo_time[3], uint8_t led_dac[3], uint8_t checkRaw, int *wear_index);----判定用戶佩戴松緊度,wear_index為0~3,0表示佩戴好,1~3數(shù)越大,佩戴越差
PXIALG_API int SpO2_GetSpO2(float *spo2);---算法血氧接口,0~100
PXIALG_API int SpO2_GetReadyFlag(uint8_t *ready_flag);---血氧算法標(biāo)志
調(diào)試log如下
結(jié)構(gòu)部分
如何保證在耳道有持續(xù)穩(wěn)定的測(cè)量,結(jié)構(gòu)設(shè)計(jì)起到關(guān)鍵的作用。優(yōu)秀的設(shè)計(jì),能保證適用于各種人群的耳朵,并在運(yùn)動(dòng)中仍保證耳機(jī)與皮膚優(yōu)秀的接觸穩(wěn)定性
Cover設(shè)計(jì)結(jié)構(gòu)如下圖:
1.最上方灰色部分rubber軟膠套,增加在佩戴時(shí)的接觸舒適性
2.中間部分黑色為硬塑料模,此部分需要做要雙料射出工藝,以有效在機(jī)構(gòu)內(nèi)部隔離串光問題
2.下方灰色為8013光學(xué)模組PCB板,需與中間部分黑色硬塑件緊貼,如漏光會(huì)對(duì)性能有較大影響
光學(xué)鏡片開孔尺寸如下
另外由于在運(yùn)動(dòng)中,耳機(jī)有存在持續(xù)震動(dòng)現(xiàn)場(chǎng),而能否保證sensor Cover與皮膚能有效接觸到,對(duì)PPG信號(hào)有至關(guān)重要,而一個(gè)適合的耳塞套對(duì)保持耳機(jī)在運(yùn)動(dòng)中的穩(wěn)定性起到重要作用。
由于不同人的耳朵大小結(jié)構(gòu)不同,一般會(huì)建議給用戶至少配置如下3個(gè)尺寸(S、M、L),推存尺寸參考如下
? 場(chǎng)景應(yīng)用圖
? 產(chǎn)品實(shí)體圖
? 方案方塊圖
評(píng)論
查看更多