第一章:心率传感器概述
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位) |
| 典型应用 | 血氧+心率 | 纯心率监测 |
选型时我建议你考虑三点:
- 功能需求:如果只需要心率,BH1790GLC就够了。如果需要血氧(SpO2),必须选MAX30102,因为它有红光和红外两个波长。
- 功耗预算:手环这种电池供电的设备,功耗是命门。BH1790GLC的低功耗优势很明显。我做过一个项目,用MAX30102时电池只能撑3天,换成BH1790GLC后撑到了7天。
- 开发难度:MAX30102的驱动库多,上手快。BH1790GLC的资料相对少,需要自己啃数据手册。如果你是新手,建议先从MAX30102开始。
我的经验:量产项目我更倾向BH1790GLC,因为它的功耗和尺寸优势太明显了。但原型验证阶段,我肯定先用MAX30102——开发效率第一,等方案定型了再换低功耗器件。
嗯,这一章就讲到这里。下一章我们会深入MAX30102的寄存器配置和驱动代码实现。到时候我会把我在项目中踩过的坑一一拆解给你看。