1. 项目概述
这个超低功耗血压计和心率监视系统是我去年为一个健康监测设备公司开发的嵌入式项目。核心目标是在纽扣电池供电环境下实现长达6个月的连续监测功能,同时保证医疗级测量精度。整套系统基于STM32L4系列MCU开发,全部用C语言实现,最终实测功耗仅18μA(1分钟测量间隔)。
在可穿戴设备爆发的今天,这类超低功耗生物信号监测方案有着巨大市场需求。传统方案要么功耗太高(比如那些需要每天充电的智能手表),要么精度不足(很多廉价手环的心率误差超过±5bpm)。我们这个方案正好填补了市场空白。
2. 硬件架构设计
2.1 传感器选型
血压和心率监测的核心是光电传感器(PPG)和压力传感器。经过多轮对比测试,我们最终选定以下组合:
-
PPG传感器:Maxim MAX30102
- 集成红光/红外LED和光电接收器
- 自带环境光消除算法
- 功耗仅0.75mW@50Hz采样率
- I²C接口,方便与MCU通信
-
压力传感器:TE Connectivity MS5637
- 分辨率0.016mbar(相当于1.5cm高度差)
- 工作电流仅1.2μA
- 内置温度补偿
提示:传感器选型时要特别注意厂商提供的算法支持。比如MAX30102就自带心率计算算法,可以大幅降低MCU负担。
2.2 MCU选型与配置
STM32L476RG是我们的最终选择,关键配置如下:
c复制// 时钟配置
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_MSI;
RCC_OscInitStruct.MSIState = RCC_MSI_ON;
RCC_OscInitStruct.MSICalibrationValue = RCC_MSICALIBRATION_DEFAULT;
RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_6; // 4MHz
特别注意:
- 使用MSI内部时钟而非外部晶振,节省0.5μA
- 主频降至4MHz(足够处理传感器数据)
- 关闭所有未用外设时钟
3. 低功耗实现方案
3.1 电源管理架构
系统采用三级电源管理策略:
-
传感器电源域:通过MOSFET单独控制
- 测量前通电,测量后立即断电
- 节省约85%的传感器待机功耗
-
MCU运行模式:
- 99%时间处于STOP2模式(1.4μA)
- 仅在RTC唤醒时进入Run模式
-
无线传输:BLE模块完全独立供电
- 仅在有数据传输需求时启动
- 采用快发快断策略
3.2 关键代码实现
c复制void Enter_Stop_Mode(void)
{
HAL_SuspendTick(); // 关闭SysTick
HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);
SystemClock_Config(); // 唤醒后重新初始化时钟
}
实测数据:
- 从STOP2模式唤醒到测量完成仅需8ms
- 每次测量消耗0.024mAh电量
- 按每天30次测量计算,理论续航208天
4. 信号处理算法
4.1 心率计算
采用时域分析法,核心步骤:
- 原始信号滤波(0.5-5Hz带通)
- 峰值检测(动态阈值法)
- RR间期计算
- 异常值剔除(基于前后5个周期均值)
c复制float Calculate_HR(uint32_t *peak_intervals, uint8_t count)
{
float sum = 0;
uint8_t valid_count = 0;
for(int i=2; i<count-2; i++) {
float avg = (peak_intervals[i-2]+peak_intervals[i-1]+
peak_intervals[i+1]+peak_intervals[i+2])/4.0;
if(fabs(peak_intervals[i]-avg) < avg*0.2) {
sum += peak_intervals[i];
valid_count++;
}
}
return 60000.0/(sum/valid_count); // 转换为bpm
}
4.2 血压计算
采用脉搏波传导时间(PTT)法,建立特征方程:
code复制SBP = a * ln(PTT) + b
DBP = c * ln(PTT) + d
其中系数a/b/c/d需要通过临床校准获得。我们与某三甲医院合作,采集了120组数据建立个性化模型。
5. 实测数据与优化
5.1 功耗测试结果
| 工作状态 | 电流消耗 | 持续时间 | 占比 |
|---|---|---|---|
| STOP2模式 | 1.4μA | 59.8s | 99.67% |
| 传感器测量 | 3.2mA | 0.15s | 0.25% |
| 数据处理 | 2.1mA | 0.05s | 0.08% |
实测平均功耗:18.7μA @ CR2032电池
5.2 精度验证
与欧姆龙医用血压计对比测试(N=50):
| 参数 | 平均误差 | 标准差 |
|---|---|---|
| 心率 | ±1.2bpm | 0.8 |
| 收缩压 | ±3.1mmHg | 2.4 |
| 舒张压 | ±2.8mmHg | 2.1 |
6. 生产注意事项
-
光电传感器贴合度:
- 必须使用医疗级硅胶垫
- 接触压力保持在20-30g/cm²
- 实测显示压力偏差5g会导致心率误差增加40%
-
天线设计:
- BLE天线周围5mm内不得有金属元件
- 建议采用陶瓷天线而非PCB天线
- 天线效率直接影响传输功耗
-
固件更新:
- 保留SWD接口但默认禁用
- 通过BLE OTA更新时需启用双重校验
这个项目最大的收获是认识到低功耗设计必须系统级优化。单看MCU的1.4μA待机电流似乎很完美,但如果不控制好传感器供电策略,整体功耗可能增加10倍。后来我们通过示波器抓取电源波形,才发现压力传感器上电时有50ms的浪涌电流(达8mA),优化后立即提升了30%的续航。