2-实验二 基于ov7670摄像头模块的图像采集
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二 基于ov7670摄像头模块的图像采集
1.实验目的
●熟悉掌握OV7670摄像头的工作原理。
●掌握带有FIFO的OV7620摄像头的图像采集方法。
●学会使用简单的图像上位机,通过串口将图像发送的到上位机上。
2.实验内容
了解OV7670摄像头采集图像的原理和方法,学会从摄像头自带FIFO模块中采集需要的图像数据。了解摄像头的YUV格式。配置摄像头为YUV输出。了解输出时序。
3. 预备知识
●使用MDK4.14集成开发环境,编译和调试程序的基本过程。
● STM32应用程序的框架结构。
●摄像头行中断,场中断的基本概念。
● FIFO的读写时序。
●了解STM32中断的配置和使用方法。学会开中断,关中断的方法。
4. 实验设备及工具
●硬件:博创智能车套件,PC机,USB转TTL串口线
●软件:MDK4.14集成开发环境,USB转串口线驱动 ,摄像头图像采集上位机
5. 实验原理及说明
5.1 OV7670带FIFO模块原理与说明
1.简介:
OV7670 带FIFO 模块,是针对慢速的MCU 能够实现图像采集控制推出的带有缓冲存储空间的一种模块。这种模块增加了一个FIFO(先进先出)存储芯片,同样包含30w 像素的CMOS 图像感光芯片,3.6mm 焦距的镜头和镜头座,板载CMOS 芯片所需要的各种不同电源(电源要求详见芯片的数据文件),板子同时引出控制管脚和数据管脚,方便操作和使用。
2.管脚定义:
如图,控制传感器所需的管脚定义如下:
3V3-----输入电源电压(推荐使用3.3,5V 也可,但不推荐) GDN-----接地点
SIO_C---SCCB 接口的控制时钟(注意:部分低级单片机需要上拉控制,和
I2C 接口类似)
SIO_D---SCCB 接口的串行数据输入(出)端(注意:部分低级单片机需要上
拉控制,和I2C 接口类似)
VSYNC---帧同步信号(输出信号)
HREF----行同步信号(输出信号)
PCLK----像素时钟(输出信号)
XCLCK---时钟信号(输入信号)
D0-D7---数据端口(输出信号)
RESTE---复位端口(正常使用拉高)
PWDN----功耗选择模式(正常使用拉低)
STROBE—拍照闪光控制端口(正常使用可以不需要)
FIFO_RCK---FIFO 内存读取时钟控制端
FIFO_WR_CTR----FIFO 写控制端(1 为允许CMOS 写入到FIFO,0 为禁止)
FIFO_OE----FIFO 关断控制
FIFO_WRST—FIFO 写指针服务端
FIFO_RRST—FIFO 读指针复位端
3.控制方式说明
由于采用了FIFO 做为数据缓冲,数据采集大大简便,用户只需要关
心是如何读取即可,不需要关心具体数据是如何采集到的,这样可减小甚至不用关心CMOS 的控制以及时序关系,就能够实现图像的采集。控制时序如下:
3.采集图像的基本方法
如图,用户只需要按上述时序图控制相关的几个控制引脚即可,可以很方便的使用在低速单片机上,另外一个好处是,可以直接IO 口读取数据,读出的数据可以直接送屏,也可以经过MCU 简单处理;当然也可以不经过MCU,直接送到屏等外围器件使用。
5.2 ov7670摄像头模块的图像采集的软件流程
1.初始化摄像头
因为OV7670通过SCCB协议来设置摄像头,而SCCB协议是一个简化过的I2C协议,所
以我们通过模拟I2C来设置摄像头。
其中,Cmos7670_init()函数调用set_Cmos7670reg()函数完成摄像头一系列寄存器的写入操作。set_Cmos7670reg()函数:
将摄像头由RGB565配置成YUV格式。
2.初始化中断,使用摄像头的场中断(VSYNC)来读FIFO。
如图,本例程中配置GPIOA的PA0引脚出发中断。在stm32f10x_it.c文件中有中断处理函数EXTI0_IRQHandler(void)。
每一个图像处理周期中需要两次场中断,第一次场中断完成FIFO的复位,是摄像头开始
采集数据并存在FIFO中,第二个场中断来临的时候,读取FIFO。
第一个:
第二个:
完成图像采集之后,中断程序将datareadyflag标记变量设置为1.
3.使用串口发送图像。
在main函数的while循环中,程序不断的轮询datareadyflag变量,一旦datareadyflag变量被设置成1,程序就发送图像。
其中函数send_pic()是通过串口发送图像的函数。其具体实现如下:
函数首先发送x0FF,这是与上位机软件的协议,以此来通知上位机做好接受一场图像的准备。
6. 实验步骤
6.1打开并编译工程
在” \测试例程及固件\2‐基于ov7670摄像头模块的图像采集程序\RVMDK”文件夹中,点击工程文件,打开工程。
点击编译键
软件界面下方的build output窗口出现如下输出,表示编译成功。
6.2 控制板的电气连接
下载程序,上电之前,需要做一下连接:
●控制板和电池
●控制板和摄像头(注意引脚对应)
●控制板和pc通过串口相连
6.3使用Flash Loader下载编译好的可执行二进制文件
下载方法参见实验一6.3节。
这里下载的是\测试例程及固件\2‐基于ov7670摄像头模块的图像采集程序\RVMDK\Obj
文件夹中的OV7670.hex。