在嵌入式医疗健康监测领域,精准的生理信号采集是核心需求之一。本次我们借助 ST 的 STM32F405RGT6 微控制器与 PulseSensor 脉搏传感器,搭建一套简易的心率检测系统,探索 STM32F405 的 ADC 性能与传感器的结合应用。
一、硬件选型:为什么选这对“组合”?
1.STM32F405RGT6:为生理信号采集量身定制
作为 Cortex-M4 内核的经典型号,STM32F405RGT6 的核心优势集中在 “信号处理能力” 和 “外设适配性”,尤其适合心率这类弱模拟信号采集:
**ADC性能:**内置 3 个12位 ADC,单通道采样率 1Msps,分辨率 0.805mV,精准捕捉 PulseSensor 的 0.1V 级脉搏电压波动;
**资源沉余:**1MB Flash+192KB RAM,可存储滤波算法并缓存 10 秒采样数据;
**低功耗适配:**支持 ADC 低功耗模式,采样电流约 120μA,待机电流≤20μA,适配可穿戴续航需求。
2.PulseSensor:无需调理电路的 “即插即用” 传感器
这款传感器的优势在于 “简化硬件设计”,作为新手的我不用搭放大电路就能用:
**原理:**绿光 LED + 光敏二极管,通过血红蛋白反射光强度变化输出 0-3.3V 模拟电压,与脉搏同步;
**引脚友好:**3 引脚(VCC、GND、S),即插即用无需校准。
二、性能实测:ADC 与 PulseSensor 的 “默契配合”
查了 STM32F406RGT6 的 datasheet 后,更觉得它是心率测量的 “好搭档”,特意整理了它和传统用于心率采集的 MCU 的参数对比,优势特别明显:
三、实测验证:精度与稳定性双优
用 STM32CubeMX 快速配置 ADC 核心参数:选 ADC1 通道 0,设 12 位分辨率与连续转换模式,采样率达 100ksps;开启 DMA1 通道 0 将数据直存adc_buf[1000]缓冲区,配合 16 点滑动平均滤波滤除高频噪声,既保证采样速度又降低干扰。
实测中,信号经 USART1(115200 波特率)传至电脑,波形清晰呈现脉搏收缩 / 舒张的电压波动:心率实测平均稳定在 69次 / 分。
三、代码关键逻辑:
CubeMX生成基础代码后,只需补充3段核心逻辑:
ADC启动和DMA初始化
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buf, 1000);
峰值检测与心率计算:
uint8_t heart_rate = 0;
uint16_t peak_count = 0;
for(int i=5; i<995; i++){
// 判定峰值:当前值比前后5个点高10%以上
if(adc_buf\[i\] > adc_buf\[i-5\]\*1.1 && adc_buf\[i\] > adc_buf\[i+5\]\*1.1){
peak_count++;
HAL_Delay(10); }
}
heart_rate = peak_count * 6; // 统计10秒峰值数,乘以6得每分钟心率
OLED显示:
SSD1306_Clear();
SSD1306_GotoXY(20, 10);
SSD1306_Puts(“Heart Rate:”, &Font_16x24, 1);
SSD1306_GotoXY(60, 40);
SSD1306_PutNum(heart_rate, &Font_16x24, 1);
SSD1306_Puts(" BPM", &Font_16x24, 1);
SSD1306_UpdateScreen();
四、结论:
本系统实际测试中,通过串口实时回传的心率数据(B 值)稳定在 68-70 次 / 分,验证了 STM32F405RGT6 与 PulseSensor 组合的运行可行性:实际心率波动小、串口数据传输稳定,且硬件连接简便无需额外调理电路,低成本适配简易心率监测原型开发场景。


