11. ov5640摄像头vga图像显示

您所在的位置:网站首页 实时图像传输芯片是什么 11. ov5640摄像头vga图像显示

11. ov5640摄像头vga图像显示

2024-07-09 15:09| 来源: 网络整理| 查看: 265

11. ov5640摄像头vga图像显示¶

在前面章节,我们学习了摄像头的相关知识,并对OV7725摄像头做了详细介绍,实现了OV7725-VGA、OV7725-HDMI和OV7725-TFT的实时图像显示。

在本章节,我们将对另一款更高端的摄像头OV5640进行相关知识的学习,并实现OV5640-VGA的实时图像显示。

11.1. 理论学习¶ 11.1.1. 摄像头简介¶

参见“OV7725摄像头VGA显示”章节的“摄像头简介”部分。

11.1.2. OV5640简介¶

本小节主要讲解实验工程使用的OV5640摄像头,摄像头实物具体见图 60‑1。

图 61‑1 OV5640摄像头实物图

该摄像头主要由镜头、图像传感器、板载电路及下方的信号引脚组成。镜头部件包含一个镜头座和一个可旋转调节距离的凸透镜,通过旋转可以调节焦距,正常使用时,镜头座覆盖在电路板上遮光,光线只能经过镜头传输到正中央的图像传感器,它采集得的图像数据直接传输给FPGA芯片,FPGA将接收到的图像数据缓存到SDRAM 中,在VGA图像显示有效区域,VGA驱动自SDRAM读取图像数据在显示屏上进行显示。

图像传感器是摄像头的核心部件,上述摄像头中的图像传感器是一款型号为 OV5640的 CMOS 类型数字图像传感器。该传感器支持输出最大为 500万像素的图像 (2592x1944分辨率),支持使用 VGA时序输出图像数据,输出图像的数据格式支持 YUV(422/420)、YCbCr422、 RGB565 以及 JPEG 格式,若直接输出 JPEG 格式的图像时可大大减少数据量,方便网络传输。它还可以对采集得的图像进行补偿,支持伽玛曲线、 白平衡、饱和度、色度等基础处理。根据不同的分辨率配置,传感器输出图像数据的帧率从 15-60帧可调,工作时功率在 150mW-200mW之间。

11.1.2.1. OV5640 引脚及功能框架图¶

OV5640 模组带有自动对焦功能,引脚的分布见图 61‑2。

图 61‑2 OV5640传感器引脚分布图

信号引脚功能介绍如下表格 61‑1。

表格 61‑1 OV5640管脚

管脚名称

管脚类型

管脚描述

SIO_C

输入

SCCB 总线的时钟线,可类比 I2C的 SCL

SIO_D

I/O

SCCB 总线的数据线,可类比 I2C的 SDA

RESET

输入

系统复位管脚,低电平有效

PWDN

输入

掉电/省电模式,高电平有效

HREF

输出

行同步信号

VSYNC

输出

帧同步信号

PCLK

输出

像素同步时钟输出信号

XCLK

输入

外部时钟输入端口,可接外部晶振

Y2„Y9

输出

像素数据输出端口

下面我们结合图 61‑3的 OV5640 功能框图讲解这些信号引脚。

图 61‑3 OV5640功能框图

控制寄存器

标号处的是 OV5640 的控制寄存器,它根据这些寄存器配置的参数来运行,而这些参数是由外部控制器通过 SIO_C 和 SIO_D 引脚写入的, SIO_C与 SIO_D 使用的通讯协议跟 I2C十分类似。

通信、控制信号及时钟

标号处包含了 OV5640的通信、控制信号及外部时钟,其中 PCLK、 HREF 及VSYNC分别是像素同步时钟、行同步信号以及帧同步信号,这与液晶屏控制中的信号是很类似的。 RESETB引脚为低电平时,用于复位整个传感器芯片,PWDN 用于控制芯片进入低功耗模式。注意最后的一个 XCLK引脚,它跟 PCLK是完全不同的, XCLK 是用于驱动整个传感器芯片的时钟信号,是外部输入到OV5640的信号;而 PCLK是 OV5640输出数据时的同步信号,它是由 OV5640 输出的信号。 XCLK可以外接晶振或由外部控制器提供。

感光矩阵

