1. 项目概述
这个基于STM32单片机的心率体温监测系统是一个典型的嵌入式医疗电子设备开发案例。作为一名从事医疗电子设备开发多年的工程师,我经常需要设计类似的生理参数监测装置。这个项目虽然基础,但涵盖了从传感器选型、信号处理到无线通信的完整开发流程,非常适合初学者学习嵌入式系统开发的全过程。
系统核心功能包括:
- 实时采集心率和体温数据
- 本地LCD显示测量结果
- 阈值报警功能
- 蓝牙无线数据传输
在实际医疗设备开发中,这类基础监测设备是更复杂系统的基石。通过这个项目,我们可以掌握医疗电子设备开发的基本方法论。
2. 硬件设计详解
2.1 核心控制器选型
我们选用STM32F103C8T6作为主控制器,这是医疗电子设备开发中的常见选择:
- Cortex-M3内核,72MHz主频,处理性能足够
- 64KB Flash + 20KB RAM,满足程序存储需求
- 丰富的外设接口(ADC、USART、GPIO等)
- 低功耗特性适合便携设备
提示:医疗设备开发中,处理器的EMC性能同样重要。STM32系列在这方面表现良好,能有效抑制医疗环境中的电磁干扰。
2.2 心率检测模块设计
心率检测采用光电式脉搏传感器,这是非侵入式测量的首选方案:
-
传感器选型:使用常见的MAX30102集成模块
- 集成LED、光电检测器和环境光抑制电路
- I2C接口,便于与STM32通信
- 采样率可调,最高可达3.2ksps
-
信号处理电路:
- 原始信号经过RC低通滤波(截止频率5Hz)
- 使用STM32内置ADC进行模数转换
- 软件算法实现峰值检测
2.3 体温检测模块
采用DS18B20数字温度传感器:
- 测量范围:-55°C ~ +125°C
- 精度:±0.5°C(医疗级要求)
- 单总线接口,节省IO资源
- 防水封装适合体表温度测量
2.4 人机交互设计
-
LCD1602显示模块:
- 2行16字符显示
- 并行接口连接
- 显示当前心率和体温值
-
按键输入:
- 4个独立按键(设置、加、减、确认)
- 硬件消抖电路(100nF电容+10kΩ电阻)
-
报警输出:
- 有源蜂鸣器(5V驱动)
- LED指示灯(红/绿双色)
2.5 蓝牙通信模块
采用HC-05主从一体蓝牙模块:
- 兼容蓝牙2.0+EDR规范
- 串口透传模式
- 通信距离约10米(室内环境)
- 配对密码可设置(默认1234)
3. 软件设计实现
3.1 系统软件架构
采用前后台系统架构:
code复制主循环(后台):
- 传感器数据采集
- 数据显示更新
- 报警状态检测
中断服务(前台):
- 定时器中断(1ms)
- 串口接收中断
- 外部按键中断
3.2 心率算法实现
采用动态阈值峰值检测算法:
-
原始信号预处理:
- 移动平均滤波(窗口大小=5)
- 带通滤波(0.5Hz-5Hz)
-
峰值检测:
c复制#define THRESHOLD_RATIO 0.6
float dynamic_threshold = 0;
uint16_t peak_count = 0;
void detect_peak(float sample) {
static float max_val = 0;
if(sample > max_val) {
max_val = sample;
}
if(sample < max_val * THRESHOLD_RATIO && sample > max_val * 0.3) {
peak_count++;
dynamic_threshold = max_val * 0.7;
max_val = 0;
}
}
- 心率计算:
- 统计30秒内的峰值数
- 乘以2得到每分钟心率值(BPM)
3.3 体温测量实现
DS18B20驱动关键代码:
c复制float read_temperature(void) {
uint8_t temp_l, temp_h;
int16_t temp;
DS18B20_Start();
DS18B20_Read_Byte(&temp_l);
DS18B20_Read_Byte(&temp_h);
temp = (temp_h << 8) | temp_l;
return temp * 0.0625; // 12位分辨率
}
3.4 蓝牙通信协议设计
自定义简单协议格式:
code复制帧头(0xAA) | 数据类型(1字节) | 数据长度(1字节) | 数据(N字节) | 校验和(1字节) | 帧尾(0x55)
心率数据帧示例:
code复制AA 01 02 4B 1E 98 55
解释:
- 0xAA: 帧头
- 0x01: 心率数据类型
- 0x02: 数据长度2字节
- 0x4B1E: 心率值(19230 => 实际值=192.30BPM)
- 0x98: 校验和
- 0x55: 帧尾
4. 系统调试与优化
4.1 常见问题排查
-
心率测量不稳定:
- 检查传感器贴合度(应紧密接触皮肤)
- 调整LED驱动电流(通常15-20mA)
- 优化算法参数(滤波窗口大小)
-
蓝牙连接中断:
- 检查模块供电(需稳定3.3V)
- 确认波特率匹配(通常9600bps)
- 避免强电磁干扰环境
-
显示异常:
- 检查对比度调节电位器
- 确认初始化时序正确
- 测试各引脚连接可靠性
4.2 性能优化技巧
-
低功耗优化:
- 空闲时进入STOP模式
- 动态调整传感器采样率
- 关闭不必要的外设时钟
-
算法优化:
- 使用查表法替代浮点运算
- 采用DMA传输传感器数据
- 优化中断服务程序
-
抗干扰设计:
- PCB布局分区(数字/模拟)
- 添加磁珠和去耦电容
- 采用屏蔽线缆连接传感器
5. 项目扩展方向
在实际产品开发中,这个基础系统可以进一步扩展:
-
增加数据存储功能:
- 添加SD卡模块记录历史数据
- 实现FATFS文件系统
-
云端数据传输:
- 替换为WiFi或4G模块
- 对接医疗云平台
-
多参数监测:
- 加入血氧检测(MAX30102支持)
- 增加呼吸频率监测
-
产品化改进:
- 设计专用外壳
- 通过医疗认证(如CE、FDA)
- 开发专业配套APP
这个项目虽然简单,但涵盖了医疗电子设备开发的完整流程。我在实际开发中发现,信号处理算法的优化往往需要大量实测数据迭代,建议开发者建立自己的测试数据库。另外,医疗设备的可靠性要求极高,需要充分考虑各种异常情况的处理。