欢迎来到天天文库
浏览记录
ID:11545071
大小:143.50 KB
页数:24页
时间:2018-07-12
《基于ccd图像采集系统本科毕设论文.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
毕业设计(论文)基于CCD图像采集系统-22- 毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。作者签名: 日 期: 指导教师签名: 日 期: 使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。作者签名: 日 期: -22- 第1章绪论1.1课题景背近年来,随着工业的发展和安全意识的增强,对生产监测和控制的要求不断提高,在设备检测、安全监控、自动测量等工业测控领域,都需要有性能好、成本低、工作稳定、应用灵活方便的图像采集和处理系统。而CCD图像传感器正是目前常用的图像传感器之一。CCD是ChargeCoupledDevice的缩写,是一种光电转换式图像传感器。它利用光电转换原理把图像信息直接转换成电信号,这样便实现了非电量的电测量。同时它还具有体积小、重量轻、噪声低、自扫描、工作速度快、测量精度高、寿命长等诸多优点,因此受到人们的高度重视,在精密测量、非接触无损检测、文件扫描与航空遥感等领域中,发挥着重要的作用。20世纪70年代美国贝尔实验室的W.S.Boyle,G.E.Smith发现了电荷通过半导体势阱发生转移的现象,提出了电荷藕合这一新概念和一维CCD器件模型,同时预言了CCD器件在信号处理、信号储存及图像传感中的应用前景。近年来随着半导体材料与技术的发展,尤其是集成电路技术的不断进步,CCD图像传感器得到很大发展,性能迅速提高。同时CCD图像传感器的家族也在不断壮大。在原有的可见光CCD、红外CCD、微光CCD、紫外CCD和X射线CCD等各种CCD图像传感器的基础之上,90年代以来又出现了几种新的CCD图像传感器,例如:超级空穴堆积CCD、超高感度空穴堆积CCD、超级CCD和四色超级空穴堆积CCD。世界上CCD图像传感器主要由索尼、富士、夏普、柯达、松下和菲利浦六家公司所生产。国内CCD图像传感器的研制不够迅速,尚未形成大规模的生产能力,与国际先进水平还存在较大的差距[1]。1.2国内外文献综述四十年来,CCD器件及其应用技术的研究取得了惊人的进展,特别是在图像传感和非接触测量领域的发展更为迅速。随着CCD技术和理论的不断发展,CCD技术应用的广度与深度必将越来越大。CCD是使用一种高感光度的半导体材料集成,它能够根据照射在其面上的光线产生相应的电荷信号,在通过模数转换器芯片转换成“0”或“1”的数字信号,这种数字信号经过压缩和程序排列后,可由闪速存储器或硬盘卡保存即收光信号转换成计算机能识别的电子图像信号,可对被侧物体进行准确的测量、分析。含格状排列像素的CCD应用于数码相机、光学扫瞄仪与摄影机的感光元件。其光效率可达70%(能捕捉到70%的入射光),优于传统菲林(底片)的2%,因此CCD迅速获得天文学家的大量采用。传真机所用的线性CCD影像经透镜成像于电容阵列表面后,依其亮度的强弱在每个电容单位上形成强弱不等的电荷。传真机或扫瞄仪用的线性CCD每次捕捉一细长条的光影,而数码相机或摄影机所用的平面式CCD-22- 则一次捕捉一整张影像,或从中撷取一块方形的区域。一旦完成曝光的动作,控制电路会使电容单元上的电荷传到相邻的下一个单元,到达边缘最后一个单元时,电荷讯号传入放大器,转变成电位。如此周著复始,直到整个影像都转成电位,取样并数位化之后存入内存。储存的影像可以传送到打印机、储存设备或显示器。在数码相机领域,CCD的应用更是异彩纷呈。一般的彩色数码相机是将拜尔滤镜(Bayerfilter)加装在CCD上。每四个像素形成一个单元,一个负责过滤红色、一个过滤蓝色,两个过滤绿色(因为人眼对绿色比较敏感)。结果每个像素都接收到感光讯号,但色彩分辨率不如感光分辨率。用三片CCD和分光棱镜组成的3CCD系统能将颜色分得更好,分光棱镜能把入射光分析成红、蓝、绿三种色光,由三片CCD各自负责其中一种色光的呈像。所有的专业级数位摄影机,和一部份的半专业级数位摄影机采用3CCD技术。目前,超高分辨率的CCD芯片仍相当昂贵,配备3CCD的高解析静态照相机,其价位往往超出许多专业摄摄影者的预算。因此有些高档相机使用旋转式色彩滤镜,兼顾高分辨率与忠实的色彩呈现[2]。这类多次成像的照像机只能用于拍摄静态物品。经冷冻的CCD同时在1990年代初亦广泛应用于天文摄影与各种夜视装置,而各大型天文台亦不断研发高像数CCD以拍摄极高解像之天体照片。CCD在天文学方面有一种奇妙的应用方式,能使固定式的望远镜发挥有如带追踪望远镜的功能。方法是让CCD上电荷读取和移动的方向与天体运行方向一致,速度也同步,以CCD导星不仅能使望远镜有效纠正追踪误差,还能使望远镜记录到比原来更大的视场。一般的CCD大多能感应红外线,所以衍生出红外线影像、夜视装置、零照度(或趋近零照度)摄影机/照相机等。为了减低红外线干扰,天文用CCD常以液态氮或半导体冷却,因室温下的物体会有红外线的黑体幅射效应。CCD对红外线的敏感度造成另一种效应,各种配备CCD的数码相机或录影机若没加装红外线滤镜,很容易拍到遥控器发出的红外线。降低温度可减少电容阵列上的暗电流,增进CCD在低照度的敏感度,甚至对紫外线和可见光的敏感度也随之提升(信噪比提高)。温度噪声、暗电流(darkcurrent)和宇宙辐射都会影响CCD表面的像素。天文学家利用快门的开阖,让CCD多次曝光,取其平均值以缓解干扰效应。为去除背景噪声,要先在快门关闭时取影像讯号的平均值,即为"暗框"(darkframe)。然后打开快门,取得影像后减去暗框的值,再滤除系统噪声(暗点和亮点等等),得到更清晰的细节。天文摄影所用的冷却CCD照相机必须以接环固定在成像位置,防止外来光线或震动影响;同时亦因为大多数影像平台生来笨重,要拍摄星系、星云等暗弱天体的影像,天文学家利用"自动导星"技术。大多数的自动导星系统使用额外的不同轴CCD监测任何影像的偏移,然而也有一些系统将主镜接驳在拍摄用之CCD相机上。以光学装置把主镜内部份星光加进相机内另一颗CCD导星装置,能迅速侦测追踪天体时的微小误差,并自动调整驱动马达以矫正误差。-22- 1.1论文研究内容近年来,随着我国工业生产向着自动化、高效、安全的方向发展,实现对生产运行状况的实时监测以及精确控制的工业测控领域成为一个重要的研究领域。但是传统的测控方法效率低并且存在诸多的制约因素。新兴的CCD图像传感器具有体积小、灵敏度高、分辨率高、图像畸变小、无残像、抗冲击、耐震动、抗电磁干扰、能长时间工作于恶劣环境、使用寿命长、信息处理容易、与微机接口方便等诸多的优点,而且相比于CMOS图像传感器,CCD图像传感器在灵敏度、分辨率、噪声控制等方面都有明显优势,使得它更适合用于测量。由CCD图像传感器所构成的图像采集和处理系统能够安全高效地实现对生产状况的监测,为生产的精确控制提供必要的信息,因此在我国工业测控领域具有十分广阔的应用前景。另外由CCD图像传感器、光学系统以及计算机相结合组成的系统,能获取被测对象的更多的信息,实现快速、准确的非接触检测,显著提高测控技术水平和自动化程度,因此在尺寸测量、表面检测、温度测量和工业机器人视觉等工业测控领域得到了越来越广泛的应用。目前市场上用于工业测控的基于CCD图像传感器的图像采集和处理系统大部分来源于日本、美国和德国,例如日本Sony公司的XCD-910系统,美国Kodak公司的IMAGESTATION2000R系统。这些国外的系统不仅价格昂贵,而且内部技术保密,高度集成化,难于根据具体需要进行系统的调整或者升级,无法很好地满足我国工业生产的要求。而国内自主研发基于CCD图像传感器的图像采集和处理系统的机构和公司不多,只有少数几家公司推出过这种系统,像深圳国鼎科技、陕西维视、北京大恒图像等。而且这些公司的系统在技术上和质量上都有待提高,系统性能较低,图像分辨率尚未达到百万级,数据采集精度仅有8位,而且自动增益和自动补偿损害了图像信号的真实性,不适合用于工业测量。因此面对我国工业测控领域存在的巨大需求和现有自主技术开发上的薄弱,针对基于CCD图像传感器的高性能图像采集和处理系统进行研究,使之能对于我国的工业生产进行有效的测控,最大限度地保证产品的质量和生产的安全,并掌握其核心技术,积累必要的技术储备和经验,打破国外的技术垄断,不仅具有巨大的经济效益,同时具有更大的社会效益[3]。论文的主要研究内容是基于CCD图像传感器的图像采集系统进行了深入细致的研究,从总体方案设计、系统关键技术、系统的硬件设计和系统软件实现等几个方面,全面论述了系统的特点和功能。设计并实现了一个采用高分辨率面阵CCD图像传感器的图像采集系统。综合本文,主要工作包括:(1)制定了基于CCD的图像采集和处理系统的总体设计方案,进行了模块划分,分析了图像采集系统设计中的关键技术和解决方向。(2)-22- 针对系统控制时序的具体情况提出了采用MCU和CPLD相结合的实现方案,结合MCU、CPLD各自的器件特性,合理地利用MCU生成低频信号,CPLD生成高频信号,有效地实现了全局控制。(3)深入研究了CCD图像传感器的驱动时序信号,以CPLD器件为平台,采用Verilog语言,利用有限状态机的方法,实现了CCD图像传感器的正确驱动。本文的主要研究结构是第1章为绪论,简单介绍了CCD图像传感器发展现状,阐明了本文的研究意义,给出了主要研究工作和论文组织结构。第2章为图像采集和处理系统的整体阐述部分,阐明了系统总体设计方案,并对此方案的性能特点进行了说明,详细分析了系统实现中的关键技术,并对系统所采用的软硬件开发平台和相关开发工具进行了必要的介绍。第3章为图像采集系统的硬件实现部分。按照图像采集部分、图像处理部分、USB数据传输部分、其他接口部分的划分,逐一详细描述了各个部分的实现方案和电路设计,同时对系统设计中的抗干扰措施进行了总结,给出了系统整体的电路图。第4章为图像采集和处理系统的软件实现部分。详细研究了CCD图像传感器的驱动时序信号之间的配合和具体要求,采用CPLD和MCU相配合的方式实现了CCD图像传感器的驱动时序。结论部分对全文进行了概括性总结,并指出了本文的不足之处以及有待进一步研究的方向。-22- 第1章CCD图像传感器系统的总体设计1.1CCD图像传感器的结构和工作原理1.1.1基本结构CCD是在P型硅(或者N型硅)基体上,先生一层绝缘层,厚度约为1000A,再在绝缘层下淀积一系列间隙很小(小于0.3um)的金属电极(称为栅极)制成的。每一个金属电极和它下面的绝缘层及半导体硅基体形成一个MOS电容器,所以CCD基本上是由一系列的MOS电容器组成阵列。因为它们靠的很近,所以它们之间可以发生藕合。这样,被注入的电荷就可以有控制地从一个电容移位到另外一个电容,这样的转移过程,实际上是电荷藕合的过程,所以CCD被称作是电荷藕合器件。CCD是由光敏单元、转移结构、输出结构组成的一种集光电转换、电荷储存、电荷转移为一体的光电传感器件。其中,光敏单元是CCD中注入信号电荷和存储信号电荷的部分;转移结构的基本单元是MOS结构,它的作用是将存储的信号电荷进行转移;输出结构是将信号电荷以电压或者电流的形式输出的部分。1.1.2工作原理CCD既有光电转换功能,又具有信号电荷的存储、转移和读出功能,它能把一幅空间域分布的光学图像,变换成为一列按时间域分布的离散信号。因此,CCD的基本工作原理便是信号电荷的产生、存储、传输和检测[4]。1.1.2.1电荷的产生在CCD中电荷产生的方法有不少,归纳起来可以分为两大类:光注入和电注入。1.电子—空穴对其多数载流子被栅极电压排开,少数载流子光注入,当光照射到CCD硅片上时,在栅极附近的半导体内产生则被收集在势阱中形成信号电荷,CCD摄像器件的光敏单元就是光注入方式。2.电注入所谓电注入就是CCD通过输入结构对信号电压或者电流进行采样,将信号电压或者电流转换为信号电荷。电注入的方法很多,最常用的方法是电压注入法和电流注入法。1.1.2.2电荷的存储构成CCD的基本单元是半导体MOS结构(金属-氧化物-半导体)。如图2-1所示。在一定的偏压下,MOS结构成为可存储电荷的分立势阱。当在栅极上加正偏压UG后,半导体内的空穴被排空,产生耗尽区(此时UG小于半导体的阀值电压UTH)。当UG>UTH时,半导体与绝缘体表面上的电势如此之高,以至于将半导体体内的电子吸引到表面,形成一层极薄但电荷浓度很高的反型层,如2-1(c)所示。反型层的存在表明了MOS结构具有存储电荷的基本功能。-22- (a)(b)(c)图2-1半导体MOS结构示意MOS电容存储信号电荷的容量Q与栅极电压UG、栅极电极面积A和电容容量Cox有关,具体见(2-1)公式所示:Q=COXUGA(2-1)1.1CCD图像传感器的分类电荷藕合器件的功能是把二维的光学图像信号转换成为一维的视频信号输出。按照光敏单元的排列方式,CCD可分为两大类:线阵CCD和面阵CCD。1.1.1线阵CCD图像传感器线阵CCD中的光电转换(光敏区)和电信号转移(移位寄存器)分开为独立的两部分。移位寄存器部分由不透光的铝层覆盖,以实现光屏蔽,这样就可以避免砸在转移过程中由于感光而引起的图像不清。在光电转换部分完成电荷的积累之后,接通转移栅(也叫传递门),使积累的电荷迅速地转移到CCD的读出移位寄存器。然后,当光电转换部分再次开始电荷积累时,一定规则的时钟脉冲驱动电信号转移到输出端,经信号处理和放大后便可得到可用信号。单通道的线阵CCD由一列光敏阵列和一个移位寄存器组成,它的转移次数多,电荷包转移效率低。为了降低电荷包在转移时造成的损失,尽可能地减少转移次数,又提出了双通道型线阵CCD。这样,在相同的光敏单元的情况下,转移次数可以降低一半,故总的转移效率比单通道的高。1.1.2面阵CCD图像传感器面阵CCD成像,图像光线穿过透明多晶硅栅结构,被硅晶体结构吸收,产生电子空穴对。在积分周期,光生电子由象元收集。各象元收集的电荷总数是局部人射光强度和积分周期的线性函数。各象元产生的电荷在外部时钟的驱动下依次转移,形成原始的视频信号。常见的面阵CCD结构有帧转移和行间转移两种形式。帧转移型面阵CCD的工作过程:当光敏面接受图像照射后,经一定时间(积分时间),光敏区下的势阱内就积累和存储了一定的图像信号电荷,在光敏区和暂存区各自的转移栅脉冲作用下把电荷图像完整快速地转移到了暂存区;紧接着,光敏区开始积累第二帧图像信号电荷,与此同时,按存取的信号电荷在转移脉冲驱动下,一行一行地移至水平移位寄存器,并向外输出;一旦第一帧信号电荷全部读出,第二帧信号电荷又通过暂存区移入水平寄存器,实现连续的读出。行间转移型面阵CCD电荷藕合器件的感光行与垂直位移寄存器相间排列,由转移栅极控制电荷的转移和输出。其工作过程为:-22- 光敏面接收图像照射后产生图像信号电荷并存储在光敏区下面的势阱中,当积累到一定的信号电荷(经积分时间)时转移栅开启,把光敏区里的图像信号电荷转移到各自的垂直移位寄存器;当转移栅关闭后,光敏面继续积累图像信号电荷,垂直移位寄存器中的信号电荷在垂直转移脉冲驱动下向下移一位,紧接着水平移位寄存器在水平移位脉冲驱动下以极快的速度送至输出端输出,构成一行信号,如此重复直把刚才垂直移位寄存器中的所有信号电荷输出,此时才完成一帧图像信息的变换工作。帧行转移型面阵CCD电荷藕合器件是在行间转移型的基础上加上场存储区而构成的成像光照区完成光生电荷的积累,各像素单元的电荷包被快速转移到垂直位移寄存器中,紧接着又以极快的速度转移到场存储区中,再把场存储区的信号电荷依次输出,形成一场图像的电信号[5]。1.1CCD图像采集系统总体方案及特点图像采集系统是由光学系统、CCD图像传感器及其驱动模块、A/D采样模块、MCU和CPLD共同构成的核心处理模块、SRAM和Flash构成的外部存储器模块、USB数据传输模块等部分组成,如图2-2所示。在由MCU控制下的CPLD生成的驱动时序的作用下,CCD图像传感器采集被测物体的图像信号,完成光电转换,并将转换后的信号送入A/D,经过采样转化为数字化信号,这些信号可以暂时存储在SRAM存储器中,也可以直接经由USB接口传输给计算机进行显示和处理。该设计方案具有以下特点:1.采用模块化设计,可以缩小问题出现的范围,方便于调试,还可以通过更新其中相应的模块来改进系统性能或增加功能,使得系统具有可扩展性和很好的适应性。2.采用MCU和CPLD相结合作为系统的控制核心,参考了其各自的性能特点,对低频信号和高频信号分别加以实现,合理利用了器件资源,保证了系统工作的高效性。3.使用低成本、高性能的CPLD器件,不仅降低了系统设计成本,而且通过编程并下载程序,可以结合具体情况对其内部的硬件逻辑实现进行反复调整,也可以增加新的功能而不必更改电路的设计,具有很大的灵活性。4.采用JTAG接口,可实现在线编程,便于在调试中现场调整相关程序。图2-2CCD图像采集系统总体设计方案1.2CCD图像采集系统的关键技术分析根据本系统的特点,需要解决的关键技术主要有:1.图像传感器的驱动电路设计该系统采用的图像传感器是高分辨率的面阵CCD图像传感器,要使得该器件正常工作并获得高质量的图像,必须严格按照其驱动时序的要求给予合适的驱动信号,因此需要设计专门的驱动电路来实现这些驱动信号。-22- 2.信号采样电路设计由于要实现系统的高精度、高速的设计要求,采样芯片必须使用高速高精度的A/D。另外,该部分的时钟信号也必须同CCD图像传感器部分的驱动信号配合起来,这样才能切实采集到正确的图像信号。因此如何使用高速高精度的A/D准确采集到需要的图像信号将是本文研究的重点。3.核心处理模块设计设计中采用MCU和CPLD共同作用来实现整个系统的核心处理。针对MCU和CPLD各自的器件特性,由MCU负责实现系统时序控制中的低频信号,CPLD则负责实现其中的高频信号。为了整个系统功能的实现,必须保证这些信号之间的严格同步和有序配合,因此细致编程设计实现该部分时序控制将是本文最终能否达到既定目标的关键。4.数据传输电路设计由于系统中的图像数据传输需要满足较高的速率,因此在设计中采用USB器件来实现[6]。1.1本章小结本章简单介绍了CCD图像传感器的结构和工作原理以及分类,提出了该系统的总体实现方案,阐明了此方案的性能特点,并对系统实现中的关键技术做了分析。-22- 第1章CCD图像采集系统的硬件设计1.1CCD图像传感器及其驱动模块本文选用的CCD传感器是Sony公司的高速面阵型CCD芯片ICX205AL,该CCD的对角线长8mm,是一款行间转移型CCD,有效像素达到1.45M,具有分辨率高、灵敏度高、转移速度快、暗电流小、图像失真度小等优点,十分适合检测中使用。另外芯片中设有电子快门,可以在没有机械快门的情况下实现灵活的曝光时间控制,使用非常方便[7]。ICX205AL芯片由感光阵列、垂直移位寄存器、水平移位寄存器和输出放大器四个主要部分组成。其中,V1、V2A、V2B、V3是垂直寄存器转移时钟,Hl、H2是水平寄存器转移时钟,SUB是衬底时钟,RG是重置门限时钟,这些信号都要由驱动时序发生器来产生;VDD是供应电压,GND为参考地,又为保护性晶体管偏置,这些电压由外加电源产生;CSUB为衬底偏置;VOUT是输出信号。CCD图像传感器及驱动模块电路图如3-1所示。图3-1CCD图像传感器及驱动模块电路1.2系统的核心部分本系统以较高的速度工作,若使用微控制器(MCU)来实现系统处理则速度太慢,明显满足不了设计要求;若是采用一片复杂可编程逻辑器件(CPLD)来实现整个系统处理,则会因为有些变化较慢但是分支较多的低频信号的存在而使所需要的逻辑单元数急剧增多。为此,本课题中决定采用MCU和CPLD相结合作为系统核心处理器的实现方案。把那些变化速度慢的低频信号从其它的高频信号中分离出来,交给MCU处理,而CPLD只需使用MCU的处理结果即可。这样一来,可以使CPLD集中处理高频的信号,也大大减少了所需的逻辑单元数。1.2.1MCU芯片本文选用的MCU芯片是TI公司的MSP430F149芯片。该芯片除了具有MSP430系列芯片的超低功耗、处理功能强大、系统工作稳定、工业级适用和开发环境方便高效等优点之外,还具有60KB的FlashMemory,2KB的RAM,并且片内集成了一个12位的A/D转换器、两个串行通信接口、一个硬件乘法器和两个具有捕获/比较功能的16位定时器。所有这些资源,对于实现系统设计的功能都是十分有利的[8]。MCU电路图如图3-2所示。图3-2MCU电路设计图-22- 该芯片的具体特点如下:1.低电源电压范围:1.8~3.6V;2.超低功耗;3.5种省电模式;4.16位RISC结构,125ns指令周期;5.带内部参考,采样保持和自动扫描特性的12位A/D转换器;6.有7个捕获/比较寄存器的16位定时器Timer_B;7.有3个捕获/比较寄存器的16位定时器Timer_A;8.片内集成比较器;9.串行在线编程,无须外部编程电压,安全熔丝可编程代码保护;10.可用封装:64脚QFP和64脚QFN.1.1.1CPLD芯片本系统采用的CPLD芯片是Lattice公司的ispMACH4000系列中的ispMACH4256V.该芯片拥有从32到512个宏单元的6中逻辑密度选择,以及不同的高级封装和I/O选择,该系列的I/O数目范围从30到208.对于许多粘合逻辑,状态机,译码器,桥接,上电及信号握手功能,这些器件提供了最佳的逻辑实现,因而其被广泛应用于高性能计算机,通信和工业应用。ispMACH4000系列的主要特点如下:1.采用先进的SuperFast体系结构[9]该体系成功地将ispLSI2000系列的高速度和MACH4A系列的灵活性糅合到一起,在一个体系结构中实现了高性能,低功耗和主流的密度。目前,ispMACH4000系列的速度已经达到400MHZ,传播延迟仅有2.5ns,逻辑密度可达512个宏单元,I/O数目可达208个。该系列还实现了超低功耗。2.器件可选择度大提供从32个到512个宏单元;I/O引脚的数量从30个到208个;拥有从44个到256个引脚的TQFP、CSBGA和FPBGA三种不同类型的封装;提供多种温度范围支持:商业级的适用温度范围为0~90摄氏度;工业级的适用温度范围为-40~50摄氏度;自动化级的适用温度范围为0~130摄氏度。所有这些,用户都可以根据自身设计的需要来选择具有合适参数的器件。3.开发设计方便宏单元具有独立的时钟、重置、预置和时钟使能控制;具有多达4个的全局使能控制;每个I/O口还具有独立的局部使能控制。逻辑模块还包含36个输入和80个输出单元,同时还有一个三层逻辑分配器以方便用户进行灵活性和速度的折衷,如采用5个乘积项用于快速路径,20个乘积项用于高速度数据路径锁定,或80个乘积项用于带宽路径等。多达36个的输入逻辑模块对实现快速计数、状态机和地址解码器等十分有利。本课题选用的芯片ispMACH4256V是一款工作在3.3V电压上的高性能CPLD芯片,该芯片由万能逻辑模块(GLB)、输入输出单元(IOC)、全局布线区(GRP)和输出布线区(ORP)四大部分组成。其中,GLB-22- 用于实现主要的逻辑功能;IOC用于I/O引脚和内部逻辑结构的信号连接和接口匹配;GRP是芯片内部的连线资源,IOC到GLB以及GLB之间的信号连接都是通过它实现;ORP负责GRP输出信号到IOC的连接,利用它可以改变GLB输出线到引脚之间的连接,实行引脚定义功能,增加设计的灵活性。CPLD的电路设计图如图3-3所示。图3-3CPLD电路设计图1.1A/D模块本系统采用AD公司的12位ADC芯片AD9225来进行信号采样。该芯片的采样速度可达25MSPS,功耗仅有280MW,采用单电源+5V供电;微分非线性误差为±0.4LSB,线性度很好;信噪比可达71dB,抗干扰能力强电路设计图如图3-4所示;另外,芯片内部已经集成了采样保持放大器和电压参考,这些都为设计使用带来了方便[10]。图3-4A/D采样模块电路设计图该芯片也允许选择使用外部的参考电平;芯片设计中采用了多级微分传递结构,并且还带有数字输出误差纠正体系,这些都确保了在高速情况下仍能提供12位的精确分辨率,同时在整个操作温度范围内杜绝丢码情况的发生。由一个单一的时钟输入来控制所有的内部转换的周期,使得整个转换过程严格按照时序进行。CCD的输出波形是模拟电压信号,而A/D采样的功能就是把对应于CCD上,每个像素的模拟电压信号数字化。为了实现严格的采样对应关系,AD芯片的时序必须同CCD的时序相一致。在CCD输出的信号送入A/D进行采样之前,为了保证信号的质量,将经过必要的低通滤波和放大环节,这些都是由专门用于测量的高质量的OP37放大器芯片来实现的。另外,为了系统调试的方便,特意在A/D输入之前加了另外一路专门用于测试的输入,用可调电阻得到一个介于0V和+5V之间的电压,这路输入可以用来测试A/D采样的线性度情况。1.2外部存储器模块外部存储器模块包括一个用于存储系统上电初始化相关参数设置和程序的Flash存储器和一个用于暂存CCD所采集的图像数据的SRAM存储器。1.2.1Flash存储器结合系统设计的具体需要,本文最终采用Microchip公司的24LC-22- 64芯片作为Flash存储器。该芯片采用8k×8bit的存储模式,是一款低电压、低功耗的Flash存储器,最高工作频率可达400kHz,可擦写1000000次以上,数据可保存加200年,采用两线的串行接口总线,跟I2C总线兼容。1.1.1SRAM存储器本系统采用Cypress公司的CY7C1463AV33芯片作为SRAM存储器。该芯片采用2M×18bit的存储模式,3.3V供电,可以支持高达133MHz的总线操作并且无总线延迟,具有低功耗休眠模式[11]。本系统中的面阵CCD所采集的一幅图像的数据规格为1M×12bit,所以采用该SRAM存储器完全可以满足图像暂存的需要。该芯片的电路设计图如图3-5所示。CY7C1463AV33芯片的各个操作:1.CE1,CE2,CE3是芯片使能控制端;2.ZZ是睡眠模式控制端;3.ADV/LD是地址连续或者重新装入控制端;4.WE是写操作使能控制端;6.OE是输出使能控制端;7.CEN是时钟使能控制端;8.CLK是时钟输入端。图3-5SRAM存储器电路设计图1.2USB数据传输部分1.2.1USB芯片的选型进行USB设备的开发时,首先要选定一款合适的USB接口芯片。正确的选择USB芯片,可以在大大地缩短产品的开发周期。对于芯片的选择主要可以从下面几个方面来考虑[12]:1.USB芯片的传输速率在选择芯片时并不是传输速率越快越好,因为芯片的传输速率越快,价格也就越高。另外,若选择芯片的传输速率过高会占用USB总线的带宽,从而造成对总线带宽的浪费,也会影响连接到主机上的其它USB设备的传输速度。因此,在选择芯片时应当根据具体的应用所需要的传输速率来做选择,做到量体裁衣。2.USB芯片的硬件资源不同的USB芯片提供的硬件资源不同。有的USB芯片内部带有MCU,有的芯片则必须在外面加MCU;不同的芯片片内的存储器容量、I/0口类型和数量也不一样。3.USB芯片的功耗-22- 功耗对很多设备来说都是一个值得注意的问题。如果设备的功耗低,那么就可以采取总线供电的方式,这样就可以省去外置电源。4.USB芯片的开发工具包在设计开发过程中,良好的开发工具包可以在很大程度上方便系统的软硬件调试,加快系统的开发进度,缩短开发时间。有的工具包还提供了芯片的固件的范例、设备驱动程序和应用程序源代码,使开发人员能更快更方便地对系统进行开发。5.USB芯片的价格为节约成本,要尽量选择性价比高的芯片。对于本系统的设计,由于图像的数据量很大,要进行图像数据的传输必须使用480Mbps的高速传输才能满足要求,所以要选择能够支持高速传输的USB芯片。在硬件资源上,选择了带有MCU的USB芯片,较大的存储器也可以方便系统的开发。本文所选择的芯片CY7C68013,完全符合传输速度和硬件资源上的要求。另外,CY7C68013的开发工具包提供了丰富的固件程序源代码,并且其指令与8051系列单片机兼容,可以使用Keilc对固件进行开发,使开发变得非常方便。工具包还提供了驱动程序源代码、应用程序源代码以及调试软件,可以为开发提供了很好的参考。CY7C68013的价格适中,不会过多的增加开发成本。1.1.1模块电路设计CY7C680l3是Cypress公司推出的EZ-USBFX2系列产品之一,其电路设计图如图3-6所示。Cypress公司的EZ-USBFX2系列产品是世界上第一款支持USB2.0协议的微控制器。它支持12Mbps的全速传输和480MbPs的高速传输,可使用全部的USB传输方式。CY7C68013内部集成了USB2.0收发器、智能串行引擎(SIE)、增强型8051控制器、通用可编程接口(GPIF)、8.5KB的RAM和4KB的FIFO存储器,具有很高的性价比。FXZ系列的独创性设计最大限度的满足了USB2.0的总线带宽,而它的内部使用的仍是低成本的8051控制器[13]。图3-6USB数据传输模块电路设计图下面对CY7C68013芯片内的主要部分的简单介绍:1.增强型8051内核CY7C68013中的增强型8051与标准的8051相比,具有更快的速度、更强的功能,且其指令集和标准8051完全兼容;该内核的一个总线周期为4个时钟周期,而标准8051的一个总线周期由12个时钟周期组成;增强型8051的默认工作频率为48MHz,需要在芯片外部接24MHz晶振,经过内部振荡电路和锁相环(PLL)倍频电路,产生48MHz的时钟;CY7C68013内部8.5KB的RAM可以兼做程序存储器和数据存储器,增强型8051的固件代码就存储在该区域内;固件代码可以通过USB总线下载,也可以通过I2C总线从外部EEPROM下载。-22- 2.智能串行引擎(SIE)CY7C68013芯片内串行接口引擎负责完成USB协议的有关功能,包括数据的编解码、差错控制、位填充等。这样就将MCU(增强型8051)解放出来,从而简化了固件代码的开发。3.通用可编程接口(GPIF)在CY7C68013中还有一个通用可编程接口(GPIF),它支持几乎所有通用的总线标准,可以由软件来编程输出读写控制波形。4.FIFOCY7C68013中有一个大小为4K的FIFO存储器,USB接口和外围电路直接共享这个FIFO存储器。图3-7为FIFO的传输模式示意图。从图中可以看出,与外围电路的数据传输可以在没有8051固件干涉的情况下完成,8051也可以通过FIFO或RAM的方式访问所传输的数据FIFO存储器与USB之间的传输是以数据包的形式实现的,而不是一次只传输1字节,这种处理被称为“量子FIFO”,它较好地解决了USB高速模式下的带宽问题,非常适合于大容量的数据传输。如果芯片钟频率为48MHz,使用FIFO存储器进行数据传输,最高速率可以达到96Mbyte/s。图3-7CY7C68013芯片的FIFO传输模式特别是,CY7C68013的端点FIFO和SlaveFIFO的缓冲区组合在一起,且每个缓冲去都可以设置多种缓冲以匹配器件间的速度差异,这样不仅节省了内部数据之间传递的时间也大大提高了主机与外设的速度。1.1接口部分系统中CPLD和MCU的控制程序都是通过JTAG接口下载,电路设计时分别采用了单排8针底座和双排14针底座,可以方便的同它们各自的下载电缆相连,实现系统的在线编程。电路中还设计了一个双排14针接口,一个双排18针接口和一个双排20针接口作为测试接口,引出MCU,CPLD和A/D之间的重要信号,便于用示波器进行测试,也便于为其他部分提供相应的工作信号[14]。电路图如3-8所示。图3-8接口模块电路设计图1.2抗干扰高频会产生辐射和干扰,快的跳变沿会引起信号的反射和交叠,如果在设计时没有注意到这些,引起的噪声势必会严重影响系统的性能。即使干扰不能完全消除,也要尽量将其减少到最小。产生干扰的因素有如下几点:-22- 1.电压电源电压越高,意味着电压幅度越大而发射就更多,但是低电源电压又会影响敏感度。2.接地在电路设计中,接地问题十分重要。有三种信号接地的方法:单点、多点和混合。在频率低于1MHz时可以采用单点接地的方法;在高频应用中,最好采用多点接地法;混合接地是低频采用单点接地而高频采用多点接地的方法。地线的布局是关键的一步,高频数字电路和低频模拟电路的地回路不能混合。3.PCB板设计适当的印刷线路板布线对于整个系统的性能是至关重要的。对于重要的地线、电源线、晶振线和一些信号线,要采用手工布线的方式。4.频率高频会产生更多的发射,周期性的信号也会产生发射。在高频的数字系统中,但器件开关时产生电流尖峰信号;在模拟系统中,当负载电流发生变化时也会引发电流尖峰信号[15]。5.电源器件开关时,在电源线上会产生瞬态电流,必须衰减和滤掉。高的瞬态电流会导致地和导线发射电压,流经导线的电流变化和电感会导致不必要的压降,减小电感和电流变化可以使该压降降低。针对上述干扰产生的原因,系统设计中采用了多种抗干扰措施,主要包括如下几点:(1)合理布局,系统中的模拟电路部分和数字电路部分尽量分开布局,使其中的信号线之间减少干扰。(2)模拟地和数字地分别连接,并最终在AD芯片处共地,这样的处理巧妙利用了AD芯片自身结构设计中的优势,效果最为理想。(3)PCB设计中采用手工布线,合理分配信号的走向。尤其是对系统性能影响较大的重要线路,如电源线、地线、晶振线等处仔细布线。(4)在一些信号线上加上匹配电阻,减小尖峰电流的冲击带来的影响。(5)在芯片的供电电源和地之间加上合适的电容进行解藕处理。(6)尽可能地缩短连接导线的长度,这有赖于PCB板布局规划的合理程度。1.1本章小结图像采集系统的硬件设计是系统功能实现的基础,对整个系统的设计成败起着决定性的作用。本章按照图像采集部分、图像处理部分、USB数据传输部分以及其他接口部分,这一划分详细说明了各组成部分具体的硬件实现方案和电路设计,总结了系统设计中的抗干扰措施,并给出了系统整体的电路图。-22- 第1章CCD图像采集系统软件设计1.1CCD图像传感器驱动时序在CCD的应用中,必须首先解决其驱动时序产生的问题。CCD的驱动时序信号多样、复杂,需要多种电平驱动。此外,只有在合适的驱动时序信号作用下,CCD的信号处理能力、转换效率和信噪比等光电转换特性才能达到其性能的最佳值,输出稳定可靠的视频信号。因此,产生严格精确的CCD驱动时序是成功应用CCD的关键。面阵CCD的驱动时序的整个工作周期含有两类周期:启动周期和转移周期。启动周期实现残留电荷的清除和感光阵列所积累的电荷向垂直移位寄存器的转移,这也代表着整个CCD工作周期中电荷读出的开始;转移周期则完成电荷从垂直移位寄存器到水平移位寄存器的转移以及水平移位寄存器内的电荷向输出放大器的输出。1.1.1启动周期中的驱动时序关系分析HD是一个引发其它复杂时序的简单控制信号一行同步信号,它控制的是一行图像的电荷信号的输出过程。CLK是该面阵CCD的基准时钟信号,其频率为14.318MHz,其周期T为69.8ns,这也就是整个CCD驱动时序中的基准周期。在行同步信号HD的作用下,首先,在V1、V2A、V2B、V3的控制下,感光阵列的1050列所对应的1050个垂直移位寄存器都进行一次电荷转移,将之前残留下来的电荷彻底清除,为紧接着的下一步做好准备;然后,V2A、V2B形成一个时间长度为50个基准周期T的读出时钟脉冲,并以此脉冲来启动感光阵列所积累的电荷向其每列所对应的垂直移位寄存器的转移。各个驱动时序信号的脉冲时间长度均按驱动时序中要求,而且整个启动周期,也即一个HD信号的周期T1与基准周期T之间满足:T1=1790T。1.1.2转移周期中的驱动时序关系分析CLK就是前面已经提到过的基准时钟信号;SUB,衬底选通信号,接通垂直移位寄存器和水平移位寄存器之间的通道,使得垂直移位寄存器中的电荷信号能够顺利转移到水平移位寄存器中;RG,重置门信号,在输出一个电荷信号之前,清除水平移位寄存器中的残余电荷,将输出放大器的电荷探测端复位到参考电平,其频率直接决定CCD电荷信号输出的频率。转移周期中的驱动时序关系分析如下:依然在行同步信号HD的作用下,首先是在H1、H2保持为一低一高反相电平的情况下,水平移位寄存器中形成了一个个可以保存电荷的势阱。与此同时,在启动周期后期中从感光阵列转移到每个垂直移位寄存器中的一列电荷,在V1、V2A、V2B、V3-22- 的控制下,由上向下移动一位,并且SUB选通信号也配合着上述四个信号出现一个脉冲,将垂直移位寄存器和水平移位寄存器之间的通道接通,这样,每列电荷中的一个电荷就从垂直寄存器转移到水平移位寄存器中与之相对应的势阱中。并且,为了使得电荷信号尽量充分转移到势阱中,H1、H2的电平保持时间要明显长于垂直移位寄存器中电荷转移一位所需要的时间。至此,面阵CCD的一行感光像元所积累的电荷就经过垂直移位寄存器转移到了水平移位寄存器中。接下来,H1、H2以同基准时钟信号CLK相同的频率做脉冲信号,其中,H1与CLK同相,而H2与CLK反相。这就使得它们控制下的水平移位寄存器由右向左地将其中的一行电荷信号一位一位地移出,一个H1、H2周期对应着移出一个电荷。同时,RG信号也配合着H1、H2残余电荷,以相同的频率,在水平移位寄存器移出每一个电荷之前,清除其中的将输出放大器的电荷探测端复位到参考电平。下降沿,一行电荷信号中的一个就从水平移位寄存器移出这样,在H2信号每个经过输出放大器得到输出信号,直到一行电荷信号全部输出,一个转移周期结束。接着是下一个转移周期,再输出一行CCD的感光像元所积累的电荷。以此类推,直至所有行都输出完毕。类似地,CCD就可以在驱动时序信号的作用下,将其采集到的图像信号一行行地从垂直寄存器转移到水平寄存器,然后再一个个地输出。CCD上的1040行电荷信号都如此输出后,由CCD所采集的一幅图像的输出也就完成了。1.1驱动时序实现一般以往的情况下,CCD的驱动会采用普通数字电路芯片驱动、EPROM驱动或者MCU驱动来实现。普通数字电路芯片驱动法,成本低,设计简单,但是电路集成度低,调试困难,并且器件延时较大。EPROM驱动法,结构简单,调试方便,但是电路所占面积仍然较大。MCU驱动法虽然可实现硬件电路的软件化,但是受其晶振频率的限制,工作频率较低,而且还存在资源浪费较多的缺点。近些年来,随着半导体技术的进步,CPLD因其在集成度、速度、稳定性、设计周期、开发灵活度等方面的优势,成为数字应用领域的首选。由于CPLD具有可擦除、可编程能力,电子电路设计完成之后,如果因某些原因要进行设计修改时,只需将其内部逻辑电路重新编程即可,不用在硬件上进行修改,更不需要重新设计PCB。这些特点都有利于设计开发[16]。本文采用的是将MCU和CPLD相结合的方法来实现CCD的驱动时序。首先将CCD驱动时序中所涉及的驱动信号按以下原则分为两类:第一类是运算量大或者变化在微秒级的信号;第二类是有严格对应关系或者变化为纳秒级的信号。帧同步信号VD和行同步信号HD被归入第一类;CCD驱动时序中除了VD和HD之外的其它信号则都归入第二类。然后据此分类,采用不同的芯片来实现。对于第一类信号,用MCU来实现;-22- 第二类信号则由CPLD来实现。选定的MCU芯片MSP43OF149,其工作频率可以满足第一类驱动时序信号的要求。MCU产生VD和HD信号后,再将其送入CPLD。CPLD在这些信号的基础上,再产生其他复杂的驱动时序信号。下面将针对MCU和CPLD各自的实现做具体的说明。1.1.1MCU实现部分MCU要实现的部分包括曝光时间的设定,低频驱动时序信号VD和HD的产生等,其软件流程图如图4-1所示。MCU首先从外部读入曝光时间的设定值,进行一定计算后放入相应的寄存器;然后根据获得的数据发出VD和HD控制信号[17]。图4-1MCU实现部分的软件流程图1.1.2CPLD实现部分CPLD负责实现上述面阵CCD驱动时序中的高频信号,包括V1、V2A、V2B、V3、H1、H2、SUB和RG。为了保证这些信号之间的严格同步,需要将一个外部时钟源信号输入到CPLD中,其产生的所有信号都要以这个外部时钟信号CLK作为基准。同时,这些信号还要受到MCU产生的VD和HD信号的控制。该部分的面阵CCD驱动时序关系复杂,这使得CPLD的设计规模较大,复杂程度高,很难用常用的原理图输入的方式来实现设计,而必须采用更抽象层次的描述方法,采用自顶向下的设计。Verilog硬件描述语言就可以实现高抽象复杂逻辑的设计,实现硬件设计的软件化。相比与另外一种硬件描述语言VHDL,Verilog语言具有更容易学习和理解的优点。本文就是采用Verilog硬件描述语言来进行CPLD的设计开发,结合Lattice公司与CPLD芯片相配套的专门软件ispLEVER作为开发平台,可实现CCD驱动时序设计的设计输入、设计实现和设计验证三个步骤,开发方便,调试和修改灵活。用Verilog语言来描述面阵CCD的驱动时序关系时,首先要定义驱动时序发生器的输入输出端:3个输入端,即基准时钟信号(CLK),帧同步信号(VD),行同步信号(HD);10个输出端,即前面驱动时序分析时提到的面阵CCD正常工作所需的10个驱动时序信号[18]。CCD驱动时序发生器的逻辑结构如图4-2所示。图4-2CCD驱动时序发生器的逻辑结构CCD的整个驱动时序关系实质上是两重嵌套的循环,设计中采用有限状态机来实现。其工作周期包含两类周期:启动周期和转移周期,这构成一个外循环。整个工作周期中有1个启动周期和至少1059个转移周期,它们之间通过MCU所产生的VD信号联系起来。其中,启动周期大体分为电荷清除、电荷读出到垂直移位寄存器两个阶段,这构成一个内循环。为了精确实现驱动时序信号,该内循环又被细分为0~11共12个状态[19]。同理,转移周期大体分为电荷并行转移到水平移位寄存器、电荷串行输出两个阶段,这也构成一个内循环。该内循环也根据驱动时序关系图被细分为0-22- ~7共8个状态。两个循环过程均通过对输入的基准时钟CLK进行分频、计数来控制。整个CCD驱动时序的实现程序中[21],在外循环中,通过主计数器,判断出此时是启动周期阶段还是转移周期阶段,并将相应的标识变量置位或者清零;在内循环中,通过外循环中的标识变量和次计数器以及上一个状态的情况,得到此时所处的状态,并据此,对所涉及到的驱动时序信号进行相应的处理,得到需要的驱动时序转移周期的状态转移如图4-3所示。其中,flag2是引入的一个标识变量,flag2=1是表示已经经过初始化阶段,可以进入状态转换了num是用来记录已经经过多少个转移周期的计数器,当num=1067时,表示一个工作周期结束了,可以进入下一个工作周期的启动周期。启动周期的状态转移与此相似,这里就不再累述[22]。图4-3转移周期的状态转移在进行了Verilog语言描述和编译之后,利用Lattice公司的ispLEVER软件进行驱动时序发生器的功能仿真,并针对Lattice公司的LC4256V芯片进行硬件适配,以验证设计的最终可行性[20]。1.1USB数据传输要实现USB数据传输,必须要完成USB固件程序设计、USB驱动程序设计和主机应用程序设计。1.1.1USB固件程序设计固件与硬件设备紧密相连,没有固件的参与和控制,硬件设备只是芯片的简单堆砌,无法实现预期的功能。USB设备的正常工作也同样离不开固件的参与,虽然USB的控制芯片已经相当智能化了,但是也不可能完成所有的工作,还需要编写固件程序来辅助硬件。USB设备固件程序主要功能涉及以下几个方面:1.初始化工作,包括设置一些特殊功能寄存器的初值以实现所需的设备属性或功能,如开中断、使能端口、设置端口等。2.辅助硬件完成设备的再枚举过程,包括模拟设备的断开与重新连接,对接收到的设置包(Setup包)进行分析判断,以便对主机的识别请求做出适当的响应,完成主机对设备的配置任务。3.响应中断,并对中断进行相应的处理。USB设备在设备枚举、响应主机标准请求和厂商请求、数据传送等动作过程中都会申请中断,因此固件程序必须正确处理这些中断才能保证USB设备的正常运行。4.数据的接收和发送。USB设备的主要任务就是进行数据的接收和发送,因此固件程序必须要对接收和发送数据的端点进行正确的配置及控制,才能使得接收和发送数据正确进行。-22- 5.对外围电路的控制。如果USB设备接收数据,在收到数据后需要进行相应的操作,这就要求USB对其外围电路进行控制。如果USB设备发送数据,那么它也要控制外围电路,从外围电路获得数据,并将数据发送给主机。所以,固件程序中包含对外围电路进行控制的代码是必须的[21]。Cypress公司为了便于开发者缩短开发周期,提供了EZ-USBFXZ系列USB芯片的固件程序框架。固件程序框架可以实现芯片的初始化、处理USB标准设备请求和电源挂起管理等功能。开发者只需要在这个框架内针对自己的实际应用做一些修改就可以高效地完成固件程序的开发。1.1.1USB驱动程序设计USB驱动程序是标准的WDM(WindowsDriveModel)型驱动程序。WDM型驱动程序是内核程序,与标准的Win32用户程序不同,是分层的驱动程序。也就是设备驱动被分成了若干层,典型地分:高层驱动程序、中间驱动程序、底层驱动程序。每层驱动再把I/O请求划分成更简单的请求,传给更下层的驱动执行。最底层的驱动程序在收到I/O请求后,通过硬件抽象层,与硬件发生作用,从而完成I/O请求工作。即用户不需要直接与硬件打交道,只需通过下层驱动程序提供的接口访问硬件。因此,USB驱动程序不直接与硬件对话,仅靠创建URB(USBRequestBlock)并使用USB驱动程序接口(USBDI)将URB提交给总线驱动程序就可完成硬件操作。但是,USB驱动程序必须定义与外部设备的通讯接口和通讯数据的格式,也必须定义与主机应用程序的接口。开发USB驱动程序的方法主要有以下3类:1.采用DDK直接开发。DDK是微软提供的驱动程序开发工具,它提供了创建WDM驱动程序的开发环境,包括驱动程序的头文件、库函数、源代码、各种工具和文档,以及范例代码和函数说明等,用它开发出来的驱动程序可以跟Windows操作系统结合得非常紧密。但是DDK基于汇编语言的编程方式和内核模式的调用,涉及到深层的USB协议,需要深厚的理解和编程功力,对初学者来说难度较大,也不适合短期的USB开发。2.借助专门的驱动开发工具。目前用的比较多的主要有NuMega公司的DriverStudio和Jungo公司的Windriver两大系列。这类开发工具都给用户提供了驱动程序的开发框架,人性化的操作界面引导用户完成设备驱动程序开发的整个流程,而用户不必了解内核机制,大大加速了USB外设的开发。属于比较通用的驱动开发。3.利用器件自带的开发工具包。一些USB器件生产商,例如Cypress公司,在其USB器件的开发工具包中已经集成了通用驱动程序,该程序只要较少修改便可拿来使用,使用起来十分容易和方便,可以大大节省开发时间。本文就是采用最后一种驱动程序开发方案,利用Cypress公司提供的通用驱动程序CyUsb.sys进行USB驱动程序的设计,该驱动程序支持任何传输类型与USB进行通信,使用时只需根据设定的PID/VID修改相应的cyusb.inf文件即可,可以绕过繁冗的底层代码编写,节省了开发系统的时间[22]。-22- 1.1.1主机应用程序设计主机应用程序是系统与用户的接口,主要实现设备的调用,设置USB数据传输的端口,采集到的数据的存储、显示以及数据传输速度的测试和数据完整性的校验。本设计采用VisualC++6.0作为应用程序的开发工具,利用Windows应用程序接口(API)函数实现设备驱动和应用程序之间的相互通信。用于控制USB设备读写及相关操作的API函数主要有:CreateFile()、ReadFile()、WriteFile()、DeviceIoControl()和CloseHandle()。其中,CreateFile()用于创建或打开一个USB设备并返回设备句柄;ReadFi1e()用于从设备方读取数据到内存;WriteFile()用于将内存中数据发送给设备;DeviceIoControl()用于向设备驱动程序发送控制代码,应用程序主要使用此函数实现对设备的操作;CloseHandle()用于关闭设备句柄。主机应用程序在下载USB固件程序、读取USB设备的描述符、读写数据时,首先都会调用CreateFi1e()函数。如果CreateFile()函数打开设备,则会返回设备的句柄。在CreateFile()函数成功返回之后,应用程序就可以调用DeviceIoControl()函数与USB设备驱动程序进行通信了。DeviceIoControl()函数的调用要复杂些,从USB设备读取或者向USB设备写入的内容不同,其调用的代码也不同。从USB设备读取还是向USB设备写入,具体的数据内容又是什么,这些都由DeviceIoControl()函数的第二个参数dwIoControlCode来区分。当DeviceIoControl()函数返回后,就可以调用CloseHandle()函数来关闭设备了。CloseHandle()函数的调用非常简单,只有一个参数,即设备的句柄。主机端应用程序充分运用多线程的编程思想,实现了数据的双向传送和实时显示功能,并保证了应用程序和USB设备之间数据传输的稳定性。异步传输数据的方法:BeginDataXfer()/WaitForXfer()/FinishDataXfer()文件保存:运用C++的ofstream对象来实现文件的写操作读写线程分离:图像数据的采集和控制命令的输入不会互相干扰,能独立同时进行。数据校验:保证数据传输的准确和安全。速度测试:程序中的传输速度分两种,即表观速度和接口速度。表观速度中的传输时间包括传输数据、显示数据以及程序做其它动作所消耗的时间。而接口速度中传输时间则只考虑了传输数据所消耗的时间。代码实现上,表观速度的传输时间是用毫秒级的定时器计时的。而接口速度的传输时间则是用纳秒级的CPU时间戳计时的;在每一次传输开始前和结束后记下时间戳,不断累加两者之差,从而达到只测传输数据时所消耗的时间的目的[23]。1.2本章小结-22- 本章在图像采集和处理系统的硬件平台的基础之上,进行了相关的软件设计。仔细研究了CCD图像传感器的驱动时序信号,对它们相互之间的关系和各自具体的要求都进行了详细分析,以此为依据,采用MCU和CPLD相结合的方式实现了CCD图像传感器的驱动。在USB数据传输部分,从固件程序设计、驱动程序设计和主机应用程序设计三个方面全面阐述了具体的设计实现。。-22-
此文档下载收益归作者所有
举报原因
联系方式
详细说明
内容无法转码请点击此处