标号处的是感光矩阵,光信号在这里转化成电信号,经过各种处理,这些信号存储成由一个个像素点表示的数字图像。

数据输出信号

标号处包含了 DSP 处理单元,它会根据控制寄存器的配置做一些基本的图像处理运算。这部分还包含了图像格式转换单元及压缩单元,转换出的数据最终通过Y0-Y9引脚输出,一般来说我们使用 8根据数据线来传输,这时仅使用 Y2-Y9 引脚, OV5640与外部器件的连接方式见图 61‑4。

图 61‑4 8位数据线接法

数据输出信号

标号⑤处为 VCM 处理单元,他会通过图像分析来实现图像的自动对焦功能。要实现自动对焦还需要下载自动对焦固件到模组,后面摄像头实验详细介绍这个功能。

11.1.2.2. SCCB 时序¶

参见“OV7725摄像头VGA显示”章节的“SCCB时序”部分。

11.1.3. OV5640的寄存器¶

控制 OV5640涉及到它很多的寄存器,可直接查询《ov5640datasheet》了解,通过这些寄存器的配置,可以控制它输出图像的分辨率大小、图像格式及图像方向等。要注意的是 OV5640寄存器地址为 16位。

官方还提供了一个《OV5640_自动对焦照相模组应用指南(DVP_接口)__R2.13C.pdf》的文档,它针对不同的配置需求,提供了配置范例,见图 61‑5。其中 write_SCCB 是一个利用 SCCB向寄存器写入数据的函数,第一个参数为要写入的寄存器的地址,第二个参数为要写入的内容。

图 61‑5 调节帧率的寄存器配置范例

像素数据输出时序

对 OV5640采用 SCCB协议进行控制,而它输出图像时则使用 VGA时序(还可用 SVGA、 UXGA,这些时序都差不多),这跟控制液晶屏输入图像时很类似。 OV5640输出图像时,一帧帧地输出,在帧内的数据一般从左到右,从上到下,一个像素一个像素地输出(也可通过寄存器修改方向)。

例如图 61‑6,若我们使用 Y2-Y9数据线,图像格式设置为 RGB565,进行数据输出时, Y2-Y9数据线会在 1个像素同步时钟 PCLK的驱动下发送 1 字节的数据信号,所以2个 PCLK时钟可发送 1个 RGB565格式的像素数据。像素数据依次传输,每传输完一行数据时,行同步信号 HREF 会输出一个电平跳变信号,每传输完一帧图像时, VSYNC会输出一个电平跳变信号。

图 61‑6 DVP接口时序

11.2. 实战演练¶ 11.2.1. 实验目标¶

使用SDRAM做图像数据缓存,将OV5640摄像头采集到的图像数据在VGA显示器上实时显示。分辨率640*480。

11.2.2. 硬件资源¶

参见“OV7725摄像头VGA图像显示”的“硬件资源”小节。

11.3. 程序设计¶ 11.3.1. 整体说明¶

在本小节我们分两部分讲解一下实验工程的整体框架,第一部分是OV5640的相关模块,OV5640部分的整体框图和介绍,具体见图 61‑7、表格 61‑2。

图 61‑7 ov5640整体框图

表格 61‑2 OV5640各模块功能介绍

模块名称

功能描述

ov5640_top

OV5640顶层模块

i2c_ctrl

i2c驱动模块

ov5640_cfg

OV5640寄存器配置模块

ov5640_data

OV5640图像采集模块

由上述图表可知,第一部分的OV5640相关模块包含4个子模块,首先是ov5640_top模块,这一模块作为ov5640部分的顶层模块,内部实例化3个子功能模块,连接各子模块对应信号,外部对摄像头进行相关配置并接收摄像头采集的数据信息;ov5640_cfg模块,是寄存器配置模块,内部包含对ov5640 摄像头的配置信息;i2c_ctrl模块,i2c协议与SCCB协议几乎无差别,使用i2c协议代替SCCB接口协议向ov5640摄像头写入ov5640_cfg模块内部包含的寄存器配置信息;ov5640_data模块,是ov5640摄像头的图像采集模块,将摄像头传入的图像数据处理后写入SDRAM。

第一部分介绍完毕后,我们来说一下实验工程的第二部分。在第二部分中将第一部分的ov5640摄像头部分视为一个子模块,与其他子功能模块构成整个实验工程。整体框图和子功能模块介绍,具体见图 61‑8、表格 61‑3。

