3、LED驱动电路设计:双波长LED的恒流驱动与PWM调制

好,咱们进入正题。血氧仪的核心,说白了就是让两个LED轮流发光,然后通过光电二极管接收透射光。这第一步,就是怎么把LED驱动好。

红光660nm和红外940nm,这两个波长是血氧测量的黄金搭档。为什么选它们?因为氧合血红蛋白和脱氧血红蛋白在这两个波长下的吸收系数差异最大。嗯,这个知识点大家应该都懂,我就不展开了。

3.1 为什么必须用恒流驱动?

LED的亮度跟电流成正比,而不是电压。你想想看,如果我用恒压驱动,温度一上来,LED的Vf会下降,电流反而增大,亮度就飘了。这在血氧测量里是致命的——你没法区分到底是血氧变了还是LED亮度变了。

我刚开始做血氧仪那会儿,就吃过这个亏。当时图省事,直接用IO口串个电阻驱动LED,结果测出来的血氧值忽高忽低,怎么都校准不好。后来才发现,是LED的温漂在捣乱。从那以后,我再也不敢在精密测量里用恒压驱动了。

核心原则: 血氧仪中的LED驱动,必须使用恒流源。电流精度建议控制在±1%以内。

3.2 恒流驱动电路方案对比

实际项目中,常用的恒流驱动方案有这么几种。我列个表,大家对比着看:

方案 优点 缺点 适用场景
运放+MOSFET 精度高,可调范围大 电路复杂,成本高 高端医疗设备
专用LED驱动IC 集成度高,外围简单 灵活性差,选型受限 消费级产品
三极管镜像恒流源 成本低,电路简单 精度一般,温漂大 低成本方案

我个人习惯用运放+MOSFET的方案。虽然成本高一点,但胜在灵活。你可以通过调整参考电压,精确控制电流大小。而且,运放的反馈环路能自动补偿温度变化,稳定性很好。

3.3 经典恒流电路详解

来,看一个我常用的电路结构:

// 伪代码描述:运放恒流源控制逻辑
Vref = DAC输出或分压电阻设定
I_LED = Vref / Rsense

// 实际电路连接
运放同相输入端 -> Vref
运放反相输入端 -> Rsense上端(即MOSFET源极)
运放输出端 -> MOSFET栅极
MOSFET漏极 -> LED阴极
LED阳极 -> VCC
Rsense下端 -> GND

这个电路的工作原理其实很简单:运放会拼命让反相输入端的电压等于同相输入端的Vref。而反相输入端的电压就是Rsense上的压降。所以,流过Rsense的电流就被锁定在Vref/Rsense了。

这里有个坑,我曾经踩过——运放的选型。普通运放输出摆幅不够,驱动不了MOSFET的栅极。我建议用轨到轨输出的运放,比如LMV321或MCP6001。另外,Rsense要用高精度电阻,1%是底线,0.1%更好。

小技巧: 如果MCU的DAC不够用,可以用PWM+RC滤波产生Vref。但要注意,RC滤波的纹波要控制在1mV以内,否则电流会抖动。

3.4 PWM调制与时序控制

血氧测量里,两个LED不能同时亮。你得让它们分时工作,否则光电二极管分不清谁是谁。这就是时序控制的由来。

典型的时序是这样的:

  1. 红光LED亮,红外LED灭,采集红光信号
  2. 红光LED灭,红外LED亮,采集红外信号
  3. 两个LED都灭,采集环境光(用于背景光消除)

每个阶段持续多长时间?我一般设成400μs。太快了,信号建立时间不够;太慢了,功耗上去了。你想想看,一个周期也就1.2ms,采样率可以做到800Hz以上,完全够用。

PWM调制在这里的作用,是调节LED的平均亮度。为什么要调亮度?因为不同人的手指厚度、肤色都不一样,透光率差异很大。如果LED太亮,光电二极管会饱和;太暗,信噪比又不够。

我建议的做法是:用MCU的定时器产生PWM,通过运放恒流源控制LED。PWM的频率选在1kHz到10kHz之间,太高了MOSFET开关损耗大,太低了人眼能感觉到闪烁。

注意: PWM调光时,不要直接开关LED的电源。正确的做法是:恒流源一直工作,用MOSFET或模拟开关来切换LED的通断。这样可以避免恒流源的建立时间影响测量精度。

3.5 实际项目中的避坑指南

嗯,这里我总结几个实战中容易翻车的地方:

  • 地线回路: LED驱动电流大,地线要单独走,不要和信号地混在一起。我曾经因为地线没处理好,导致ADC采集到的信号里全是50Hz工频干扰。
  • 开关噪声: LED切换瞬间会产生电流尖峰。可以在LED两端并联一个小电容(10nF左右),吸收尖峰。
  • 散热问题: 虽然LED电流只有几十毫安,但如果占空比高,还是要考虑散热。PCB上给LED留足够的铜皮散热。
  • ESD保护: LED引脚裸露在外,容易受静电损坏。加个TVS管或者串联100Ω电阻,能有效保护。

最后说一句,LED驱动电路看似简单,但它是整个血氧信号链的起点。起点不稳,后面再怎么折腾也是白搭。所以,花点心思把这块做好,绝对值得。