FastBond4挑战部分-用ADPD2211实现心率检测
该项目使用了ADPD2211,实现了心率检测的设计,它的主要功能为:检测心率和检测手指是否贴合装置。
标签
KiCad
嵌入式
FastBond
Y_HT
更新2026-03-27
129
KiCad文件
全屏

基于 ADPD2211 的心率/血氧检测模块设计与实现总结报告

一、所选主题和项目介绍

本项目的选题为基于 ADPD2211 的心率/血氧检测模块设计与实现。项目的主要目标是设计并实现一块能够完成心率信号采集,同时具备血氧检测硬件基础的小型光电检测模块。项目采用反射式 PPGPhotoplethysmography,光电容积脉搏波描记法)测量思路,以红光和红外光照射人体组织,再通过光学传感器接收反射光,提取脉搏波中的交流成分,从而实现心率检测,并为后续血氧计算提供条件。

随着智能穿戴设备、健康监测系统和便携式医疗设备的发展,基于 PPG 的心率和血氧检测技术已成为非常重要的一类生物测量方法。与传统电极式检测方式相比,PPG 方案具有体积小、成本低、便于佩戴和非侵入式测量等优点,因此在智能手环、血氧仪和可穿戴健康设备中得到了广泛应用。

本项目选用 ADPD2211 作为光接收核心器件,并搭配 660nm 红光 LED 940nm 红外 LED 组成双波长反射检测结构。整个系统通过 MCU 控制 LED 按时序点亮,采集反射光信号,并利用 ADC 读取输出电压,再通过软件实现环境光扣除、滤波、PPG 波形提取及心率估算等功能。

在整个项目实施过程中,不仅完成了原理设计和 PCB 制作,还对实际样机进行了联调与验证,并围绕心率检测这一核心功能进行了多轮软件和硬件优化。项目过程中还对红光、红外双波长方案在血氧应用中的可能性进行了分析与预留,使该设计具有较好的扩展性和实践意义。




二、简短的使用到的所有硬件介绍

本项目中主要使用到的硬件包括以下几个部分。

1. ADPD2211 光学传感器

ADPD2211 是本项目的核心光接收器件。它内部集成了光电二极管和低噪声模拟前端,适合低功耗生物光学检测,尤其适用于心率、脉搏波、血氧等场景。其作用是接收 LED 照射人体组织后反射回来的光,并输出可供后级采集的模拟信号。

2. 660nm 红光 LED

660nm 红光 LED 主要用于血氧检测中的红光通道。血氧检测通常需要红光和红外两个波长,通过比较两者的吸收差异,计算血氧饱和度。该 LED 为后续实现 SpO 功能提供了硬件基础。

3. 940nm 红外 LED

940nm 红外 LED 主要用于心率和脉搏波检测。在项目调试过程中,红外通道比红光通道更容易获得幅度较大、较稳定的 PPG 信号,因此优先用于心率功能验证。

4. LED 驱动三极管

板上使用了两颗 SOT-23 封装的三极管用于驱动红光和红外 LED。通过外部控制引脚 RED_EN IR_EN,可以实现 LED 的时序导通和关闭,从而完成脉冲式采样。

5. XIAO ESP32S3 Sense 主控板

本项目采用 Seeed Studio XIAO ESP32S3 Sense 作为调试主控平台。该开发板具备丰富的 GPIO ADC 资源,方便控制 LED 时序并采集模块输出信号。同时其体积较小,也便于后续与该模块组成一个轻量级演示系统。

6. 6Pin 外部接口

根据网表文件,本模块通过 6Pin 接口与外部系统连接

这使模块具备较好的可移植性和独立性,便于连接不同开发板进行实验。




三、方案框图和项目设计思路介绍

1. 方案框图

本项目总体方案可以概括为以下结构:

1 方案框图

2. 设计思路

本项目采用反射式 PPG 方案,其核心思路是通过 LED 向人体组织发射光信号,血液容积的周期变化会使反射光强发生微小波动,这些波动经过 ADPD2211 接收并转换为模拟信号,再由 MCU 进行采样与计算。

