当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]CCD(ChargeCoupledDevices) 电荷耦合器件是20世纪70年代初发展起来的新型半导体集成光电器件。由于CCD器件具有诸多优点:灵敏度高、光谱响应宽、动态范围大、空间自扫描等

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读取一个包长度的字节数据到端点缓冲区中。

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"中调用,大大降低了主机软件的难度。[!--empirenews.page--]

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图像采集系统。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

hmi是Human Machine Interface 的缩写,"人机接口",也叫人机界面。人机界面(又称用户界面或使用者界面)是系统和用户之间进行交互和信息交换的媒介, 它实现信息的内部形式与人类可以接受形式之间的转换...

关键字: HMI 人机界面 系统

在嵌入式系统开发、调试和测试过程中,J-Link作为一种高效的调试工具,为开发者提供了极大的便利。然而,要想充分发挥J-Link的功能,首先需要正确安装其驱动程序。本文将详细介绍J-Link驱动的安装过程,并深入解析其中...

关键字: jlink 嵌入式系统 嵌入式开发

与谷歌的合作使 Nordic 能够在 nRF Connect SDK 中嵌入开发人员软件,以构建与安卓移动设备兼容的谷歌Find My Device和未知跟踪器警报服务

关键字: 谷歌 SoC 嵌入式开发

嵌入式开发作为当今电子工程和信息技术领域的核心分支,涵盖了广泛的软硬件技术和系统集成方法,用于构建高性能、低成本、低功耗、体积小巧且功能专一的嵌入式系统。这些系统无处不在,从微型传感器节点到复杂的工业控制设备,从日常使用...

关键字: 嵌入式开发 Python

嵌入式开发是当今信息技术领域不可或缺的一部分,它融合了硬件设计、软件开发和系统集成等多个学科,专门用于创建那些被嵌入到特定设备或系统中的专用计算机系统。嵌入式开发的主要过程包括利用分立元件或集成器件进行电路设计、结构设计...

关键字: 嵌入式开发 硬件设计 软件开发

嵌入式开发作为一种专业且技术密集型的领域,涵盖了从硬件底层驱动、中间件到应用层软件开发等多个层面的工作,其所需的工具种类繁多,各有针对性,旨在提升开发效率、保证代码质量以及简化调试过程。

关键字: 嵌入式开发 keil

嵌入式开发作为信息技术领域的重要分支,其涉及的语言种类繁多,各具特色。这些语言的选择取决于目标平台的特性、性能需求、开发者的熟练程度以及项目的具体要求。本文将详细介绍几种常见的嵌入式开发语言,包括C语言、C++、汇编语言...

关键字: 嵌入式开发 C语言

嵌入式开发是一项综合了硬件设计、软件编程以及系统整合的技术活动,其目的是为了创造出能够在特定环境中高效、稳定运行的嵌入式系统。这一流程涵盖了多个紧密关联且不可或缺的阶段,从最初的客户需求分析到最终的产品测试和交付,每个环...

关键字: 嵌入式开发 硬件设计

嵌入式开发作为一个融合了计算机软硬件和系统工程的综合性领域,其成功与否往往取决于三个核心要素的有效整合与协调。这三个要素分别是:硬件平台的选择与设计、软件开发及其优化、以及系统级的设计与集成。深入理解并熟练掌握这三个方面...

关键字: 嵌入式开发 ARM

嵌入式开发作为信息技术的关键支柱,在全球数字化转型浪潮中扮演着无可替代的角色。从传统的嵌入式微控制器到如今先进的片上系统(SoC),再到与云计算、人工智能深度融合的智能终端,嵌入式系统的演进与发展始终紧跟时代脉搏。本文将...

关键字: 嵌入式开发 智能应用
关闭
关闭