您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 薪酬管理 > OV7670使用说明和程序讲解
第三十八章摄像头实验ALIENTEK精英STM32开发板板载了一个摄像头接口(P6),该接口可以用来连接ALIENTEKOV7670摄像头模块。本章,我们将使用STM32驱动ALIENTEKOV7670摄像头模块,实现摄像头功能。本章分为如下几个部分:38.1OV7670简介38.2硬件设计38.3软件设计38.4下载验证38.1OV7670简介OV7670是OV(OmniVision)公司生产的一颗1/6寸的CMOSVGA图像传感器。该传感器体积小、工作电压低,提供单片VGA摄像头和影像处理器的所有功能。通过SCCB总线控制,可以输出整帧、子采样、取窗口等方式的各种分辨率8位影像数据。该产品VGA图像最高达到30帧/秒。用户可以完全控制图像质量、数据格式和传输方式。所有图像处理功能过程包括伽玛曲线、白平衡、度、色度等都可以通过SCCB接口编程。OmmiVision图像传感器应用独有的传感器技术,通过减少或消除光学或电子缺陷如固定图案噪声、托尾、浮散等,提高图像质量,得到清晰的稳定的彩色图像。OV7670的特点有:高灵敏度、低电压适合嵌入式应用标准的SCCB接口,兼容IIC接口支持RawRGB、RGB(GBR4:2:2,RGB565/RGB555/RGB444),YUV(4:2:2)和YCbCr(4:2:2)输出格式支持VGA、CIF,和从CIF到40*30的各种尺寸输出支持自动曝光控制、自动增益控制、自动白平衡、自动消除灯光条纹、自动黑电平校准等自动控制功能。同时支持色饱和度、色相、伽马、锐度等设置。支持闪光灯支持图像缩放OV7670的功能框图图如图38.1.1所示:图38.1.1OV7670功能框图OV7670传感器包括如下一些功能模块。1.感光整列(ImageArray)OV7670总共有656*488个像素,其中640*480个有效(即有效像素为30W)。2.时序发生器(VideoTimingGenerator)时序发生器具有的功能包括:整列控制和帧率发生(7种不同格式输出)、内部信号发生器和分布、帧率时序、自动曝光控制、输出外部时序(VSYNC、HREF/HSYNC和PCLK)。3.模拟信号处理(AnalogProcessing)模拟信号处理所有模拟功能,并包括:自动增益(AGC)和自动白平衡(AWB)。4.A/D转换(A/D)原始的信号经过模拟处理器模块之后,分G和BR两路进入一个10位的A/D转换器,A/D转换器工作在12M频率,与像素频率完全同步(转换的频率和帧率有关)。除A/D转换器外,该模块还有以下三个功能:黑电平校正(BLC)U/V通道延迟A/D范围控制A/D范围乘积和A/D的范围控制共同设置A/D的范围和最大值,允许用户根据应用调整图片的亮度。5.测试图案发生器(TestPatternGenerator)测试图案发生器功能包括:八色彩色条图案、渐变至黑白彩色条图案和输出脚移位“1”。6.数字处理器(DSP)这个部分控制由原始信号插值到RGB信号的过程,并控制一些图像质量:边缘锐化(二维高通滤波器)颜色空间转换(原始信号到RGB或者YUV/YCbYCr)RGB色彩矩阵以消除串扰色相和饱和度的控制黑/白点补偿降噪镜头补偿可编程的伽玛十位到八位数据转换7.缩放功能(ImageScaler)这个模块按照预先设置的要求输出数据格式,能将YUV/RGB信号从VGA缩小到CIF以下的任何尺寸。8.数字视频接口(DigitalVideoPort)通过寄存器COM2[1:0],调节IOL/IOH的驱动电流,以适应用户的负载。9.SCCB接口(SCCBInterface)SCCB接口控制图像传感器芯片的运行,详细使用方法参照光盘的《OmniVisionTechnologiesSerilCameraControlBus(SCCB)Specification》这个文档10.LED和闪光灯的输出控制(LEDandStorbeFlashControlOutput)OV7670有闪光灯模式,可以控制外接闪光灯或闪光LED的工作。OV7670的寄存器通过SCCB时序访问并设置,SCCB时序和IIC时序十分类似,在本章我们不做介绍,请大家参考光盘的相关文档。接下来我们介绍一下OV7670的图像数据输出格式。首先我们简单介绍几个定义:VGA,即分辨率为640*480的输出模式;QVGA,即分辨率为320*240的输出格式,也就是本章我们需要用到的格式;QQVGA,即分辨率为160*120的输出格式;PCLK,即像素时钟,一个PCLK时钟,输出一个像素(或半个像素)。VSYNC,即帧同步信号。HREF/HSYNC,即行同步信号。OV7670的图像数据输出(通过D[7:0])就是在PCLK,VSYNC和HREF/HSYNC的控制下进行的。首先看看行输出时序,如图38.1.2所示:图38.1.2OV7670行输出时序从上图可以看出,图像数据在HREF为高的时候输出,当HREF变高后,每一个PCLK时钟,输出一个字节数据。比如我们采用VGA时序,RGB565格式输出,每2个字节组成一个像素的颜色(高字节在前,低字节在后),这样每行输出总共有640*2个PCLK周期,输出640*2个字节。再来看看帧时序(VGA模式),如图38.1.3所示:图38.1.3OV7670帧时序上图清楚的表示了OV7670在VGA模式下的数据输出,注意,图中的HSYNC和HREF其实是同一个引脚产生的信号,只是在不同场合下面,使用不同的信号方式,我们本章用到的是HREF。因为OV7670的像素时钟(PCLK)最高可达24Mhz,我们用STM32F103ZET6的IO口直接抓取,是非常困难的,也十分占耗CPU(可以通过降低PCLK输出频率,来实现IO口抓取,但是不推荐)。所以,本章我们并不是采取直接抓取来自OV7670的数据,而是通过FIFO读取,ALIENTEKOV7670摄像头模块自带了一个FIFO芯片,用于暂存图像数据,有了这个芯片,我们就可以很方便的获取图像数据了,而不再需要单片机具有高速IO,也不会耗费多少CPU,可以说,只要是个单片机,都可以通过ALIENTEKOV7670摄像头模块实现拍照的功能。接下来我们介绍一下ALIENTEKOV7670摄像头模块。该模块的外观如图38.1.4:图38.1.4ALIENTEKOV7670摄像头模块外观图模块原理图如图38.1.5所示:图38.1.5ALIENTEKOV7670摄像头模块原理图从上图可以看出,ALIENTEKOV7670摄像头模块自带了有源晶振,用于产生12M时钟作为OV7670的XCLK输入。同时自带了稳压芯片,用于提供OV7670稳定的2.8V工作电压,并带有一个FIFO芯片(AL422B),该FIFO芯片的容量是384K字节,足够存储2帧QVGA的图像数据。模块通过一个2*9的双排排针(P1)与外部通信,与外部的通信信号如表38.1.1所示:信号作用描述信号作用描述VCC3.3模块供电脚,接3.3V电源FIFO_WENFIFO写使能GND模块地线FIFO_WRSTFIFO写指针复位OV_SCLSCCB通信时钟信号FIFO_RRSTFIFO读指针复位OV_SDASCCB通信数据信号FIFO_OEFIFO输出使能(片选)FIFO_D[7:0]FIFO输出数据(8位)OV_VSYNCOV7670帧同步信号FIFO_RCLK读FIFO时钟表38.1.1OV7670模块信号及其作用描述下面我们来看看如何使用ALIENTEKOV7670摄像头模块(以QVGA模式,RGB565格式为例)。对于该模块,我们只关心两点:1,如何存储图像数据;2,如何读取图像数据。首先,我们来看如何存储图像数据。ALIENTEKOV7670摄像头模块存储图像数据的过程为:等待OV7670同步信号FIFO写指针复位FIFO写使能等待第二个OV7670同步信号FIFO写禁止。通过以上5个步骤,我们就完成了1帧图像数据的存储。接下来,我们来看看如何读取图像数据。在存储完一帧图像以后,我们就可以开始读取图像数据了。读取过程为:FIFO读指针复位给FIFO读时钟(FIFO_RCLK)读取第一个像素高字节给FIFO读时钟读取第一个像素低字节给FIFO读时钟读取第二个像素高字节循环读取剩余像素结束。可以看出,ALIENTEKOV7670摄像头模块数据的读取也是十分简单,比如QVGA模式,RGB565格式,我们总共循环读取320*240*2次,就可以读取1帧图像数据,把这些数据写入LCD模块,我们就可以看到摄像头捕捉到的画面了。OV7670还可以对输出图像进行各种设置,详见光盘《OV7670中文数据手册1.01》和《OV7670softwareapplicationnote》这两个文档,对AL422B的操作时序,请大家参考AL422B的数据手册。了解了OV7670模块的数据存储和读取,我们就可以开始设计代码了,本章,我们用一个外部中断,来捕捉帧同步信号(VSYNC),然后在中断里面启动OV7670模块的图像数据存储,等待下一次VSHNC信号到来,我们就关闭数据存储,然后一帧数据就存储完成了,在主函数里面就可以慢慢的将这一帧数据读出来,放到LCD即可显示了,同时开始第二帧数据的存储,如此循环,实现摄像头功能。本章,我们将使用摄像头模块的QVGA输出(320*240),刚好和精英STM32开发板使用的LCD模块分辨率一样,一帧输出就是一屏数据,提高速度的同时也不浪费资源。注意:ALIENTEKOV7670摄像头模块自带的FIFO是没办法缓存一帧的VGA图像的,如果使用VGA输出,那么你必须在FIFO写满之前开始读FIFO数据,保证数据不被覆盖。38.2硬件设计本章实验功能简介:开机后,初始化摄像头模块(OV7670),如果初始化成功,则在LCD模块上面显示摄像头模块所拍摄到的内容。我们可以通过KEY0设置光照模式(5种模式)、通过KEY1设置色饱和度,通过KEY_UP设置对比度,通过TPAD设置特效(总共7种特效)。通过串口,我们可以查看当前的帧率(这里是指LCD显示的帧率,而不是指OV7670的输出帧率),同时可以借助USMART设置OV7670的寄存器,方便大家调试。DS0指示程序运行状态。本实验用到的硬件资源有:1)指示灯DS02)KEY0/KEY1/KEY_UP和TPAD按键3)串口4)TFTLCD模块5)摄像头模块ALIENTEKOV7670摄像头模块在38.1节已经有详细介绍过,这里我们主要介绍该模块与ALIETEK精英STM32开发板的连接。在开发板的左下角的2*9的P6排座,是摄像头模块/OLED模块共用接口,在第十七章,我们曾简单介绍过这个接口。本章,我们只需要将ALIENTEKOV7670摄像头模块插入这个接口(P4)即可,该接口与STM32的连接关系如图38.2.1所示:图38.2.1摄像头模块接口与STM32连接图从上图可以看出,OV7670摄像头模块的各信号脚与STM32的连接关系为:OV_SDA接PG13;OV_SCL接PD3;FIFO_RCLK接PB4;FIFO_WEN接PB3;FIFO_WRST接PD6;FIFO_RRST接PG14;FIFO_OE接PG15;OV_VSYNC接PA8;OV_D[7:0]接PC[7:0];这些线的连接,精英STM32的内部已经连接好了,我们只需要将OV7670摄像头模块插上去就好了。注意,其中有几个信号线和其他外设共用了,OV_SCL与JOY_CLK共用PD3,所以摄像头和手柄不可以同时使用;FIFO_WEN和FIFO_RCLK则和JTAG的信号线JTDO和JTRST共用了,所以使用摄像头的时候,不能使用JTAG模式调试,而应该选择SW模式(SW模式不需要用到JTDO和JTRST);OV_VSYNC和PWM_DAC共用了PA8,所以他们也不可以同时使用。实物连接如图38.2.2所示:图38.2.2OV7670摄像头模
本文标题:OV7670使用说明和程序讲解
链接地址:https://www.777doc.com/doc-1429263 .html