基于USB总线的实时数据采集系统设计与实现
时间:08-26
来源:与非网
点击:
在现代工业生产和科学技术研究的各行业中,通常需要对各种数据进行采集。目前通用的通过数据采集板卡采集的方法存在着以下缺点:安装麻烦,易受机箱内环境的干扰而导致采集数据的失真,易受计算机插槽数量和地址、中断资源的限制,可扩展性差。而通用串行总线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模块的数据采集。
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所示。
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模块的数据采集。
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所示。
USB 数据采集 PDIUSBDl2 A/D转换器 单片机 相关文章:
- 实现WUSB设备控制器的设计考虑因素(09-12)
- 基于USB2.0的高速无线数传接收设备的数据接收存储方法(09-09)
- 四种短距离无线监控解决方案的性能对比(09-16)
- Wibree:一个可供选择的新无线联网技术(11-07)
- TI 单芯片手机多媒体电话解决方案(12-01)
- 蓝牙技术硬件实现模式分析(01-11)