1. 项目概述:STM32心率血氧手环(GPS版)开发实录
去年冬天接了个健康监测设备的私活,客户要求做一款带定位功能的智能手环。经过三个月的折腾,最终基于STM32F103C8T6完成了这个集心率血氧监测、GPS定位、跌倒检测于一体的多功能设备。现在把完整开发过程整理出来,特别适合想入门嵌入式医疗设备开发的工程师参考。
这个手环的核心功能包括:
- 医疗级体征监测:采用MAX30102实现心率血氧双参数采集,误差控制在±2bpm
- 多传感器融合:整合ADXL345加速度计实现计步和跌倒检测双重功能
- 实时定位系统:通过UBLOX NEO-6M模块实现经纬度定位,室外精度达5米
- 双模交互设计:支持OLED本地显示和蓝牙APP远程监控
2. 硬件架构设计与关键器件选型
2.1 主控芯片方案对比
最初在选型时考虑了三种方案:
-
STM32F103C8T6(最终选择):
- 72MHz主频满足实时处理需求
- 内置DMA可减轻CPU负载
- 成本仅15元/片
- 缺点:无硬件浮点单元
-
GD32F303系列:
- 兼容STM32且主频更高
- 但开发社区支持较弱
-
ESP32:
- 自带蓝牙/WiFi
- 但ADC精度不足(仅12bit)
实测发现STM32的12位ADC配合过采样技术,可使MAX30102的血氧测量精度达到±1%
2.2 传感器模块选型要点
2.2.1 光学传感器对比测试
测试了三种常见型号:
- MAX30102(选用):
- 集成红光/红外LED
- 自带FIFO缓冲
- I²C接口速率400kHz
- MAX30100:
- 旧款芯片
- 无运动伪影消除算法
- 国产某型号:
- 价格便宜30%
- 但信噪比差导致数据波动大
2.2.2 加速度计参数配置
ADXL345的关键配置:
c复制// 设置测量范围为±4g
writeTo(ADXL345_ADDR, DATA_FORMAT, 0x01);
// 输出数据速率设为100Hz
writeTo(ADXL345_ADDR, BW_RATE, 0x0A);
实测发现计步算法对以下参数敏感:
- 动态阈值更新周期(建议200ms)
- 有效步长时间窗(300-600ms)
- 加速度幅值阈值(0.3g-0.5g)
3. 电路设计实战经验
3.1 原理图设计陷阱
第一版设计踩过的坑:
-
MAX30102的LED驱动电路:
- 初始设计限流电阻为10Ω
- 实际需要47Ω才能避免LED过驱
- 修改后信噪比提升40%
-
GPS模块天线设计:
- 未预留π型匹配电路
- 导致定位时间长达3分钟
- 改进后冷启动<45秒
3.2 PCB布局关键技巧
四层板堆叠方案:
- Top层:传感器和MCU
- 内电层1:3.3V电源平面
- 内电层2:GND完整平面
- Bottom层:蓝牙和GPS射频电路
特别注意:
- MAX30102必须远离MCU的SWD调试接口
- GPS天线周围需做净空处理
- I²C走线长度不超过10cm
4. 软件架构与核心算法
4.1 多任务调度方案
采用时间片轮询架构:
c复制void SensorScan(void) {
static uint32_t tick = 0;
if(HAL_GetTick() - tick > 20) { // 50Hz采样
tick = [HAL](https://taotoken.net/?utm_source=hardware)_GetTick();
MAX30102_ReadFIFO(); // 光学数据
ADXL345_GetData(); // 加速度数据
DS18B20_ReadTemp(); // 温度数据
}
}
4.2 心率算法实现细节
基于PPG信号的改进算法:
- 原始信号预处理:
- 滑动平均滤波(窗口5点)
- 巴特沃斯带通滤波(0.5Hz-5Hz)
- 特征提取:
- 自适应阈值峰值检测
- 波谷二次验证
- 后处理:
- 异常值剔除(中值滤波)
- 心率变异性补偿
实测算法在静息状态下误差<2bpm,运动状态需结合加速度计数据进行运动伪影消除。
5. 生产测试与问题排查
5.1 常见故障现象及解决方法
| 故障现象 | 可能原因 | 解决方案 |
|---|---|---|
| 血氧读数波动大 | 手指接触不良 | 增加硅胶垫提升贴合度 |
| GPS定位慢 | 天线阻抗失配 | 调整匹配电路LC参数 |
| 蓝牙连接中断 | 电源纹波过大 | 增加10μF钽电容 |
5.2 老化测试数据
连续72小时测试结果:
- 平均功耗:18.7mA@3.3V
- 温度漂移:±0.3℃
- 心率测量稳定性:98.2%
6. 项目优化方向
-
低功耗改进:
- 改用STM32L4系列MCU
- 增加光学传感器省电模式
- 动态调整GPS更新率
-
算法升级:
- 引入机器学习进行运动补偿
- 实现血压趋势预测(需FDA认证)
-
生产优化:
- 改用JLC的SMT贴片服务
- 外壳开模成本评估
这个项目最让我意外的是ADXL345的计步精度——经过参数调优后,实测步数误差可以控制在1%以内。不过GPS模块在室内完全不可用这点还是硬伤,下一版考虑增加LBS基站定位作为补充。