历史上的今天
返回首页

历史上的今天

今天是:2025年03月25日(星期二)

正在发生

2018年03月25日 | 基于STM32的MIT-BIH心电数据D/A回放设计

2018-03-25 来源:eefocus

    基于STM32的MIT-BIH心电数据D/A回放设计,对整体设计方案、硬件组成、软件设计等进行了介绍。通过读取心电数据将其进行D/A转换,输出波形与原始波形进行比较,较好地实现了回放功能。由此可见,该系统的性能指标达到了设计要求。能很好地实现心电数据回放,为一系列心电算法的仿真实践及实时心电监护仪的研制打好了基础。

    心电信号是人类最早开展研究并应用于临床医学的生物电信号之一,通过对心电信号的分析处理能有效地预测心脏疾病。如何利用心电数据开发研究相关的医疗设备是对科研人员至关重要。心电数据的回放就是将原有的存储的MIT-BIH心电数据,根据其存储的格式,利用设计的系统通过D/A转换最终从终端回放出模拟信号。本文介绍基于ARM Cortex-M3内核的STM32微控制器作为主控嵌入式芯片的心电信号数据回放的设计方法。

    1 工作原理和硬件设计

    上位机应用程序读取心电数据库中一文件,利用设备驱动程序与D/A回放模块设备进行通信。通过USB总线不断向硬件设备发送数据,设备接收到的原始数据,利用DMA传输方式,连续、不丢失地传送到DAC模块中,在定时器的触发下,DAC模块完成数据的D/A转换,最后在终端设备即示波器上回放出模拟信号。

    D/A回放硬件结构框图如图1所示。

a.jpg?imageView2/2/w/550

    1.1 STM32F103XX微处理器简介

    系统硬件采用意法半导体公司开发的基于Cortex-M3内核的新型32位微控制器STM32F103RE作为主控芯片,工作频率高达72 MHz,内部集成了RAM、全速USB 2.0设备接口模块和双通道的12位高精度D/A转换模块等丰富的外设。在结合了高性能、低功耗和低电压的同时,保持了高度的集成性能和简易的开发特性。应用开发时,只需连接少量的外围电路即可使电路结构简单紧凑。

    1.2 D/A转换模块

    D/A转换模块(DAC)是12位数字输入,电压输出的D/A转换器。DAC可以配置成8位或12位模式,也可以与DMA控制器配合使用。DAC有2个输出通道,每个通道都有单独的转换器,可以工作在双DAC模式下,DAC集成了2个输出缓存,可以用来减少输出阻抗,无需外部运放,即可直接驱动外部负载。DAC转换可以选择外部事件触发(定时器计数器,外部中断线)和软件触发。

    使能DAC通道后,STM32F103XX相应的GPIO管脚(PA4或PA5)会自动与DAC的模拟输出相联系。为避免寄生干扰和额外功耗,管脚PA4和PA5配置成模拟输入(AIN),如图2所示。b.jpg?imageView2/2/w/550


    1.3 USB全速设备接口

    USB外设接口实现了USB 2.0全速总线和APB1总线间的接口,为PC主机和微控制器所实现的功能之间提供了符合USB规范的通信连接。PC主机和微控制器之间通过共享USB端点缓冲区来实现数据的传输。

    STM32芯片内部集成了USB外设,大大减轻了USB电路的设计负担,只需设计USB接口电路,就可以实现STM32芯片的电路板的USB通信设计。D/A回放系统选用的USB硬件接口电路如图3所示:USB上拉电压接在D+线上,所以本设计USB实现全速通信,PC机为USB接口供电。USB+连接在GPIO管脚PA11,USB-连接在GPIO管脚PA12,如图2所示:

 

    2 固件程序设计

    固件程序是运行于USB设备中的程序代码,用于辅助硬件完成USB的功能。该系统固件程序选用的是STM提供的The USB-FS-DevICe Libra ry固件程序库。主要完成如下功能:一是处理USB标准请求和用户自定义请求;二是根据USB规范设置设备的各种描述符;三是初始化系统得各级中断和内部端点的配置。在Keil编译环境下,利用现成固件程序框架函数,根据设备需求在STM提供的固件程序的框架中添加相应的程序代码,完成本回放系统的功能目的。

    2.1 STM32F103xxUSB固件程序库简介

    STM32F103xxUSB固件程序库是意法半导体公司专为STM32F103XX系列ARM微处理器提供的固件程序库,主要分为内核层和应用接口层,结构框图如图4所示。

