摘要:介绍了一种基于usb总线的高速数据采集系统,讨论了usb控制器ez-usbfx2cy7c68013?的性能及传输方式?给出了该系统的硬件和基于gpif主控方式实现数据传输的软件设计方法。
关键词:usb;数据采集;ez-usb fx2;gpif
1 引言
现代工业生产和科学研究对数据采集的要求日益提高。目前比较通用的是在pc或工控机内安装数据采集卡(如a/d卡及422、485卡)。但这些数据采集设备存在以下缺陷:安装麻烦、价格昂贵、受计算机插槽数量、地址、中断资源的限制,可扩展性差,同时在一些电磁干扰性强的测试现场,可能无法专门对其作电磁屏蔽,从而导致采集的数据失真。
传统的外设与主机的通讯接口一般是基于pci总线、isa总线或者是rs-232c串行总线。pci总线虽然具有较高的传输速度(132mbps),并支持“即插即用”功能,但其缺点是插拔麻烦,且扩展槽有限(一般为5~6个),isa总线显然存在同样的问题。rs-232c串行总线虽然连结简单,但其传输速度慢(56kbps),且主机的串口数目也有限。
通用串行总线(universal serial bus,简称usb)是1995年康柏、微软、ibm、dec等公司为了解决传统总线的不足,而推出的一种新型串行通信标准。该总线接口具有安装方便、高带宽、易扩展等优点,已经逐渐成为现代数据传输的发展趋势。基于usb的数据采集系统充分利用usb总线的上述优点,有效地解决了传统数据采集系统的缺陷。usb的规范能针对不同的性能价格比要求提供不同的选择,以满足不同的系统和部件及相应不同的功能,从而给使用带来极大方便。
2 系统介绍
2.1 数据采集系统的结构与功能
常见的数据采集系统的硬件总体结构如图1所示。其中数据采集接口卡是硬件部分的核心,它包括a/d转换器、微控制器、usb通信接口等。
在高速数据采集系统中?由于现场输入信号是高频模拟信号,因而信号的变化范围都比较大?如果采用单一的增益放大?那么放大以后的信号幅值有可能超过a/d转换的量程?所以必须根据信号的变化相应地调整放大器的增益。在自动化程度较高的系统中?希望能够在程序中用软件控制放大器的增益?ad8321正是这样一种具有增益可编程功能的芯片。ad8321是美国ad公司生产的一种增益可编程线性驱动器。它具有频带宽、噪声低、增益可编程且易于与单片机进行串行通信等优点,十分适合在数据采集系统中做前置放大。
经过调理后的信号可送入模/数变换器(adc)进行a/d变换。笔者选用的adc是tlc5540,它是一种高速8位模拟数字转换器,能以高达每秒40m的采样速率进行转换,由于采用半闪速结构和cmos工艺制造,因此功耗和成本很低。其75mhz(典型值)的模拟输入带宽使该器件成为欠采样应用的良好选择。该器件带有内部电阻,可用于从5v电源产生2v满度的基准电压,以减少外部元件数。数字输出置于高阻方式。它仅需要5v电源工作,可由usb总线供电。
由于数据采集接口卡是硬件部分的核心,因此应选择能适用usb协议的合适芯片。ez-usb fx2是一种usb2.0集成微控制器。它的内部集成了usb2.0收发器、串行接口引擎(sie)、增强的8051微控制器和一个可编程的串行接口。其主要特性如下:
●带有加强的8051内核性能,可达到标准8051的5~10倍,且与标准8051的指令完全兼容;
●集成度高,芯片内部集成有微处理器、ram、sie(串行接口引擎)等多个功能模块,从而减少了多个芯片接口部分需要时序配合的麻烦;
●采用软配置,在外设未通过usb接口接到pc机之前,外设上的固件存储在pc上;而一旦外设连接到pc机上,pc则先询问外设是“谁”(即读设备描述符),然后将该外设的固件下载到芯片的ram中,这个过程叫做再枚举。这样,在开发过程中,当固件需要修改时,可以先在pc机上修改好,然后再下载到芯片中;
●具有易用的软件开发工具,该芯片开发系统的驱动程序和固件的开发和调试相互独立,可加快开发的速度。
2.2 方案选择
fx2有三种可用的接口模式:端口、gpif主控和从fifo。
在“端口”模式下,所有i/o引脚都可作为8051的通用i/o口。
在“从fifo”模式下,外部逻辑或外部处理器直接与fx2端点fifo相连。在这种模式下,gpif不被激活,因为外部逻辑可直接控制fifo。这种模式下,外部主控端既可以是异步方式,也可以是同步方式,并可以为fx2接口提供自己的独立时钟。
“gpif主控”接口模式使用portb和portd构成通向四个fx2端点fifo( ep2? ep4? ep6和ep8)的16位数据接口。gpif作为内部的主控制器与fifo直接相连,并产生用户可编程的控制信号与外部接口进行通信。同时,gpif还可以通过rdy引脚采样外部信号并等待外部事件。由于gpif的运行速度比fifo快得多,因此其时序信号具有很好的编程分辨率。另外,gpif既可以使用内部时钟,也可以使用外部时钟。故此,笔者选择了gpif模式。
高速数据采集卡的设计存在两大难点:一是模拟信号的a/d高速转换;二是变换后数据的高速存储及提取。对于第一个问题,由于制造adc的技术不断进步,这个问题已经得到解决。而对于第二个问题,一般的数据采集系统是将a/d转换后的数据先存储在外部数据存储器中,然后再对其进行处理。对于高速数据采集而言,这种方式将严重影响采集速度,且存储值也会受到很大限制。而改进方案是将a/d转换后的数据直接送至计算机内存,这样,采集速度将大大提高,而且可存储大量数据,以便于下一步的处理。
为了解决同步问题,可以由cpld产生同步时钟信号提供给adc和fx2。在本数据采集系统的设计中,cpld同时还可用于产生不同的控制信号,以便对采样进行实时控制。cpld是复杂可编程逻辑器件,它包括可编程逻辑宏单元、可编程i/o单元和可编程内部连线。由于cpld的内部资源丰富,因而可广泛应用在数据采集、自动控制、通讯等各个领域。在本系统的设计中,笔者选用的cpld是lattice公司的isplsi1016。图2所示是其整个usb接口卡的硬件电路图。
3 系统软件设计
该系统软件主要包括usb设备驱动程序、设备固件和应用程序。
3.1 设备固件(firmware)设计
3 系统软件设计
该系统软件主要包括usb设备驱动程序、设备固件和应用程序。
3.1 设备固件(firmware)设计
设备固件是设备运行的核心,可采用汇编语言或c语言设计。其主要功能是控制cy7c68013接收并处理usb驱动程序的请求(如请求设备描述符、请求或设置设备状态,请求或设置设备接口等usb2.0标准请求)、控制芯片cy7c68013接收应用程序的控制指令、控制a/d模块的数据采集、通过cy7c68013缓存数据并实时上传至pc等。
即使外部逻辑或内置的普通可编程接口(gpif)在没有cpu的任何干涉下能够通过四个大的端点fifo来处理高速宽带数据,固件还是有如下固定的工作:
●配置端点;
●通过控制端点零来响应主机请求;
●控制和监测gpif的活动;
●利用usart处理所有的特殊请求任务,如计时器、中断、i/o引脚等。
3.2 usb设备驱动程序开发
usb系统驱动程序采用分层结构模型?分别为较高级的usb设备驱动程序和较低级的usb函数层。其中usb函数层由两部分组成:较高级的通用串行总线驱动程序模块(usbd)和较低级的主控制器驱动程序模块(hcd)。
在上述usb分层模块中,usb函数层(usbd及hcd)由windows提供,负责管理usb设备驱动程序和usb控制器之间的通信;加载及卸载usb驱动程序;与usb设备通用端点(endpoint)建立通信并执行设备配置、数据与usb协议框架和打包格式的双向转换任务。目前?windows提供有多种usb设备驱动程序,但并不针对实时数据采集设备,因此需采用ddk开发工具来设计专用的usb设备驱动程序。该设备驱动程序应由初始化模块、即插即用管理模块、电源管理模块以及i/o功能等四个模块来实现。
初始化模块可提供一个driverentry入口点以执行大量的初始化函数。
即插即用管理模块用来实现usb设备的热插拔及动态配置。当硬件检测到usb设备接入时,windows查找相应的驱动程序,并调用它的driveren-try例程,同时告诉它添加了一个设备;然后,驱动程序为usb设备建立一个fdo(功能设备对象)。在此处理过程中,驱动程序收到一个irp mn start de-vice 的irp,在它之中包括有设备的资源信息。至此,设备被正确配置,驱动程序开始与硬件进行对话。当然,在设备运行过程中,如果设备状态发生变化(拔除、暂停等),pnp管理器也同样发出相应的irp,以便由驱动程序进行相应的处理。
电源管理模块负责设备的挂起与唤醒。
i/o功能实现模块可完成i/o请求的大部分工作。当应用程序提出i/o请求时,它将调用win32 api函数deviceiocontrol向设备发出命令,然后由i/o管理器构造一个irp并设置其majorfunction.域为irp mj device control。在usb设备驱动程序收到该irp后?它将取出其中的控制码?并利用一个开关语句查找对应的程序入口。
3.3 应用程序设计
应用程序设计由两个部分组成:动态链接库和应用程序。动态链接库负责与内核态的usb功能驱动程序通信并接收应用程序的各种操作请求,而应用程序则负责对所采集的数据进行实时显示、分析和存盘。
动态链接库的工作原理如下:当它收到应用程序开始采样的请求后,首先创建两个线程:采样线程和显示存盘线程。采样线程负责将采样数据写到应用程序提交的内存;而显示存盘线程则负责给应用程序发送显示和存盘消息。当应用程序接收到此消息后,便从它提交的内存中读取数据并显示和存盘。要注意的是:采样线程和显示存盘线程在读写应用程序提交内存时要保持同步。
pc机或工控机应用程序是数据实时采集系统的中心?可采用labview编程。它是当今国际上唯一的编译型图形化编程语言,其特点如下:
(1) 能完成对固体表面速度的实时测量;
(2)主介面与多重窗口结合?可完成数据连续采集、实时统计分析、系统参数设置、信号波形显示、被测参数输出等综合系统功能。
(3)能充分利用labview开发平台和windows视窗所提供的良好操作环境?集曲线、图形、数据于一体?可准确描述过程参数的变化。
图3所示是用高速数据采集系统采集通过lab-view显示的一个波形实例,其输入信号是一个频率为5mhz的正弦波。
4 结束语
随着电子计算机的广泛应用,社会的数字化程度越来越高,数据采集也越来越重要,本系统是一种通用的高速数据采集系统,可用于生物电波、电子学频谱、声波分析等瞬态信号的实时采集和观察等场合。其中基于usb总线的高速数据采集系统具有可靠性高、数据不丢失、抗干扰性强、便于数据传输和处理等优点,因而具有良好的应用前景和很大的实用价值