现代工业生产和科学研究对数据采集的要求日益提高。目前比较通用的是在PC或工控机内安装数据采集板卡,如A/D卡及422、485卡。这些数据采集设备存在以下缺陷:安装麻烦;价格昂贵;受计算机插槽数量、地址、中断资源限制,可扩展性差;在一些电磁干扰性强的测试现场,无法专门对其做电磁屏蔽,导致采集的数据失真。
通用串行总线(Universal Serial Bus,简称USB)是1995年康柏、微软、IBM、DEC等公司为了解决传统总线的不足推广的一种新型串行通信标准。该总线接口具有安装方便、高带宽、易扩展等优点,已经逐渐成为现代数据传输的发展趋势。基于USB的数据采集系统充分利用USB总线的上述优点,有效解决了传统数据采集系统的缺陷。
1 系统硬件设计
1.1 硬件总体结构
USB实时数据采集系统硬件模块包括A/D转换器、微控制器、USB通信接口和多路模拟开关。硬件总体结构如图1所示。

USB接口芯片采用National Semiconductor公司的一种专用芯片USBN9602。该芯片内部集成微处理器接口、FIFO存储器、时钟发生器、串行接口引擎(SIE)、收发器、3.3V电压转换器,支持DMA、微波接口,内部结构如图2所示。

2 系统软件设计
系统软件包括USB设备驱动程序、设备固件、应用程序。
2.1 USB设备驱动程序开发

在上述USB分层模块中,USB函数层(USBD及HCD)由Windows98提供,负责管理USB设备驱动程序和USB控制器之间的通信;加载及卸载USB驱动程序;与USB设备通用端点(endpoint)建议通信来执行设备配置、数据与USB协议框架和打包格式的双向转换任务。
目前Windows98提供了多种USB设备驱动程序,但并不针对实时数据采集设备,因此需采用DDK开发工具设计专用的USB设备驱动程序。可以由四个模块实现:初始化模块、即插即用管理模块、电源管理模块以及I/O功能实现模块。
初始化模块提供一个DriverEntry入口点来执行大量的初始化函数。

电源管理模块负责设备的挂起与唤醒。
I/O功能实现模块完成I/O请求的大部工作。当应用程序提出I/O请求时,它调用Win32 API函数DeviceIoControl来向设备发出命令。然后,由I/O管理器构成一个IRP并设置其MajorFunction域为IRP_MJ_DEVICE_CONTROL。USB设备驱动程序收到该IRP后,取出其中的控制码,并利用一个开关语句来找到对应的例程入口。
2.2 设备固件(firmware)设计
设备固件是设备运行的核心,采用汇编语言设计。其主要功能是控制芯片USB9602接受并处理USB驱动程序的请求(如请求设备描述符、请求或设置设备状态、请求设备设置、请求或设置设备接口等供10种USB1.1标准请求);控制芯片USB962接受应用程序的控制指令;控制A/D模块的数据采集;通过USB9602存储数据并实时上传PC。其程序主框图如图5所示。
在图5中,ALT事件表示硬件检测到USBN96902处于下列状态:Reset、Resume、Suspend,由ALTEV寄存器汇报并产生中断。

PC机或工控机应用程序是数据实时采集系统的中心,采用Visual C++ 5.0编程。其功能主要有:开启或关闭USB设备、检测USB设备、设置USB数据传输管道(pipe)、设置A/D状态和数据采集端口、实时从USB接口采集数据、显示并分析数据。USB程序主框图如图6所示。
由于USB9602提供的FIFO不超过64字节,当FIFO存满后,USB9602自动将数据打包即时请求读入数据,由SIE自动发送数据包。程序获得数据后,需延迟至下组数据包准备完毕,从而保证程序与设备采集频率同步。另外,当系统启动A/D模块后程序持续执行,并采用多线程编程发出停止采集和关闭USB设备的命令。

3 基于USB总线的数据实时采集系统特点
基于USB总线的数据实时采集系统设计上严格遵循USB1.1协议,其性能特点如下:
(1)安装方便,支持即插即用。安装时可在不关机不打开机箱的情况下将设备插入USB插槽,运行驱动程序即可,以后可直接对设备热插拔。
(2)易扩展。最第传输距离5m,采用Hub或中继器可达30m;最多对外可接127个设备。
(3)供电方便。USB总线直接利用主机电源为外设提供最大5V 500mA的电流,系统无需另备电源。
(4)电源干扰影响极小。由于本产品放置在计算机机箱外,不受箱内的板间电源干扰。如在电磁干扰较严重的环境下,可以为该产品专门设计屏蔽方案。
(5)性价比高。远优于传统的实时数据采集系统。
(6)实时采集,实时显示。
编辑:何世平