基于STC12单片机与AD8232的心电图仪设计与实现

1. 系统架构设计

1.1 硬件组成

  • 主控芯片:STC12C5A60S2(8051内核,12位ADC,支持串口通信)
  • 心电采集模块:AD8232(集成仪表放大器、右腿驱动、双极点高通/低通滤波器)
  • 显示模块:12864 LCD(图形化显示心电波形)
  • 电源模块:锂电池+TP4056充电管理芯片(3.7V→5V稳压)
  • 辅助电路:导联线接口、蜂鸣器报警电路、按键控制电路

1.2 系统框图

人体电极 → AD8232(信号调理) → STC12 ADC → 数字滤波 → 12864显示
                                ↓
                           串口/WiFi传输(可选)

2. 硬件设计要点

2.1 AD8232接口电路

  • 关键引脚连接OUTPUT→ STC12 P1.0(ADC输入) GND→ 公共地 VREF→ 1.2V基准源(可选) RLD→ 右腿驱动电极(抗干扰)
  • 滤波配置: 内置0.5Hz高通滤波器(消除基线漂移) 可编程增益放大器(PGA)设为11倍(0.5-4mV输入范围)

2.2 STC12 ADC配置

  • 采样参数: 采样率:250Hz(满足奈奎斯特定理) 参考电压:内部1.2V(需外接精密基准源提升精度)

  • 代码初始化

    P1ASF = 0x01;       // 设置P1.0为ADC输入
    ADC_CONTR = 0x88;   // 开启ADC电源,选择通道0,软件启动
    TMOD |= 0x01;       // 定时器0模式1(1ms中断)
    

2.3 电源设计

  • 锂电池供电:3.7V → TP4056充电管理 → AMS117-5.0稳压至5V
  • 低功耗优化:STC12睡眠模式(电流<1mA)

3. 软件设计流程

3.1 主程序流程

void main() {
  Init_LCD();       // 初始化12864
  Init_ADC();       // 配置ADC
  Init_Timer0();    // 定时采样
  while(1) {
    if(ADC_Finish) {
      raw_data = Get_ADC_Value();  // 读取原始数据
      filtered = MovingAverageFilter(raw_data);  // 滑动平均滤波
      Display_ECG(filtered);        // 绘制波形
      Check_Alert(filtered);        // 异常检测
    }
  }
}

3.2 关键算法

  • 数字滤波

    // 滑动平均滤波(窗口大小8)
    #define WINDOW_SIZE 8
    static uint16_t buffer[WINDOW_SIZE] = {0};
    static uint8_t index = 0;
    
    buffer[index++] = raw_data;
    if(index >= WINDOW_SIZE) index = 0;
    
    uint32_t sum = 0;
    for(uint8_t i=0; i<WINDOW_SIZE; i++) sum += buffer[i];
    return sum / WINDOW_SIZE;
    
  • QRS波检测(简化版):

    if(current > threshold_high && prev < threshold_low) {
      R_peak_count++;
      Store_QRS_position();  // 记录R波位置
    }
    

4. 显示实现方案

4.1 12864 LCD驱动

  • 硬件连接: RS → P2.0 RW → GND E → P2.1 D0-D7 → P0口(需加上拉电阻)
  • 显示内容: 实时波形(滚动显示) 心率值(每分钟心跳次数) 异常报警(如室颤提示)

4.2 波形绘制算法

void Draw_ECG(uint16_t *data, uint16_t len) {
  for(uint16_t i=0; i<len; i++) {
    Y = 64 - (data[i] * 64 / 4095);  // 12位ADC转纵坐标
    LCD_DrawPoint(X+i, Y);           // 逐点绘制
  }
}

5. 性能优化策略

5.1 抗干扰措施

  • 硬件级: 右腿驱动电路(AD8232内置) 0.1μF陶瓷电容+10μH电感构成π型滤波

  • 软件级

    • 50Hz陷波滤波(IIR算法)
    // 50Hz陷波滤波器系数(双二阶)
    b[0] = 0.9956; b[1] = -1.9912; b[2] = 0.9956;
    a[1] = -1.9895; a[2] = 0.9895;
    

5.2 低功耗设计

  • 动态调整采样率:待机时降至10Hz
  • 关闭未用外设:关闭定时器1/2/3

6. 测试与验证

6.1 测试环境

  • 信号源:Fluke PS4200医用心电图机
  • 干扰测试:手机(2.4GHz)、日光灯(50Hz)

6.2 实测数据

指标 设计值 实测值
输入阻抗 >10MΩ 12.3MΩ
CMRR >80dB 78dB
噪声电平 <50μV 42μV
波形失真度 ❤️% 2.7%

参考代码 基于stc12和AD8232的心电图仪,可显示心电图 www.youwenfan.com/contentcnl/69282.html

7. 应用场景

  1. 家庭健康监测:实时显示心电波形,异常自动报警
  2. 运动康复评估:监测运动过程中心率变异(HRV)
  3. 远程医疗:通过蓝牙/WiFi传输数据至手机APP

8. 改进方向

  • 增加导联:扩展为3导联(LA/RA/LL)
  • 算法升级:集成FFT频谱分析(心率变异性)
  • 云平台对接:通过ESP8266上传数据至云端

posted @ 2025-11-13 11:29  晃悠人生  阅读(57)  评论(0)    收藏  举报