如今,心血管类疾病已经成为威胁人类身体健康的重要疾病之一,而清晰有效的心电图为诊断这类疾病提供了依据,心电采集电路是心电采集仪的 关键部分,心电信号属于微弱信号,其频率范围在0.03~100 Hz之间,幅度在0~5 mV之间,同时心电信号还掺杂有大量的干扰信号,因此,设计良好的滤波电路和选择合适的控制器是得到有效心电信号的关键。基于此,本文设计了以STM32 为控制核心,AD620和OP07为模拟前端的心电采集仪,本设计简单实用,噪声干扰得到了有效抑制。
1 总体设计方案
心电采集包括模拟采集和数字处理两部分,本设计通过AgCl电极和三导联线心电采集线采集人体心电信号,通过前置放大电路,带通滤波电路,50 Hz双T陷波后再经主放大电路和电平抬升电路把心电信号的幅度控制在STM32的A/D采集范围内,STM32通过定时器设定A/D采样频率,通过均值滤波的方式对得到的数字信号进行处理,最后在彩屏上描绘出心电图形,系统总体框图如图1所示。
图1 系统总体框图
2 硬件设计
2.1 主控模块电路设计
主 控模块的STM32F103VET单片机是控制器的核心,该单片机是ST意法半导体公司生产的32位高性能、低成本和低功耗的增强型单片机,其内核采用 ARM公司最新生产的Cortex—M3架构,最高工作频率72 MHz、512 kB的程序存储空间、64 kB的RAM,8个定时器/计数器、两个看门狗和一个实时时钟RTC,片上集成通信接口有两个I2C、3个SPI、5个USART、一个USB、一个 CAN、一个SDIO,并集成有3个ADC和一个DAc,具有100个I/O端口。主控单片机管脚排列图如图2所示。
图2 STM32F103VET单片机管脚排列图
2.2 前置放大电路的设计
前 置放大电路是模拟信号采集的前端,也是整个电路设计的关键,它不仅要求从人体准确地采集到微弱的心电信号,还要将干扰信号降到最低,由于心电信号属于差分 信号,所以电路应采用差动放大的结构,同时要求系统具有高共模抑制比、高输入阻抗、低漂移等特点。因此,选择合适的运算放大器至关重要,这里选择仪用运放 AD620实现前置放大,AD620具有高精度、低噪声、低输入偏置电流低功耗等特点,使之适合ECG监测仪等医疗应用。AD620的放大倍数由1与8脚 之间的反馈电阻决定,增益G=49.4 kΩRG+1,由于心电信号中含有较大的直流分量,因此前置放大电路的放大倍数不能过大,在这里选择放大约10倍,因此反馈电阻R6取约5 kΩ,为提高电路的共模抑制能力,这里用一个OP07检测R10,R4上的共模信号驱动导线屏蔽层,消除分布电容。同时用另一个OP07运放和 R5,C3,R7组成右腿驱动电路,在R10,R4上检测到的共模信号经反相放大器后经R7,反馈到人的右腿,进一步抑制了共模信号和50 Hz工频干扰,这里右腿驱动有一个对交流电的反馈通路,交流电的干扰可能对人体产生危害,因此这里要注意做好绝缘措施,同时保护电阻R7尽可能大,取1 MΩ以上。此外系统电源的不稳定也对心电信号的采集有较大影响,因此在本系统中,所有运放的电源脚都并联两个0.1μF和10μF的电容退耦,提高系统的 稳定性,前置放大电路的电路图如图3所示。
图3 前置放大电路
2.3 带通滤波器的设计
从 前置放大电路输出的心电信号还含有较大直流分量和肌电信号,基线漂移等干扰成分,所需采集的有用心电信号在0.03~100 Hz范围之间,因此需设计合理的滤波器使该范围内的信号得以充分通过,而该范围以外的信号得到最大限度的衰减,这里采用具有高精度,低偏置,低功耗特点的 两个OP07运放分别组成二阶有源高通滤波器和低通滤波器,高通滤波器由C11,C17,R7,R10组成,截止频率f1≈0.03 Hz,低通滤波器由R8,R9,C10,C13组成,截止频率约为f2≈100 Hz,系统带通滤波器的电路如图4所示。[page]
图4 带通滤波器
2.4 50 Hz双T陷波器设计
工 频是心电信号中最主要也最常见的干扰源,虽然前面的右腿驱动电路对其有一定的抑制作用,但是仍有较大部分进入了后面的电路,因此有必要设计截止频率为50 Hz的带阻电路来进一步滤除干扰,带阻电路也称陷波器,顾名思义,带阻电路就是使某特定频率范围内的信号大幅衰减,而对该频率范围外的信号几乎不产生影 响。双T陷波电路是典型的带阻电路,在双T网络中,两个T型网络的参数是对称的,如图5所示的50 Hz双T陷波电路中,R13=R14=2R16=R=32 kΩ,C20=2C19=2C18=C=200 nF,本质上是由两个T型高通滤波器和低通滤波器并联组成,图5所示电路的截止频率f0=1/2πRC≈50 Hz。
图5 50Hz 带阻滤波器
2.5 主放大以及电平抬升电路设计
心 电信号的幅度约为0~4 mV,STM32 AD转换的输入电平要求为3.3 V,因此,为了单片机能够处理采集到心电信号,需将采集到的模拟信号放大800~1 000倍。前置放大电路已放大了10倍,理论上主放大电路约放大100倍即可。为确保信号不失真,一般单级放大不超过10倍,因此,可采取两级放大的方式 来达到放大100倍的效果,U9固定放大10倍,U11的反馈电阻采用可调电阻,这样就可以通过变阻器的调节达到放大100的效果。此外,因为STM32 单片机的A/D采集不能采集负电平,因此这里设计了如U7所示的电平抬升电路把心电信号提到0电平以上,方便单片机采集。
图6 主放大以及电平抬升电路电路
3 软件设计
得到心电信号后要输入STM32进行AD采集和软件滤波,最终送LCD实现波形显示,单片 机初始化后,程序设计定时器每6 ms中断一次,在中断函数里,对读取到的A/D值采取均值滤波的形式滤除干扰,然后把之转换与彩屏对应的坐标值,在彩屏上画线实现波形的实时显示,整个系 统的程序流程如图7所示。
图7 系统软件流程图
4 测试结果分析
通过电极片和三导联线在人的左臂,右臂,右腿部采集心电信号经前端模拟电路和STM32处理后,最后在示波器和彩屏上得到的心电信号如图8所示。
图8 系统效果展示图
从彩屏和示波器上所得的心电图来看,50 Hz工频信号和基线漂移得到了较好的抑制,从示波器上可看出,相邻两个波峰之间的时间大约为900 ms,这与真实的心电信号基本吻合,图像清晰稳定,能够较好地反映人体心电特征。
5 结束语
本设计实现的是以STM32为控制核心,以AD620,OP07为模拟信号采集端的小型心电采集仪,该设计所测心电波形基本正常,噪声干扰得到有效抑制,电路性能稳定,基本满足家居监护以及病理分析的要求,整个系统设计简单,成本低廉,具有一定的医用价值。
关键字:STM32 心电采集
引用地址:
基于STM32的心电采集设计
推荐阅读最新更新时间:2024-03-16 14:27
STM32外设驱动篇——DHT11温湿度传感器
已在STM32上进行过测试。本例使用PC0引脚连接DHT11的data引脚。 main函数中调用下面代码中的DTH11_test函数即可。 //数据定义: //----以下变量均为全局变量-------- //----温度高8位== U8T_data_H------ //----温度低8位== U8T_data_L------ //----湿度高8位== U8RH_data_H----- //----湿度低8位== U8RH_data_L----- //----校验 8位 == U8checkdata----- u8 U8T_data_H,U8T_data_L,U8RH_d
[单片机]
STM32单片机TIM3蜂鸣器播放音乐
下面这段代码有个小bug,软件仿真PORTB.5 beep 波形正常,如下图所示 但下到我的开发板上,beep没有声音,若看到此程序,有兴趣的朋友可以帮忙验证一下,欢迎一起探讨! #include stm32f10x_lib.h // STM32F10x Library Definitions #include STM32_Init.h // STM32 Initialization #include stm32f10x_type.h #define uchar unsigned char bool beep; uchar k; long reload_time=0,time=0;
[单片机]
STM32 寄存器点灯介绍
1.说在前面: 1.对于stm32最初的认识是基于库函数的,调用一堆库函数来使得问题得到解答,但是深究库函数,最终还是对寄存器的配置 2.寄存器:就是用来存储数据的,事实上,对stm32的控制就是对32位寄存器的修改; 2.GPIO口寄存器的介绍 注:一组io口是由7个寄存器进行配置,所以 1.GPIOx_CRL:控制寄存器,控制寄存器的低16位 2.GPIOx_CRH:控制寄存器,控制寄存器的高16位 3.GPIOx_IDR:输入寄存器;(通过位选设置高低电平) 4.GPIO_ODR:输出寄存器;(通过位选设置高低电平) 5.GPIO_BSRR:端口位设置和清除寄存器 6.GPIO_BRR
[单片机]
STM32 BUTTON方式(polling & interrupt)
基于stm32 F401 discovery版实现button polling & interrupt点亮LED /** ****************************************************************************** * @file Template/main.c * @author MCD Application Team * @version V1.0.0 * @date 11-September-2013 * @brief Main program body **************************
[单片机]
毕业设计| STM32版RFID医嘱专用手环
作为医嘱手环,除了有手环的常规功能之外,还有和医院的互动功能: ◇心率、血氧监测 使用MAX30102模块,算法是FFT快速傅里叶变换,同时心率、血氧信息会通过8266WiFi发送给上位机,在动态网页上实时显示。 ◇RFID识别药品 通过按键选择OLED屏幕上的“核验”功能进行核验,核验的过程分为核验RFID标签扇区密码,读取相应扇区存放的数据,再进行字符串对比。如果读出的字符串和手环内部设置的患者编号不同,LED红灯亮起,OLED显示“核验错误”,同时蜂鸣器进行报错,直到用户按下确定键。核验正确则亮绿灯,延时2s消失。同时核验记录会通过8266WiFi发送给上位机。注意:要先在RFID标签相应扇区里写入信息◇ 接收通
[单片机]
STm32 使用 stm32cube GPIO 点亮 led 的
一、API说明 HAL库一共包含如下6个IO操作函数: 1、读取某个引脚的电平状态: HAL_GPIO_ReadPin() 2、写入某个引脚的电平状态: HAL_GPIO_WritePin() 3、翻转某个引脚的电平状态: HAL_GPIO_TogglePin() 4、锁定某个引脚的配置状态(直到下次复位): HAL_GPIO_LockPin() 5、外部中断服务函数: HAL_GPIO_EXTI_IRQHandler() 6、外部中断回调函数: HAL_GPIO_EXTI_Callback() 具体使用方法参见 STM32F4xx HAL驱动说明书 。 二、GPIO使用示例 示例功能:使用按键(PC13)翻转LED(PA5)
[单片机]
浅谈STM32的端口输出方式
STM32有两个寄存器可以控制IO输出, 一个是ODR寄存器, 只使用了低16位. 向此寄存器写数据, 就可以控制某个引脚的输出电平. BSRR寄存器是端口位设置/清除寄存器. 此寄存器和ODR寄存器有类似的功能, 都可以来用设置GPIO端口输出.此寄存器分为高16位和低16位, 向高16位的某位写1清除对应ODR寄存器位(输出0), 写0无影响. 向低16位某位写1置位对应ODR寄存器位(输出1), 写0无影响. 可见两个寄存器均可以控制IO输出, 从上文可知写BSRR实际上是可以影响ODR寄存器的值的, 那么使用这两个寄存器控制输出有什么区别呢? 在ST的手册中有这样的说明(RM0090 266页): Each I/O por
[单片机]
STM32/GD32翻新或假货
今天,我的技术交流群在讨论芯片涨价和咸鱼上卖芯片的话题,然后又看到了公众号嵌入式ARM分享了一篇《GD32也开始假货泛滥了》文章,我也来说说关于芯片涨价和假货的一些问题。 1 芯片涨价背景前两年的中美毛衣战,使国内一些技术型大企业受到了影响,比如华为。但是绝大部分电子相关的企业,受到的影响很小。 2020年,一场疫情,导致了一些半导体企业受到很大打击,比如工人罢工。 然后,一些原材料价格开始出现了不同程度的上涨,特别是今年初开始,很多金属、塑料等绝大部分原材料价格都上涨了,小到电阻电容,大到电视冰箱等消费电子产品,都出现了不同程度的涨价。 芯片亦如此,我们熟知的MCU价格出现了不同程度的涨价,相信大家都知道了,特别是STM32
[单片机]