在现代工业生产和科学技术研究的各行业中,通常需要对各种数据进行采集。目前通用的通过数据采集板卡采集的方法存在着以下缺点:安装麻烦,易受机箱内环境的干扰而导致采集数据的失真,易受计算机插槽数量和地址、中断资源的限制,可扩展性差。而通用串行总线USB(Universal Serial Bus)的出现,很好地解决了上述问题,很容易实现便捷、低成本、易扩展、高可靠性的数据采集,代表了现代数据采集系统的发展趋势。
1系统硬件设计与实现 1.1硬件总体结构 基于USB总线的实时数据采集系统硬件组成包括模拟开关、A/D转换器、单片机、USB接口芯片,其硬件总体结构如图1所示。多路模拟信号经过模拟开关传到A/D转换器转换为数字信号,单片机控制采集,USB接口芯片存储采集到的数据并将其上传至PC,同时也接收PC机USB控制器的控制信息。
1.2 PDIUSBDl2芯片 USB接口芯片采用Philips公司的一种专用芯片PDIUS-BDl2(以下简称D12)。该芯片完全符合USBl.1规范,集成了SIE、 320B的多配置FIFO存储器、收发器、电压调整器、SoftConnect、GoodLink、可编程时钟输出、低频晶振和终端电阻等,支持双电压工作、完全自动DMA操作、多中断模式,内部结构如图2所示。
单片机通过8位并行接口传送经过A/D转换的采集数据,存储在FIFO存储器中。一旦存满,串行接口引擎SIE立刻对数据进行处理,包括同步模式识别、并/串转换、位填充/不填充、CRC校验、PID确认、地址识别以及握手鉴定,处理完毕后数据由模拟收/发器通过D+、D-发送至PC。上述过程遵循 USBl.1协议。D12与89C51的具体实现电路如图3所示。
2系统软件设计与实现 系统软件包括USB设备固件编程、驱动程序和应用程序。其中设备固件是整个系统的核心,它控制芯片D12采集数据、接收并处理USB驱动程序的请求和应用程序的控制指令。
2.1 USB设备固件程序设计与实现
设备固件是设备运行的核心,用C语言设计。其主要功能是控制A/D模块的数据采集;接收并处理驱动程序的请求,如请求描述符、请求或设置设备状态、请求设备设置、请求或设置设备接口等USBl.1标准请求;控制芯片D12接收应用程序的控制指令等。其程序主框图如图4所示。单片机检测到D12后进入主循环。此时PC机先发令牌包给D12,D12接收到令牌包后给单片机发中断,单片机据中断类型设定标志位Status,最后执行相应标志位的中断服务程序。单片机通过A/D模块的中断入口控制A/D模块的数据采集。 [page]
2.2驱动程序设计与实现 USB系统驱动程序采用分层结构模型:较高级的USB设备驱动程序和较低级的USB函数层。其中USB函数层由通用串行总线驱动程序模块(USBD)和主控制器驱动程序模块(HCD)组成。
为使驱动程序具有通用性,也为简化应用程序的开发,编写了供应用程序调用的动态链接库。这样应用程序只需调用此库提供的接口函数即可完成对USB设备的操作。USB函数层(USBD及HCD)由Windows98提供,负责管理USB设备驱动程序与USB控制器之间的通信、加载及卸载USB驱动程序等。目前Windows98提供的多种USB设备驱动程序并不针对实时数据采集设备,因此采用DDK开发工具设计专用的设备驱动程序。其由四个模块组成:初始化模块、即插即用管理模块、电源管理模块以及I/O功能实现模块。
初始化模块提供一个DriverEntry人口点执行一系列的初始化过程。
即插即用管理模块实现USB设备的热插拔及动态配置。当Windows98检测到USB设备接人时,查找相应的驱动程序,并调用它的 DriverEntry例程,PnP管理器调用驱动程序的AddDevice例程,告诉它添加了一个设备;然后驱动程序为USB设备建立一个功能设备对象。在此过程中,驱动程序收到一个IRlMN-STARIDEVICE的IRP,包括设备分配的资源信息。至此,设备被正确配置,驱动程序开始与硬件进行对话。电源管理模块负责设备的挂起与唤醒。 I/0功能实现模块完成I/O请求的大部分工作。当动态链接库提出I/0请求时调用Win32API函数DeviceToControl向设备发出命令;然后由I/0管理器构造一个IRP并设置其MajorFunction域为IRP_MJ_DEVICE_CON-TROL。USB设备驱动程序收到该 IRP后取出其中的控制码,并利用一个开关语句找到对应的例程入口。
2.3 应用程序设计与实现
应用程序采用Visual Basic6.0编写。由于其只需调用动态链接库,故开发较简单。主要功能包括检测USB设备、开启/关闭USB设备、设置A/D状态和数据采集端口、显示并分析实时采集的数据。主框图如图5所示。
由于D12的端点1的FIFO为16字节,端点2的FIFO为64字节,当缓冲区存满后自动将数据打包,由SIE自动发送数据包。程序获得数据包后需延迟至下组数据包准备完毕,从而保证程序与数据采集同步。另外程序还发出停止采集和关闭USB设备的命令。
3系统特点 基于USB总线的实时数据采集系统严格遵循USBl.1协议,有以下特点:
(1)易于扩展。最长传输距离5m,采用USBHub可达30m;最多可同时接127个设备。
(2)电磁干扰影响极小。本系统放置在计算机外部,不受板卡间的电磁干扰影响;若在电磁干扰极强的环境下工作,需专门为其设计电磁屏蔽方案。 (3)安装方便,支持即插即用。克服了以往数据采集板卡需要打开机箱的麻烦。
(4)性价比高,远优于传统的实时数据采集系统。
(5)实时采集,实时显示。