基于USB2.O的CMOS图像采集系统的设计
扫描二维码
随时随地手机看文章
O 引言
CMOS图像传感器与CCD图像传感器相比,具有功耗低、集成度高,便于采用高速的并行读取体系等优点,因而在图像传感、天文观测、星敏感器等领域得到广泛应用。目前图像采集主要基于PCI总线或其他传统接串并口图像采集系统进行数据传输,它们存在着功耗高,安装复杂,价格昂贵等缺点。在实现对高分辨率图像传感器无丢失的数据传输过程中,USB2.O接口以其即插即用、扩展性强、传输速度高达480Mbps等优点,能够满足快速传送大批量数据要求。
因此,高分辨率的CMOS图像传感器和高速USB总线技术为图像传感技术的改进应用提供了必要的条件。解决了以往低分辨率图像传感器像源失真,稳定性能差等缺点。本系统利用130万像素CMOS图像传感器实现了图像高速传输采集,其传输速度达到23.6MBps,能广泛地应用在工厂矿山等恶劣环境中。
1 系统硬件设计
图像采集系统部分主要由光学镜头、CMOS图像传感器,USB控制器以及驱动电路(E2PROM等)组成。图1为硬件系统的总体框图。
1.1 CMOS图像传感器一0V9620
系统选用美国Ominivision公司开发的高性能CMOS图像传感器0V9620作为图像传感芯片。0V9620集成了CMOS光感应核,时序控制电路,A/D转换器及SCCB(serialCamera Contro1 Bus)接口等。具有SXGA(分辨率1280×1024)和VGA(分辨率640×480)两种模式,并可以提供15fps的SXGA或30fps的VGA动态图像。带有目标黑级校准、可编程/自动曝光、增益控制及白平衡控制功能。
0V9620具有可编程控制10bit数字视频信号并行输出功能,同时提供像素时钟PCL K、行同步信号HREF及帧同步信号VSYNC,为后续USB对视频数据的接收与传输提供同步控制信号。其时序图如图2所示。其数据输出格式为Bayer RAW,即利用Bayer滤光阵列把输入光信号分解成RGB三原色,每个像素仅保留一种颜色,RGB保留比例为2: 4: 2。
1.2 USB控制芯片一CY7C68013
系统USB主控制芯片选用的是CypreSS公司的EZ—USBFX2芯片CY7C68013,该芯片集成了增强型805lMCU、串行接口引擎SIE、片上RAM、4K的FIF0存储器、通用可编程接口GPIF及数据/地址总线,减少了多个芯片接口部分需要时序配合的麻烦,并节省电路板空间。CY7C68013的如下特性保证了其高速(480Mb/s)传输特性。
(1)芯片内有480Mb/s的收发器(PLL和智能SIE),很好的执行了USB2.0协议,并将MCU解放出来,加快传输速率。
(2)具有“量子FIFO”的处理框架,并具有2、3、4倍增缓冲端点FIF0,解决了高速模式下带宽问题,较好适应USB2.0数据高速传输速率。
(3)内嵌增强型8051内核可运行在48MHz的时钟频率下,每条指令只需4个时钟周期,速度远高于普通805 l单片机。
1.3 图像采集电路及实现
图像采集系统原理图如图3所示,系统以0V9620和EZ—USB FX2为核心, 在整个采集电路中,0V9620的作用是通过感光阵列将来自透镜的光学图像转换为一一对应的数字信号DO~D9,同时为USB传输提供了可靠的同步时序控制脉冲;EZ—USB FX2的作用是高速传输数字信号到PC机,同时为0V9620提供5V电源。利用片上MCU模拟I2C总线对0V9620的分辨率、对比度、亮度和曝光时间等参数进行设置。
当采集设备连接到上位机上后,USB功能设备以高速的模式进行设备的识别并枚举。下载固件,使EZ—USBFX2工作于同步S1ave FIFO模式,同步读写。
设计中将USB固件程序下载到EEPROM 24LC64中,上电后主芯片首先检测I2C总线上的E2PROM,判断如首字节是OxC2,则把固件程序从E2PROM中自动下载到自身的RAM中并执行,实现重枚举。从而提高系统的便携性能。
Slave FIFO模式为从机方式,由0V9620的时钟信号PCLK控制CY7C68013内部的多层缓冲FIFO进行读写,从而确保了图像采集的同步、无偏移特性。利用帧同步信号VSYNC作为图像采集的起始同步信号,当VSYNC高电平到来以前,初始置PA7为低电平,钳制SLWR使写入无效,并且清空FIFO,这样保证残余数据清空使采集图像不会发生偏移;当VSYNC为高电平时,标志一帧图像的开始,进入中断处理。这时置PA7为高电平,行同步信号HREF使能SLWR,写信号有效。这样在“量子FIF0”框架下图像数据从该帧的第一个像素开始自动高速地传输到上位机中,实现了采集一幅完整、无偏移的图像。
2 系统软件设计
图像采集系统软件主要包括3方面的工作:USB固件程序、USB设备驱动程序和主机应用程序设计。
2.1 USB固件程序设计
Cypress公司为CY7C68013提供了一个固件开发框架,可以在KEIL C51环境下开发。由于开发框架的引入,从而大大缩短了用户的研发周期。该框架由fw.c、USBJmpTb.a5l、dscr.a51、periph.c、Ezusb.1ib几部分组成。固件程序主要完成一下几部分功能:(1)初始化,包括对CY7C68013的端点配置和传输模式的初始化。(2)命令控制函数,按照采集原理实现采集过程。(3)中断处理,包括处理各种USB中断及外部中断。
设计中,考虑到系统要求高速无丢失地传输大量数据。因此在初始化过程中,本系统采用BULK传输方式。系统EP6(FIFOADR[1:0]=10)为块传输IN端点,采用总线供电,IFCLK由外部设备控制器提供(IFCONFIG=Ox43H),确保系统的稳定行。其输入选择1 6位数据线(wORDWIDE=1)并行输入,并设置FIF0深度位4倍缓冲,保证传输具有较高的宽度和深度。系统采用自动打包的方式(hUTOIN=1)使外设的数据由于不需要8051的处理,直接从FIFO到SIE,有利于提高传输速率。而命令控制函数和中断处理负责采集原理的实施,其程序部分代码如下:
2.2 USB驱动程序设计
USB设备驱动程序在整个系统中相当于设备端固件和主机应用程序之间的纽带。USB设备驱动程序属于WDM驱动程序,其主要完成了两个功能:第一,USB设备的添加,操作系统快速识别USB硬件设备;第二,处理IRP_MJ_PNP青求,建立设备端与操作系统之间的通讯。
编写USB设备驱动程序所需要的开发环境,主要包括:DDK(Drivet Oevelopment Kit,驱动开发工具包),BUILD工具和Visua1 C++开发环境。Visual C++是包含标准编译工具的集成开发环境,通过正确设置,其可以用来建立内核模式的设备驱动程序。它向用户提供了以良好的编译环境、方便的调试器和一些有用的工具(如rebase、guidgen等),都有助于驱动程序的开发。因此,本系统系统采用Visual C++6.0开发工具,对USB设备驱动程序进行开发和调试,步骤如下:
1)设置Visual C++驱动开环境
2)创建并设置一个Makefile项目,使处于驱动开发环境。
3)使用当前Makefile项目来开发设备驱动程序,也可以修改通用驱动程序(GDP),使其符合该采集系统要求。
4)编写DrvBuild.Bat批处理文件。
5)调用BUILD工具,创建驱动程序,安装驱动。
2.3 主机应用程序设计
本系统在VC++6.0下调用API函数编写上层用户端图像显示程序,实现对USB高速传输,捕获,读写和保存等操作。为提高采集速度,在设计用使用了多线程技术,采用两个线程完成图像的显示,即将控制线程与采集显示线程。其流程图如图4一a所示。
由于0V9620采用彩色滤光器阵列(CFA)为Bayer方案,如图5所示,每个像素只包括RGB颜色的一个分量,为恢复另外2种颜色分量,必须进行彩色去马赛克(co1ordemosaicing)处理,即彩色插值。本系统采用双线性(Bilinear)差值算法对像素进行还原,即利用相邻像素中同色分量的平均值作为当前像素的待求颜色分量。其具体数学模型为:
令S(x,y)表示像素点(x,y)处的颜色值,包含三个颜色分量:红色R(x,y)、绿色G(x,y)、蓝色B(x,y),则有:
然后对图像进行双线性差值,其中可分两类像素点。
(1)对于像素点(3,3),有R(3,3)=r33,G(3,3)=0,B(3,3)=0,为了得到该处的G,B分量值,可根据邻点来进行估计,根据算法有:
(2)对于像素点(3,4),有G(3,4)=g34,R(3,4)=O,B(3,4)=O,根据算法估计得到:
类似的可以对每个像素点缺省的色彩分量进行估计,恢复成正常的彩色图像。
该算法运算简单,运算速度块,符合系统要求。
3 试验测试
将该系统应用到图像采集中,实验结果如图6所示。
过软硬件调试,最终采集到高分辨率,高速率,高清晰画面,其采集数率达到了23.6MBps,证实该设计的可行性并达到预期效果。
4 结论
基于USB 2.O的CMOS图像采集系统采用130万像素图像传感器0V9620 作为图像感光芯片,保证了图像质量:采用USB2.O CY7C86013作为数据传输模块及控制模块,保证了图像数据的实时传输。对于130万像素高分辨率,15帧/s的动态图像,能够满足许多对分辨率和帧频率有高要求的应用场合。