基于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. 应用场景
- 家庭健康监测:实时显示心电波形,异常自动报警
- 运动康复评估:监测运动过程中心率变异(HRV)
- 远程医疗:通过蓝牙/WiFi传输数据至手机APP
8. 改进方向
- 增加导联:扩展为3导联(LA/RA/LL)
- 算法升级:集成FFT频谱分析(心率变异性)
- 云平台对接:通过ESP8266上传数据至云端
浙公网安备 33010602011771号