摘 要:介绍了一种基于USB总线的高速数据采集系统,讨论了USB控制器EZ-USB FX2(CY7C68013)的性能及传输方式,提供了该系统的硬件实现和基于GPIF主控方式实现数据传输的设计。
关键词: USB;数据采集;EZ-USB FX2;GPIF
一、 引言
现代工业生产和科学研究对数据采集的要求日益提高.目前比较通用的是在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的规范能针对不同的性能价格比要求提供不同的选择,以满足不同的系统和部件及相应不同的功能,给我们带来极大方便。
二、 系统介绍
1、 数据采集系统的结构与功能
硬件总体结构如图1所示。数据采集接口卡是硬件部分的核心,它包括A/D转换器、微控制器、USB通信接口等。
图1系统总体结构图
(1)信号调理模块
在高速数据采集系统中, 现场输入信号是高频的模拟信号,信号变化的范围都比较大,如果采用单一的增益放大,那么放大以后的信号幅值有可能超过A/D转换的量程,所以必须根据信号的变化相应地调整放大器的增益。在自动化程度较高的系统中,希望能够在程序中用软件控制放大器的增益,AD8321正是这样一种具有增益可编程功能的芯片。AD8321是美国AD公司生产的一种增益可编程线驱动器,可广泛应用于多种领域。它具有频带宽、噪声低、增益可编程且易于与单片机进行串行通信等优点,十分适合在数据采集系统做前置放大。其示意图如下:
图2 模拟信号调理
(2)模-数变换
经过调理后的信号被送入模/数变换器(ADC)进行A/D变换。我们选用的ADC是TLC5540,TLC5540是高速8位模拟数字转换器,它以高达每秒40M采样辞书的采样速率进行转换。TLC5540采用半闪速结构和CMOS工艺,能以高速进行转换,同时仍保低功率损耗与成本。75MHz(典型值)的模拟输入带宽使该器件成为欠采样应用的良好选择。器件具有内部电阻,用以从5V电源产生2V满度基准电压,从而减少了外部元件数。数字输出置于高阻方式。它仅需要5V电源工作,可由USB总线供电。
(3)EZ-USB FX2简介
数据采集接口卡是硬件部分的核心,选择合适的能适用于USB协议的芯片是关键。EZ-USB FX2是世界上首批USB2.0集成微控制器。它的内部继承了USB2.0的收发器、串行接口引擎(SIE)、增强的8051微控制器和一个可编程的串行接口。内部结构如图3所示。
图3 EZ-USB FX2结构示意图
特性
1 加强8051内核
性能可达到标准8051的5-10倍,与标准8051的指令完全兼容。
2 高度集成
将微处理器、RAM、SIE(串行接口引擎)等多个功能模块集成在一个芯片中,从而减少了多个芯片接口部分时序配合的麻烦。
3 软配置
外设未通过USB接口接到PC机之前,外设上的固件存储在PC上;一旦外设连接到PC机上,PC先询问外设是“谁”(即读设备描述符),然后将该外设的固件下载到芯片的RAM中,这个过程叫做再枚举。这样在开发过程中当固件需要修改时,可以在PC机上修改好后,下载到芯片中。
4 易用的软件开发工具
固件可独立于驱动程序被测试,驱动程序和固件的开发和调试相互独立,可加快开发的速度。
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模式。
图4 GPIF在FX2系统中的位置
在高速数据采集卡的设计中,存在两大难点:一是模拟信号的A/D高速转换;二是变换后数据的高速存储及提取。对于第一个问题,由于制造ADC的技术不断进步,这个问题已经得到解决。
对于第二个问题,一般的数据采集系统是将A/D转换后的数据先存储在外部数据存储器中,然后再对其进行处理。对于高速数据采集而言,这种方式将严重影响采集速度,且存储值也受到很大限制。我们的改进方案是将A/D转换后的数据直接送至计算机内存,这样,采集速度将大大提高且可存储大量数据,便于下一步的处理。
为了解决同步问题,可以由CPLD产生同步时钟信号,提供给ADC和FX2。在本数据采集系统的设计中,CPLD同时还用于产生不同的控制信号,从而对采样进行实时控制。CPLD即复杂可编程逻辑器件,它包括可编程逻辑宏单元、可编程I/O单元和可编程内部连线。它内部资源丰富,因而广泛应用在数据采集、自动控制、通讯等各个领域。我们选用Lattice公司的ispLSI1016。
整个USB接口卡的硬件电路图如下:
图5 USB接口示意图
三、 统软件设计
系统软件包括USB设备驱动程序、设备固件、应用程序。
1 设备固件(Firmware)设计
设备固件是设备运行的核心,采用汇编语言或C语言设计。其主要功能是控制芯片CY7C68013,接受并处理USB驱动程序的请求(如请求设备描述符、请求或设置设备状态,请求或设置设备接口等USB2.0标准请求);控制芯片CY7C68013接受应用程序的控制指令;控制A/D模块的数据采集;通过CY7C68013缓存数据并实时上传至PC。
即使外部逻辑或内置的普通可编程接口(GPIF) 在没有 CPU 的任何干涉下通过四个大的端点 FIFO 处理高速宽带数据,固件还是有如下确定的责任:
• 配置端点。
• 通过控制端点零响应主机请求。
• 控制和监测 GPIF 的活动。
• 利用 USART 处理所有的特殊请求任务,如记时器、中断、I/O引脚等。
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功能实现模块。
即插即用管理模块实现USB设备的热插拔及动态配置。当硬件检测到USB设备接入时,Windows查找相应的驱动程序,并调用它的DriverEntry例程,告诉它添加一个设备;然后,驱动程序为USB设备建立一个FDO(功能设备对象),在此处理过程中,驱动程序收到一个IRP MN START DEVICE 的IRP,包括设备分的资源信息。至此,设备被正确配置,驱动程序开始硬件进行对话。当然,在设备运行过程中,如果设备状态发生变化(拔除、暂停等),PnP管理器也同样出相应的IRP,由驱动程序进行相应的处理。
电源管理模块负责设备的挂起与唤醒。
I/O功能实现模块完成I/O请求的大部分工作。应用程序提出I/O请求时它调用Win32 API函数DeviceIoControl来向设备发出命令。然后由I/O管理器构造一个IRP并设置其MajorFunction.域为IRP_MJ_DEVICE_CONTROL。USB设备驱动程序收到该IRP后,取出其中的控制码,并利用一个开关语句来找对应的例程入口。
3 应用程序设计
应用程序设计由两个部分组成:动态链接库和应用程序。动态链接库负责与内核态的USB功能驱动程序通信并接受应用程序的各种操作请求,而应用程序负责对所采集的数据进行实时显示、分析和存盘。
动态链接库的工作原理如下:当它收到应用程序开始采样的请求后,便创建两个线程:采样线程和现实存盘线程。采样线程负责将采样数据写到应用程序提交的内存;而显示存盘线程负责给应用程序发送显示和存盘消息。当应用程序接受到此消息后,便从它提交的内存中读取数据并显示和存盘。要注意采样线程和显示存盘线程在读写应用程序提交的内存时要保持同步。
PC机或工控机应用程序是数据实时采集系统的的中心,采用Labview编程。它是当今国际上唯一的编译型图形化编程语言,其显著特点是:
(1) 能完成对固体表面速度的实时测量。
(2)主介面与多重窗口结合,完成数据连续采集、实时统计分析、系统参数设置、信号波形显示、被测参数输出等综合系统功能。
(3)充分利用Labview开发平台和WINDOWS视窗所提供的良好的操作环境,集曲线、图形、数据于一体,准确描述过程参数的变化
下图显示的是用高速数据采集系统采集通过Labview显示的一个波形实例,输入信号是一个频率为5MHz的正弦波。
图 6采样波形(信号源:5M波形正弦波,采样率:40MSPS)
结 语