陈向春,侯智斌,张峰
(解放军陆军军官学院,合肥 230031)
在单片机应用系统中,由于图像采集速度、程序存储器和数据存储器的寻址空间的限制,要完整存储30fps、640×480像素大小的一幅图像是相当困难的[1]。本文运用较高性能的16位飞思卡尔单片机在超高频的情况下直接采集图像,也只能采集到每行320个像素,丢失图像,无法获得一幅完整的图像。本文通过在图像采集过程中增加FIFO芯片AL422B较好地解决了这一问题,相对于采用昂贵的DSP而言,降低了图像采集系统的成本。
野外作业时,需要在运动中知道前方标杆和观察点之间的距离。本文将标杆制成等间距红外点光源标杆,满足了基于单帧静态图像的小孔成像原理测距模型要求,减少了图像处理量,提高了测量的实时性、全天候性。H为各点光源标杆的实际距离;n为点光源个数,它可以通过图像处理获得;f为摄像头焦距;标尺实际像素物理距离h由摄像头标定取得。远距离测距原理示意图如图1所示,整条点光源标杆都在摄像头视野范围内。近距离测距原理示意图如图2所示,点光源标杆只有部分在摄像头范围内。通过图1,可求出前方标杆与观察点的距离D。摄像机的成像几何关系也可用小孔成像原理来近似表示:
图1 远距离测距原理示意图
图2 近距离测距原理示意图
根据单目视觉测距的要求,需要通过一黑白摄像头实时采集前车的点光源标杆,通过标尺上点光源所在的像素距离推算出前车距离。为了能完整地读取图像,本文增加了FIFO芯片,图像采集原理示意图如图3所示。由单片机监测摄像头的行/场信号,控制FIFO读取相应的图像;读完所有行后,关闭FIFO读取图像功能,开始由单片机从FIFO中读取图像数据,并进行相应的图像处理,根据图像处理的复杂程度,决定图像处理和图像采集的时间比。由于FIFO是先入先出,其读取数据时单片机只需通过中断使能行/场信号,绝大部分时间单片机可以用来进行图像处理。本文采取的是采集一帧图像后,单片机利用两帧图像的空闲时间和下一帧FIFO采集时间,共约3帧时间进行图像处理和控制,其结果是图像由原来的30fps,变成10fps。尽管帧率慢了,但经过分析得知,在100km/h情况下,滞后距离2.8m,可以满足要求。
图3 图像采集原理示意图
OV7670是OmniVision公司推出的Camerachiptm图像传感器,体积小,工作电压低。VGA图像最高达到30 fps。其主要特性为[3]:
◆感光阵列(共有656×488个像素,在YUV的模式中有效像素为640×480个);
◆高灵敏度适合低照度应用,对红外光线敏感;
◆标准的SCCB接口,兼容I2C总线接口;
◆RawRGB、RGB(GRB4:2:2,RGB565/555/444)、YUV(4:2:2)和 YCbCr(4:2:2)输出格式;
◆支持VGA、CIF和从CIF到40×30的各种尺寸。
本文采用飞思卡尔16位单片机MC9S12DG128作为主控芯片,该芯片是Freescale公司推出的S12系列微控制器中的一款增强型、汽车级的16位微控制器,片内总线时钟频率最高可达25MHz,集成了8KB的RAM、128 KB的Flash、2KB的EEPROM,集成度高,资源也相当丰富[2]。
AL422B是AverLogic公司推出的一个存储容量为393 216字节×8位的FIFO存储芯片。其所有的寻址、刷新等操作都由集成在芯片内部的控制系统完成,AL422B内部功能结构框图如图4所示。
图4 AL422B内部功能结构框图
AL422B主要特点是[4]:
◆AL422B的存储体为3Mb(393 216字节×8位);
◆可以存储VGA、CCIR、NTSC、PAL和HDTV等制式一帧图形的信息;
◆独立的读写操作,可以接受不同的I/O速率;
◆高速异步串行存取;
◆读写周期为20ns;
◆存取时间为15ns;
◆内部DRAM自刷新。
要想在单片机应用系统中实现数字图像的静态存储,必须解决存储速度和存储容量两大问题。对于速度问题,需要对OV7670的数据输出时序进行分析,使其满足要求。VGA时序图如图5所示。其中PCLK为像素时钟,频率与主频一致,即27MHz,上升沿时数据输出有效;VSYNC为场信号;
HREF为水平参考信号,当像素在窗口有效时为高电平,否则为低电平;HSYNC为行信号;D[7:0]为8位数据输出。
图5 VGA时序图
AL422B写操作时序图如图6所示[4],WCK 为AL422B的写入时钟,周期最大为1000ns,最小为20ns(对应主频50MHz);其上升沿时数据写入,随着该时钟输入其内部,写指针自动增加。可见,AL422B的速度满足设计要求。具体操作时,由单片机的I/O口控制AL422B的写使能/WE,使其为低电平,使能写功能,数据端DI7~0在WCK上升沿时将数据写入。写完一副图像后,由单片机的I/O口控制写复位/WRST,使其为低电平,使能复位,数据写入地址指针将回到0地址位。
图6 AL422B写操作时序图
AL422B读操作时序图如图7所示。RCK为AL422B的读出时钟,周期最大为1000ns,最小为20ns,当/RE和/OE有效时,在其上升沿数据有效,随着该时钟输入,其内部的读指针自动增加。当单片机的主频为25MHz时,还不能直接给OV7670的系统时钟XCLK提供时钟,我们采用外部晶振提供27MHz的同频信号给OV7670。
图7 AL422B读操作时序图
图像采集电路原理图如图8所示。OV7670的像素时钟PCLK直接和AL422B的数据读入时钟WCK相连,具体操作时,由单片机的I/O口控制AL422B的读使能/RE和输出数据使能/OE,使它们为低电平;使能数据读出功能,数据端DO7~0在RCK上升沿时将数据输出给单片机。读完一副图像后,由单片机的I/O口控制写复位/RRST,使其为低电平,使能复位,数据读出地址指针将回到0地址位。
图8 图像采集电路原理图
程序设计流程如图9所示。当单片机检测到场信号更新后,开始监测行信号到达,之后使能/WE,开始顺序读取图像。读完一帧图像后关闭/WE,单片机使能/RE,开始读取首行图像中的640个像素。本文采取边读边处理的方式,较好地解决了一帧图像多达3MB的问题。点光源标杆发出的红外光线在图像上呈现出若干个光晕区域,找到光晕中心就可以找到点光源的图像坐标,为此在读取的同时将各像素点与阈值进行比较,小于阈值的为疑似点光源并记录对应坐标;当读取完一行像素时,得到的将是一组疑似点光源坐标的像素位置,将其进行统计求平均,得出点光源在该行的坐标,最多12个字节(正面标杆6个,某侧标杆6个),远远小于整行640个字节。
图9 程序设计流程图
当读取完一帧像素时,得到最多12×480个字节,单片机64KB的容量完全可以存储,最后将行求平均,得出最终的点光源坐标。经验证,所需总时间在2.15帧图像内完成。
文中讨论了基于FIFO芯片和单片机实现的点光源图像采集系统,描述了单目点光源测距原理、图像采集系统硬件和软件设计方法,着重介绍了FIFO芯片在图像采集中的桥梁作用。通过系统样机检验,能够满足要求,达到了预期效果。
[1]邵贝贝.单片机嵌入式应用的在线开发方法[M].北京:清华大学出版社,2009.
[2]Freescale Semiconductor.MC9S12DG128Device User Guide[EB/OL].[2011-11].http://www.freescale.com.cn.
[3]OmniVision Technologies.OV7670/OV7171CMOS VGA 图像传感器[EB/OL].[2011-11].http://www.ovt.com/technologies/.
[4]Aver Logic.AL422DataSheet[EB/OL].[2011-11].http://www.averlogic.com/.