1 引 言
CCD(ChargeCoupledDevices)电荷耦合器件是20世纪70年代初发展起来的新型半导体集成光电器件。由于CCD器件具有诸多优点:灵敏度高、光谱响应宽、动态范围大、空间自扫描等,使得近30年来,CCD器件及其应用技术的研究取得了惊人的进展,特别是在图像传感和非接触测量领域的发展更为迅速。目前,CCD应用技术已成为集光学、电子学、精密机械及微计算机为一体的综合性技术,在现代光子学、光电检测技术和现代测量技术中成果累累。随着CCD技术的迅猛发展,针对CCD信号的采集及采集之后的信号如何与计算机进行信息通信就成为CCD应用的一个重要问题,而能够针对CCD每一个象素进行高速采集并实时的传输给计算机处理,将会大大的提高采集到的CCD信号的精度并解决实时处理的问题,这在CCD信号采集和处理领域都将有非常广阔的前景。
通用串行总线USB(UniversalSerialBus)是1995年由康柏、微软、IBM,DEC等公司为解决传统总线不足而推广的一种新型的通信标准。USB总线接口具有较高的数据传输率、使用灵活、易扩展等优点,非常适合CCD的数据采集。他有低速、全速和高速三种工作方式,即USBl.1版本中.的低速模式和全速模式,低速模式的传输速率为1.5Mb/s,支持一些不需要很大数据吞吐量和很高实时性的设备,如鼠标、键盘等;全速模式的传输速率可以达到12Mb/s。,可以外接速率更高的外设,适合用于线阵CCD的数据采集。在USB 2.0版本中,增加了一种高速模式,其数据传输率最高可以达到480Mb/s,完全可以满足高速CCD数据采集系统的需要。
2 接口硬件组成
本系统选用高速的AD(模数)转换器,用于采集CCD信号,配以先进先出(FIFO)存储器作为数据高速缓冲器,用于存储AD转换后的数据,并采用具有微控制器的USB接口芯片,从而通过USB接口将采集到的数据输入计算机。系统原理框图如图1所示。
EZ-USBAN2131QC符合USB规范1.1版本,有4种传输方式:控制传输、中断传输、批量传输和同步传输。其中同步传输又有2种方式,即普通读写方式和快速读写方式。在本系统中采用的是快速读写方式,使得芯片可以在0.5 ms内读写1 kB的数据。
3 软件设计
软件主要分为3部分:USB芯片的固件程序、USB设备驱动程序以及主机的用户应用程序。固件响应各种来自系统的USB标准请求,完成各种数据的交换工作和事件处理。USB-驱动程序为USB采集系统提供了应用软件与USB设备的接口,他的开发使USB广泛应用于数据采集系统成为可能。而应用软件则实现用户与采集系统的交互,完成数据采集命令,进行实时显示。
3.1 固件程序代码
由USB芯片集成的加强型8051单片机来处理,当EZ-USB设备连接到USB口时,主机进行总线枚举,根据设备ID先使用系统程序将固件下载到芯片内部,然后进行重枚举,固件作为用户的功能设备开始执行。
Cypress公司提供固件程序框架,来完成控制传输和大部分的数据传输工作。本采集系统的固件程序就是基于此固件框架开发的,使用KeilC进行编译。程序流程图如图3所示。
图3中:TD_Init()为初始化全局变量;TD_Poll()为用户功能;TD_Suspend()为响应挂起事件;TD_Resume()为响应外部唤醒事件。
EZ-USB使用8051的INT2来响应21种USB中断,自动矢量(Autovector)机制帮助使8051内核进入相应的ISR(Interrupt Service Routine中断服务例程)。在初始化函数中加入使能EZ-USB的SOF(帧起始)中断语句,可以开始同步传输。每1 ms开始发生SOF中断,标志帧的开始。在SOFISR中从外部FIFO读取一个包长度的字节数据到端点缓冲区中。
3.2 驱动程序设计
USB客户驱动程序是支持即插即用功能的标准WDM(Windows Driver Model)驱动程序,这是分层的驱动程序模型,即设备驱动被分成了若干层,典型地分成:高层驱动程序、中间层驱动程序、底层驱动程序。每层驱动再把I/O请求划分成更简单的请求,以传给更下层的驱动执行。最底层的驱动程序在收到I/O请求后,通过硬件抽象层,与硬件发生作用,从而完成I/O请求工作。在这样的架构下,上面的驱动层就不需要对每个操作系统都要开发一遍了。USB客户驱动程序接收I/O管理器发来的IRP(I/ORequestPacket),构造URB(USBRequest Block)传递给主控制驱动程序接口USBDI。在USBDI的基础上进行编程将大大简化,用户不用关心IRP的类型,而只需要在相应的分发例程中通过构造URB(USBRequestBlock)并将其通过USBDI发送下去就可以实现对USB设备的控制了。
开发USB设备驱动程序的工具目前广泛应用的主要有2类:
(1)Windows DDK(Device Driver Kits),DDK基于汇编语言的编程方式和内核模式的调用,对没有深厚的操作系统原理和编程水平的人员来说,任务相当艰巨。
(2)NuMega公司的Driverstudio工具开发包,其中的DriverWorks实际上实现了对DDK类的封装,可以提供给用户驱动程序的开发框架,只需用户在相应的代码段中加入自己系统的控制代码即可,不必了解内核机制,大大加速了USB外设的开发速度。本系统就是使用DriverWorks来开发USB设备驱动程序的。生成的应用接口函数在VC"中调用,大大降低了主机软件的难度。
3.3 用户应用程序设计
应用程序实现的功能有:启动/关闭USB设备,设置USB数据传输管道/端口,采集数据,显示数据等。这里,采用VisualC++6.0作为程序的开发环境,并且充分运用了多线程的编程思想。从而实现同时进行数据采集与实时显示。
为了实现与驱动程序的通信,应用程序首先创建一个事件和一个线程,再将事件句柄传递给WDM,用这一线程来等待WDM发送的事件消息,接收到事件消息后,就读取驱动程序的数据,显示数据。
在Windows中,Win32应用程序调用的APl函数有5个;CreateFile(),ReadFile(),WriteFi|e(),DeviceloControl()和CloseHandle()。
应用程序为打开一个WDM设备驱动程序,使用CreateFile()函数。他的第一个参数是一个符号链接名。如果用DriverWorks创建一个WDM驱动程序,通常会用类KUnitizedName生成一个设备符号链接名。这名字的后面有一个数字,一般是一个o。例如,若符号链接名为"USBDevice",则传递给CreateFile()的是"\\\\.\\USBDevice0"。
一旦应用程序获得设备的有效句柄,他就能够调用Win32函数,这将产生对应于此设备对象的相应IRP,发送给驱动程序,完成相应功能。这种关系如表1所示。
4 结 语
本采集系统利用USB技术实现与计算机通信,有众多的优点:
①安装方便,支持即插即用。
②供电方便,可直接由主机通过USB接口提供5V的电压。
⑧性价比高,远优于并行口和串行口的CCD图像采集系统。