基于STM32的MIT-BIH心电数据的D/A回放

时间:2012-02-08来源:网络

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



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


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

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

1 2 3

关键词: 数据 回放 心电 MIT-BIH STM32 基于

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版