基于STM32的便携式心电图仪设计_第1页
基于STM32的便携式心电图仪设计_第2页
基于STM32的便携式心电图仪设计_第3页
基于STM32的便携式心电图仪设计_第4页
基于STM32的便携式心电图仪设计_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于STM32的便携式心电图仪设计PAGE目录1引言………11.1心电图仪在医学领域中的应用…………11.2便携式心电图仪的发展状况……………22系统总体设计……………42.1主要功能…………………42.2系统设计方案……………53便携式心电图仪的硬件设计……………63.1最小核心系统的设计……73.1.1处理器的选择…………73.1.2最小核心系统电路的设计……………83.2人机交互界面的设计……123.2.1显示界面设计…………123.2.2按键设计………………143.3前置放大电路以及右腿驱动电路………163.4滤波电路以及陷波电路的设计…………163.5电源电路的设计…………184便携式心电图仪的软件设计……………194.1软件开发平台……………194.2软件系统整体设计………214.2.1软件总体分析………214.2.2STM32软件系统设计流程…………214.2.3软件总体流程图……234.3信号采集程序设计……234.4数字滤波程序设计……254.5液晶程序设计…………265系统调试结果及误差分析……………275.1调试手段………………275.2测量调试以及分析……285.2.1采集电路的测试……285.2.2滤波算法测试………295.2.3整体测试和结果分析………………30结束语………32参考文献……………………34PAGE351引言随着社会的进步、经济的发展以及人们生活水平的逐步提高,我国人口老龄化程度越来越严重,与此伴随的心脏病一类的疾病的发病率也不断攀升,人们的身体健康产生了巨大的威胁。相关数据表明,我国因心脑血管疾病死亡的人数将近占总死亡人数的一半[1]。根据相关部门的调查显示,我国每年大约有近一半的死亡病例为冠心病,而且死亡率还在逐年递增。每年约有16万名患者接受支架植入手术,手术施行每年的增长率超过了五分之一。在我国因心脑血管疾病每年耗费达3000亿元,由于受测试手段的局限,预防率、治疗率及控制率依然很低。预防率是有效防治心脑血管疾病的关键因素,而且有效的方便的心电监测仪器是完成这一任务的有力工具。1.1心电图仪在医学领域中的应用人类的心脏有规律性的膨胀和收缩,从而使血液的循环。在心脏肌肉每次收缩之前,都会产生一股微小的生物电流,加上人体的体液能够导电,这些微小电流可以通过体液的传递就会反映到人体的表面皮肤上。不过受限于身体各部分组织不同、距心脏的距离不同,会造成体表的不同部位的电位有所不同。通过捕捉这个现象,将心电图显示出来的心电检测仪器,根据这些人体生物电信号,我们可以从不同角度观察心脏的活动情况。这是我们对心脏基本功能及其病理研究,具有重要的参考价值[2]。心电图能够在一定程度上反映心律的运行状况,人的心肌受损的程度、发展过程以及心房、心室的功能结构情况都能通过它表现出来。这些都可以在心脏手术和药物的使用上提供重要的参考[3]。常规心电监护设备体积笨重、价格昂贵和不便于携带,但是随着社会生活水平的提高,医疗器械家庭化开始逐渐进入我们的日常生活,家庭化的心电图仪器功能没有专业的大型的医疗设备齐全,但是它具有体积小、操作简单的优点,同时可以在一定程度上满足了人们的基本应用。我们可以用它在家庭或则其他地方很方便的进行心电图信号的测量,并根据进一步的处理,做基本的诊断,也可以把这些数据提交到专业机构做进一步的详尽的诊断。这样也可以避免那些行动不便的病人,利用互联网技术,把数据通过远程传送的方式,提交到专业机构或指定的医院惊醒专业诊断和分析。为了能够在更多场合更方便的诊断,各种各样的便携式心电图设备应运而生,常规心电图仪由于笨重只能在病人静卧的情况下记录的心电活动,历时时间短,获取的信息量很少,所以在有限时间内有些非正常的情况被发现的概率也是很低的。而便携式监护装置可以在随时随地的进行实时监护,并把数据存储起来。这样不仅可以节省时间,还可以得到实时的监护,所以研发便携式心电监护产品具有重要意义。本文主要研究的便携式心电图仪,即将普通心电图设备小型化、家庭化,具有低价位、体积小、便于携带和使用方便等特点。1.2便携式心电图仪的发展状况1887年英国生理学Einthoven通过对毛细管的静电计记录了心动的电流图[4]。1895年他开始了对心脏动作电流的进一步研究,并通过对德•阿森瓦尔氏的镜影电流计的设计改进,提高了心电图的质量。1903年他成功的设计了弦线式电流计,通过反射镜记录心动电流,解决了以前测量设备的惰性大,记录误差大以及需要繁琐的数学计算等缺点。同时,他又制定心电图的影线在纵坐标上波动1cm,代表1mV的电位差,在横坐标上移动1cm为0.4秒的标准。这种方法简单直观,并采用P、Q、R、S、T等字母标出心电图上的各波,这种标记方法一致沿用至今。1912年在他深入研究了正常心电图的波动范围后,提出了著名的“爱因托芬三角”理论。1924年Einthoven教授获得了诺贝尔生理学和医学奖[5]。总之这位被尊称为“心电图之父”的生理学家对心电图的创立及发展有着巨大的贡献。心电图从此开始逐步走进协助诊断疾病,并通过发展被广泛应用于临床。随着社会的发展,心电图检测理论越来越成熟与完善,另外机械、电子、计算机等技术的迅猛发展,带动了医疗器械发生了革命性变化,极大的增强了心电图机的功能。随着现代科学技术的发展,特别是计算机、微电子、机械电子在医疗领域的广泛应用,极大的促进了心电设备的发展。目前各大医疗器械厂商都投入巨资开发性能更强、功能更加完善的心电设备,比如欧姆龙、北京超思、亚新、均在该领域的研究与生产上有所突破。综观当前心电检测仪器发展趋势,主要向以下几个方向发展:(1)系统化随着医院计算机管理网络化、信息存储介质和IC卡等的应用及Internet的全球化而产生的。电子病历是信息技术和网络技术在医疗领域的必然产物,我国卫生部先后在2010,2011发布了关于电子病历系统的规范和通知文件。而实时心电数据将在该系统中有着重要的作用。(2)数字化随着计算机科学、机械电子的迅猛发展,医疗器械的数字化程度越来越高,比如数字滤波器的使用,极大的降低了心电干扰,提高了心电判断的准确率。(3)无线化无线传感技术的发展能够促使心电检测无线化,从而摆脱传统心脏检测的繁琐程序。同时,能减轻病人的心里紧张程度,实现心电检测的方便性。(4)自动化自动测量和分析是医疗仪器的发展方向,使医疗器械智能化是目前医疗器械设计的目标之一。(5)远程化计算机技术、网络通信技术的快速发展,为远程医疗的实现提供了可能,将心电数据通过远程传输,在远端对心电数据加以分析处理并提出诊断结果,从而实现远程医疗。如目前出现的基于GPRS网络的远程心电监护系统就是这个发展趋势的体现。总之,科技不断进步,人们的需求也在变化,心电图是记录心脏电活动状态的记录,包括心脏节律和频率以及电压的高低等信息,可用于诊断各种心律失常、心肌病变、心肌梗塞及心肌缺血等心血管疾病。同时对心脏病的诊断和治疗也提供了确切的理论依据。设计符合市场需求的产品是企业生存的根本,利用高科技带来的技术革命去更新医疗器械更是一个巨大的市场机会,我们相信,在未来几年里,家庭化的监护设备必将越来越普及[6]。2系统总体设计由于心电信号的微弱性,我们对心电信号的提取具有一定难度。另外受到50Hz及其倍频干扰和极化电压的影响,对前置放大器和信号滤波电路的设计提出了更高的要求。因此在设计前端硬件电路时,要根据信号的特征,选择最佳的器件。同时便携式设备必须是低功耗设备这限制了多数的微处理器,锂电池供电对信号仅仅用硬件滤波还不能达到分析信号的要求,硬件滤波的一个缺点是,要想获得更好的滤波效果,必须设计更高的阶数,而这无疑会增加系统的体积。因此还有必要采用软件滤波的方法,这就对处理器的速度和软件的优化提出了更高的要求[7]。采取软件滤波即设计数字滤波器,数字滤波器有多种,这样就必须寻找一种行之有效的滤波算法。2.1主要功能本文的目的是通过先进微处理器的应用研究的主要内容是通过将嵌入式技术、数字信号处理技术和信号采集技术的结合,设计一个能够完成信号提取和分析功能的嵌入式心电图监测系统。主要研究工作如下:(1)心电图仪的硬件设计:采集电路:准确提取生理信号,把信号处理为可供采集分析的有效信号;处理电路:完成信号的采集、滤波、显示、分析和传输等。(2)心电图仪的软件设计:STM32芯片各模块初始化程序;数字滤波处理程序;人机交互界面的程序设计;2.2系统设计方案系统原理结构图如图1所示。心电信号由电极获取,送人心电采集电路,经前置放大、主放大、高低通滤波,得到符合要求的心电信号,并送入到STM32的ADC进行AD转换。为了更好地抑制干扰信号,在电路中还引入了右腿驱动电路。系统控制芯片采用STM32,TFT-LCD的触摸功能加上少量按键可以建立良好的人机交互环境,可以通过LCD实时显示和回放,数据通过USB可靠地传输到PC机,以便对心电数据做进一步的分析。系统主要硬件结构及电路系统主要划分为三大部分:心电采集电路,主要完成心电信号的提取;带通滤波及主放大电路,用于调理采集到的信号,使之符合处理要求;STM32处理电路,完成心电信号的显示和分析功能。图1系统原理结构图整个系统有以下几个部分组成:(1)采集电路:主要有前置放大电路、带通滤波电路和主放大电路组成,心电信号由电极获取后送入心电采集电路,经处理后得到符合要求的心电信息。(2)处理电路:主要完成对心电数据的滤波、陷波、放大、分析、显示和传输控制。(3)按键电路:完成良好的人机交互。(4)显示电路:实时显示出心电波形和心电相关信息。(5)上位机设计:在PC机上处理和显示心电波形。(6)电源电路:设计稳定可靠的电源电路,为整个系统提供电源,降低系统功耗。3便携式心电图仪的硬件设计便携式心电图仪要求具有可移动性和再开发性,不仅便于携带、功能尽可能的完善能够实时对心电信号进行处理,而且要求随着发展可以进一步升级满足人们更多的需求。本心电图仪集信号的采集、处理、传输三大功能于一体。对于这些功能,即需要相对独立的模块化设计,又需要良好的协调。因此,在开发过程中,硬件设备的选择需要考虑这些特定的需求,有针对性的进行器件的选择和设计。总体电路要遵循:(1)选择合适的处理器,尽量选择片上系统(SystemonChip,SoC)设计硬件系统,减少硬件复杂度并降低成本。(2)选择典型电路,按照模块化设计,系统扩展与I/O的配置充分满足应用系统的功能要求,并留有适当冗余,以便进行二次开发。(3)注重软硬件结合,软件能实现的功能尽可能由软件实现,以简化硬件结构,降低能耗和设备成本。(4)必须考虑芯片的驱动能力,有必要的可靠性及抗干扰设计它包括去耦滤波、印刷电路板布线、通道隔离等[8]。3.1最小核心系统的设计以应用为中心、软件硬件可裁剪的、适应应用系统对功能、可靠性、成本、体积、功耗等严格综合性要求的专用计算机系统,由硬件和软件两部分有机的结合在一起,作为一种典型的嵌入式应用[9]。由于便携式心电图仪有很强的可移动性,便于使用者携带,同时也要求功能完善,能够实时对心电信号进行处理。集信号采集—处理—传输三大功能于一体。对于这些功能,即需要相对独立的模块化设计,又需要良好的协调。因此,在开发过程中,硬件设备的选择需要考虑这些特定的需求,有针对性的进行器件的选择和设计。3.1.1处理器的选择处理器相当于人体的大脑机制,整个系统在处理器合理指挥调度下才能完成我们赋予他们的任务,所以一款合适的处理器对于整个系统来说是非常重要的。经过综合考虑本设计对处理器的选择主要从以下五个方面来考虑:(1)处理器的处理速度:在本设计中,处理器不仅要进行滤波处理,同时还要实时显示出心电波形,在通信的情况下还要与PC机进行通信,因此,处理器要有较高的处理速度。(2)处理器在完成任务的复杂程度:在本设计中,处理器要负责信号的采集、信号的滤波处理、心电波形的显示、数据存储以及通信。(3)尽可能简化外围电路的复杂程度:一个系统中所使用的元器件越多、电路结构越复杂,则系统的出问题的概率越大,可靠性与稳定性越差。因此在选择MCU的时候,希望MCU内部集成功能单元越多越好,这样就能简化系统设计,增加系统的可靠性及稳定性。(4)尽可能减少生产成本:在本系统中,由于多数属于家庭使用及野外环境的不确定性因素较多,对于普及性的大众化产品,希望替换成本越低越好,其中处理器的成本占了整个系统的重要的一部分,能够降低处理器的成本也就从而降低了产品的总成本。(5)尽可能底的功耗:便携式设备对低功耗的要求都较高,必须最低限度的减少功耗,手持式设备的续航能力也是众多参数比较受关注的一点,如何能有长时间的续航能力也是我们需要注意的一点。综合以上几个方面,最终选用了意法半导体公司推出的新型32位ARM内核处理器芯片STM32系列中的STM32F103ZET6。3.1.2最小核心系统电路的设计STM32F103x增强型系列芯片使用高性能的ARMCortex-M332位的RISC内核,工作频率为最高可达72MHz,内置高速存储器(高达128K字节的FLASH和20K字节的SRAM),丰富的增强I/O端口和连接到两条APB总线的外设。所有型号的器件都包含2个12位的ADC、3个通用16位定时器和一个PWM定时器,还包含标准和先进的通信接口:多达2个I2C和SPI、3个USART、一个USB和一个CAN。工作电压为3.3V。图2是STM32F103x的模块框图[9]STM32微控制器有如下优点:(1)STM32内部有高达128K字节的内置闪存存储器,用于存放程序和数据。多达20K字节的内置SRAM,CPU能以0等待周期访问(读/写)。这样在我们所设计的系统中就去掉了以往很多嵌入式项目设计中所需要的用于外部程序存储器的Flash芯片和用于外部数据存储器的SRAM芯片,大大节约了系统成本,提高了系统可靠性及稳定性[10]。(2)STM32增强型系列拥有内置的ARM核心,因此它与所有的ARM工具和软件兼容。这给项目的开发工作带来了很大的便利,因为在以前的工作中曾经使用过其他ARM核心的微控制器,所积累的经验在本项目的开发中得到了充分发挥。而且由于可用于ARM开发的工具软件很多,大大加快了项目开发的速度和效率。(3)STM32的内部FLASH是在线可编程的。在我们的项目中,设备运行的配置参数会存储在FLASH中的固定位置,每次启动设备时,程序会读取这些参数来进行初始化。但在某些情况下,需要远程设置或修改配置参数。这一功能使得可以在不用接JTAG烧写器的情况下根据USART接口接收到的数据来修改FLASH中的配置参数,在设备再次启动时,就会读取新参数来进行初始化。(4)STM32有优秀的功耗控制。高性能并非意味着高功耗。STM32经过特殊处理,针对应用中三种主要的功耗需求进行优化,这三种能耗需求分别是运行模式下的高效率的动态耗电机制、待机状态时极低的电能消耗和电池供电时的低电压工作能力[11]。(5)STM32拥有强大的库函数。它采取与以往不同设计方法,通过把各个外设封装成标准库函数的方式,屏蔽了底层硬件细节,能够使开发人员很轻松地完成产品的开发,缩短系统开发时间。图2STM32F103x的模块框图STM32固件库。STM32固件库提供易用的函数可以使用户方便地访问STM32的各个标准外设,并使用它们的所有特性。USB开发工具集。在更广的应用领域中,USB功能的实现将变得越来越方便,因为USB开发工具集提供了完整的,经过验证的固件包,使得用户可以顺利地开发各个类的USB固件。(6)STM32F103xx增强型支持三种低功耗模式,可以在要求低功耗、短启动时间和多种唤醒事件之间达到最佳的平衡。总之,STM32芯片在项目中的使用,使得整个系统的运行效率、稳定性、功耗、生产成本等都比同类系统有了较大的提升。本设计中最小核心系统设计图如图3所示。图3最小核心系统设计图由图3中可以看出,在设计STM32最小系统时要注意一下几个部分:(1)复位电路:利用RC电路的延时特性,设计了简单的复位电路,有此可简单计算出延时时间,这里用一个10k电阻和1.0µF的电容,时间延时大约为3.6ms,符合STM32系统芯片的复位要求。(2)晶振电路:这里选用两个晶振,首先8M无源晶振,晶振两端分别通过22pF的电容接地,另一个32.768K的晶振使用的15pF的电容接地电路简单,并能很容易的就能使晶振起振。(3)芯片上的BOOT0和BOOT1引脚分别通过跳线帽可选高低电平,以改变芯片启动模式,其启动模式具体如下表1所示。表1启动模式说明(4)模块有4个数字电源供电引脚,1个模拟电源供电引脚以及相应的接地引脚。在电源端要注意接滤波电容,模拟地和数字地引脚之间最好通过0欧电阻隔离。电源和地之间加若干去藕电容。3.2人机交互界面的设计人机交互界面是人与机器进行沟通交流的设备,它可以把人的指令传入给MCU,也可以让设备显示出我们所想知道的信息。3.2.1显示界面设计首先,针对要完成一款便携式心电仪的设计,那么在LCD的选择上,就要符合实际的需要,必须要考虑功耗和成本。对于人机交互部分,显然采用单色液晶显然已经不能满足的需要,因此把LCD的选择定位在了彩色液晶上。主要从以下几个参数做出选择:(1)颜色要丰富。从美观角度来讲,在液晶上不同类型的数据最好能够以不同的颜色来区分。比如波形、汉字、数字最好颜色不同。所以在液晶的颜色上要达到一定的数量。(2)尺寸。便携式式是本系统设计时的一个指标,因此液晶的尺寸不易过大,但也要便于观察,选择时要符合实际情况,过大则不便于随身携带,过小则可能出现汉字或数字不便于观察等问题。(3)功耗。对于便携式嵌入式设备来说,低功耗是一般都作为一项重要的指标,在外边使用时能够尽可能地延长电池的工作时间(4)材质。液晶主要有两类:STN型和TFT型,后者较之前者显示效果更佳,但耗电能方面也高于前者。(5)价格。正如上面所提到的,性价比高是本系统设计的一个目标,因此要可能的用符合设计要求价格低廉的产品。因此,根据上述几点本设计选用了3.2寸真彩TFT液晶触摸屏,320*240像素,26万色,16位并行接口,可以直接用AVR、ARM7、STM32等MCU驱动。相关参数:分辨率:QVGA240x320尺寸:3.2英寸控制器:IL9320触摸屏:4线电阻式接脚:30PIN间距2.54mm背光:4LED并联具体接口电路设计如图4所示图4LCD显示界面借口3.2.2按键设计对于实现人机交互的场合,按键是比较常用的,通过按键来选择系统的功能,完成对系统的访问控制。本系统用了5个按键,分别定义为上、下、左、右、中键,前四个按键是对设置或访问的液晶显示对象进行选择,中间是确定键,这样就实现了既可以用按键功能,也可以用按键来实现对系统的设置,按键电路的实现比较简单,这里不再详述。具体电路实现如图5所示。图5按键接口电路3.3前置放大电路以及右腿驱动电路前置放大电路要完成的功能是实现信号的差分放大,该部分电路在整个采集电路中至关重要,因为后续信号的处理都是以此为基础的。因此要选择一款合适的差分运放芯片。选择时一般考虑以下几点:(1)增益由于心电信号非常微弱,均值在1mV左右,而采集电压一般要达到1V左右,所以心电放大倍数在1000倍左右。一般为了抑制零点漂移,提高共模抑制比,应该分多级实现放大。(2)频率响应所谓频率响应是指放大器对不同信号频率的反应,心电信号的范围低于100Hz,所以要求放大器要对此频率范围的信号尽可能不失真的放大出来。可以设计高通、低通滤波器来压缩频带,滤除该频带以外的干扰信号。必要时还需要设计50Hz工频干扰抑制电路,通过这样处理后,得到的信号才可能有诊断价值。(3)共模抑制比电极不对称、电气设备运行时的干扰都易产生极化电压,然后通过放大电路其值极有可能远比心电信号大得多,从而将微弱的信号淹没。因此要求放大器有很高的共模抑制比。一般要求要达到80db以上。(4)输入阻抗心电信号是微弱的,且具有高阻抗的特性,只有高输入阻抗才有可能不失真的引出心电信号,不然由于分压的因素,会极大的衰减心电信号,从而导致无法正确采集。(5)低噪声、低漂移在心电放大器中,还有两个较重要的参数即噪声和漂移。在设计心电放大器时应尽量选用低噪声元件,提高输入阻抗。另外,温漂会引入直流电压增益从而给心电信号带来干扰。因此,选用的放大器要特别注意这两个参数。综上所述该方案选用具有上述优点的AD620,具体设计电路图如图6所示。图6前置信号采集电路由于人类受到大量的外部干扰,心电电极和电力线之问由于存在电容耦合会产生位移电流Id,降低位移电流干扰的一种有效办法是采用右腿驱动法,图7为右腿驱动的具体连接电路。右腿不直接接地而是接到辅助运算放大器的输出。从两个电阻结点检出共模电压,它经过辅助的反相放大器放大后通过电阻反馈到右腿。采用右腿驱动电路,对50Hz干扰的抑制并不以损失心电信号的频率成分为代价。但由于右腿驱动存在交流干扰电压的反馈电路,而交流电流经人体,成为不安全因素,限流电阻通常在1MΩ以上。图7右腿驱动电路3.4滤波电路以及陷波电路的设计为滤除干扰需要设计带通滤波器,使频率为0.05Hz~l00Hz的心电信号通过,该范围以外的信号将大幅度衰减掉。滤波器有无源滤波器和有源滤波器两种。无源低通滤波器是由无源器件(电阻,电容,电感)组成。其带负载后,通带放大倍数的数值减小,通带截止频率升高,这个缺点不符合信号处理的要求[12]。因此本设计选用有源低通滤波器。由RC元件与运算放大器组成的滤波器称为RC有源滤波器,其功能是让一定的频率范围内的信号通过,抑制或急剧衰减此频率范围以外的信号。具有理想幅频特性的滤波器是很难实现的。只能用实际的滤波器的幅频特性去逼近理想的特性。常用的方法是巴特沃斯(Butterworth)逼近和切比雪夫(Chebysher)[13]逼近。保证信号的原形,采用较平坦的巴特沃斯有源滤波。高通滤波器的设计与低通滤波器相似,这里不再叙述。带通滤波器用高低通滤波器来构成,如图8所示。高通滤波器由U3、C2、Rdip11组成,其截至频率为f=0.03Hz,低通滤波器由U4、Cdip2、Rsop4组成,截至频率为f=110Hz。图8带通滤波电路基于小型化和成本考虑,硬件滤波只用一阶高通滤波器和一阶低通滤波器,虽然设计了右腿驱动电路,但是仍然有50Hz干扰进入电路,所以本设计增加了50Hz陷波电路,如图9所示通过该方法来滤除工频干扰,实验结果表明,通过高低通滤波后再加上陷波电路的信号波形清晰、特征明显。图950Hz陷波电路3.5电源电路的设计电源电路是整个系统中十分重要的一环,随着便携式产品的普及,如何降低功耗成为工程师面临的急需解决的问题。如果电源不稳定可能造成系统不能正常工作,严重的甚至烧坏芯片引发事故。因此电源管理越发显得重要。电源管理是指如何将电源有效分配给系统的不同组件。电源电路设计主要考虑用哪种类型的电源器件,输入输出电压,输出电流以及控制状态[15]。心电采集电路需要土5V电源,STM32工作电压为3.3V,本设计用7.2V电池供电,中正负5V电压可以采用7805和7905来产生,它通过外围的电感电容的组合提供升满足运放使用的正电压和负电压,图10是其典型应用。图10正负5V电源电路3.3V的电压采用AMS1117产生,其最大的特点是简单易用,而且性价比高,输入电压5V~12V,直接输出3.3V。电路如图11所示。图11AMS1117稳压电路4便携式心电图仪的软件设计该系统的软件设计沿用经典的是模块化的编程思想,首先根据要求设计好系统的总软件流程,然后再分别实现系统各模块的功能。在完成硬件电路设计和电路制作后,再进行整体的统一调试。本章主要讨论系统软件在STM32上的编程与实现。4.1软件开发平台Keil是德国Keil公司(现已并入ARM公司)开发的微控制器软件开发平台,是目前ARM内核单片机开发的主流工具。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器在内的完整开发方案,通过一个集成开发环境(uVision)将这些功能组合在一起。uVision当前最高版本是uVision3,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。uVision3IDE是一款集编辑,编译和项目管理于一身的基于窗口的软件开发环境。uVision3集成了C语言编译器,宏编译,链接/定位,以及HEX文件产生器。如图12所示,是它的一个典型的调试窗口,它主要包括以下几个窗口:图12KeilMDK开发环境工程区:用于访问文件组和文件,调试是可以查看CPU寄存器。输出窗口:显示编译结果,以便快速查找错误的地方,同时还是调试命令输入输出窗口,也可以用于显示查找结果。内存窗口:显示指定地址内村里的内容。查看和调用堆栈窗口:用于查看和修改变量的值,并且现实当前函数调用。代码窗口:用于查看和编辑源文件。外设对话框:检查微控制的片上外设的状态。使用Keil来开发嵌入式软件,开发周期和其他的平台软件开发周期是差不多的,大致有以下几个步骤:1.创建一个工程,选择一块目标芯片,并且做一些必要的工程配置。2.编写C或者汇编源文件。3.编译应用程序。4.修改源程序中的错误。5.联机调试。4.2软件系统整体设计采用模块化的编程思想,把整个软件系统化为为多个功能模块,主程序通过调用各个子程序来完成复杂功能的实现。下面具体介绍各个模块的实现。4.2.1软件总体分析从整体上看,该系统软件分为两个大的部分:(1)下位机软件即STM32应用程序。主要完成心电信号的采集、信号滤波、RTC模块、液晶显示和串口通信等。利用模块化编程思想分别来实现各个模块的功能,尽量减少程序之间的耦合性,提高程序之间的内聚性。主程序是个无限循环,通过调用各个子程序来完成系统的功能。该部分总体开发思路是,首先完成STM32片上资源的初始化,其次是完成各个子程序的编写,最后主程序通过调用主程序完成所要实现的功能。(2)上位机管理软件。上位机是运用LabVIEW编写的,其功能是完成数据的接收和处理,其中主要包括对数据的接收、显示和存储。处理是指利用PC机强大的数据处理功能对上传来的数据进行处理并分析的结果。显示功能完成数据到波形的转换,能够动态显示出心电波形。存储功能完成数据的保存。4.2.2STM32软件系统设计流程软件搭载在硬件上运行的,硬件的资源多少在一定程度上决定了软件的设计方法和复杂程度。由于早期的单片机由于硬件资源少,RAM资源有限,所以工程师在编程的时候对RAM的应用要十分小心,因此造成这类的设计开发工程师更加偏向于直接用汇编语言来控制硬件的工作。随着科学的发展,嵌入式系统的复杂度的提高和EDA技术的发展,各种高级的EDA工具不断推出,比如Keil、IAR、ADS等工具,这些工具不仅极大的方便了工程师的开发,同时也为用C语言这种高级语言来编写程序提供了有利的条件。但是这种开发方式随着系统的复杂度的增高也变的愈加吃力了,因为对开发人员要熟悉芯片的内部资源,能够进行寄存器配置,这样就对工程师的要求比较高。但是这些问题可以通过移植操作系统来解决,操作系统的优势就是屏蔽了具体的硬件细节,可以让开发人员把更多的精力放在应用程序上。本系统设计时考虑移植操作系统,但是对于具体的应用存在一些不足之处:首先,操作系统在对数据区的开销以及一些变量的存储方面浪费了很多的RAM资源,有限的RAM资源就无法有效的分配。其次,STM32方便的库文件开发方式本身就屏蔽了硬件的细节,处于以上考虑在本次开发中没用移植操作系统,而采用库文件的方式来开发设计。STM32固件库是一个固件包,它不仅包括了程序、数据结构和覆盖所有外设特性的宏单元。还包括设备驱动的描述以及各个外围模块的实例,该固件库可以使得用户在没有深入学习外围模块规格手册的情况下,也能够使用任何在用户应用中涉及到的设备。因此,使用该固件库可以节省设计者的许多时间,可使开发人员把更多的精力花费在编程方面,加快了开发周期,减少了在应用开发中的综合开销。这是STM32软件开发十分显著的优点。实际应用开发时,我们用外设的时候一般有三个步骤,这里以ADC1外设为例简单介绍一下开发流程:1、打开配置文件stm32f10x_conf.h,打开ADC1的宏开关#define_ADC#define_ADC1//这里选择了打开#define_ADC12、加载stm32f10x_adc.c文件stm32f10x_adc.c是ADC对应的库文件,对ADC的一系列操作都在封装好了放在这类文件里。3、参数设置。包括配置采用周期、触发方式、工作模式、数据存储格式等,开发人员只需根据所需要求在对应的参数位置设置即可。一个简单的实例如下:/*ADC1configuration*/ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;//独立模式ADC_InitStructure.ADC_ScanConvMode=DISABLE;ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_T1_CC1;ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;//右对齐格式ADC_InitStructure.ADC_NbrOfChannel=1;ADC_Init(ADC1,&ADC_InitStructure);ADC_RegularChannelConfig(ADC1,ADC_Channel_14,1,ADC_SampleTime_13Cycles5);其他模块的应用也类似于此,这样就屏蔽了寄存器配置细节,加快了开发速度。4.2.3软件总体流程图软件设计流程分为两个大的方面,分别对应两个个界面:第一个界面心电图显示界面,按键有上、下、左、右、中五个按键,按键功能分配如下:上、下按键控制波形纵向移动和幅值的变化,左右键是调节波形在时间上的周期变化,中间按键是切换键,切换上下键控制幅值变化还是纵向移动。另一个界面是帮助界面,具体介绍各个按键的作用,具体流程图如图13所示。图13系统总体流程图4.3信号采集程序设计心电信号的精确采集对于后面的进一步处理至关重要。STM32的片内ADC是12位的模数转换器,可以在16路模拟输入中任选一路进行采样,其最高采样率为1MHz,心电信号的频率较低,片内ADC足以满足系统采样定理的要求,这样可以提高采样的稳定性和降低系统成本。程序流程框图如14所示。图14数据采集流程图转换后的数据存放在ADC_RegularConvertedValue变量里,转换状态用全局变量dmaflag来标记,dmaflag=0代表转换未结束,dmaflag=1代表转换结束。4.4数字滤波程序设计数字滤波算法的实现是软件部分关键的问题,它的运算时间和精度直接决定了系统的实时性和数据的准确性。本系统用C语言编写了相对应的滤波算法程序来实现对所采集的心电信号进行数字滤波。滤波算法实际上就是用C语言来实现差分方程,为叙述方面,把方程列出如下:yBP(n)=yBP(n-4)+x(n)-x(n-20)(1)yAP(n)=x(n-98)(2)yBS(n)=yAP(n)-yBP(n)(3)可见关键是实现差分方程(1),有式(2)和(3)看出,当前输出与以前数据状态有关,因此需要开辟缓冲区来存放以前的数据,这里开辟三个缓冲区Buff_bp[4]、Buff_ap[98]和Buff_x[20]分别存放yBP(n-4)、yAP(n-98)、x(n-20)的数据。对于式(1),Buff_bp[4]数组里面存放的是前4次yBP(n)的值,Buff_x[20]存放的是当前采集数据的前20次的x(n-20)数据,前20点的数据yBP(n)都为0,假设采集到第20点时,此时n=20,把该点赋值给变量[14]。Cur_val,数组Buff_bp[4]全为0,数组Buff_x[20]里面存放了前20个点的数据,那么该点滤波后的数值这里让滤波后的数值存放到变量Fil_val,则Fil_val=Buff_bp[0]+Cur_val-Buff_x[0];然后让数组Buff_bp[4]右移,把数据Buff_bp[0]移除,把Fil_val的值存入到数据Buff_bp[4]中,同理让数组Buff_x[20]右移,移除数据Buff_x[0],在把Cur_val存入到Buff_bp[20]中,这样就完成了一个点的滤波。软件流程如图15所示。图15滤波流程图4.5液晶程序设计在本系统中采用彩色TFT液晶,波形显示清晰,界面良好。液晶控制的关键在于编写底层驱动程序,底层驱动写好以后再封装不同功能的函数,以后调用就很方便了。STM32的FSMC模块是能够与同步或异步的存储器和16位的PC存储器卡的接口,它的主要作用是:将AHB传输信号转换到适当的外部设备协议满足访问外部设备的时序要求通过这样的方法就可以把液晶当作外部存储设备来使用,通过配置读写及控制信号的时序,用指定指针就可以实现对液晶的读写访问。这样处理不但简化了对液晶的操作,只需指定读写数据的指针就可完成操作,而且提高了访问速度,避免了用端口模拟时序访问液晶产生的滞后现象。并且STM32自带FSMC方式控制TFT-LCD的实例,只需做一些相应的修改就可应用到本系统中。显示的心电波形有两个基本要求:一是波形清晰,无断点,二是波形无明显失真。在显示波形时需要解决三个问题:一是把采集到的电压值转换成液晶上的高度;二是两点之间要连续;三是刷新方式,刷新的一种方法是在波形显示到屏幕的最右边时整个波形区域刷新为空,然后重新从最左边显示,另一种方法是边显示边刷新,即在显示的后边的一小块区域刷新为空,也就是边显示边删除。相比较而言显然第二种方法比较好,因为整个区域刷新是很费时间的问题,有可能影响画图的速度,而第二种方法就有效的克服了这个问题,另外从实际效果来看,视觉效果也比较好。针对第一个问题,实际上就是把电压值转换成点的坐标。本设计中用液晶X轴中间的部分来显示波形,X轴坐标值范围为60~180,而心电信号的电压值范围为0~2V,则第一个问题转化为把电压范围0~2映射到坐标60~180的范围内。为了提高精度可以把电压范围在程序内部处理时扩大100倍,则转换精度为P=200/120=5/3,设转换后的坐标为xzb,另外液晶的坐标原点在右上角,则把电压Cur_val的范围0~200转换到坐标60~180之间可以用以下公式:xzb=180-Cur_val*3/5。对于第二个问题解决的办法是在两点之间用直线连接起来,这样就需要把当前点的上一个点的坐标记住,用两个变量保存设为prxzb、pryzb。5系统调试结果及误差分析经过软硬件的设计和制作,完成了基本的构架,但是还需经一部的调试和分析才能进一步的完善该系统。5.1调试手段为检验各模块是否按要求进行正常工作,借助万用表、函数信号发生器以及示波器来进行检测,通过测试结果完成对各个模块完成功能的评估,对整体练调是一种很好的促进手段。当硬件电路正常工作后,我们使用串口调试助手、J-Link进行在线调试。串口调试工具是通过串行通信接口与主控芯片的进行信息交互,其输出波特率与数据帧的格式都可以进行设置,具有使用灵活、操作简便的特点。J-Link是调试ARM嵌入式系统的常用工具。在每一部分程序调试通过后,对所有子程序进行整合编写出完的主程序。在开发环境中完成程序编译之后,通过J-Link工具把程序代码下载到STM32处理器中,然后通过程序的调试功能来进行程序的调试。使用J-Link工具的优点是:入门简单、可以全面的观察程序中的参数和微处理器中各个寄存器的值和状态,特别适合软硬件联调阶段。5.2测量调试以及分析调试过程中需要对该电路的每一模块逐步进行调试,使其完成各自的目标指数后方可整体联立进行综合调试。5.2.1采集电路的测试采集电路主要是完成对心电信号的正确提取,主要测试前置放大电路即AD627的性能测试,带通滤波电路测试及陷波电路测试等。(1)AD620的性能测试差模增益测量方法:差动输入端,正端接信号源信号,负端接地,输入信号为150mV,测量AD620A的输出端对地的电压,其值为1020mV。差模增益为6.8,与理论计算相一致。共模抑制比测量方法:两输入端输入50Hz共模信号,测量输出端对地电压。输入1.78V输出0.17V,所以,共模增益为:0.096。共模抑制比为:CMRR=10/0.096=104dB。符合心电仪器设计标准。(2)带通滤波电路测试测量方法:实际测量中,输入一定电压幅度的正弦波,调节其频率,观察输出电压幅度的变化。测得,信号65Hz时开始有幅度衰减,100Hz时减为原幅度的1/3,信号低频在1Hz的时候开始衰减,0.7Hz的时候衰减为原幅度1/3。(3)陷波电路测试测量方法:实际测量中,输入一定电压幅度的正弦波,调节其频率使输出频率为50Hz,调节滑动变阻器,观察输出电压幅度的变化,当输出波形幅值最小最佳。调节波形如图1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论