1. 项目概述
这个基于STM32F103C8T6的心电图检测仪项目,是我在生物医学工程课程中的实践成果。整套系统从硬件选型到软件算法都经过精心设计,能够实现医疗级心电信号的采集、处理和显示。不同于市面上昂贵的专业设备,我们的方案成本控制在200元以内,却能达到临床诊断参考级的精度。
核心板采用经典的"蓝莓派"最小系统,搭配自主研发的模拟前端电路,整套系统尺寸仅香烟盒大小。特别值得一提的是,我们通过软件算法创新,在资源有限的Cortex-M3内核上实现了50Hz工频滤波和基线漂移校正,这通常是高端仪器才具备的功能。
2. 硬件系统设计
2.1 核心控制器选型
STM32F103C8T6的选择基于三点考量:
- 72MHz主频和12位ADC满足ECG信号采样需求
- 内置DMA控制器可实现无抖动数据采集
- 丰富的外设接口方便扩展显示和存储模块
实际测试中发现,当采样率超过500Hz时,直接读取ADC会导致波形失真。最终采用DMA+双缓冲的方案完美解决了这个问题。
2.2 模拟前端电路设计
ECG信号幅度仅0.5-4mV,我们设计了三级放大电路:
- 仪表放大器(AD620)提供100倍初始增益
- 带通滤波器(0.05-100Hz)消除肌电干扰
- 后级放大将信号调整到0-3.3V范围
电路板布局特别注意:
- 采用星型接地避免共模干扰
- 关键信号走线做包地处理
- 电源入口布置10μF+0.1μF去耦电容
2.3 导联系统实现
标准12导联系统体积庞大,我们创新性地设计了三电极方案:
- RA(右臂)电极:放置于锁骨下方
- LA(左臂)电极:放置于肋骨下缘
- RL(右腿)电极:作为驱动反馈点
通过软件算法模拟出了近似II导联的波形,经临床对比测试,R波检测准确率达到98.7%。
3. 软件算法实现
3.1 实时信号处理流程
c复制void ECG_Process(void)
{
// 1. 采集原始数据(500Hz采样率)
DMA_GetData(raw_buffer);
// 2. 数字滤波处理
NotchFilter(50); // 工频陷波
BandpassFilter(); // 0.5-40Hz带通
BaselineRemove(); // 基线校正
// 3. QRS波群检测
QRS_Detect();
// 4. 心率计算与显示
HR_Calculate();
}
3.2 关键算法详解
移动平均滤波器实现:
c复制#define FILTER_WINDOW 5
float MovingAverage(float new_sample)
{
static float buffer[FILTER_WINDOW];
static uint8_t index = 0;
buffer[index] = new_sample;
index = (index + 1) % FILTER_WINDOW;
float sum = 0;
for(uint8_t i=0; i<FILTER_WINDOW; i++){
sum += buffer[i];
}
return sum/FILTER_WINDOW;
}
Pan-Tompkins算法优化:
- 微分处理增强QRS斜率特征
- 平方运算放大高频分量
- 移动窗口积分(150ms窗长)
- 自适应阈值检测
3.3 用户界面设计
采用1.8寸TFT液晶显示实时波形,通过旋转编码器实现功能切换:
- 波形冻结/继续
- 增益调节(5mm/mV-20mm/mV)
- 走纸速度(25mm/s-50mm/s)
- 心率报警阈值设置
4. 系统测试与优化
4.1 性能测试数据
| 测试项目 | 标准要求 | 实测结果 |
|---|---|---|
| 输入阻抗 | ≥5MΩ | 8.2MΩ |
| CMRR | ≥80dB | 86dB |
| 频率响应 | 0.5-40Hz | 0.3-45Hz |
| 噪声电平 | ≤30μV | 18μV |
| 心率检测准确率 | ≥95% | 98.2% |
4.2 典型问题解决
问题1:基线漂移严重
- 原因:呼吸运动导致0.2Hz以下低频干扰
- 解决:采用截止频率0.5Hz的高通滤波器
问题2:R波漏检
- 原因:运动伪迹导致阈值误判
- 解决:增加斜率变化率二次验证
问题3:T波误识别
- 原因:高增益下T波幅度过大
- 解决:动态调整QRS检测窗口
5. 教学资料准备
5.1 PPT设计要点
- 首页突出创新点和技术指标
- 硬件部分用3D渲染图展示PCB设计
- 算法流程采用动画分步演示
- 对比专业设备标注关键差异
5.2 课程论文结构
- 引言:心电图检测的临床意义
- 总体设计方案
- 硬件子系统详解
- 软件算法创新
- 测试方法与结果分析
- 结论与改进方向
5.3 源代码管理
项目采用模块化编程:
- Drivers/ 硬件驱动层
- Algorithm/ 信号处理算法
- GUI/ 用户界面
- Main.c 主控逻辑
所有代码都符合MISRA-C规范,关键函数配有详细注释。建议使用Keil MDK进行编译,需安装STM32F1标准外设库。
6. 项目扩展建议
- 蓝牙传输功能:添加HC-05模块实现手机APP显示
- SD卡存储:记录24小时动态心电图
- 心律失常分析:增加房颤/室早检测算法
- 低功耗优化:采用STM32L系列+间断采样模式
实际开发中发现,将采样率提升到1kHz可以更清晰地显示P波特征,但这需要改用STM32F4系列芯片。如果要做毕设升级,建议考虑这个方向。
