实验二 基于 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.