×
接口总线驱动 > 总线 > 详情

基于USB总线的实时数据采集系统设计

发布时间:2020-05-28 发布时间:
|

现代工业生产和科学研究对数据采集的要求日益提高。目前比较通用的是在PC或工控机内安装数据采集板卡,如A/D卡及422、485卡。这些数据采集设备存在以下缺陷:安装麻烦;价格昂贵;受计算机插槽数量、地址、中断资源限制,可扩展性差;在一些电磁干扰性强的测试现场,无法专门对其做电磁屏蔽,导致采集的数据失真。

通用串行总线(UNIversal Serial Bus,简称USB)是1995年康柏、微软、IBM、DEC等公司为了解决传统总线的不足推广的一种新型串行通信标准。该总线接口具有安装方便、高带宽、易扩展等优点,已经逐渐成为现代数据传输的发展趋势。基于USB的数据采集系统充分利用USB总线的上述优点,有效解决了传统数据采集系统的缺陷。

1 系统硬件设计

1.1 硬件总体结构

USB实时数据采集系统硬件模块包括A/D转换器、微控制器、USB通信接口和多路模拟开关。硬件总体结构如图1所示。

1.2 USBN9602芯片

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

微控制器通过8位的并行接口传送A/D采集的数据,存储在FIFO存储器中;一旦FIFO存满,SIE立刻对数据进行处理,其中包括:同步模式识别、并/串转换、位填充/解填充、CRC产生与校验、地址识别、握手响应与产生、USB特殊事件(Reset、Suspend、Resume)检测;最后由收发器通过数据线(D+、D-)传送数据至PC。上述过程严格遵守USB1.1协议。USBN9602与89C52的具体实现电路如图3所示。[page]

2 系统软件设计

系统软件包括USB设备驱动程序、设备固件、应用程序。

2.1 USB设备驱动程序开发

USB系统驱动程序采用分层结构模型:较高级的USB设备驱动程序和较低级的USB函数层。其中USB函数层由两部分组成:较高级的通用串行总线驱动程序模块(USBD)和较低级的主控制器驱动程序模块(HCD)。它们的层次关系如图4所示。

在上述USB分层模块中,USB函数层(USBD及HCD)由Windows98提供,负责管理USB设备驱动程序和USB控制器之间的通信;加载及卸载USB驱动程序;与USB设备通用端点(endpoint)建议通信来执行设备配置、数据与USB协议框架和打包格式的双向转换任务。

目前Windows98提供了多种USB设备驱动程序,但并不针对实时数据采集设备,因此需采用DDK开发工具设计专用的USB设备驱动程序。可以由四个模块实现:初始化模块、即插即用管理模块、电源管理模块以及I/O功能实现模块。

初始化模块提供一个DriverEntry入口点来执行大量的初始化函数。

即插即用管理模块实现USB设备的热插拔及动态配置。当硬件检测到USB设备接入时,Winodws98查找响应的驱动程序,并调用它的DriverEntry例程,PnP管理器调用驱动程序的AddDevice例程,告诉它添加了一个设备;然后,驱动程序为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后,取出其中的控制码,并利用一个开关语句来找到对应的例程入口。

2.2 设备固件(firmware)设计

设备固件是设备运行的核心,采用汇编语言设计。其主要功能是控制芯片USB9602接受并处理USB驱动程序的请求(如请求设备描述符、请求或设置设备状态、请求设备设置、请求或设置设备接口等供10种USB1.1标准请求);控制芯片USB962接受应用程序的控制指令;控制A/D模块的数据采集;通过USB9602存储数据并实时上传PC。其程序主框图如图5所示。

在图5中,ALT事件表示硬件检测到USBN96902处于下列状态:Reset、Resume、Suspend,由ALTEV寄存器汇报并产生中断。[page]

2.3 应用程序设计

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)实时采集,实时显示。  


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
RS232与RS485谁才是UART中的高速公路