- UID
- 872339
|
关键字:CCD 信号采集 USB接口 FIFO
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所示。
其中使用CPLD技术完成本采集系统的控制模块。CPLD(可编程逻辑器件)技术已经成为当今设计数字电路最为流行的方式,他可以将数字电路集成到一块芯片上,大大减小了电路板的体积和可靠性,而且他的可编程性使得设计好的电路在升级和修改上变得非常简单和方便。
USB控制芯片选用Cypress公司EZ-USB系列的AN2131QC,片内嵌有一个增强型的8051微控制器,并使用片内RAM作程序和数据存储器,使得芯片具有软特性,允许客户随时不断地设置和升级。内部框图如图2所示。
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读取一个包长度的字节数据到端点缓冲区中。关键字:CCD 信号采集 USB接口 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图像采集系统。
|
|