整个设计思路主要包括以下几点:

第一,采用双波长光学结构:板上同时使用红光和红外 LED,为心率与血氧检测提供硬件基础。虽然本项目调试时主要先完成心率检测,但整体架构已经具备扩展到 SpO 算法的条件。

第二,采用脉冲式采样方法:即先关闭 LED 采集环境光,再开启指定 LED 采集总反射信号,最后通过差分方法得到净反射光信号,从而有效减小环境光干扰。

第三,采用模块化设计:通过 6Pin 接口将控制与采样信号引出,使得该模块既可以独立调试,也方便后续与其他平台或系统整合。

第四,软件上采用分阶段调试策略:在软件开发中,先验证 GPIO ADC 基本功能,再观察原始 PPG 波形,随后加入去直流、滤波和阈值检测,最后才进行 BPM 计算。这种逐步调试的方法提高了定位问题的效率。




四、原理图和 PCB 展示及介绍

1. 原理图介绍

根据原理图文件,模块主要器件和连接关系已经可以明确:

image.png

图2 原理图

从整个原理关系可以看出,本模块采用了较清晰的分工方式。LED 发光部分与传感器接收部分分开设计,外部 MCU 负责控制和采样,ADPD2211 负责光信号接收和模拟输出。

2. PCB 展示与布局说明

从PCB图可以看出,PCB 采用小尺寸设计,光学区域位于板子的中心,呈现中间传感器、左右 LED”的布局结构。这样的布局思路符合反射式 PPG 设计的一般形式,可以使发光与接收集中在手指接触区域,缩短光路,提升反射检测能力。但是在实际调试中也发现,虽然这种布局紧凑,但器件之间缺少明显的隔光结构,容易导致 LED 发出的光直接串入 ADPD2211,形成较大的直流背景信号,影响真实脉搏波的提取。因此,这块 PCB 在光学结构层面仍然有进一步优化空间。

image.png PCB底层.png

图3 PCB顶层和底层图

3. PCB 迭代与重打思考

在项目推进过程中,通过实测发现本设计虽已能基本完成心率功能验证,但如果继续优化并重新打板,建议重点改进以下几个方向:

  1. 加入隔光墙或机械隔光结构
    LED ADPD2211 之间预留隔光区域,减少串光。
  2. 增加贴肤遮光圈设计
    在光学区域外部增加黑色泡棉接触圈或外壳结构,提高遮光能力。
  3. 优化 LED 与传感器间距
    根据测试结果调整几何布局,使直流不至于过大,同时保证交流脉搏波信号强度。
  4. 增加调试焊盘和测试点
    便于后续测量关键节点电压,快速定位问题。

目前是第一版打样,后续应该进行第二版或第三版 PCB 迭代,主要原因应当是优化光学布局、抑制串光以及提升 PPG 信号质量




五、调试软件、软件流程图和关键代码介绍

1. 调试软件

本项目的软件调试主要在 Arduino IDE 环境下完成。使用 XIAO ESP32S3 Sense 作为控制器,实现 LED 控制、ADC 采样和串口输出。通过 Arduino 串口监视器和串口绘图器,可以观察原始数据、PPG 波形以及 BPM 结果。

2. 软件流程图介绍

软件流程大致如下:

image.png

图4 软件示意图

3. 关键代码思路

本项目软件调试中的关键代码主要包括以下几个部分:

1)差分采样

通过 LED 关断时采样环境光,LED 打开时采样总信号,最后做差得到净反射信号。这样可以有效减小环境光影响。

// IR关,采环境光
  allOff();
  delay(OFF_SETTLE_MS);
  ambient = readAdcAvg();
  // IR开,采反射
  redOff();
  irOn();
  delay(ON_SETTLE_MS);
  irRaw = readAdcAvg();

2)去直流

由于原始反射信号中直流背景很大,因此通过一阶低通方式估计直流分量,再与原始信号相减,得到交流变化量。

