基于usb总线数据采集系统设计与实现设计说明书 .doc

基于USB总线数据采集系统设计与实现[含CAD高清图纸和说明书]

收藏

压缩包内文档预览:(预览前20页/共61页)
预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图
编号:22779129    类型:共享资源    大小:983.22KB    格式:ZIP    上传时间:2019-10-31 上传人:QQ24****1780 IP属地:浙江
45
积分
关 键 词:
含CAD高清图纸和说明书 基于 USB 总线 数据 采集 系统 设计 实现 CAD 图纸 说明书
资源描述:
基于USB总线数据采集系统设计与实现[含CAD高清图纸和说明书],含CAD高清图纸和说明书,基于,USB,总线,数据,采集,系统,设计,实现,CAD,图纸,说明书
内容简介:
附图指向通道0地址启动A/D转换延时等待A/D转换结束读A/D转换值,存内存指向下一个通道地址8个通道转换?完?继续YESNO A/D转换程序流程图 中断处理流程图 A/D转换程序流程图 ADC0809与89C51的接口电路 PDIUSBD12与89C51的连接电路毕业设计说明书题 目: II基于USB总线的数据采集系统设计摘要:本文介绍了一种基于通用串行总线USB(Universal Serial Bus)的数据采集系统设计。随着用户对数据采集系统要求的不断提高,USB接口以其简单易用、速度快而被广大用户所接受。本论文所阐述的数据采集系统采用了集成了微处理器的USB接口芯片PDIUSBDI2来完成采样控制并与PC机应用程序完成系统通信功能,由应用程序完成用户命令及数据的显示。该系统采用USB总线取代传统的数据采集总线,通过对USB协议和设备构架的理解,对数据采集系统进行了硬件设计和软件设计。硬件设计主要解决了控制器与主机通信问题,数据采样、模拟输出、I/O扩展等电路设计以及它们之间的接口。软件编程主要分为三部分:一是为满足获得最大传输速率和运行效率的固件程序编程;二是为用户提供的以动态链接库形式封装的功能函数;三是提供演示和测试的控制面板程序,并为系统提供了两个应用实例。除此之外,论文还介绍了设备驱动程序的开发,并在文章结尾对USB的应用前景进行了探索。关键词:USB总线;单片机;数据采集;固件;Windows驱动程序模型;设备驱动程序USB bus-based data acquisition system design and implementationAbstract:This paper describes the design of a data acquisition system based on USB. With the advance of the clients requirement on data collection of a system, as a late-model interface technology, USB is well accepted by vast clients because of its simplicity and high speed. The system using the USB interface chip with on-chip microprocessor PDIUSBDI2controls the data acquisition process and communicates with the computer. Through the man-machine interface clients can send commend and data can be printed. With good understanding of USB protocol and device truss, the system is design by using USB instead of other buses. The hardware design includes the communication between the controller and computer, the data acquisition part, analog output, I/O extension and the interface between them. The software program mainly includes the firmware code in the controller, functions for clients with DLL encapsulation and the control panel design. Also the device driver development is introduced and the foreground of USB application is explored at the end.KEY WORDS:USB bus;data collection;MCU;fireware;WDM;device drive program目 录 第一章 绪论51.1 课题背景51.2 课题的提出51.3 USB串行总线优势61.4 本课题研究的内容和意义7第二章 USB概要设计92.1 USB传输要件92.2 事务、信息包和联络信号92.3 USB的传输结构102.4 USB总线枚举过程132.5 USB的设备描述符142.6 USB请求15第三章 数据采集系统的硬件设计173.1 硬件系统的结构173.2 芯片选择173.2.1 ADC0809183.2.2 AT89C51203.2.3 PDIUSBD12213.3 接口硬件电路设计243.3.1 A/D与单片机接口电路253.3.2 PDIUSBDI2与单片机接口电路25第四章 数据采集系统软件设计274.1 A/D转换时序控制274.2 固件的开发274.3 采用PDIUSBD12的固件设计284.3.1 驱动的开发工具284.3.2 PDIUSBD12固件程序的编写294.4 固件结构304.5 固件的编程实现324.5.1 底层函数324.5.2 命令接口324.5.3 中断服务程序ISR.C344.5.4 主循环MAINLOOP.C36第五章 USB设备驱动及应用程序设计405.1 USB设备驱动程序405.2 USB设备应用程序设计46 第六章 结 论49 参考文献50 附录51第一章 绪论本次毕业设计的数据采集系统是在单片机AT89C51控制下进行数据采集,并通过PHILIPS公司的USB接口芯片PDIUSBDI2上传给PC机进行分析、显示和存盘。该系统用传统的USB总线取代了RS232串行总线,通过对USB协议和设备构架的充分理解,对以单片机89C51和USB接口芯片D12为主的数据采集系统进行了硬件设计和软件编程,并在此设计的基础上给出相应的原理图。硬件设计主要解决的是D12与单片机的接口电路的设计。软件设计可分为三部分:一是充分了解D12的主要功能特点,为满足D12在USB上的最大传输速率而编写固件程序,用C51语言编写:二是了解USB的设备驱动程序与应用。1.1 课题背景现代工业生产和科学研究对数据采集的要求日益普遍,在瞬态信号测量、图像处理等一些测量中,都需要进行数据采集。现在通用的数据采集卡一般多是利用微机机箱内的PCI插槽或ISA插槽进行扩展。通过数据采集系统,可以简洁、通用化的硬件配合以相应的软件实现以往专用测试仪器的功能;完成“软件既仪器”的理念.信息技术与电子技术的迅猛发展,使得计算机和外围设备也得到飞速发展和应用。过去人们单纯追求计算机与外设之间的传输速度,现在纠错能力和操作安装的简易性也成为人们关注的目标。USB通讯技术的出现,使高传输速度、强纠错能力、易扩展性、方便的即插即用,有机的结合在一起。USB设备需要依据USB协议进行数据的解包与打包,底层硬件设备与操作系统之间需要以驱动程序为桥梁。驱动程序以WDM为模型,以DDK为开发工具,以IRP为消息传播载体,来实现与Windows系统底层核心机制相交互的功能。1.2 课题的提出对于数据采集系统而言有两个关键性问题:一是控制A/D转换和数据传输的控制器,一是采集系统与上位机PC的传输方式。其中控制器一般采用通用的单片机,包括4位、8位、16位以至32位的各类单片机;这些单片机芯片优势在于价格低廉、结构简单、接口扩展能力强等,但是其数字运算能力较差,所以目前出现了许多以DSP芯片作为数据采集系统控制器的数据采集系统。本课题为简化开发难度,充分利用现有的工作环境采用较常用的AT89C52单片机作为系统控制器。 对于数据采集系统与上位机的通讯方式,现行的常用方式是利用PC机箱内的PCI, ISA插槽进行扩展:其传输速度分别为132M/S. 16M/S、但是由于PC机接口资源有限,且需要对接口卡硬件资源进行合理配置,故其存在以下缺点:安装麻烦;价格昂贵;受计算机插槽数量、地址、中断资源限制,可扩展性差;在一些电磁干扰性强的测试现场,无法专门对其做电磁屏蔽,易导致采集的数据失真。本课题旨在使用新型的通用串行总线USB完成数据采集系统的构架,充分发挥USB总线接口简洁、使用方便的优势;并为后续的使用USB总线对实验室现有的“频率特性测试系统”改进作前期准备工作。课题主要完成四个方面的工作:数据采集系统硬件设计、固件设计、应用程序及WDM设备驱动程序设计。使用到的软件工具包括Prote199,K eilC 51,M icrosoftV isualSt udio6 .0,W in2000DDK:使用到的硬件工具包括单片机写入器、万用表、示波器等等。采用的操作系统平台为Windows 200。1.3 USB串行总线优势通用串行总线USB( UniversalS erialB us)是1995年康柏、微软、IBM,D EC等公司为解决传统总线不足而推广的一种新型的通信标准。该总线接口具有安装方便、高带宽、易于扩展等优点,已逐渐成为现代数据传输的发展趋势。基于USB的高速数据采集卡充分利用USB总线的上述优点,有效解决了传统数据采集卡的缺陷。USB从传统I/O模式的栓桔中解放出来,开辟了一条外设同PC机连接的方法。与其他的老式PC机接口相比,USB具有如下优点:1. 热插拔:用户可以把USB外设连接到一台正在运行的PC机上,操作系统能自动识别,并且用户可以立即使用,而不需要重新启动。用户也可以在任何时候断开USB设备,而不管计算机是否正在运行,这都不会损坏计算机。 2. 即插即用:USB实现了自动配置,它不需要用户手动配置I/O地址和中断请求(URQ)。当USB外设接入PC时,操作系统会自动检测到这个连接。并加载适合的驱动程序。对用户来说,只需要等待几秒钟,USB外设的安装就会完成。3. 共享式接口:USB端口支持多个外设的连接,通过USB集线器,一个USB主控制器可以连接多达126个外设。4.接口体积小巧:和其它老式的PC接口相比,USB接口小且薄,更适合于外设体积的小型化。5. 使用灵活:USB支持三种类型的传输速率,1.5Mb/s的低速传输、12Mb/s的全速传输和480Mb/s的高速传输。USB支持四种传输类型,块传输、同步传输、中断传输和控制传输。这使得USB总线适合多种外设的传输需要。6. 提供电源:USB电缆向外设提供一根+5V的电源线,电流的大小取决于集线器端口。用户可以直接使用这个总线电源。当然 ,USB总线还存在许多缺陷,比如USB2.0所支持的480Mb/s速率不及IEEE-1394的六分之一;USB总线传输距离有限;USB总线协议复杂等。但随着操作系统、硬件厂商对USB的进一步支持,其在PC外设方面的将大有可为。1.4本课题研究的内容和意义本课题旨在对USB总线的结构、协议和系统体系进行充分研究的基础上,完成一个实际的USB数据采集系统软硬件的构架。具体需要做的工作包括软件和硬件两部分。硬件方面 ,该系统使用Philips公司的PDIUSBD12芯片作为设备的USB接口芯片;采用常用的AT89C51作为系统的CPU: ADC0809芯片作为AD转换芯片。配合其它辅助芯片和单片机固件完成输入模拟信号的采集、存储和向PC主机的传输。软件方面分如下几部分: 1. 单片机固件: 本系统中的单片机固件采用C语言编写,使用KeilC 51编译器为开发工具。固件中主要完成对USB协议规定的诸多标准请求以及用户自定义请求的响应;此外还包括控制ADC0809芯片完成对模拟信号的转换代码,以及USB设备所需各种描述符的定义。 2. 主机设备驱动程序: USB外设的驱动程序只能为WDM(WindowsD riverM odle)形式的驱动,课题中采用以DDK2000为开发工具,在VC6.0集成开发环境编写,编译时直接在DDK2000的DOS窗口中编译。 3. 用户应用程序: 应用程序是采集到数据最终显示、处理的地方。系统用户应用程序界面模仿传统示波器的外形;以图形的方式动态的显示采样数据;具体的采样数值也可以写入“记事本”文件中,进而可以用其它专门软件进行处理。 Philips公司提供了PDIUSBD1 2的开发包,包括软件和硬件两部分。为用户使用该种型号的USB接口芯片进行设备开发提供一个基础和工作平台。 该数据采集系统的目的在于为实验室现有的一套频率特性测试仪的改进做前期工作。但系统应用的潜力并不局限与此,比如在增加与被测信号相适应的传感器、采样保持、滤波和隔离电路后系统可以方便的应用于家庭医疗护理方面,可以用于对人体的心率、脉搏、体温等参数的测试。在个人电脑逐步进入家庭的当今,这样的系统应当具有一定的应用前景。第二章 USB概要设计2.1 USB传输要件1、端点端点是USB设备的一个部分,所有的传输都是将端点作为发出点或者接收点。通常情况下,设备端点是一个内存区域,或者是控制芯片的一个缓存器,端点的作用是数据缓存。每个USB设备有一个唯一的地址,这个地址是在设备连上主机时由主机分配的,而设备中的每个端点在设备内部有唯一的端点号,这个端点号是在设备设计时被给定的。端点号可以是015,方向可以是IN(设备发送数据给主机)或者OUT(主机发送数据给设备)。每个设备必须将端点0设置为控制端点。控制端点是双向传输数据,其他端点都是单向数据传输。2、管道管道是设备端点和主机控制器之间的连接,在一个传输发生之前,必须首先建立一个管道。管道随着主机和设备的连接的建立而建立,当移除设备时,管道也跟着被移除。每一个设备都会和主机建立一个默认的控制管道(Default Control Pipe),此管道使用端口0。不同的传输类型使用不同的管道,此外管道还可以被分为消息管道(Message Pipe)和流管道(Stream Pipe)消息管道是指具有某种USB定义格式的数据流,是双向的管道;而流管道则是不具有USB定义格式的数据流,不具有双向性。控制传输是唯一使用双向消息管道的传输,其他传输都是使用单方向的流管道。2.2 事务、信息包和联络信号每一个USB传输包含一个或多个事务,每一个事务又包含一到三个信息包。事务根据其数据流方向以及传输目的,可以分为3类:输入、输出与设置。每一个传输类型的传输包括一个或多个阶段(Stage),一个阶段即一种类型的事务。每个阶段又可以分为一个或几个相位(Phase),相位包含几个或两个事务信息包。信息包是一个区块的固定格式信息,每个信息包由一个信息包标示符(PID)开头,作为信息包的识别。根据事务种类的不同,PID后面可能有端点地址、数据、状态信息,或者是一个在帧号码、错误校验位。在控制传输、批量传输和中断传输中都有一个相位是联络数据包,它包含的是联络信息。但是联络信号不是仅仅在联络数据包中,有些数据信息包中也包含联络信号。USB定义的联络信号如下:ACK(Acknowledge):表示主机或设备已成功接收数据。NAK(Negative Acknowledge):表示设备在忙中。STALL:表示3种意义,即不支持的控制要求、控制要求失败或端点失败。NYET(Not Yet):表示设备是否已准备好接收数据,只有高速设备使用。ERR(Error):表示在集线器和主机事务中,设备没有传回预期的联络信号。ERR只有在高速集线器完成事务分割时才会使用。2.3 USB的传输结构USB的传输结构描述的是各个类型USB传输的时序、数据包和特征。下面分别介绍一下4种USB传输类型的传输结构:1、控制传输控制传输用于在设备初次连接时对器件进行配置,以及对设备的状态进行实时检测,还有在设备配置完成后用于特殊传输目的。端点0只可以采用控制传送的方式。每一个控制传输都必须有设置与状态阶段,数据阶段则是选择性的。控制传输的设置事务传输结构如图2-1所示:图2-1 控制传输结构示意图控制传送的数据阶段,由一个以上的输入或输出事务构成,遵守和批处理传送相同的协议规则。所有的数据阶段里的事务都必须有相同的方向(即全部输入或全部输出)。在数据项中要发送的数据的数量和其方向在建立阶段被指定。如果数据的数量超过了先前确定的数据包的大小,数据在支持最大的包大小的多个事务中被发送(输入或输出)。任何剩下的数据都作为剩余在最后的事务中被发送。2、批量传输批量传输包含一个或者多个传输事务,其传输是单方向的,即所有的事务都必须是输入或输出事务。如果需要双向传数据,需要另建立一个管道。批量传输的传输结构如图2-2所示:图2-2 批量传输结构示意图3、中断传输中断传输适用于小批量的、点式、非连续的数据传输应用的场合。中断传输必须在指定的时间内完成,它一般应用于鼠标、键盘、游戏杆等HID(Human Interface Device)类设备以及集线器的状态报表中。中断传输的传输结构如图2-3所示:图2-3 中断传输结构示意图4、同步传输同步传输的意义在于每一个帧或者微帧内必须传输固定数目的字节数据,它适用于固定速度或者特定时间的传输。同步传输没有联络阶段,所以不能保证传输的完全可靠性。同步传输的传输结构如图2-4所示:图2-4 同步传输结构示意图2.4 USB总线枚举过程USB规范定义的设备状态总共有6个,分别是连接(Attached)、上电(Powered)、默认(Default)、地址(Address)、配置(Configured)和挂起(Suspend)。USB总线枚举过程中,USB设备需要经历后4种状态。USB集线器负责监测设备的连接情况,而USB主机会通过集线器轮询地查询设备。当主机发现一个新的设备时,会要求集线器建立与设备的通信通道,即设备的端点0,控制传输端点。之后,主机会通过此通道向设备发送一系列的标准USB 请求以获取所需的信息,设备必须响应这些请求并且采取适当的动作。这个过程即称为USB的总线枚举。总线枚举的过程如下: 设备连接USB设备通过USB总线与主机相连。 设备上电USB设备可以采用USB总线供电,也可以使用外部电源供电。 主机检测到设备,进行复位设备连接到总线后,主机通过检测设备在差分信号线的上拉电阻检测到有新的设备连接,并获释该设备是全速设备还是低速设备,如果上拉电阻与D+线相连,则为全速设备,如果上拉电阻与D线相连,则为低速设备,主机确认有设备连接后,向该端口发送一个复位信号。 设备默认状态设备收到一个复位信号后,连接到主机的所有设备的地址为默认地址(00H),主机会首先发送一个获取设备描述符的请求,设备通过这个默认地址向主机发送第一次设备描述符。 地址分配当主机接收到有设备对默认地址(00H)来响应的时候,就确认有设备连接,主机对设备分配一个空闲的地址(如02H),以后设备就只对02H地址进行响应。 读取USB设备描述符主机分配给设备地址后,通过这个地址主机读取该设备描述符,确认USB设备的属性。 设备配置主机依照读取的USB设备描述符来进行配置,如果设备所需的USB资源得以满足,主机就会查找驱动,当正确找到驱动后,主机给设备发送配置命令,配置完毕后,这个USB设备就枚举成功了。 挂起为了节省电源,当总线保持空闲状态超过3ms以后,设备驱动程序就会进入挂起状态,在挂起状态时,设备的消耗电流不超过500A。当被挂起时,USB设备保留了包括其地址和配置信息在内的所有的内部状态。2.5 USB的设备描述符标准的USB描述符包括设备(Device)描述符、配置(Configuration)描述符、接口(Interface)描述符、端点(Endpoint)描述符以及字符串(String)描述符,字符串描述符不是必须的。不同的描述符从不同的层级来表示设备的属性。设备描述符包含了整个设备的信息以及设备支持的配置号码,每一个设备只能由一个设备描述符。但每一个设备可以有几个配置描述符,它包含了电源管理信息以及所支持的接口号码。接口描述符包含了与端点通信所需要的信息,它可以有零个或多个端点描述符。各个描述符的树状结构如图2-5所示:图2-5 描述符的树状结构设备描述符描述了一个USB设备的总体信息,它在枚举过程中主机从设备读取的第一个描述符。设备描述符总共有18个字节,分为14个字段。配置、接口以及端点描述符是在主机得到设备描述符之后发送给主机的。配置描述符描述了一个特定的设备配置信息,主机使用Set_Configuration请求来选择一个配置,用Get_Configuration请求来返回一个配置。当主机请求获取一个配置描述符的时候,与配置描述符相关的所有接口、端点描述符都会一并返回。配置描述符由9个字节组成,分为8个字段。接口描述符描述了一个配置中的特定接口。接口描述符总是作为配置描述符的一部分被返回,主机不能通过Get_Descriptor请求直接获取接口描述符。接口描述符由9个字节组成,分为9个字段。端点描述符包含了主机用来确定一个端点带宽要求的信息。除了端点0外,一个接口所使用的每一个端点都有它自己的描述符。端点0不需要描述符,它也不能直接由Get_Descriptor请求来获得。端点描述符由7个字节组成,分为6个字段。2.6 USB请求USB规范定义了3种请求,分别是标准请求(Standard Request)、类请求(Class Request)和厂商请求(Vendor Request)。USB规范定义了11种标准请求,所有设备都必须对这11种请求作出响应,即使当主机没有给设备分配一个地址或者没有配置设备。某些设备的功能类似或者提供类似的服务,USB协议就将它们归为一类,并且定义了特定的请求,称为类请求。但是只有类请求是不能满足众多USB厂商的需求的,所以,USB协议允许一个供应商为它的设备自定义特殊的请求,此类请求称为厂商请求。所有的USB总线设备以缺省控制管道响应主机发出的请求,这些请求是通过控制传输来完成的,请求及请求的参数通过Setup包发向设备,由主机负责设置Setup包内的每个域的值。Setup包格式如表2-1所示。表2-1 SETUP包格式大小(B)11222域bmRequestTypebRequestwValuewIndexwLength在表中,bmRequestType表示设备请求类型,D7:数据传输方向, 0主机到设备,1设备到主机;D65:类型,0标准,1类型,2厂商,3保留;D40:接收方,0设备,1接口,2端点,3其它;431保留。bRequest表示USB设备请求值,标准请求有11个命令。wValue为值,它根据不同的请求,以字节来定义,例如,设备请求为Get Descriptor(06H),wValue为01H时,表明要发送设备描述符。wLength表示长度,如果传输的是一组数据,则这个长度的值表示要传输数据的字节数。本章介绍了USB协议的相关内容,包括USB传输要件,USB传输中的事务、信息包和联络信号,USB的传输结构,USB的总线枚举过程,USB的设备描述符以及USB请求。本章为本设计下面内容的展开奠定了基础。第三章 数据采集系统的硬件设计如前所述 ,USB系统中的通信主要由主机控制,这里的主机是指计算机硬件与软件的结合体,不是单纯的硬件。在开发USB的外围设备时,需要有主机中主控制器对应外设控制器和外设响应软件程序。其中硬件部分的收发器的作用是驱动和接收USB的差分数据,串行输入引擎SIE的作用是前端硬件和USB标准中相关规定的协议内容,即包识别、数据编码和译码、填充和去填充、CRC错误校验、数据串并和并串转换等。协议引擎部分的主要作用是操作控制管道(端点0)的消息流、USB标准中相关内容规定的最底层协议和数据接受与发送。3.1 硬件系统的结构基于USB总线的实时数据采集系统硬件组成包括模拟开关、A/D转换器、单片机、USB接口芯片,该系统能够实现8路数据自动采集,系统的组成框图如图3.1.1所示。主要包括5个组成部分:中央处理器选用AT89C51芯片,完成各部分控制功能和USB传输协议;A/D转换器和接口电路主要完成数据采集,并读入MCU处理;复位电路完成对MCU的上电复位和电源电压监视;电源电路主要为各部分提供要求的电源;外设与主机间的通信电路采用USB接口。单片机通过8位并行接口传送经过A/D转换的采集数据,存储在FIFO存储器中。一旦存满,串行接口引擎SIE立刻对数据进行处理,包括同步模式识别、并串转换、位填充/不填充、CRC校验、PID确认、地址识别以及握手鉴定,处理完毕后数据由模拟收/发器通过D+、D-发送至PC。上述过程遵循USB1.1协议。现场电信号A / D转换器USB接口芯片PC机MCU图3-1 数据采集系统硬件组成框图3.2 芯片选择USB数据采集系统硬件主要由微控制器AT89C51,A/D转换芯片ADC0809,USB接口芯片PDIUSBDI2组成。在实际开发过程中使用USB D12 SMART开发套件,使用其预留的扩展口在试验板上搭建AID转换电路,并对开发板电路进行相应修改而实现此硬件系统。要实现一个USB设备,首先面对的问题就是选择一种适合的USB控制芯片。从芯片大的构架来分,市面上所有的USB控制器芯片可以分为不需要外接微控制器的芯片和需要外接微控制器的芯片。而不需要外接微控制器的芯片又可以分为专门为USB设计的芯片和嵌入通用微控制器内核的芯片。1.专US设计的USB控制芯片 该类芯片是厂商为开发USB应用设备而专门设计的,内部用的是专用的CPU.较为典型的代表为Cypress公司推出的CY7C63101A, CY7C63723、等等。 2.内嵌通用微控制器的芯片 内嵌通用微控制器的USB控制芯片可以说是在通用微控制器的基础上扩展了USB功能。这些控制器芯片的优点是开发者已经熟悉了这些通用微控制器的结构和指令集,所以开发起来救比较容易。即使用户不熟悉这些芯片的结构,但是介绍这些微控制器的书籍和关于他们的范例程序、开发工具等都可以作为设计时的参考。此类芯片的典型代表有:Cypress公司的EZarU SB系列芯片(内嵌80C186), Atmel公司的AT76C711(内嵌Atmel AVR), SIEMENS公司的C541U(内 嵌80C51,8 0052)等等。 3.需外接微控制器的芯片 这些USB控制芯片只负责处理USB相关的通信工作,而且必须由外部微控制器的控制才能正常工作。如果选择了这种设计方按,那么必须再选择一个微控制器芯片,这样就增加了设备的体积。但其优点是用户可以选择任何一种己熟悉的微控制器,而且这种芯片价格也相对便宜。 3.2.1 ADC0809ADC0809允许的最大时钟频率为1280kHz,主要管脚功能如下:地址输入和控制线:4条 ALE为地址锁存允许输入线,高电平有效。当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。A,B和C为地址输入线,用于选通IN0IN7上的一路图3-2 ADC0809的内部逻辑结构模拟量输入。 ADC0809对输入模拟量要求信号单极性,电压范围是05V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。 通道选择表如下表3-1所示。表3-1CBA选择的通道000IN0001IN1010IN2011IN3100IN4101IN5110IN6111IN7数字量输出及控制线:11条 ST为转换启动信号:当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。EOC为转换结束信号。当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE1,输出转换得到的数据;OE0,输出数据线呈高阻状态。D7D0为数字量输出线。 VREF(),VREF()为参考电压输入。CLOCK: 时钟输入信号线。因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ.START: 启动脉冲输入端。在时钟脉冲频率为640kHz时,START脉宽应大于100ns-200ns 。EOC: EOC为转换结束信号,当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。D7-DO: 转换所得八位输出数据,D7是最高位,而DO是最低位。OE: 允许输出端。OE端控制输出锁存器的三态门。当OE=1时,转换所得数据出现在D7-DO脚,当OE=0时D7-DO脚对外是高阻抗。 ADC0809应用说明:(1)ADC0809内部带有输出锁存器,可以与AT89C51单片机直接相连。 (2)初始化时,使ST和OE信号全为低电平。 (3)送通道的地址到A、B、C端口上。 (4)在ST端给出一个至少有100ns宽的正脉冲信号。 (5)是否转换完毕,我们根据EOC信号来判断。 (6)当EOC变为高电平时,这时给OE为高电平,转换的数据就输出给单片机了。 3.2.2 AT89C51AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 图3-3 AT89C51管脚图主要特性:(1)4K字节可编程FLASH存储器(寿命:1000写/擦循环)(2)全静态工作:0Hz-24KHz(3)三级程序存储器保密锁定(4)128*8位内部RAM(5)32条可编程I/O线(6)两个16位定时器/计数器(7)6个中断源(8)可编程串行通道(9)低功耗的闲置和掉电模式(10)片内振荡器和时钟电路3.2.3 PDIUSBD12介绍PDIUSBD12是一款性价比很高的USB器件,它通常用作微控制器系统中实现与微控制器进行通信的高速通用并行接口。它还支持本地的DMA传输。这种实现USB接口的标准组件使得设计者可以在各种不同类型微控制器中选择出最合适的微控制器。这种灵活性减小了开发的时间风险以及费用(通过使用已有的结构和减少固件上的投资),从而用最快捷的方法实现最经济的USB外设的解决方案。PDIUSBD12完全符合USB1.1版的规范,它还符合大多数器件的分类规格:成像类、海量存储器件、通信器件、打印设备以及人机接口设备。同样地,PDIUSBD12理想地适用于许多外设,例如:打印机、扫描仪、外部的存储设备、Zip驱动器和数码相机等等,它使得当前使用SCSI的系统可以立即降低成本。PDIUSBD12 所具有的低挂起功耗连同LazyClock输出可以满足使用ACPI、OnNOW和USB电源管理的要求。低的操作功耗可以应用于使用总线供电的外设。此外它还集成了许多特性包括SoftConnetTM、GoodLinkTM、可编程时钟输出、低频晶振和终止寄存器。集合所有这些特性都为系统显著节约了成本,同时使USB功能在外设上的应用变得容易。 D12芯片的主要特点包括:(1)符合USB1.1版本规范;(2)可与任何外部微控制器/微处理器实现高速并行接口(2MB/s);(3)采用GoodLink技术的连接指示器,在通信时使LED闪烁;(4)主端点的双缓冲配置增加了数据吞吐量并轻松实现实时数据传输;(5)在批量和等时模式下均可实现1Mb/s的数据传输率;(6)完全自治的直接内存存取DMA操作。PDIUSBD12内部结构如图3-4所示。图3-4 PDIUSBD12内部结构说明:1、模拟收发器:集成的收发器接口可通过终端电阻直接与USB电缆相连。2、电压调整器:片内集成了一个3.3V的调整器用于模拟收发器的供电。该电压还作为输出连接到外部1.5K的上拉电阻。可选择PDIUSBD12提供的带1.5K内部上拉电阻的软件连接到外部1.5K内部上拉电阻的软件连接技术。3、PLL锁相环:片内集成了6MHz时钟乘法PLL,这样就可使用低成本的6MHz晶振,EMI也随之降低。PLL的工作不需要外部元件。4、位时钟恢复:位时钟恢复电路使用4X过采样规则,从进入的USB数据流中恢复时钟,能跟踪USB规定范围内的抖动和频漂。5、PHILIPS串行接口引擎(PSIE):PSIE实现了全部的USB协议层,且完全由硬件实现而不需要固件的参与。该模块的功能包括:同步模式的识别;并行/串行转换;位填充/解除填充;CRC校验/产生;PID校验/产生;地址识别和握手评估/产生。6、SoftConnectTM:SoftConnectTM与USB的连接是通过1.5K上拉电阻将D(用于高速USB器件)设置为高实现的。1.5K上拉电阴集成在PDIUSBD12片内,默认状态下不与V相连,其连接的建立是通过外部系统微控制器发送命令来实现的。这就允许系统微控制器在决定与USB建立连接之前完成初始化时序。USB总线连接可以重新初始化而不需要拔出电缆。PDIUSBD12在连接可以建立之前会检测USB规格的5%,但用于连接的VSE电压规格仍然有足够的余量。SoftConnectTM是PHILIPS半导体一项尚未获批准的专利技术。7、GoodLinkTM:GoodLinkTM技术可提供可提供良好的USB连接指示。在枚举中,LED指示根据通信的状况间歇闪烁。当PDIUSBD12成功地枚举和配置后,LED指示将一直点亮。随后与PDIUSBD12之间成功的传输(带应答)将关闭LED。处于挂起状态时,LED将会关闭。该特性为USB器件,集线器和USB通信状态提供了用户友好的指示。作为一个诊断工具它对隔离故障的设备是很有用的。该特性降低了现场支持和热线的成本。8、存储器管理单元(MMU)和集成RAM:在以12MB/S的速率传输并与微控制器并口相连时,MMU和集成RAM作为USB之间速度差异和缓冲区。这就允许微控制器以其自己的速率对USB信息包进行读写。9、并行和DMA接口:一个普通的并行接口定义成易于使用,快速而且可以主流的微控制器直接连接的接口。对一个微控制器而言,PDIUSBD12看起来就像一个带8位数据总线和一个地址(占用2个位置)的存储器件,PDIUSBD12支持多路复用和非复用的地址和数据总线;支持主端点与本地共享RAM之间直接读取的DMA传输;还支持单周期和突发模式的DMA传输。10、DMA传输:直接存储器寻址(DMA)允许在主端点和本地共享存储器间实现数据块的有效传输。使用DMA控制器,PDIUSBD12的主端点和本地共享存储器间的数据传输可自主进行,而不需要本地CPU的干预。要处理任何DMA传输,本地CPU从主机接收必要的SETUP信息,并对DMA控制器进行正确的编程。典型的,对DMA控制器的传输模式,字节计数寄存器和地址计数器进行正确的编程。在该模式下,PDIUSBD12发出请求时开始传输,当字节计数器减少为零时终止。在DMA控制器编程之后,本地CPU在初始化传输时,将PDIUSBD12中的DMA使能位置位。PDIUSBD12可编程为单周期DMA或突发模式DMA。在单周期DMA中,DMREQ在每单个应答后直到被DMACK_N重新激活之前保持无效。在突发模式DMA中,DMREQ器件中突发编程时一直保持有效。该过程持续到PDIUSBD12通过EOT_N接收到一个DMA终止信息,这时产生一个中断指示本地CPU,DMA操作已经完成。3.3 接口硬件电路设计由D12接口组成的通信电路原理如图所示。多路地址/数据总线ALE接单片机的ALE脚,这样使用传送指令可以与D12接口,对D12操作就象对D12操作一样,此时忽略A0(命令口和数据口地址线)的输入。因为没有使用DMA传输方式,所以没有用到DMACK_N、EOT_N和DMREQ_N等DMA引脚。INT_N是USB中断请求脚,发出USB中断请求;GL_N是GooDLink指示灯,在调试过程中非常有用,在通信时会不停闪烁。如果一直亮或者一直暗,表示USB接口有问题,如果D12挂起,则LED关闭。CLKOUT是D12的时钟输出,可以通过固件编程改变其频率,在调试固件时,可作为参考。3.3.1 A/D与单片机接口电路 图3-5 ADC0809与89C51的接口电路89C51通过P2.7和读、写控制线来控制转换器的模拟输入通道地址锁存、启动和允许输出。编程时注意启动AD0809后,EOC在一定时间才能变成低电平。3.3.2 PDIUSBDI2与单片机接口电路PDIUSBD12与89C51的连接电路如图所示。89C51的ALE和PD12的ALE相接,表示采用单独地址和数据总线配置。其AO脚接高电平用于控制命令或数据输入到PDIUSBD12,也就是编程中outportcmd()和outportdata()函数。此外89051的多位地址/数据复用总线PO可直接与PDIUSBD12的数据总线相连,CLKOUT时钟输出为89C51提供时钟输入。图3-6 PDIUSBD12与89C51的连接电路 在该数据采集系统中,用ADC0809采集0-5V的电压信号,经A/D转换后将数字量存入预先设定的缓冲区里,利用接口芯片D12将数据送至USB总线上。设备应用程序从缓冲区里取数据显示,通过数值来说明USB接口的采集速率比一般的串行总线速度高。当前端的电压信号不断变化的同时,在PC上可以观察到数据的变化,这就表明利用USB接口在数字采集系统中进行数据传输是能够实现的,而且能够很好的实现。 第 56 页 共 56 页第四章 数据采集系统软件设计4.1 A/D转换时序控制 采用延时等待A/D转换结束方式,分别对8路模拟信号轮流采样一次,并依次把结果存入存储器。在软件编程时,令P2.7=0,A0、A1、A2给出被选择的模拟通道地址和启动A/D转换;执行一条输入指令,读取A/D转换结果。指向通道0地址启动A/D转换延时等待A/D转换结束读A/D转换值,存内存指向下一个通道地址8个通道转换?完?继续YESNO图4-1 A/D转换程序流程图4.2 固件的开发Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。Keil C51的工具包中,uVision是C51 for Windows的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及A51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经C51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。4.3 采用PDIUSBD12的固件设计4.3.1 固件编程的主要工作固件是FIREWARE的对应中文词,它实际上是单片机的程序文件,其编写语言可以采用C语言或是汇编语言。它的操作方式与硬件联系紧密,包括USB设备的连接USB协议、中断处理等,它不是单纯的软件,而是软件和硬件的结合,开发者需要对端口、中断和硬件结构非常熟悉。固件程序一般放入MCU中,当把设备连接到主机上时,上位机可以发现新设备,然后建立连接。因此,编写固件程序的一个最主要的目的就时让Windows可以检测和识别设备。USB固件程序程序由三部分组成:初始化单片机和所有的外围电路(包括PDIUSBD12);主循环部分;中断服务程序。根据USB协议,任何传输都是由主机开始的。单片机作它的前台工作,等待中断。主机首先要发令牌包给USB设备(这里是PDIUSBD12),PDIUSBD12接收到令牌包后就给单片机发中断。单片机进入中断服务程序,首先读PDIUSBD12的中断寄存器,判断USB令牌包的类型,然后执行相应的操作。在USB单片机程序中,要完成对各种令牌包的响应,其中比较难处理的是SETUP包,主要是端口0的编程。单片机与PDIUSBD12的通信主要是靠单片机给PDIUSBD12发命令和数据来实现的。PDIUSBD12的命令字分为三种:初始化命令字、数据流命令字和通用命令字。PDIUSBD12数据手册给出了各种命令的代码和地址。单片机先给PDIUSBD12的命令地址发命令,根据不同命令的要求再发送或读出不同的数据。因此,可以将每种命令做成函数,用函数实现各个命令,以后直接调用函数即可。4.3.2 PDIUSBD12固件程序的编写USB设备启动流程如下:1. USB设备接入USB口,发出连接USB命令;2. 主机发出读设备描述符两次;3. 主机根据设备描述符厂商ID、产品ID,启动相应设备驱动程序;4. 设备驱动程序初始化USB设备;读设备描述符;读配置描述符;选择接口、端点(管道),确定传输方式。USB设备在正常使用以前,必须由主机配置设备。主机一般会从USB设备获取配置信息后再确定此设备有哪些功能。作为配置操作的一部分,主机会设备设备的配置值,如果必要的话会选择合适的接口备选设备。在发出连接USB命令后,主机先读取设备描述符,然后发出设置USB地址SETUP包,设置USB地址后,进行主机客户驱动与设备初始化。其余端点依此类推。在其头文件里需定义USB规范中的各种描述符格式,包括设备描述表、配置描述表、接口描述表、端点描述表、字符串描述表以及描述表类型。这样,在发送配置联合描述表时,主机USBD可以根据描述类型标识区分各种分描述表。4.4 固件结构本数据采集系统的固件有着如下图4-2的积木式结构:主循环:发送USB请求、读入数据、采集通道和处理USB总线事件等等MAINLOOP.C标准请求 CHAP_9.C厂商请求PROTODMA.C中断服务程序ISR.CPDIUSBD12 命令接口D12CI.C硬件提取层EPPHAL.C图4.4.1 数据采集系统固件结构图4-2 数据采集系统固件结构 固件设计的目标就是使PDIUSBD12在USB上达到最大的传输速率。外围设备可使用PDIUSBD12 在USB上传输数据,这些设备的CPU要忙于处理许多设备控制和数据处理等任务。PDIUSBD12 的固件设计成完全的中断驱动,当CPU处理前台任务时,USB的传输可在后台进行,这就确保了最佳的传输速率和更好的软件结构,同时简化了编程和调试。后台ISR中断服务程序和前台主程序循环之间的数据交换通过事件标志和数据缓冲区来实现,例如PDIUSBD12的批量输出端点可使用循环的数据缓冲区,当PDIUSBD12从USB收到一个数据包,那么就对CPU产生一个中断请求,CPU立即响应中断在ISR中固件将数据包从PDIUSBD12内部缓冲区移到循环数据缓冲区,并在随后清零PDIUSBD12的内部缓冲区,以使能接收新的数据包CPU可以继续它当前的前台任务直到完成然后返回到主循环检查循环缓冲区内是否有新的数据并开始其它的前台任务。图4-5 数据采集系统的固件结构 由于这种结构,主循环不关心数据是来自USB串口还是并口,它只检查循环缓冲区内需要处理的新数据。这样主循环程序专注于数据的处理,而ISR能够以最大可能的速度进行数据的传输。相似的控制端点在数据包处理时采用了同样的概念。ISR接收和保存数据缓冲区中的控制传输并设置相应的标志寄存器。主循环向协议处理程序发出请求。由于所有的标准器件级别和厂商请求都是在协议处理程序中进行处理,ISR得以保持它的效率。硬件提取层EPPHAL.C:这是固件中的最底层代码,它执行对D12和硬件I/O相关访问。PDIUSBD12命令接口D12CI.C:为了进一步简化PDIUSBD12的编程,固件定义了一套压缩了所有访问PDIUSBD12功能的命令接口,以对PDIUSBD12芯片进行操作。中断服务程序ISR.C:这部分代码的处理由PDIUSBD12产生的中断,在中断服务程序中,它将数据从PDIUSBD12的内部FIFO取回到CPU存储器并建立正确的事件标志,以通知主循环程序进行处理。ISR通过设定事件标志“EPPFLAGS”和Setup包数据缓冲区“CONROL_XFER”与主循环进行通信。主循环MAINLOOP.C:主循环在初始化完单片机CPU和PDIUSBD12芯片后,检查事件标志,并进入对应的子程序进行进一步的处理,在开发套件中,它还包含人机接口的代码。协议层CHAP_9.C和PROTODMA.C:协议层处理标准的USB器件请求和特殊的厂商请求。4.5 固件的编程实现4.5.1 底层函数最底层为两个面向硬件电路的函数:outportb( ),inportb( ),用以完成CPU和D12之间的数据传输,这是所有其它函数的基础。具体代码如下:void outportb(unsigned char port, unsigned char val)unsigned char xdata *ext_address;ext_address=0xff00 + port;*ext_address = val; unsigned char inportb(unsigned char port)unsigned char c;unsigned char xdata *ext_address;ext_address=0xff00 + port;c = *ext_address ;return c;4.5.2 命令接口在D12的数据手册中定义了一套压缩了所有访问PDIUSBD12功能的命令集,命令接口部分就是将各命令用函数的形式加以实现。对应的函数主要有:void D12_SetAddressEnable(unsigned char bAddress, unsigned char bEnable); /设置地址使能void D12_SetEndpointEnable(unsigned char bEnable); /设置端点使能void D12_SetMode(unsigned char bConfig, unsigned char bClkDiv); /设置模式unsigned short D12_ReadInterruptRegister(void); /读中断寄存器unsigned char D12_SelectEndpoint(unsigned char bEndp);/选择端点unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp); /读最后处理状态unsigned char D12_ReadEndpointStatus(unsigned char bEndp); /读端点状态void D12_SetEndpointStatus(unsigned char bEndp, unsigned char bStalled); /设置端点状态void D12_SendResume(void); /发送恢复unsigned short D12_ReadCurrentFrameNumber(void); /读取当前帧号unsigned short D12_ReadChipID(void); /读D12芯片IDunsigned char D12_ReadEndpoint(unsigned char endp, unsigned char len, unsigned char * buf);/读取端点数据unsigned char D12_WriteEndpoint(unsigned char endp, unsigned char len, unsigned char * buf);/写端点数据void D12_AcknowledgeEndpoint(unsigned char endp);/设置端点应答4.5.3 中断服务程序ISR.C图4-6 中断处理流程图这部分代码处理由PDIUSBDI2产生的中断,ISR从PDIUSBD12收集数据,当数据充足时,通知主循环已经准备好等待处理。它将数据从PDIUSBDI2的内部FIFO取回到CPU存储器,并建立正确的事件标志以通知主循环程序。在ISR函数的入口固件使用ReadInterruptRegister()来决定中断源,根据中断源进入相应的子程序进行处理。中断服务处理的部分代码如下:/USB中断处理usb_isr() interrupt 0DISABLE;fn_usb_isr();ENABLE;void fn_usb_isr()unsigned int i_st;bEPPflags.bits.in_isr = 1;i_st = D12_ReadInterruptRegister();if(i_st != 0) if(i_st & D12_INT_BUSRESET) bus_reset();bEPPflags.bits.bus_reset = 1;if(i_st & D12_INT_EOT)dma_eot();if(i_st & D12_INT_SUSPENDCHANGE)bEPPflags.bits.suspend = 1;if(i_st & D12_INT_ENDP0IN)ep0_txdone();if(i_st & D12_INT_ENDP0OUT)ep0_rxdone();if(i_st & D12_INT_ENDP1IN)ep1_txdone();if(i_st & D12_INT_ENDP1OUT)ep1_rxdone();if(i_st & D12_INT_ENDP2IN)main_txdone();if(i_st & D12_INT_ENDP2OUT)main_rxdone();bEPPflags.bits.in_isr = 0;/A/D转换中断处理adc_isr() interrupt 1DISABLE;bEPPflags.bits.adc_isr = 1;ENABLE;4.5.4 主循环MAINLOOP.C主循环检查事件标志并进入对应的子程序进行进一步的处理。在主循环中,MCU首先对其所有端口、存储区、定时器和中断服务程序进行初始化,之后MCU将重新连接USB,包括将Softe Connect寄存器设置为ON。这些过程是很重要的,它确保了在MCU准备好服务D12之前,D12不会进行操作。初始化后,进入循环,轮询各种状态。当轮询到了检测建立包时,它确认建立标志在之前是否被中断服务程序所置位。如果建立标志被置位,它向协议层发送一个器件请求进行处理。/* 数据采集子程序 */void adc_handler(void)unsigned char ADC_DATA;ADC_DATA=IN_PORT;D12_WriteEndpoint(3, 1, &ADC_DATA);IN_PORT=0x00;if(bEPPflags.bits.ep1_rxdone) DISABLE;bEPPflags.bits.ep1_rxdone = 0;ENABLE;ADC_IN_ID =0x7FF8+GenEpBuf3;定时器事件标志?总线复位?挂起改变?建立包?更新LED状态采集按键状态总线复位处理挂起改变处理调用协议处理程序主循环初始化I/O口、定时器和中断,重新连接到USB总线循环NoYesYesYesYesNoNoNo图4-7 主循环流程/* 主程序循环 */ while(TRUE) if(bEPPflags.bits.adc_isr) /数据采集处理DISABLE;bEPPflags.bits.adc_isr = 0;ENABLE;if(bEPPflags.bits.configuration)adc_handler();if (bEPPflags.bits.bus_reset) /设备复位中断处理DISABLE;bEPPflags.bits.bus_reset = 0;ENABLE;D12SUSPD = 1; if (bEPPflags.bits.suspend) /挂起改变中断处理DISABLE;bEPPflags.bits.suspend= 0;ENABLE;if(D12SUSPD = 1) /挂器处理D12SUSPD = 0;P0 = 0xFF;P1 = 0xFF;P2 = 0xFF;P3 = 0xFF;D12SUSPD = 1;PCON |= 0x02;while (1); if (bEPPflags.bits.setup_packet) /Setup包中断处理DISABLE;bEPPflags.bits.setup_packet = 0;ENABLE;control_handler();D12SUSPD = 1; / End Main Loop第五章 USB设备驱动及应用程序设计5.1 USB设备驱动程序USB总线是1995年微软、IBM等公司推出的一种新型通信标准总线,特点是速度快、价格低、独立供电、支持热插拔等,其版本从早期的1.0、1.1已经发展到目前的2.0版本,2.0版本的最高数据传输速度达到480Mbit/s,能满足包括视频在内的多种高速外部设备的数据传输要求,由于其众多的优点,USB总线越来越多的被应用到计算机与外设的接口中,芯片厂家也提供了多种USB接口芯片供设计者使用,为了开发出功能强大的USB设备,设计者往往需要自己开发USB设备驱动程序,驱动程序开发一直是WINDOWS开发中较难的一个方面,但是通过使用专门的驱动程序开发包能减小开发的难度,提高工作效率,本文使用Compuware Numega公司的DriverStudio3.2开发包,开发了基于PHILIPS公司USB2.0控制芯片ISP1581的USB设备驱动程序。 USB设备驱动程序的模型图5-1 USB驱动程序模型 USB设备驱动程序是一种典型的WDM(Windows Driver Model)驱动程序,其程序模型如图1所示。用户应用程序工作在Windows操作系统的用户模式层,它不能直接访问USB设备,当需要访问时,通过调用操作系统的API(Application programming interface)函数生成I/O请求信息包(IRP),IRP被传输到工作于内核模式层的设备驱动程序,并通过驱动程序完成与UBS外设通信。设备驱动程序包括两层:函数驱动程序层和总线驱动程序层,函数驱动程序一方面通过IRP及API函数与应用程序通信,另一方面调用相应的总线驱动程序,总线驱动程序完成和外设硬件通信。USB总线驱动程序已经由操作系统提供,驱动程序开发的重点是函数驱动程序。1.USB设备驱动程序的设计使用DriverStudio3.2开发USB设备驱动程序。该驱动程序的主要功能包括:从控制端点0读取规定个数的数据、向端点0发出控制命令、从端点2批量读数据、向端点2批量写数据,驱动程序的开发采用DriverStudio3.2驱动程序开发包及VC+6.0,使用开发包中的向导程序DriverWizard就可以方便的生成驱动程序框架、模块及部分程序源代码,开发者只需要在功能模块中加入自己的实现程序就能完成复杂的USB设备驱动程序设计,下面介绍使用DriverWizard生成ISP1581驱动程序的过程:1)启动DriverWizard,选择DriverWorks Project创造一个名为USBDIO的VC+项目;2)在驱动程序类型中选择WDM Driver,WDM Function Driver,在硬件设备所支持的总线类型中选择USB(WDM Only),在USB Vendor ID(厂商识别码)中填写0741,在USB Product ID(产品识别码)中填写0821;3)增加USB设备端点,设置端点2为批量输入/输出传输方式;4)在驱动程序支持的功能项中选择Read、Write、Device Control、Cleanup;5)选择自动产生批量读及批量写程序代码;6)在I/O请求IRP处理方式中选择None,即IRP不排队;7)在接口的打开方式中选择Symbolic link:UsbdioDevice,即应用程序以符号链接名打开设备;8)定义应用程序调用DeviceIoControl函数对WDM驱动程序通信的控制命令,结果如图5.1.2所示。图5-2定义控制代码9)最后选择完成并确认生成新的项目信息,向导程序就会在usbdio目录中生成一个名为USBDIO的项目文件,其中包括了ISP1581驱动程序框架、模块及部分源代码。 2.USB设备驱动程序的编程在使用DriverWizard生成驱动程序框架、模块及部分程序源代码后,开发者只需完成图2中三个控制代码所对应的三个功能模块的编程:模块USBDIO_IOCTL_ID_CODE_Handler的功能是从控制端点0读取数据,模块USBDIO_IOCTL_TEST_COMMAND_Handler的功能是向控制端点0发送一个控制命令,模块USBDIO_IOCTL_DMA_COMMAND_Handler的功能是向控制端点0发送一个要求USB设备进行DMA传输的控制命令,下面是第一个模块的编程实例。NTSTATUS USBDIODevice:USBDIO_IOCTL_ID_CODE_Handler(KIrp I)NTSTATUS status = STATUS_SUCCESS;t Entering USBDIODevice:USBDIO_IOCTL_ID_CODE_Handler, I EOL;PURB pUrb;ULONG numData;numData=*(PUCHAR)I.IoctlBuffer();/设置读取的数据个数pUrb=m_Lower.BuildVendorRequest(PUCHAR)I.IoctlBuffer(),/驱动程序存放读取的数据的内存区numData,/wLength,读取的数据个数0,0x0c,/bRequest0,/wValueTRUE,/inputTRUE,NULL,0x0472,/wIndex,传输到固件程序的读数命令码URB_FUNCTION_VENDOR_ENDPOINT,NULL);if(pUrb=NULL)I.Information() =0;status=STATUS_INSUFFICIENT_RESOURCES;elseI.Information() =numData;status=m_Lower.SubmitUrb(pUrb,NULL,NULL,0);delete pUrb;return status;对象I包含了应用程序下传的IRP内容,包括命令或数据等参数,函数BuildVendorRequest用来分配并初始化一个用于厂商请求的URB(USB Request Block),该URB将作为下传IRP的一个参数,通过函数SubmitUrb发送给总线驱动程序,以便完成与硬件的通信。在初始化URB时需要了解USB的传输方式及传输协议,该功能使用了USB的控制传输方式,该方式包括三个阶段:设置阶段、数据阶段和状态阶段,其中数据阶段可选,开发者主要关注设置阶段中的8个关键字节的定义,8字节分成了5个字段,定义了传输请求及相关信息,这8个字节的格式如图3所示。bmRequestTypebRequestwValuewIndexwLength 图5-3 USB设置数据格式BmRequestType:1字节,用来指定数据流动的方向,请求的类型,以及接收者。bRequest:1字节,用来指定请求。wValue:2字节,主机用来传输信息给设备,开发者可以根据情况自己定义。wIndex:2字节,主机用来传输信息给设备,开发者可以根据情况自己定义。wLength:2字节,包含数据阶段中接下来要传输的数据字节数目。以上字段的应用已经在程序注释中标出,在此不再赘述。3.USB设备驱动程序的安装及调用4.USB设备驱动程序的安装驱动程序编译完成后会生成一个名为USBDIO.SYS的文件,即USB设备驱动程序,另外在使用向导程序WizardDriver生成驱动程序时会产生一个名为USBDIO.INF的驱动程序安装程序,对此程序只需稍做修改就能正常使用,具体是将类改为USB,即Class=USB,由于本驱动程序使用符号链接名打开设备,所以删除ClassGUID选项,注意设备标识符必需为:%DeviceDesc%=USBDIO_DDI, USBVID_0471&PID_0821,其中0471是USB控制芯片的厂商识别码,0821是USB设备标识码。驱动程序安装过程是:将USB设备加电,连入计算机的USB接口,这时候会看到Windows操作系统提示发现新硬件,提问是否安装驱动程序,选择是,然后选择驱动程序所在文件夹,选择文件USBDIO.INF即可完成安装。USB设备驱动程序的调用为了完成对驱动程序的调用,笔者使用VC+6.0编写了USB应用程序包,程序包共由五个功能模块组成,用户通过调用这些模块即可方便的完成对USB外设的控制及读写,这些模块如下:1)int CTRLReadData(unsigned char usbSelect,unsigned char *rbuffer,unsigned char numData),主要功能是读取ISP1581控制端点0发来的数据,数据存放在缓冲区rbuffer中。2)int CTRLSendTestCommand(unsigned char usbSelect,unsigned short int testCommand),主要功能是发送测试命令,变量testCommand定义了测试命令。3) int CTRLSendDMACommand(unsigned char usbSelect,unsigned char dmaDirection,unsigned char ramSelect,unsigned long dmaLength),主要功能是发送DMA传输命令,变量dmaDirection定义数据传输方向,ramSelect定义将要操作的USB外设的存储器,dmaLength定义了数据传输总数。4)int DMARead(unsigned char usbSelect,unsigned char *rbuffer,int len,int waitTime),主要功能是计算机批量读取ISP1581中的数据,而ISP1581以DMA方式从外部RAM读取数据。5)int DMAWrite(unsigned char usbSelect, unsigned char *rbuffer, int len, int waitTime),主要功能是计算机批量写数据到ISP1581,而ISP1581将以DMA方式写数据到外部RAM。结语USB设备驱动程序开发是Windows编程中较难的一个方面,要求开发者不但要有良好的Windows编程知识,还要掌握USB控制芯片工作原理、USB传输协议、USB固件等相关知识,使用DriverStudio3.2进行USB设备驱动程序开发可大大减少工作量和工作难度,本文所设计的USB设备驱动程序,已经应用到某雷达的自动测试设备中,驱动程序在计算机应用程序控制下可以顺利的发送各种测试命令,批量输入或者输出大量数据,达到设计要求。5.2 USB设备应用程序设计USB设备应用程序是实现PC机对USB接口芯片PDIUSBD12的接口控制和读写操作,提供友好的人机界面。由于应用程序中涉及到与硬件打交道的底层函数,会大量的引用Win32 API函数,在Visual C+环境下开发是比较直观和顺乎逻辑的。要编写USB设备的驱动程序,必须要有能够编译WDM驱动程序的软件环境,建议使用Visual C+来编制该驱动程序。应用程序主要通过对驱动程序中函数的利用来实现对USB设备的操作控制。因此在编写设备应用程序时,可以使用可读性和移植性很好的Visual C+,Visual Basic,Delphi等开发环境来生成控制所需的交互界面,大大方便用户使用。设计USB设备应用程序时:一个是使用MFC(Microsoft Foundation Class),这样工作量相对来说要少得多,用户也比较方便;另一个是使用底层的API函数编写程序,这样虽然比较繁琐,但是可以使编程人员看到许多使用MFC编程时看不到的东西,也能够深入了解Windows系统更底层的知识。应用程序的实现用户应用程序是系统与用户的接口,它通过通用驱动程序完成对外设的控制和通信。在编程时,首先要建立与外设的连接,然后才能实施数据的传输。用户程序首先必须查找设备,打开设备的句柄,然后进行读写和控制操作,最后是关闭设备句柄。用户应用程序的流程如图5-4所示。NNYY成功失败检测USB设备设置设备参数启动A/D模块请求上传数据包报告数据丢失获得有效数据包下组数据准备就绪显示错误信息返回存储、显示数据延迟至下组数据包准备就绪启动USB设备 图5-4 应用程序流程图 用户应用程序的主要功能为:开启或关闭USB设备、检测USB设备、设置USB数据传输管道、设置A/D状态和数据采集端口、实时从USB接口采集数据、显示并分析数据。当PDIUSBD12的FIFO缓冲区存满后,PDIUSBD12自动将数据打包即时请求读入数据,由SIE自动发送数据包。另外,当系统启动A/D模块后,便会创建两个线程:采样线程和显示存盘线程。采样线程负责将采集数据写到应用程序提交的内存;而显示存盘线程负责给应用程序发送显示和存盘消息。当应用程序接收到此消息后,便从它提交的内存中读取数据并显示和存盘。此处需要注意的是采样线程和显示存盘线程在读写应用程序提交的内存时要保持同步。第六章 结 论USB是英文Universal Serial Bus的缩写,中文含义是“通用串行总线”。它是一种应用在PC领域的新型接口技术。早在1995年,就已经有PC机带有USB接口了,但由于缺乏软件及硬件设备的支持,这些PC机的USB接口都闲置未用。1998年后,随着微软在Windows 98中内置了对USB接口的支持模块,加上USB设备的日渐增多,USB接口才逐步走进了实用阶段。这几年,随着大量支持USB的个人电脑的普及,USB逐步成为PC机的标准接口已经是大势所趋。在主机(host)端,最新推出的PC机几乎100%支持USB;而在外设(device)端,使用USB接口的设备也与日俱增,例如数码相机、扫描仪、游戏杆、磁带和软驱、图像设备、打印机、键盘、鼠标等等。本论文所完成的工作和分析可概括为以下几点:1.对USB规范进行了较为详细的研究。分析了USB主机、USB设备、USB物理层以及USB连接,详细说明了USB的数据流。2.详细地介绍了PHILIPS公司PDIUSBD12接口器件和使用Keil c51开发固件。探索了PDIUSBD12固件编程的思想,将PDIUSBD12的固件设计成完全的中断驱动,MCU有更多的时间处理其它工作。3. USB1.1标准还存在许多不足。最大传输率可以达到12Mbps,是指主机控制器最大的处理能力,而一个USB设备不可能拥有这么高的带宽,它的带宽由主机的总线驱动程序管理。当添加或者删除一个USB设备时,连接的其它USB设备的资源要重新分配,以提高总线的利用率。单个USB设备所能拥有的带宽一般小于8Mbps。为了实现高速数据传输,应该考虑使用USB2.0标准。4.由于使用AT89C51作为D12的控制器,这就从根本上限制了数据传输速度的提高。它的工作主频比较低,晶振太小,处理数据不够迅速。可以使用速度更快的处理器。5.固件编程使用了C51编写,虽然程序的可读性相对较好,但它的执行效率却不如汇编语言的执行效率高。选择编程语言也是提高设备传输率的方法之一。虽然本设计还有许多缺陷,不足以完成大批量数据的高速传送,但是它己经是USB数据采集系统的雏形。只要在后续的研究中通过改善硬件环境和软件算法解决好一系列存在的问题,一定会得到充分体现USB总线简单易用、传输速度快等特点的数据采集系统。参考文献1 薛圆圆编著.USB应用开发技术大全M.北京:人民邮电出版社,2007.82 许永和,编著.USB接口完全解决方案M.北京:北京航空航天大学出版社,2004.83李全利,迟荣强编著.单片机原理及接口技术M.北京:高等教育出版社,2004.14周立功编著.PDIUSBDI2 USB固件编程与驱动开发M.北京:北京航空航天大学出版社,2003.25边海龙,贾少华编著.USB2.0设备的设计与开发M.北京:人民邮电出版社,2004.16张弘编著.USB接口设计M.西安:西安电子科技大学出版社,2002.17坎特编著.Windows WDM设备驱动程序开发指南M.孙义,马莉波等译.北京:机械工业出版社,2000.18刘炳文,李凤华编著Visual Basic 6.0 Win32 API程序设计M.北京:清华大学出版社,2001.99陈志强编著.基于USB2.0图像采集卡的设计与实现M.西安:西安电子科技大学出版社,2007.510Jan Axelson编著;陈逸等译.USB大全M.北京:中国电力出版社,2001.1附录英文原文HAVE2007 - IEEE International Workshop onHaptic Audio Visual Environments and their ApplicationsOttawa, Canada 12-14 October 2007Extending Blender: Development of a Haptic Authoring ToolSheldon Andrews, Mohamad Eid2, Atif Alamri2, and Abdulmotaleb El Saddik2Multimedia Communications Research Laboratory - MCRLabSchool ofInformation Technology and Engineering - University ofOttawaOttawa, Ontario, KIN 6N5, CanadasandrO71site. uottawa. ca, 2 teid, atifW abed mcrlab. uottawa. CaAbstract -In this paper, we present our work to extend a well known 3D graphic modeler - Blender - to support haptic modeling and rendering. The extension tool is named HAMLAT (Haptic Application Markup Language Authoring Tool). We describe the modifications and additions to the Blender source code which have been used to create HAMLAT Furthermore, we present and discuss the design decisions used when developing HAMLAT, and also an implementation road map which describes the changes to the Blender source code. Finally, we concludewith discussion of our future development and research avenues. Keywords - Haptics, HAML, Graphic Modelers, Blender, Virtual Environments. I. INTRODUCTION A. Motivation The increasing adoption of haptic modality in human-computer interaction paradigms has led to a huge demand for new tools that help novice users to author and edit haptic applications. Currently, the haptic application development process is a time consuming experience that requires programming expertise. The complexity of haptic applications development rises from the fact that the haptic application components (such as the haptic API, the device, the haptic rendering algorithms, etc.) need to interact with the graphic components in order to achieve synchronicity.Additionally, there is a lack of application portability as the application is tightly coupled to a specific device that necessitates the use of its corresponding API. Therefore, device and API heterogeneity lead to the fragmentation and disorientation of both researchers and developers. In view of all these considerations, there is a clear need for an authoring tool that can build haptic applications while hiding programming details from the application modeler (such as API, device, or virtual model).This paper describes the technical development of the Haptic Application Markup Language Authoring Tool (HAMLAT). It is intended to explain the design decisions used for developing HAMLAT and also provides an implementation road map, describing the source code of the project.B. BlenderHAMLAT is based on the Blender 1 software suite, which is an open-source 3D modeling package with a rich feature set. It has a sophisticated user interface which isnoted for its efficiency and flexibility, as well as its supports for multiple file formats, physics engine, modem computer graphic rendering and many other features.Because of Blenders open architecture and supportive community base, it was selected as the platform of choice for development of HAMLAT. The open-source nature of Blender means HAMLAT can easily leverage its existing functionality and focus on integrating haptic features which make it a complete hapto-visual modeling tool, since developing a 3D modeling platform from scratch requires considerable development time and expertise in order to reach the level of functionality of Blender. Also, we can take advantage of future improvements to Blender by merging changes from its source code into the HAMLAT source tree.HAMLAT builds on existing Blender components, such as the user-interface and editing tools, by adding new components which focus on the representation, modification, and rendering of haptic properties of objectsin a 3D scene. By using Blender as the basis for HAMLAT, we hope to develop a 3D haptic modeling toolwhich has the maturity and features of Blender combinedwith the novelty of haptic rendering.At the time of writing, HAMLAT is based on Blender version 2.43 source code.C. Project Goals As previously stated, the overall goal for the HAMLAT project is to produce a polished software application which combines the features of a modem graphic modeling tool with haptic rendering techniques. HAMLAT has the look and feel of a 3D graphical modeling package, but with the addition of features such as haptic rendering and haptic property descriptors. This allows artists, modelers, and developers to generate realistic 3D hapto-visual virtual environments. A high-level block diagram of HAMLAT is shown in Figure 1. It illustrates the flow of data in the haptic modeling. HAMLAT assists the modeler, or application developer, in building hapto-visual applications which may be stored in a database for later retrieval by another haptic application. By hapto-visual application we refer to any software which displays a 3D scene both visually and haptically to a user in a virtual setting. An XML file format, called HAML 2, is used to describe the 3D scenes and store the hapto-visual environments built by a modeler for later playback to an end user. Traditionally, building hapto-visual environments has required a strong technical and programming background. The task of haptically rendering a 3D scene is tedious since haptic properties must be assigned to individual objects in the scene and currently there are few high-level tools for accomplishing this task. HAMLAT bridges this gap by integrating into the HAML framework and delivering a complete solution for development of hapto- visual applications requiring no programming knowledge. The remainder of the paper is organized as follows: in Section 2, we present the proposed architecture extensions and discuss design constraints. Section 3 describes the implementation details and how haptic properties are added and rendered within the Blender framework. In Section 4 we discuss related issues and future work avenues. II. SYSTEM OVERVIEW AND ARCHITECTURE The Blender design philosophy is based on three main tasks: data storage, editing, and visualization. According to the legacy documentation 3, it follows a data- visualize-edit development cycle for the 3D modeling pipe line. A 3D scene is represented using data structures within the Blender architecture. The modeler views the scene, makes changes using the editing interface which directly modifies the underlying data structures, and then the cycle repeats.To better understand this development cycle, consider the representation of a 3D object in Blender. A 3D object may be represented by an array of vertices which havebeen organized as a polygonal mesh. Users may choose to operate on any subset of this data set. Editing tasks may include operations to rotate, scale, and translate thevertices, or perhaps a re-meshing algorithm to cleanup redundant vertices and transform from a quad to a triangle topology. The data is visualized using a graphical 3D renderer which is capable of displaying the object as a wireframe or as a shaded, solid surface. The visualization is necessary in order to see the effects of editing on the data. In a nutshell, this example defines the design philosophy behind Blenders architecture.In Blender, data is organized as a series of lists and base data types are combined with links between items in each list, creating complex scenes from simple structures.This allows data elements in each list to be reused, thus reducing the overall storage requirements. For example, a mesh may be linked by multiple scene objects, but the position and orientation may change for each object and the topology of the mesh remains the same. A diagram illustrating the organization of data structures and reuse of scene elements is shown in Figure 2. A scene object links to three objects, each of which link to two polygonal meshes. The meshes also share a common material property. The entire scene is rendered on one of several screens, which visualizes the scene.We adopt the Blender design approach for our authoring tool. The data structures which are used to represent objects in a 3D scene have been augmented to include fields for haptic properties (e.g., stiffness, damping); user interface components (e.g., button panels) which allow the modeler to change object properties have also been updated to include support for modifying the haptic properties of an object. Additionally, an interactive hapto-visual renderer has been implemented to display the3D scene graphically and haptically, providing the modeler or artist with immediate feedback about the changes they make to the scene. in the current version of the HAMLAT. the modifications to the Blender framework include: data structures for representing haptic properties, an editing interface for modifying haptic properties, an external renderer for displaying and previewing haptically enabled scenes, scripts which allow scenes to be imported/exported in the HAML file format. A class diagram outlining the changes to the Blender ramework is shown in Figure 3. Components which are ertinent to HAMLAT are shaded in gray. HAMLAT builds on existing Blender sub-systems by extending them or haptic modeling purposes. Data structures for representing object geometry and graphical rendering areaugmented to include field which encompass the tactile properties necessary for haptic rendering.To allow the user to modify haptic properties GUI Components are integrated as part of the Blender editing panels. The operations triggered by these componentsoperate directly on the d ata structures used for representing hatic cues and may be considered part of the editing step of the Blender design cycle.Similarly to the built-in graphical renderer, HAMLAT uses a custom rendlerer for displaying 3Ds scenes grphcal and haptcall, an is ineedn of the Blender renderer. This component is developed independently since haptical and graphical rendering must be performed simultaneously and synchronously. A simulation loop is used to update haptic rendering forces at a rate which maintains stability and quality. A detailed discussion of the implementation of these classes and their connectivity is given in the next section.III IMLIEMENTATIONA Data StructureA.1 Mesh Data TypeBlender uses many different data structures to represent the various types of objects in a 3D scene a vertices; a lamp contains colour and intensity values; and camera a object contains intrinsic viewing parameters.The Mesh data structure iS used by the Blender inframework to describe a polygonal mesh object. It iS of particular interest for hapic rendering since many solid objects in a 3D scene may be represented using this type of data structure. The tactile and kinesthetic cues, which are displayed due to interaction with virtual objects, are typically rendered based on the geometry of the mesh. Hptic rendering is performed based primary on data stored in this data type. Other scene components such as lamps, cameras, or lines are not intuitively rendered using force feedback haptic devices and are therefore not of current interest for haptic rendering. An augmented version of the Mesh data structure is shown in Figure 4. It contains fields for vertex and face data, plus some special custom data fields which allow data to be stored to/retrieved from disk and memory. We have modified this data type to include a pointer to a MHaptics data structure, which stores haptic properties such as stiffness, damping, and friction for the mesh elements (Figure 5).A.2 Edit Mesh Data TypeIt should be noted that the Mesh data type has a comPlimentary data structure, called EditMesh, which is used when editing mesh data. It holds a copy of the vertex, edge ,and face data for a polygonal mesh. when the user switches to editing mode, the Blender copies the data from a Mesh into an EditMesh and when editing is complete the data is copied back.Care must be taken to ensure that the hapic property data structure remains intact during the copy sequence. The EditMesh data structure has not been modified to contain a copy of the hapic property data ,but this mayproperties in edit mode is required). The editing mode is mainly used to modify mesh topology and geometry, not the haptic and graphical rendering characteristics, A.3 Haptic Properties In this section well briefly discuss the haptic properties which may currently be modeled using HAMLAT. It is important for the modeler to understand these properties and their basis for use in haptic rendering. The stiffness of an object defines how resistant it is to deformation by some applied force. Hard objects, such as a rock or table, have very high stiffness; soft objects, such as rubber ball, have low stiffness. The hardness-softness of an object is typically rendered using the spring-force equation: Where the force feedback vector f which is displayed to the user is computed using ks the stiffness coefficient (variable name stiffness)for the object and x the penetration depth (displacement) of the haptic proxy into an object. The stiffness coefficient has a range of 0,1, where 0 represents no resistance to deformation and 1 represents the maximum stiffness which may be rendered by the haptic device. The damping of an object defines its resistance to the rate of deformation due to some applied force. It is typically rendered using the force equation:Where kd is the damping coefficient (variable nameMHaptics; damping) anddepdt is the velocity ofthe haptic proxy as it;penetrates an object. The damping coefficient also has a range of 0,1 and may be used to model viscous behaviour of a material. It also increases the stability of the hapticrendering loop fordstiffmaterials.The static friction (variable name stjriction) and dynamic friction (variable name dyjriction) coefficient are used to model the frictional forces experienced whileexploring the surface of a 3D object. Static friction is experienced when the proxy is not moving over the objects surface, and an initial force must be used to overcome static friction. Dynamic friction is felt when the proxy moves across the surface, rubbing against it.Frictional coefficients also have a range of /0,1, with a value of 0 making the surface of a 3D object feel slippery and a value of 1 making the object feel veryrough. Frictional forces are typically rendered in a direction tangential to the collision point of the hapticproxy at an objects surface. B. Editing Blender uses a set of non-overlapping windows called spaces to modify various aspects of the 3D scene and its objects. Each space is divided into a set of areas andpanels which are context aware. That is, they provide functionality based on the selected object type. Forexample, if a camera is selected the panel will display components which allow the modeler to change the focal length and viewing angle of the camera, but these components will not appear if an object of another type is selected. Figure 6 shows a screen shot of the button space which is used to edit properties for a haptic mesh. It includes user-interface panels which allow a modeler to change the graphical shading properties of the mesh, perform simple re-meshing operations, and to modify the haptic properties of the selected mesh. HAMLAT follows the context-sensitive behavior of Blender by only displaying the haptic editing panel when a polygonal mesh object is selected. In the future, this panel may be duplicated to support haptic modeling for other object types, such as NURB surfaces. The Blender framework offers many user-interface components (e.g., buttons, sliders, pop-up menus) which may be used to edit the underlying data structures. The haptic properties for mesh objects are editable using sliders or by entering a float value into a text box located adjacent to the slider. When the value of the slider/text box is changed, it triggers an event in the Blender window sub-system. A unique identifier that the event is for the haptic property panel and the HAMLAT code should be called to update haptic properties for the currently selected mesh.C Hapto-Visual RenderingBlender currently support graphical rendering of scenes using an internal render or an external renderer (e.g., 4). In this spirit, the haptic renderer used by HAMLAT has been developed as an exteral renderer. It uses the OpenGL and OpenHaptics toolkit 5 to perform graphic and hapic rendering ,respectively.The 3D scene which is being modeled is rendered using two passes: the first pass render the scene graphically, and the second pass renders it haptically. The second pass is required because the OpenHaptics toolkit intercepts commands send to the OpenGL pipeline and uses them to display the scene using haptic rendering techniques. In this pass, the haptic properties of each mesh object are used much in the same way color and lighting are used by graphical rendering they define thetype of material for each object. To save CPU cycles, the lighting and graphical material properties are excluded from the haptic rendering pass.Figure 7 shows source code which is used to apply the material properties during the haptic rendering pass. The haptic renderer is independent from the Blenderframework in that it exists outside the original source code. However, it is still heavily dependent on Blender data structures and types.D. ScriptingThe Blender Python (BPy) wrapper exposes many of the internal data structures, giving the internal Python scripting engine may access them. Similar to the datastructures used for representing mesh objects in the native Blender framework, wrappers allow user defined scripts to access and modify the elements in a 3D scene. The hapic properties of a mesh object may be accessed through the Mesh wrapper class. A haptics attribute has been added to each of these classes and accessed through the Python scripting system. Figure 8 shows Python code to read the haptic properties from a mesh object and export to a file. Similar code is used to import/export HAML scenes from/to files. An import script allows 3D scenes to be read from a HAML file and reproduced in the HAMLAT application; export script allows 3D scenes to be written to a HAML file, including haptic properties, and used in other HAML applications. The BPy wrappers also expose the Blender windowing system. Figure 9 shows a panel which appears when the user exports a 3D scene to the HAML file format. It allows the user to specify supplementary information about the application such as a description, target hardware, and system requirements. These are fields defined by the HAML specification 2 and are included with the authored scene as part of the HAML file format. User-interface components displayed on this panel are easily extended to agree with the future revisions of HAML. The current version of HAMLAT shows that a unified modeling tool for graphics and haptics is possible. Promisingly, the features for modeling haptic properties have been integrated seamlessly into the Blender framework, which indicates it was a good choice as a platform for development of this tool. Blenders modular architecture will make future additions to its framework very straightforward.Currently, HAMLAT supports basic functionality for modeling and rendering hapto-visual applications. Scenes may be created, edited, previewed, and exported as part of a database for use in by other hapto-visual applications, such as the HAML player 6. However, there is room for growth and in there are many more ways we can continue leveraging existing Blender functionality. As per future work ,we plan to extend HAMLAT TO include support for other haptic platforms and devices.Currently, only the PHANTOM series of devices is supported since the interactive renderer is dependent on the OpenHaptics toolkit 5. In order to support otherd evices, a cross-platform library such as Chai3D orHaptik may be used to perform rendering. These libraries support force rendering for a large range of haptic hardware. Fortunately, due to the modularity of our implementation, only the interactive haptic rendering component need be altered for these changes. In addition to support multiple hardware platforms, a user interface component which allows the selection and configuration of haptic devices will be important. Most likely, this will be added as part of the user preferences panel in Blender. Adding support for haptic devices as part of editing asks is also a planned feature. This will allow the odeler to modify the shape, location, and other properties on in-scene objects. For example, the sculptingo de in Blender allows a user to manipulate the geometryf a 3D object using a natural interface, similar to eshaping a piece of clay. HAMLAT will build on
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:基于USB总线数据采集系统设计与实现[含CAD高清图纸和说明书]
链接地址:https://www.renrendoc.com/p-22779129.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!