图 61‑8 OV5640-VGA图像显示整体框图

表格 61‑3 OV5640-VGA图像显示各子模块功能描述

模块名称

功能描述

ov5640_vga_640x480

实验工程顶层模块

clk_gen

时钟生成模块

ov5640_top

OV5640相关部分

sdram_top

SDRAM读写控制器

vga_ctrl

VGA驱动模块

由图表可知,OV5640-VGA图像显示工程包含表格模块,ov5640_vga_640x480作为实验工程的顶层模块,内部实例化各子功能模块,连接对应信号,对外接收摄像头采集的图像数据,将处理后的数据存入SDRAM,在VGA显示器上显示出来;clk_gen模块,调用IP核生成,产生整个实验工程的工作 时钟;ov5640_top模块,是ov5640部分各子功能模块的集合,实现ov5640摄像头的配置、图像采集与处理;sdram_top模块为SDRAM读写控制器,存储处理后的图像数据;vga_ctrl模块实现VGA显示器的驱动控制,读取SDRAM存储的图像数据并在VGA显示屏上显示出来。

到了这里,实验工程的整体框架我们介绍完毕,对于内部的各个子功能模块的设计与实现,我们会在后面的小结进行详细讲解,但对于调用IP核生成的时钟生成模块clk_gen、SDRAM读写控制器sdram_top和VGA驱动模块vga_ctrl,在前面的章节已经做过 详细介绍,在这里不在过多叙述。只对OV5640摄像头的寄存器配置模块和图像采集模块做简单介绍。

11.3.1.1. 图像采集模块¶

模块框图

图像采集模块的主要功能是接收并拼接OV5640摄像头传入的图像数据,模块框图和输入输出信号简介,具体见图 61‑9、表格 61‑4。

图 61‑9 图像采集模块框图

表格 61‑4 模块输入输出信号简介

信号

位宽

类型

功能描述

ov5640_pclk

1Bit

Input

摄像头传入工作时钟,频率24MHz

sys_rst_n

1Bit

Input

复位信号,低有效

ov5640_vsync

1Bit

Input

传入图像场同步信号

ov5640_href

1Bit

Input

传入图像行有效区域

ov5640_data

8Bit

Input

传入图像信息

ov5640_wr_en

1Bit

Output

图像信息写入SDRAM使能信号

ov5640_data_out

16Bit

Output

写入SDRAM图像信息

代码编写

模块的设计与实现与OV7725摄像头图像采集模块相同,代码也是在OV7725摄像头图像采集模块代码基础上稍作修改得到。这里不再进行波形图的绘制与讲解,只列出模块参考代码。图像采集模块参考代码,具体见代码清单 61‑1。

代码清单 61‑1 图像采集模块参考代码(ov5640_data.v)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105module ov5640_data ( input wire sys_rst_n , //复位信号 // OV5640 input wire ov5640_pclk , //摄像头像素时钟 input wire ov5640_href , //摄像头行同步信号 input wire ov5640_vsync , //摄像头场同步信号 input wire [ 7:0] ov5640_data , //摄像头图像数据 // 写FIFO output wire ov5640_wr_en , //图像数据有效使能信号 output wire [15:0] ov5640_data_out //图像数据 ); //// //\* Parameter and Internal Signal \// //// //parameter define parameter PIC_WAIT = 4'd10; //图像稳定前等待帧图像个数 //wire define wire pic_flag ; //帧图像标志信号,每拉高一次,代表一帧完整图像 //reg define reg ov5640_vsync_dly ; //摄像头输入场同步信号打拍 reg [3:0] cnt_pic ; //图像帧计数器 reg pic_valid ; //帧有效标志信号 reg [7:0] pic_data_reg ; //输入8位图像数据缓存 reg [15:0] data_out_reg ; //输出16位图像数据缓存 reg data_flag ; //输入8位图像数据缓存 reg data_flag_dly1 ; //图像数据拼接标志信号打拍 //// //\* Main Code \// //// //ov5640_vsync_dly:摄像头输入场同步信号打拍 always@(posedge ov5640_pclk or negedge sys_rst_n) if(sys_rst_n == 1'b0) ov5640_vsync_dly


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3