第一章:心率传感器概述

1.1 PPG原理——光电容积描记法

心率传感器,说白了就是通过光来测心跳。这个技术叫PPG,全称是光电容积描记法。嗯,名字挺长,但原理其实不复杂。

你想想看,心脏每跳动一次,血液就会泵到全身。血液流过血管时,血管的容积会发生变化。我们用一束光照射皮肤,然后检测反射回来的光强变化——这就是PPG的核心思路。

具体来说,传感器里有两个关键部件:

  • 发光管(LED):通常是绿光或红光,照射到皮肤上
  • 光电探测器(PD):接收反射回来的光信号

心脏收缩时,血液流量大,吸收的光多,反射回来的光就弱。心脏舒张时,血液流量小,反射光就强。这个光强变化的波形,就是PPG信号。我最早接触这个原理时,觉得它有点像用 flashlight 照手指看透光——只不过现在换成了精密的光电传感器。

关键点:PPG信号提取的是血液容积变化的交流分量(AC),而不是直流分量(DC)。直流分量代表组织、骨骼等静态吸收,交流分量才是心跳信号。

为什么会选择绿光?我在项目中做过对比测试。绿光(520nm左右)对血红蛋白的吸收率最高,信噪比最好。红光虽然穿透更深,但运动伪影更严重。所以市面上大多数手环都采用绿光LED。

1.2 常见心率传感器型号

做手环开发,绕不开两个主流型号:MAX30102和BH1790GLC。我两个都用过,各有千秋。

1.2.1 MAX30102

这是Maxim(现在归ADI了)的经典款。集成了红光和红外两个LED,还有一个高灵敏度光电检测器。它的封装很小,5mm×5mm,适合手环这种空间受限的设备。

我个人习惯用MAX30102做原型验证,因为它的驱动库很成熟,网上资料也多。但要注意,它的功耗不算低——我曾经在一个低功耗项目里被它坑过,待机电流偏大,后来不得不加了一颗负载开关来控制供电。

小技巧:MAX30102的FIFO深度是32个样本,建议用中断方式读取,不要轮询。否则容易丢数据,尤其是在心率变异性(HRV)分析时。

1.2.2 BH1790GLC

这是ROHM的片子,主打低功耗。它只有绿光LED,没有红光和红外。但它的功耗控制做得非常好,典型工作电流只有0.4mA左右,比MAX30102低一个数量级。

我记得第一次用BH1790GLC时,被它的寄存器配置搞晕了——它的寄存器地址是8位的,但数据是16位的,读写时序有点特殊。后来翻了好几遍数据手册才搞定。

避坑指南:BH1790GLC的I2C地址是0x5D(7位地址),但有些库写的是0xBA(8位地址)。我曾经因为这个地址搞错,调了两天没反应。后来用逻辑分析仪抓波形才发现是地址不对。切记:驱动开发时一定要确认地址格式。

1.3 传感器选型对比

选型这件事,没有绝对的好坏,关键看你的应用场景。我整理了一个对比表,方便你快速决策:

参数 MAX30102 BH1790GLC
LED类型 红光 + 红外 绿光
工作电流 典型 1.5mA(含LED) 典型 0.4mA
采样率 最高 3200Hz 最高 128Hz
FIFO深度 32样本 无FIFO
封装尺寸 5mm × 5mm 2.8mm × 2.8mm
I2C地址 0x57(7位) 0x5D(7位)
典型应用 血氧+心率 纯心率监测

选型时我建议你考虑三点:

  1. 功能需求:如果只需要心率,BH1790GLC就够了。如果需要血氧(SpO2),必须选MAX30102,因为它有红光和红外两个波长。
  2. 功耗预算:手环这种电池供电的设备,功耗是命门。BH1790GLC的低功耗优势很明显。我做过一个项目,用MAX30102时电池只能撑3天,换成BH1790GLC后撑到了7天。
  3. 开发难度:MAX30102的驱动库多,上手快。BH1790GLC的资料相对少,需要自己啃数据手册。如果你是新手,建议先从MAX30102开始。

我的经验:量产项目我更倾向BH1790GLC,因为它的功耗和尺寸优势太明显了。但原型验证阶段,我肯定先用MAX30102——开发效率第一,等方案定型了再换低功耗器件。

嗯,这一章就讲到这里。下一章我们会深入MAX30102的寄存器配置和驱动代码实现。到时候我会把我在项目中踩过的坑一一拆解给你看。