c.jpg?imageView2/2/w/550

    内核层:该层管理使用USB IP硬件与USB标准协议两者间的直接通信。USB库内核遵从USB 2.0标准并和标准的STM32F103XX固件库分离。

    应用程序接口层:该层为用户提供了内核和最终应用程序之间的完整接口。应用接口层和最终应用与固件库通信来管理应用的硬件需求。

    2.2 固件程序的设计

    在本系统的开发中,没有对内核层进行深入研究和修改,仅对应用接口层进行完成设备功能需要的设计。应用层的开发主要包括:系统初始化,主要开启系统和所用外设的时钟;USB时钟配置,设置并使能USB时钟,为48 MHz;USB初始化主要是完成USB设备的枚举;定时器模块配置、DAC和DMA模块配置主要是完成所用外设的初始化;最后配置好标志位后等待上位机发送数据。所有代码都是用库函数来完成的,主程序流程图如图5所示。d.jpg?imageView2/2/w/550

    插入USB设备时,主机轮回查询各个USB端口,检测到D+和D-之间有电压差,会识别出有USB设备的插入,然后对设备进行枚举。在设计的D/A回放系统中,枚举过程的实现主要是对USB设备的设备描述符、配置描述符、端口描述符和端点描述符的配置来实现的。USB设备枚举的过程就是通过读取各个描述符来获取USB设备的信息,然后将它配置为其中的一种功能。


    D/A回放系统模块设计中,共使用了3个端点,分别为端点0,2和3。端点0为USB设备默认的控制端点,采用了控制传输方式,主要完成设备的枚举。端点2、3均为批量传输端点,数据传输采用的是批量传输方式,分别接收上位机发送来的心电信号数据和呼吸信号数据。定时器是一节拍发生器,作为DAC的外部事件触发源。定时时钟的预装载值和时钟分频系数由原数字信号的抽样频率来决定。在D/A回放系统中,使用了两个通用定时器3,4,分别作为心电信号和呼吸信号数据DA数模转换的触发源。DAC的配置为12位数据右对齐输入,电压输出的双通道模式。其中,通道1完成心电信号数据的D/A,通道2完成呼吸信号数据的D/A,选择定时器作为外部事件触发源,在一个定时周期内完成一次数据的DA实现。DMA模块主要是完成数据的转移,USB模块接收端点中断接受的数据,利用DMA方式从端点缓存中送入DAC的DAC_DHRyyD寄存器中,经过相应的移位后,写入的数据被转存到DHR1和DHR2寄存器中,随后通过定时器的外部事件触发传输到DORx寄存器中,在经过时间tsetting后,输出即有效。在数据传输过程中,采用了双缓冲机制,在RAM中开辟了2个缓存buffer,USB模块接收数据放在一个buffer中,DMA传输即DAC阶段,处理的数据是另一个buffer中的数据,这样,使接收数据和处理数据并行进行,保证了转换后波形的连续不间断性。双缓冲的实现大致如下(以心电信号数据为例):初始化空闲buffer位为buffer1,DMA源初始化配置为buffer1。端点2接收一数据包放入buffer1中,判断是否为第一次接收数据,如果是第一次接收,改变空闲buffer位为buffer2,并允许下一数据包的接收;如果不是第一次,中断直接返回。继续接收第二个数据包,放入buffer2中,判断是否第一次DMA传输,如果是,改变空闲buffer位为buffer1,开启DMA传输,并使能定时器;如果不是,中断返回。当DMA传输完成进入中断时,首先判断空闲buffer位,再重新配置DMA,包括DMA源和传输数目的改变,最后改变空闲buffer位,并允许端点的继续接收。心电信号数据接收处理流程图如图6所示。对于呼吸信号数据,做同样的处理。

e.jpg?imageView2/2/w/550

    3 设备驱动和应用程序的设计

    本系统的USB驱动程序采用WDM模型,选用的开发工具是Windows XP DDK(Build 2600),Driver Studio 3.2和VC 6.0。驱动程序开发平台搭建成功后,根据实际需要,用DriverWorks自带的DriverWizard生成驱动程序框架和Read,Write函数,在DevICeIoControl函数中添加设备控制程序,完成自定义的功能。

    上位机应用程序是采用VC 6.0创建的一个基于MFC的多文档界面应用程序,主要分为数据管理模块,回放模块等基本模块。Win32应用程序与设备驱动程序之间的通信是通过接口(API)函数来实现的,应用程序不需要为了和USB设备通信去了解复杂的USB协议,把USB接口当做文件来操作,从而轻而易举的实现USB接口通信。

    4 系统回放结果分析

    按照固件程序的设计写入USB设备,插入主机并加载相应的驱动程序,打开上位机程序,读取数据库中220.dat文件,传输到STM32完成D/A,原始心电信号波形与示波器回放波形的比较如图7所示。

