1. 项目概述与核心价值
这个基于STM32F103C8T6的心电图检测仪项目,是我在指导嵌入式系统课程设计时开发的典型案例。作为一款教学级ECG采集系统,它完整实现了从模拟信号调理到数字波形显示的全流程,特别适合作为电子类专业学生从单片机基础向生物医学电子领域过渡的实践平台。
选择STM32F103这颗经典芯片主要基于三点考量:首先是其Cortex-M3内核的性价比优势,72MHz主频完全能满足实时信号处理需求;其次是丰富的外设资源,内置12位ADC和多路定时器简化了硬件设计;最重要的是其庞大的开发者社区,学生遇到问题更容易找到解决方案。实测表明,配合适当的软件优化,这套方案可以稳定采集0.05-100Hz范围的心电信号,QRS波检测准确率达到临床监护仪基础水平。
2. 硬件系统架构解析
2.1 信号调理电路设计
心电信号属于微伏级生物电信号,前端处理需要特别注意:
- 采用AD620仪表放大器构建差分放大电路,共模抑制比达到90dB以上
- 高通滤波采用0.5Hz二阶有源滤波器,消除呼吸运动等基线漂移
- 低通滤波设置为100Hz四阶巴特沃斯结构,保留有效频段的同时抑制肌电干扰
- 右腿驱动电路通过反向放大反馈降低共模干扰,这是医疗设备的标准做法
关键提示:所有运放电源必须使用低噪声LDO供电,我选用TPS7A4700提供±5V电压,实测噪声比普通DC-DC模块降低60%
2.2 主控模块选型要点
STM32F103C8T6的最小系统设计有几个易错点:
- 复位电路建议采用10kΩ上拉+100nF电容组合,避免手动复位按钮接触不良
- 晶振负载电容需根据具体晶振参数调整,22pF是常见值但非绝对
- ADC参考电压引脚必须单独接0.1μF去耦电容,否则采样值会有周期性波动
- 模拟部分电源最好通过磁珠与数字电源隔离,我在AVDD和VDD之间使用了600Ω@100MHz的磁珠
3. 软件实现关键技术
3.1 实时信号处理流程
c复制// 伪代码展示处理流程
while(1) {
ECG_RAW = ADC_GetValue(); // 原始采样
ECG_Filtered = Notch50Hz(ECG_RAW); // 陷波滤波
ECG_Smooth = MovingAverage(ECG_Filtered, 5); // 滑动平均
QRS_Detect(ECG_Smooth); // 特征点检测
LCD_Refresh(WaveBuffer); // 波形刷新
}
数字滤波器的实现要点:
- 50Hz陷波采用二阶IIR滤波器,系数通过MATLAB fdatool生成
- 移动平均窗口长度建议5-7点,过长会导致P波和T波失真
- QRS检测使用差分阈值法,配合动态阈值调整适应不同心率
3.2 低功耗优化技巧
虽然教学项目对功耗不敏感,但良好的低功耗设计习惯值得培养:
- 采样间隔用定时器精确控制,非采样期间关闭ADC电源
- 显示屏刷新采用区域更新策略,避免全屏刷新耗电
- 主循环内加入__WFI()指令,使CPU在空闲时进入睡眠模式
- 将不用的GPIO设置为模拟输入模式减少漏电流
4. 典型问题排查指南
4.1 信号干扰问题
现象:波形出现规律性毛刺
- 检查所有接地是否共星型一点接地
- 尝试用铝箔屏蔽导联线
- 确认电源滤波电容是否足够(建议每芯片0.1μF+10μF组合)
4.2 基线漂移问题
现象:波形缓慢上下移动
- 检查高通滤波器截止频率是否过低(建议0.5Hz)
- 确认电极与皮肤接触良好,必要时使用导电膏
- 排除呼吸运动影响,可让被测者短暂屏息测试
5. 教学实践建议
在课程设计中,我建议分阶段实施:
- 第一阶段:实现基础数据采集(ADC配置+串口打印)
- 第二阶段:加入数字滤波算法(先实现移动平均)
- 第三阶段:开发QRS检测等高级功能
- 最终阶段:优化显示效果和用户界面
这种渐进式开发能让学生更好理解系统架构,避免直接面对复杂工程时的挫败感。实测表明,经过4周32学时的训练,学生基本都能独立完成基础功能开发。
