关键词:USB;心电;数据采集
1 引言
心电信号是最广泛的临床检查项目之一。心电信号数据采集系统是心电信号检查的关键部件,它能在较强的噪声背景下,通过电极将0.05~100Hz的微弱心电信号检测出来,然后经放大、A/D转换后送入计算机进行处理。计算机的使用使得该系统在信号分析、储存、打印等方面比传统的心电图机具有明显的优势。但采集系统与计算机的通讯接口都存在插卡插拔麻烦,安全性差,且扩展槽数目有限等不足。为此?本文提出的基于USB接口的心电信号数据采集系统使用了目前最为先进的USB接口技术,能够支持即插即用和热插拔功能。这是其它非USB接口无法比拟的。同时也可以与笔记本电脑相连以构成移动式心电检测分析仪。
2 系统的硬件组成
2.1 系统组成
图1所示为基于USB接口的心电信号数据采集系统的组成框图。图中?电极传感器检测到的心电信号经输入保护电路进行电压限幅、高频滤波后,再进行前置放大,然后经光电隔离后,再次进行电压放大,最后经干扰抑制电路消除干扰后,在多路模拟开关的控制下将其中某一路信号接入A/D。CY7C64613是带智能USB接口的单片机,通过它可以把A/D转接后的数字信号经USB接口传输到计算机。
下面就数据采集系统的抗干扰措施、信号放大及USB通信等问题进行重点论述。
2.2 系统抗干扰
作为医疗器械的心电信号数据采集系统,由于其检测对象是低频、微弱的心电信号,干扰较大,因此?系统的抗干扰能力及安全可靠性至关重要。针对这种情况,本系统采取了多方面措施。图2所示为输入保护电路和高频滤波电路。其中输入保护电路是在每个电极和地之间加入两个并联的硅二极管以进行电压限幅,从而限制输入电压不超过±600mv,确保病人和仪器的安全。高频滤波电路用于阻止高频干扰信号进入数据采集系统。本设计使用以FX101芯片为核心的低通滤波器。滤波截止频率为:
fc=1/[2p(R1R2C1C2)1/2]
使用光电隔离电路和干扰抑制电路可进一步提高抗干扰能力。干扰抑制电路包括50Hz干扰抑制电路和肌电干扰抑制电路。前者用来滤掉50Hz工频干扰(这是心电信号的主要干扰源),它是一个无源RC双T网络。后者用来抑制电极与皮肤接触时引进的肌电信号,它是一个高载RC滤波器。
此外,还可采用软件滤波的方法。可通过在软件中设置50Hz干扰滤波和漂移滤波等程序来进一步提高系统的抗干扰能力。
2.3 放大电路
放大电路也是设计重点之一。一般情况下,心电信号必须进行放大才能送往计算机进行处理。由于极化电压的影响,放大器的增益不能太高,因而本系统采用了前置放大电路和电压放大电路两级放大的方法。对前置放大电路的要求是:输入阻抗高、失调温漂小、共模抑制比高、输入噪声小。为此笔者选用了INA121芯片。INA121是Texas Instruments BB公司生产的低功耗仪器放大电路,性能优越,它的差模输入电阻为1012Ω,共模抑制比为106dB,输入失调电压为±200μv,输入失调温漂为±2μv/℃,输入噪声为20nV?Hz?1/2。前置放大电路的放大倍数设置为50。较小的前置放大倍数可以避免极化电压的影响。电压放大电路的放大倍数设置的较高(取为100倍),则可以保证总的放大倍数。
2.4 USB专用芯片的选择
目前各个厂商推出的USB芯片类型众多,功能各异。本系统选用Cypress半导体公司推出的EZ-USB FX全速系列中的CY7C64613-128NC芯片。EZ-USB FX系列芯片是带智能USB接口的单片机,它以8051为核心。对于复杂与繁琐的USB通信,该器件可提供EZ-USB固件函数库与固件架构,从而可大幅度地降低编写固件程序代码的困难程度。CY7C64613支持USB协议1.1,同时可支持12Mbps的全速传输。此外,它还带有增强版的8051核心和4kB或8kB的RAM,端点数量为32个,可采用智能型的USB核心程序。
3 软件设计
本系统的软件设计包括三部分:固件设计、驱动程序设计、应用程序设计。
本设计中将心电信号数据采集系统规划为人工接口设备HID群组。该HID群组原是针对键盘、鼠标等输入设备而设置与规划的。但是,对于需要以双向、适当的频率来进行数据交换的其它设备而言,也是一个非常好的设计范例与基础架构。因此,可以将这些设备规划为HID群组,只要它们符合HID规范中所定义的各种特性与条件,就可以执行HID设备的功能。在windows98与windows2000等操作系统中都已包含了HID群组的驱动程序,因此,用户开发新设备时,无须重新编写驱动程序。
3.1 固件(Firmware) 设计
由于EZ-USB FX系列已提供了固件架构(frame works)。因此,可以利用这一架构来简化固件的开发。用户仅需提供其USB描述符以及实现外围功能的程序代码?在PERIPH.C文件中?,即可完成完全兼容的USB设备设置。此外,Cypress公司还提供了副函数钩子(function hooks),利用该功能可以帮助用户进行固件的设计。
在程序开始执行后,固件架构会执行以下步骤:第一步,设置内部状态变量的起始值;第二步,调用用户的初始设置函数TD-Init;第三步,在1s间隔后重新设备列举(ReNumerate),直到收到SETUP封包为止;第四步,一旦SETUP封包被检测到,固件架构立即启动与其合作的工作分配器。
TD_Init()可用来对用户设备(即数据采集系统)进行初始化,并重新寻址描述符表。其程序代码如下:
TD_Init();
pDeviceDscr=(WORD)&DeviceDscr;
pConfigDscr=(WORD)&ConfigDscr;
pStringDscr=(WORD) &StringDscr;
if((WORD)&DeviceDscr&0xe000)
pReportDscr=(WORD)&ReportDscr
{
IntDescrAddr=INTERNAL_DSCR_ADDR;
ExtDescrAddr=(WORD)&DeviceDscr;
DevDescrLen=(WORD)&UserDscr(WORD)&De-viceDscr+2;
for(i=0;i<DevDescrLen;i++)
*((BYTE xdata *)IntDescrAddr+i)=0xCD;
for(i=0;i<DevDescrLen;i++)
*((BYTE xdata* )IntDescrAddr+i)=*((BYTE xdata *)ExtDescrAddr+i);?
pDeviceDscr=IntDescrAddr;
offset = (WORD)&DeviceDscr_INTERNAL_DSCR_ADDR;
pConfigDscr- =offset;
pStringDscr - =offset;
pReportDscr- =offset;
}
EZUSB_IRQ_ENABLE();
EZUSB_ENABLE_RSMIRQ();
.
3.2 驱动程序设计
在Windows操作系统中,USB驱动程序是基于Win 32 Driver Model?WDM?的,它用阶层式驱动程序模式,每个驱动程序阶层负责处理一部分通信工作,具体框图如图3所示。设备驱动程序(含群组驱动程序)可与系统的总线驱动程序进行通信,总线驱动程序用来处理USB的硬件。用户应用程序并不直接与硬件打交道,而是使用Win 32 API调用函数对Win 32子系统进行调用,同时给设备驱动程序发I/O请求包(IRP)。由于Windows操作系统中已包含了总线驱动程序和一些群组驱动程序,因此用户只需编写自己的用户设备驱动程序或选用Windows提供的群组驱动程序即可。
在Windows系统中,HIDDEV.INF文件中已提供有HID群组的驱动程序,可以直接引用。从而省去了编写繁琐的用户驱动程序的麻烦。
3.3 应用程序设计
在应用程序中,需要设置与固件程序及驱动程序中相同的PID/VID码,才能在设备管理中找到对应的USB设备(数据采集系统)。具体的设置程序代码如下:
Const MyVendorID=&H1234
Const MyProductID=&H5678
在Windows 98驱动程序开发工具组(DDK)中,一般都具有用户模式(即应用程序阶层)HID通信部分的完整指导准则。用户通过调用API函数,可以找到与设备描述符内设置的VID/PID码相符合的HID设备(即数据采集系统)。有了API函数传回的设备路径名称,就能用GreateFile()函数打开设备的指示(handle),然后使用HID特定的API函数来读取VID/PID码,最后再使用ReadFile()与WriteFile()函数来准备交换数据。具体编程方法可参阅Windows 98 DDK。
4 结论
基于USB接口的心电信号数据采集系统具有优越的性能。试验表明,其使用方便,性能稳定。尤其是它与笔记本电脑相结合可构成移动式心电信号检测分析仪,从而方便地应用于野外、救护车、病房等传统心电分析仪不便使用的场合,具有很高的实用推广价值。