f.jpg?imageView2/2/w/550

    D/A模块较好的完成了回放功能。通过示波器实时分析,回放波形周期及幅度亦满足要求,即时序性满足要求。

    5 结语

    基于STM32的MIT-BIH心电数据D/A回放的设计,在硬件和固件应用程序两方面实现了比较完美的结合,对原始数据的D/A回放取得了良好的运行效果。同时主控芯片STM32F103RE内部集成的丰富的功能模块,降低了开发的难度,也保证了系统的稳定性,使得该回放系统在医学研究和工业生产中有广泛的应用前景。


推荐阅读

史海拾趣

ALD [Advanced Linear Devices]公司的发展小趣事

ALD(Advanced Linear Devices)是一家专注于模拟半导体器件和电源解决方案的公司。以下是关于ALD公司发展的5个相关故事:

  1. 公司成立与创始人: ALD公司成立于1985年,总部位于美国加州的米尔皮塔斯市。该公司由俄罗斯裔工程师及企业家Vladimir Larkhov先生创立。Larkhov先生在半导体领域有着丰富的经验和深厚的技术底蕴,他创立ALD旨在为市场提供高品质、高性能的模拟集成电路和解决方案。

  2. 技术创新与专利: ALD公司以其在模拟半导体领域的技术创新而闻名。该公司拥有众多的专利,涵盖了多个关键技术领域,包括功率管理、电源管理、精密电压参考和模拟信号处理等。这些专利为ALD提供了技术壁垒,保护了其在市场上的地位。

  3. 产品线与市场应用: ALD公司的产品涵盖了模拟集成电路(ICs)、功率管理芯片、电源解决方案等领域。其产品被广泛应用于工业控制、医疗设备、汽车电子、通信设备、消费类电子产品等多个市场领域。ALD产品的高性能、高可靠性得到了客户的认可和信赖。

  4. 全球业务拓展: 随着全球市场的不断扩大,ALD公司不断加大对海外市场的开拓力度。除了在美国设立总部和研发中心外,ALD还在亚洲、欧洲等地设立了销售办事处和合作伙伴,以便更好地服务全球客户。

  5. 不断创新与发展: ALD公司一直致力于不断创新和发展,不断推出具有竞争力的新产品和解决方案,以满足客户不断变化的需求。公司注重技术研发和人才培养,拥有一支技术过硬、富有创新精神的团队,为公司的持续发展提供了强有力的支持。

这些故事展现了ALD公司在技术创新、产品应用、全球业务拓展和持续发展等方面的发展历程和成就。

Crocus公司的发展小趣事

展望未来,Crocus将继续致力于TMR传感器技术的研发与创新。公司计划进一步拓展产品线,提升产品性能,满足更多领域的需求。同时,Crocus还将加强与产业链上下游企业的合作,共同推动整个电子行业的发展。

这五个故事展示了Crocus公司在电子行业中的发展历程和取得的成就。从创立初期的艰难探索到技术突破、产品升级、与Allegro的合并、市场拓展以及未来的持续创新,Crocus始终保持着积极进取的精神和不断创新的态度,为电子行业的发展做出了重要贡献。

BOOKLY公司的发展小趣事

BOOKLY公司非常重视人才培养和团队建设。公司不仅为员工提供优厚的福利待遇和广阔的职业发展空间,还积极开展各种培训和学习活动,提升员工的专业技能和综合素质。同时,BOOKLY还注重团队文化建设,倡导团结协作、创新进取的精神。这些举措使得BOOKLY的团队凝聚力不断增强,为公司的发展提供了有力的人才保障。

福建国光公司的发展小趣事

BOOKLY公司深知品质是赢得市场的关键。因此,公司从创立之初就建立了严格的质量管理体系,确保每一款产品的品质和性能都达到最高标准。同时,BOOKLY还注重品牌塑造,通过精心的品牌设计和营销活动,提升了品牌知名度和美誉度。这些努力使得BOOKLY的产品在市场上获得了良好的口碑和广泛的认可。