// 去直流
  dc = 0.94f * dc + 0.06f * irNet;
  ac = irNet - dc;

3)平滑滤波

对交流量进一步进行平滑,提取相对稳定的 PPG 波形。

  //平滑 PPG
  ppg = 0.72f * ppg + 0.28f * ac;

4)谷值/峰值检测

在实际调试中发现,有效心搏信号有时表现为负谷值,因此最终采用负峰检测方式:先跌破阈值进入候选区,再确认谷值出现,最后在波形回升时确认一次心搏。

//负峰判定:
  // 先往下跌破 -highThr,进入候选拍
  if (!inPulse) {
    if (ppg < -highThr && dppg < 0.0f) {
      inPulse = true;
      peakSeen = false;
      pulsePeak = ppg;   // 这里存“最负”的值
    }
  } else {
    // 候选区里记录更深的谷值
    if (ppg < pulsePeak) {
      pulsePeak = ppg;
    }

5BPM 计算

记录相邻两次有效心搏的时间差,通过
BPM = 60000 / interval_ms
计算心率,并通过缓冲平均和平滑处理减少显示波动。

float inst = 60000.0f / (float)interval;
          bpmBuf[0] = bpmBuf[1];
          bpmBuf[1] = bpmBuf[2];
          bpmBuf[2] = inst;




六、硬件功能展示图及说明

因为实物LED灯光线太强会发生串扰,实际用黑胶带贴住了一部分,结合实物照片和调试结果,本项目当前已经完成了以下硬件功能验证。

IMG_20260323_224423.jpg IMG_20260325_134103.jpg

图5 心率模块实物图

图6 功能展示

1. 模块供电和接口工作正常

模块可以通过 3.3V 正常供电,外部 MCU 能够控制 PWDN_CTLRED_EN IR_EN,说明硬件基础连接正常。

2. 红外发光与模拟输出正常

通过外部控制红外 LED 开关,ADC 能够采集到明显变化的模拟信号,说明红外发射与 ADPD2211 接收链路工作正常。

3. 原始 PPG 波形采集成功

经过环境光差分和软件处理后,已经可以观察到具有脉搏特征的信号波动,说明模块具备原始 PPG 波形采集能力。

4. 心率功能已基本实现

在光路优化和算法调整后,系统能够输出较为合理的 BPM 结果,说明硬件具备完成心率检测的基本功能。

5. 血氧检测具备扩展基础

由于模块已具备 660nm 940nm 双波长结构,因此从硬件层面已经具备实现血氧检测的基础,后续只需继续完成红光通道调试和标定即可扩展。




七、设计中遇到的难题和解决方法

本项目在设计与调试过程中遇到了不少问题,主要包括以下几个方面。

1. LED 控制逻辑不容易一次判断正确

一开始在调试时,曾出现红外信号很强而红光始终没有变化的现象。由于板上驱动结构和控制极性并非一目了然,导致初期在软件控制逻辑上出现多次试错。

解决方法:通过逐个状态组合测试不同控制电平对应的 ADC 输出,最终明确有效控制组合,避免了盲目修改代码。

2. 串光过强导致 PPG 信号不明显

这是本项目最突出的难题之一。前期经常出现 irNet 很大,但滤波后的 ppg 很小的情况,说明直流背景过大,交流脉搏分量被淹没。

解决方法: LED 与传感器之间加入黑色胶带。经过这一步优化后,直流信号明显下降,PPG 有效波形成分更容易被提取出来。

3. 手指接触状态影响很大

当手指压得太紧时,波形往往只有较大直流,而有效交流信号反而减小;当接触过松时,又会导致信号不稳定。

解决方法:反复调试后总结出轻贴、不压死、微调位置的经验,并尽量在遮光条件较好的情况下测量。

4. 波形方向不固定

调试中发现滤波后的 PPG 波形有时为正峰,有时更像负谷。如果只用一种固定检测方式,容易出现识别不稳定、心率残留不更新等问题。

解决方法:从固定正峰检测逐步改为翻转检测、自适应极性,再到负峰检测状态机,最终使算法更加符合实际波形形态。

5. 阈值选择困难

阈值过高时无法检测到新波形,过低时又会引入误触发。不同遮光条件和手指位置下,PPG 幅值差异较大,导致阈值调节需要反复试验。

解决方法:引入动态包络、自适应阈值和双阈值回差机制,并在调试过程中根据实际波形不断调整比例系数。




八、心得体会

通过这次项目实践,我对基于光学传感器的心率/血氧检测系统有了比课堂理论更深刻的认识。原本认为该类系统的重点主要在电路设计和程序编写上,但通过实际调试后发现,它本质上是一个涉及硬件电路、光学结构、机械接触方式和信号处理算法的综合系统,任何一个环节出现偏差,都会影响最终测量结果。

首先,我最深的体会是:硬件功能实现不等于系统功能实现。从电路角度看,只要 LED 能亮、传感器有输出、ADC 能采样,就说明硬件已经基本打通;但从系统功能角度看,如果串光太强、遮光不够、手指贴合不合理,那么最终仍然得不到有效的脉搏波。也就是说,在生物传感项目中,电路能工作能测准之间还有很大差别。这让我认识到,今后做类似项目时,必须在设计初期就把机械结构和光路问题一起纳入考虑。

其次,我体会到调试方法的重要性。在本项目中,如果一开始只盯着 BPM 数值,很容易陷入为什么测不出来的困境。但当问题被逐步拆分成供电是否正常”“引脚电平是否正确”“IR 是否点亮”“ADC 是否有变化”“差分信号是否有效”“滤波后波形是否出现”“阈值是否合理这些更小的问题后,调试就变得可控得多。通过分阶段验证,我逐步学会了如何把复杂系统问题拆解成可测试的单元,这是本次项目中收获非常大的一点。

第三,我更加理解了软件算法必须适配真实硬件信号。理论上,PPG 心率算法似乎很简单,无非是滤波、找峰值、算间隔。但在实际中,波形会受到结构、遮光、压力和噪声的共同影响,真实波形远没有想象中那么标准。项目里出现过只有大直流没有交流”“波形方向不固定”“阈值压住信号”“ BPM 残留等问题,都说明算法不能照搬模板,而必须围绕真实采样结果不断调整。通过这个过程,我对嵌入式信号处理不再停留在公式层面,而开始理解为什么算法要这样设计

此外,本次项目也让我认识到,原型验证阶段的动手优化非常重要。例如在正式 PCB 上并没有设计隔光墙,但后续通过黑色泡棉、黑胶带临时做出隔光结构后,信号情况立即有了明显改善。这个过程说明,很多看似复杂的问题,未必一定要大改硬件,先通过小范围临时试验找到规律,再决定是否重打 PCB,会更加高效。

如果对后续工作提出建议,我认为主要有以下几点:

  1. 下一版 PCB 应提前考虑隔光墙和接触结构设计;
  2. 应增加更规范的测试点,便于快速定位问题;
  3. 对与940nm和660nm的LED选型还需要进一步改进;
  4. 在软件上可将心率算法进一步模块化,便于切换正峰和负峰检测模式;
  5. 后续应继续完善红光通道,逐步向血氧估算扩展;
  6. 最终可以加入 OLED 或蓝牙显示,实现完整演示系统。

总体来看,本项目虽然在血氧部分仍有进一步完善空间,但已经成功完成了从模块原理设计、PCB 实现、样机搭建、硬件联调、原始 PPG 采集到心率功能验证的完整过程。这次设计让我真正理解了一个实际可用的生物检测系统是如何一步一步做出来的,也让我在电路设计、硬件调试、嵌入式采样和算法实现等方面都得到了锻炼。对我来说,这不仅是一次课程项目实践,更是一次非常有价值的综合工程训练。

 

附件下载
test.ino
Arduino测试文件
ProPrj_心率血氧模块_2026-03-24.kicad_pcb
ProPrj_心率血氧模块_2026-03-24.kicad_sch
团队介绍
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号