基于Pixart PAH8013ES+STM32F411实现耳机血氧与心率的检测方案
耳朵是仅次于手指尖,毛细血管次丰富的地方,相对于手腕而言,光学式测量方案,从耳机会更容易到得到高质量的PPG信号,更有利于更高精准运动心率与血氧效果的测试。
本方案是基于原相的PAH8013ES +主控SMT32F411+ Gsensor LIS3DH, 实现在耳机环境下实现高精性实时运动心率与血氧的测试方案,提供从硬件、FW、结构产品级应用指导。原相PAH8013是针对耳机应用方向的原相第二代光学PPG传感器,相比第一代8003产品,除性能提供外,运行功耗和待机功耗进一步降低,同时改用IR光源不可见光源测量PPG信号,改善第一代产品绿光方式会从耳朵背面看到绿光闪问题。PAH8013除测量运动心率外,还可以测量血氧饱和度。 血氧饱和度(SpO2)是血液中被氧结合的氧合血红蛋白(HbO2)的容量占全部可结合的血红蛋白(Hb)容量的百分比,即血液中血氧的浓度,它是呼吸循环的重要生理参数。PAH8013通过IR和红光 两种光源,通过检测打入皮肤反射回的 IR和红光的比例,通过算法算出相关的血氧值。
STM32F411 是Cortex®-M4内核(具有浮点单元)的性能MCU,最高可工作在100 MHz主频,芯片内置高达256至512KB的Flash存储器和高达128KB的SRAM,为算法及后续的应用功能再扩展提供充足的空间。另外STM32F411 具有封装小,出色的低功耗性能,同时性价比高,更适用于对性能体积与价钱有需求的耳机产品。
硬件部分
PAH8013ES与STM32F411采用i2c方式的通信接口,并加上中断状态线INT和休眠控制线。其中8013的9脚与10脚接到SMT32F411的PB8和PA11的i2c接口连接脚,采用400HZ速率;8013的13脚中断信号INT1与MCU PA10连接,8013的休眠控制线PD与MCU PA12连接,其中INT1用于中断方式用于接到PPG数据;PD脚用于在不使用PAH8013ES时,通过MCU接高PD脚让PAH8013进入休眠省电状态。
Gsensor Lis3dh采用SPI方式与STM32F411通信接口, Lis3dh的SPI接到STM32F411的PA15、PB4、PB4、PB5 的芯片脚上,通信速率1M,外加中断通信线INT1和INT2,使用STM32F411的PA8、PA9。
板上的供电系统由一个3.3V和一个1.8V的LDO组成,给MCU、Gsensor及PAH8013ES提供所需的电压,各器件的IO通信电平使用3.3V。
原理图
主板部分
光学小板模组部分
PCB layout
软件接口部分
心率与血氧的算法放在STM32F411上运行,STM32F411每200ms从PAH8013读取40笔PPG数据及从LIS3DH读取约45笔左右 MENS,通过PPG数据与MENS数据运算出心率与血氧值,而MENS数据负责对运动作状态下的数据进行精度补尝。
在主函数调用demo_ppg_dri_HRD_SPO2();启动心率与血氧测试,约8~10秒算出第一个心率与血氧值,之后约每秒更新一次数值
心率与血氧的获取接口如下:
pah8series_get_hr(&hr);------是获取心率数据的接口,由于算法是算浮点数,在数值显示直接显示整数部分
SpO2_GetSpO2(&mySpO2);---是获取血氧数据的接口,输出整数,直接显示整数百分比就可
PROTING简介
pah8series_config.h文件的修改
1.#define ENABLE_MEMS_ZERO 关掉
如果系统的Gsensor还没有调好,可以先把此宏打开,先测试静态心率。此时会送入全0的Gsensor给算法,
注意:Gsensor调好后,不论静态动态,都需送入真实的Gsensor数据
2.设定Gensor量程,目前用的是-+8G量程,所以设定#define ALG_GSENSOR_MODE 4
3.根据所用的芯片型号,Cover设计方式、IO通信方式,打开以下宏定义
//-------Sensor IC Type---------//
#define __PAH8013ES
//-------Cover Type---------//
#define _DI_COVER
//-------IO Interface---------//
#define _I2C
main.c修改
1.设定中断回调函数 gpio_in_interrupt_handler(GPIO_IN gpio)
2.送入正确的系统的tick时间,get_tick_count()-----单位为ms
pah_hrd_function.c修改
1.启动ppg数据采样时,同时启动Gsensor数据采样,调用accelerometer_start();这样可确保数据同步,
2.接收到的Gsensor数据送入指定的下面地方以便算法取得,accelerometer_get_fifo(&_state.pxialg_data.mems_data, &_state.pxialg_data.nf_mems);
3.进入touch mode或离开心率模式,停止Gsensor数据采样,调用accelerometer_stop();
关于同步说明,PPG第一笔数据要与Gsensor第一笔数据时间上对齐,这样算法在插补后,每个ppg时间点才能与gsensor时间点一致,否则可以导致运动心率异常。目前是以ppg中断去接收Gsensor
pah_comm.c
根据通信方式与STM平台接口,补全读、与及 连读接口代码
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)
算法接口简介
PXIALG_API uint32_t pah8series_version(void);---读取算法版本
PXIALG_API uint32_t pah8series_query_open_size(void);----确认申请在系统上所需开内存大小
PXIALG_API uint8_t pah8series_open(void *pBuffer);-----给算法开启pah8series_query_open_size确认的内存空间
PXIALG_API uint8_t pah8series_close(void);---算法关闭
PXIALG_API uint8_t pah8series_reset(void);---算法重启
PXIALG_API uint8_t pah8series_set_param(pah8series_param_idx_t idx, float p1);---算法参考设定1
PXIALG_API uint8_t pah8series_get_param(pah8series_param_idx_t idx, float *p1);;---算法参考设定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);---信号可信度,0~4,数值越大,可信度就越高
PXIALG_API uint8_t pah8series_entrance(pah8series_data_t *pah8series_data);----PPG与Gsensor数据传入接口
PXIALG_API uint8_t pah8series_get_signal_level(int ch, uint8_t *signal_level);---信号分数,0~100,,数值越大,信号就越好
PXIALG_API uint8_t pah8series_get_motion_flag(uint8_t *motion_flag);---检查用户运动状态,0静止,1运动
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数越大,佩戴越差
PXIALG_API int SpO2_GetSpO2(float *spo2);---算法血氧接口,0~100
PXIALG_API int SpO2_GetReadyFlag(uint8_t *ready_flag);---血氧算法标志
调试log如下
结构部分
如何保证在耳道有持续稳定的测量,结构设计起到关键的作用。优秀的设计,能保证适用于各种人群的耳朵,并在运动中仍保证耳机与皮肤优秀的接触稳定性
Cover设计结构如下图:
1.最上方灰色部分rubber软胶套,增加在佩戴时的接触舒适性
2.中间部分黑色为硬塑料模,此部分需要做要双料射出工艺,以有效在机构内部隔离串光问题
2.下方灰色为8013光学模组PCB板,需与中间部分黑色硬塑件紧贴,如漏光会对性能有较大影响
光学镜片开孔尺寸如下
另外由于在运动中,耳机有存在持续震动现场,而能否保证sensor Cover与皮肤能有效接触到,对PPG信号有至关重要,而一个适合的耳塞套对保持耳机在运动中的稳定性起到重要作用。
由于不同人的耳朵大小结构不同,一般会建议给用户至少配置如下3个尺寸(S、M、L),推存尺寸参考如下
► 场景应用图
► 产品实体图
► 方案方块图