这两年做穿戴设备的朋友应该都有体会——血氧和心率检测从“能亮灯”变成了“测得准还得扛得住运动伪迹”。ROHM 的 BH1790GLC-E2 在<专用传感器里属于一类很典型的集成方案:把光电二极管、放大器和 I²C 接口全部封进 2.8mm×2.8mm 的小壳子里。这颗料标称 Oximeter/Heart Rate 功能,输出直接走 I²C 数字总线,省掉了模拟前端那些运放和滤波器的调参功夫。
光学心率传感器的工作原理:从光电容积脉搏波到数字寄存器
光电容积脉搏波(PPG)的基本逻辑并不复杂——LED 打光到皮肤,光电二极管接收经过组织吸收、散射后回来的光。心脏搏动引起毛细血管血容量周期性变化,这个变化直接调制反射光的强度。BH1790GLC-E2 内部集成了绿光 LED 驱动和光电检测阵列,绿光波长(典型 530nm 附近)对血液中氧合血红蛋白的吸收率变化比较敏感,所以心率检测多数用这个波段。
难点在于反射光信号里混杂着直流分量——皮肤组织、骨骼、静态血液都会反射光,真正有用的脉动分量可能只有整个信号的 1%~3%。BH1790GLC-E2 的做法是在芯片内部就把光电信号做积分和放大,再通过 I²C 寄存器输出数字化的 PPG 波形数据。外部 MCU 拿到这些原始数据后,自己做滤波算法和峰值检测。这颗料对环境光的抑制能力我实测下来还可以,但内部 ADC 的采样时序和 LED 脉冲的占空比需要严格按手册配置,否则 50Hz 工频干扰会直接混进数字输出里。
关键参数解读:工作温度与接口类型的工程边界
| 参数名 | 数值 | 工程意义说明 |
|---|---|---|
| Sensor Type(传感器类型) | Oximeter/Heart Rate | 双功能集成,可输出 PPG 原始数据用于计算 SpO₂ 和心率 |
| Output Type(输出类型) | I²C | 数字接口,适合 MCU 直接读取,总线速率典型 400kHz |
| Operating Temperature(工作温度) | -20°C ~ 85°C (TA) | 覆盖消费级和部分工业级场景,超出此区间光学特性会明显漂移 |
| 供电电压 | 需查阅 datasheet | 此类光学传感器通常为 1.8V~3.3V 逻辑供电,需与 MCU 电平匹配 |
| 封装尺寸 | 需查阅 datasheet | 光学传感器封装通常含透镜开窗,布局时需避开金属走线遮挡 |
工作温度这个参数容易被低估。咱们做消费电子通常都在 0°C~40°C 的温度范围跑,但如果你把 BH1790GLC-E2 用到冷链物流的智能手环或者户外运动手表上,-20°C 这边就需要注意:LED 的光输出效率在低温下会下降,光电二极管的暗电流也会变,导致同样血液灌注量下读到的 PPG 幅值变小。实测经验是,温度每降 10°C,绿光 LED 的光功率大约掉 5%~8%,这种漂移没法靠算法完全补偿,最好在硬件设计时预留增益调节的余量。
I²C 接口这块,倒是没有太多坑——标准两线制,SDA 和 SCL 加上拉电阻就能跑。但这颗料的 I²C 地址是硬件固定的,板子上如果同时挂了多个同型号传感器做多通道测量,地址冲突就得靠额外的 GPIO 做片选或者换不同地址版本的料。
光学窗口设计与结构件配合的工程要点
选这颗料的时候,大家最容易忽略的是光学窗口的设计。BH1790GLC-E2 的封装顶面有一个透镜开窗,光从那里进出发射和接收。这个开窗和外壳之间需要留出至少 0.5mm 的净空,保证光路不被遮挡。很多项目在结构上把传感器贴在透明亚克力板下面,但亚克力板本身的透过率、厚度、表面处理都会直接影响信号质量——我用过 1mm 厚度的 PC 板,透光率大概只有 88%,信号幅度直接掉了两成。
再一个就是光学隔离。发射的绿光和接收的反射光之间需要物理上的遮光墙,防止 LED 的光直接从外壳内部串到光电二极管上。正规做法是在 PCB 上围绕传感器开一圈铜皮接地,同时结构件里加一个遮光泡棉圈。这个细节不做的话,直流偏置会抬得很高,压缩了 ADC 的动态范围,脉动信号就更容易被噪声淹没。
PPG 信号链路调试中容易踩的坑
调试这颗传感器时,我遇到过几个典型问题,写出来供大家参考。第一个是电源纹波导致的心率值跳动。BH1790GLC-E2 内部有 LED 驱动电路,瞬间灌流可以到几十毫安。如果 LDO 的输出电容不够,LED 开启的瞬间电压跌落,反映到光电信号上就是叠加的毛刺。这个故障现象是:心率读数在安静状态下稳定,但每次 LED 脉冲更新时就跳几个数,用手触摸外壳更明显。解法是给传感器的 VDD 脚加一个 1μF + 0.1μF 的并联电容,并且尽量靠近引脚放置。
第二个是 I²C 总线长度引起的通信故障。有些工程师把传感器放在柔性排线上,离 MCU 有 10cm 以上的距离。排线本身的寄生电容会把 I²C 的上升沿拖慢,尤其上拉电阻用 4.7kΩ 时,400kHz 速率根本跑不稳。实测下来,改用 2.2kΩ 上拉或者把速率降到 100kHz 能解决,然而这样会牺牲吞吐量——如果算法需要连续读取多个寄存器,建议用 1.8V 逻辑电平配合 1.5kΩ 上拉。
第三个坑是机械应力对光学对准的影响。传感器贴片时如果焊盘锡量不一致,封装受力产生倾斜,透镜中心和外壳开窗就不在一条轴上了。这个很难在产线上用万用表测出来,但成品的合格率会明显下降——不良品的 PPG 信号幅值普遍比良品低 15%~25%。供应商那边通常推荐用钢网开孔做 1:1 的锡量设计,回流焊时注意板面平整度。
应用场景选型:从手环到医疗级的实际考量
拿 BH1790GLC-E2 和同门的 BH1792GLC-E2 相比,后者增加了更宽的动态范围,适合弱灌注场景,比如老人或末梢循环差的人群。但在这个价格档位上,BH1790GLC-E2 主打的是低功耗和成熟算法支持——ROHM 提供的应用笔记里给出了 I²C 寄存器配置例程和 PPG 数据预处理流程,拿过来改改就能用。
在做消费级手环时,我一般这样判断这颗料是否合适:如果目标心率范围在 30~220bpm,且对 SpO₂ 精度要求不高于 ±2%,BH1790GLC-E2 的绿光通路足够了。但如果你要过医疗器械认证,比如 ISO 80601-2-61 对脉搏血氧计的要求,那就得仔细评估光学前端的一致性——这个档位的传感器,出厂一致性通常能控制在 10% 以内,但医疗级要求往往更严,还得考虑批次间的 LED 波长偏移。
实际项目里还有一点,就是驱动的脉冲时序。BH1790GLC-E2 的 LED 脉冲宽度、采样窗口、ADC 积分时间这三者需要联动调整。典型配置是 LED 占空比 1/16,采样率 128Hz,这样平均功耗能压到 0.5mA 以下,适合纽扣电池供电。但运动场景下,这个采样率对运动伪迹的抑制能力有限,需要算法端做加速度传感器融合。
布板与外围电路的设计清单
- VDD 去耦:1μF(X5R)+ 0.1μF(X7R)并联,距离电源引脚小于 3mm
- I²C 上拉:1.8V 逻辑用 1.5kΩ~2.2kΩ,3.3V 逻辑用 2.2kΩ~4.7kΩ,需实测总线时序确认
- 光学窗口:传感器透镜正上方 0.5mm 净空,窗口材料透光率不低于 90%
- 遮光隔离:LED 与光电二极管之间加接地铜皮隔离带,宽度不小于 1mm
- 防静电:外壳开窗处建议贴 ESD 防护膜,避免人体静电直接打到透镜上
布板时走线要躲开透镜正下方的参考平面。我用过四层板,第三层的完整地平面反而帮了倒忙——铜平面反射了部分光。正确的做法是在传感器正下方挖空所有铜箔,包括电源层找地层,这个可以跟板厂那边备注清楚。
关于BH1790GLC-E2的寄存器映射,有几点提醒:读出来的 PPG 数据是 16 位无符号整数,高位字节在前。上电后需要先跑一次软件复位(写入特定寄存器序列),让内部 ADC 完成自校准,这个过程大概需要 10ms,期间不要去读数据。另外,芯片内部有温度传感器用来做 LED 光功率补偿,但那个温度数据是 8 位的,分辨率比较粗,要精确补偿还是得依赖外部 NTC。
最后说一句实战经验——这颗料的 datasheet 里给的功耗数字是 1.8V 供电下的典型值,实际 3.3V 供电时电流会大 30% 左右,做电池续航评估的时候别直接按典型值算。