EICHHOFF公司的发展小趣事

品质一直是EICHHOFF公司发展的核心竞争力。为了确保产品质量的稳定性和可靠性,公司建立了一套完善的质量管理体系,并持续进行改进和优化。从原材料采购到生产加工、从产品检测到售后服务,每一个环节都严格按照质量管理体系的要求进行。

此外,EICHHOFF公司还积极引入国际先进的品质管理工具和方法,如六西格玛、精益生产等,以进一步提高产品质量和生产效率。这些努力使得EICHHOFF的产品在行业中享有很高的声誉和信誉。

Electronicon Kondensatoren GmbH公司的发展小趣事

1976年,ELECTRONICON推出了采用金属化聚丙烯薄膜的电容器系列,这一创新技术为电容器行业带来了显著的空间和成本优势,进一步巩固了其在市场上的领先地位。随着技术的不断进步,ELECTRONICON的产品逐渐拓展至照明、电机和电力电子等多个领域。

问答坊 | AI 解惑

低相噪、低杂波数字锁相环路滤波器的设计

较详细地分析数字锁相频率合成器的相位噪声,着重用控制论方法对低相噪、低杂波锁相环的环路滤波器进行设计,并用某S波段频率合成器的实验结果进行了验证。…

查看全部问答>

物流搬运AGV的轨迹跟踪与控制

摘要:以物流搬运自动导向车AGV的轨迹跟踪为研究目标。建立了三轮式AGV的运动学模型,并对其 运动特性进行了分析,提出了AGV的运动控制策略,获得了AGV轨迹跟踪的控制规律,并利用Lyapunov 函数验证了控制系统的渐近稳定性。以具有任意初始误差的圆和 ...…

查看全部问答>

请教高频的低通滤波器的设计

小弟想做一个信号源,用DDS做,在输出滤波时遇到了一些问题,由于实验条件有限,没法做实物的仿真,只能软件模拟。发现ADI给出的标准120MHz低通滤波器的幅频曲线异常(使用Multisim2001仿真),我自己用faisyn设计了几个,也有不少的问题。 参数如 ...…

查看全部问答>

什么情况下会使自举电路的VB低于VSS?

什么情况下会使自举电路的VB低于VSS?请高手指点…

查看全部问答>

西门子 S7-300 PLC 从入门到精通的100个经典问题及解答

1:使用CPU 315F和ET 200S时应如何避免出现“通讯故障”消息? 使用CPU S7 315F, ET 200S以及故障安全DI/DO模块,那么您将调用OB35 的故障安全程序。而且,您已经接受所有监控时间的默认设置值,并且愿意接收“通讯故障”消息。 OB 35 默认设置为10 ...…

查看全部问答>

提问~~ 关于8位微控制器的波特率问题?

微控制器是MC9S08QG8使用的是内部晶振。 现在有个问题就是程序下载到板子上在线调试的时候,通过串口来校验接收和发送数据是没问题,完全正确的。 然后撤掉 USB multilink。板子断电后重新上电,就发现需要重新调整SCI的设置的值。尤其是比如: ...…

查看全部问答>

wince下使用vector容器

在wince下使用vector后,编译时会出很多警告,请问什么原因?可否避免?…

查看全部问答>

WinCE下Camera能正常显示影像,拍照时花屏

三星2440 WinCE下的CameraTest测试程序在我的开发板上能正常显示影像,拍照保存下来的BMP图是花屏。不知道从哪里入手,请大家指教。贴一下拍照部分的代码。 void CCameratestDlg::OnButton3() {         // TODO: Add your ...…

查看全部问答>

C51的问题:memset出现内存覆盖,如何解决呢?

我用的是C8051F340芯片,发现程序中的memset(buff,0x00,100)函数初始化的内存时,还改动了其他地方的值。buff所指的位置后的100个单元确实被初始化了,但也改变了其他的方的值,程序变的杂乱无章,全乱了。不知道大家遇到过没有。原因正在查找中...…

查看全部问答>

与上位机有关的几个小问题……

1.有人有那个demo的源代码吗? 2.随光盘的那个Code Composer Essentials 2.0是什么东西?是和VC差不多的编译软件吗?有没有什么优势啊? 上位机软件有没有人搞出来的啊?…

查看全部问答>