1 摄像头
OV5640 简介
在各类信息中,图像含有最丰富的信息,作为机器视觉领域的核心部件,摄像头被广泛地应用
在安防、探险以及车牌检测等场合。摄像头按输出信号的类型来看可以分为数字摄像头和模拟
摄像头,按照摄像头图像传感器材料构成来看可以分为 CCD 和 CMOS。现在智能手机的摄像
头绝大部分都是 CMOS 类型的数字摄像头。
1.1 数字摄像头跟模拟摄像头区别
输出信号类型
数字摄像头输出信号为数字信号,模拟摄像头输出信号为标准的模拟信号。
接口类型
数字摄像头有 USB 接口(比如常见的 PC 端免驱摄像头)、IEE1394 火线接口(由苹果公司
领导的开发联盟开发的一种高速度传送接口,数据传输率高达 800Mbps)、千兆网接口
(网络摄像头)。模拟摄像头多采用 AV 视频端子(信号线+地线)或 S-VIDEO(即莲
花头--SUPER VIDEO,是一种五芯的接口,由两路视频亮度信号、两路视频色度信号和
一路公共屏蔽地线共五条芯线组成)。
分辨率
模拟摄像头的感光器件,其像素指标一般维持在 752(H)*582(V)左右的水平,像素数一般
情况下维持在 41 万左右。现在的数字摄像头分辨率一般从数十万到数千万。但这并不能
说明数字摄像头的成像分辨率就比模拟摄像头的高,原因在于模拟摄像头输出的是模拟
视频信号,一般直接输入至电视或监视器,其感光器件的分辨率与电视信号的扫描数呈
一定的换算关系,图像的显示介质已经确定,因此模拟摄像头的感光器件分辨率不是不
能做高,而是依据于实际情况没必要做这么高。
1.2 CCD 与 CMOS 的区别
摄像头的图像传感器 CCD 与 CMOS 传感器主要区别如下:
成像材料
CCD 与 CMOS 的名称跟它们成像使用的材料有关,CCD 是"电荷耦合器件"(Charge
Coupled Device)的简称,而 CMOS 是"互补金属氧化物半导体"(Complementary Metal
Oxide Semiconductor)的简称。
功耗
由于 CCD 的像素由 MOS 电容构成,读取电荷信号时需使用电压相当大(至少 12V)的二
相或三相或四相时序脉冲信号,才能有效地传输电荷。因此 CCD 的取像系统除了要有
多个电源外,其外设电路也会消耗相当大的功率。有的 CCD 取像系统需消耗 2~5W 的
功率。而 CMOS 光电传感器件只需使用一个单电源 5V 或 3V,耗电量非常小,仅为
CCD 的 1/8~1/10,有的 CMOS 取像系统只消耗 20~50mW 的功率。
成像质量
CCD 传感器件制作技术起步早,技术成熟,采用 PN 结或二氧化硅(sio2)隔离层隔离噪
声,所以噪声低,成像质量好。与 CCD 相比,CMOS 的主要缺点是噪声高及灵敏度低,
不过现在随着 CMOS 电路消噪技术的不断发展,为生产高密度优质的 CMOS 传感器件
提供了良好的条件,现在的 CMOS 传感器已经占领了大部分的市场,主流的单反相机、
智能手机都已普遍采用 CMOS 传感器。
2 OV5640 摄像头
本章主要讲解实验板配套的摄像头,它的实物见图 461,该摄像头主要由镜头、图像传感器、
板载电路及下方的信号引脚组成。
图461 实验板配套的OV5640 摄像头
镜头部件包含一个镜头座和一个可旋转调节距离的凸透镜,通过旋转可以调节焦距,正常使用
时,镜头座覆盖在电路板上遮光,光线只能经过镜头传输到正中央的图像传感器,它采集光线
信号,然后把采集得的数据通过下方的信号引脚输出数据到外部器件。
2.1 OV5640 传感器简介
图像传感器是摄像头的核心部件,上述摄像头中的图像传感器是一款型号为 OV5640 的 CMOS
类型数字图像传感器。该传感器支持输出最大为 500 万像素的图像 (2592x1944 分辨率),支持
使用 VGA 时序输出图像数据,输出图像的数据格式支持 YUV(422/420)、YCbCr422、RGB565
以及 JPEG 格式,若直接输出 JPEG 格式的图像时可大大减少数据量,方便网络传输。它还可以
对采集得的图像进行补偿,支持伽玛曲线、白平衡、饱和度、色度等基础处理。根据不同的分
辨率配置,传感器输出图像数据的帧率从 15-60 帧可调,工作时功率在 150mW-200mW 之间。
2.2 OV5640 引脚及功能框图
OV5640 模组带有自动对焦功能,引脚的定义见图 462。
信号引脚功能介绍如下,介绍如下表 461。
图462OV5640 传感器引脚分布图
管脚名称 管脚类型 管脚描述
表461OV5640 管脚
SIO_C
SIO_D
RESET
PWDN
HREF
VSYNC
PCLK
XCLK
输入
I/O
输入
输入
输出
输出
输出
输入
SCCB 总线的时钟线,可类比 I2C 的 SCL
SCCB 总线的数据线,可类比 I2C 的 SDA
系统复位管脚,低电平有效
掉电/省电模式,高电平有效
行同步信号
帧同步信号
像素同步时钟输出信号
外部时钟输入端口,可接外部晶振
Y2…Y9
下面我们配合图 463 中的 OV5640 功能框图讲解这些信号引脚。
像素数据输出端口
输出
(5) 控制寄存器
图463OV5640 功能框图
标号处的是 OV5640 的控制寄存器,它根据这些寄存器配置的参数来运行,而这些
参数是由外部控制器通过 SIO_C 和 SIO_D 引脚写入的,SIO_C 与 SIO_D 使用的通讯
协议跟 I2C 十分类似,在 STM32 中我们完全可以直接用 I2C 硬件外设来控制。
(6) 通信、控制信号及时钟
标号处包含了 OV5640 的通信、控制信号及外部时钟,其中 PCLK、HREF 及
VSYNC 分别是像素同步时钟、行同步信号以及帧同步信号,这与液晶屏控制中的信
号是很类似的。RESETB 引脚为低电平时,用于复位整个传感器芯片,PWDN 用于控
制芯片进入低功耗模式。注意最后的一个 XCLK 引脚,它跟 PCLK 是完全不同的,
XCLK 是用于驱动整个传感器芯片的时钟信号,是外部输入到 OV5640 的信号;而
PCLK 是 OV5640 输出数据时的同步信号,它是由 OV5640 输出的信号。XCLK 可以
外接晶振或由外部控制器提供,若要类比 XCLK 之于 OV5640 就相当于 HSE 时钟输
入引脚与 STM32 芯片的关系,PCLK 引脚可类比 STM32 的 I2C 外设的 SCL 引脚。
(7) 感光矩阵
标号处的是感光矩阵,光信号在这里转化成电信号,经过各种处理,这些信号存储
成由一个个像素点表示的数字图像。
(8) 数据输出信号
标号处包含了 DSP 处理单元,它会根据控制寄存器的配置做一些基本的图像处理运
算。这部分还包含了图像格式转换单元及压缩单元,转换出的数据最终通过 Y0-Y9 引
脚输出,一般来说我们使用 8 根据数据线来传输,这时仅使用 Y2-Y9 引脚,OV5640
与外部器件的连接方式见图 464。
(9) 数据输出信号
图464
8 位数据线接法
标号⑤处为 VCM 处理单元,他会通过图像分析来实现图像的自动对焦功能。要实现
自动对焦还需要下载自动对焦固件到模组,后面摄像头实验详细介绍这个功能。
46.2.3 SCCB 时序
外部控制器对 OV5640 寄存器的配置参数是通过 SCCB 总线传输过去的,而 SCCB 总线跟 I2C
十分类似,所以在 STM32 驱动中我们直接使用片上 I2C 外设与它通讯。SCCB 与标准的 I2C 协
议的区别是它每次传输只能写入或读取一个字节的数据,而 I2C 协议是支持突发读写的,即在
一次传输中可以写入多个字节的数据(EEPROM 中的页写入时序即突发写)。关于 SCCB 协议的
完整内容可查看配套资料里的《SCCB 协议》文档,下面我们简单介绍下。
SCCB 的起始、停止信号及数据有效性
SCCB 的起始信号、停止信号及数据有效性与 I2C 完全一样,见图 465 及图 466。
起始信号:在为高电平时,出现一个下降沿,则开始传输。
停止信号:在为高电平时,出现一个上升沿,则停止传输。
数据有效性:除了开始和停止状态,在数据传输过程中,当为高电平时,必
须保证上的数据稳定,也就是说,上的电平变换只能发生在为
低电平的时候,的信号在为高电平时被采集。
图465SCCB 停止信号
图466SCCB 的数据有效性
SCCB 数据读写过程
在 SCCB 协议中定义的读写操作与 I2C 也是一样的,只是换了一种说法。它定义了两种写操作,
即三步写操作和两步写操作。三步写操作可向从设备的一个目的寄存器中写入数据,见图 467。
在三步写操作中,第一阶段发送从设备的 ID 地址+W 标志(等于 I2C 的设备地址:7 位设备地址
+读写方向标志),第二阶段发送从设备目标寄存器的 16 位地址,第三阶段发送要写入寄存器的
8 位数据。图中的"X"数据位可写入 1 或 0,对通讯无影响。
而两步写操作没有第三阶段,即只向从器件传输了设备 ID+W 标志和目的寄存器的地址,见
图 468。两步写操作是用来配合后面的读寄存器数据操作的,它与读操作一起使用,实现 I2C
的复合过程。
图467SCCB 的三步写操作
图468SCCB 的两步写操作
两步读操作,它用于读取从设备目的寄存器中的数据,见图 469。在第一阶段中发送从设备的
设备 ID+R 标志(设备地址+读方向标志)和自由位,在第二阶段中读取寄存器中的 8 位数据和写
NA 位(非应答信号)。由于两步读操作没有确定目的寄存器的地址,所以在读操作前,必需有一
个两步写操作,以提供读操作中的寄存器地址。
图469SCCB 的两步读操作
可以看到,以上介绍的 SCCB 特性都与 I2C 无区别,而 I2C 比 SCCB 还多出了突发读写的功能,
所以 SCCB 可以看作是 I2C 的子集,我们完全可以使用 STM32 的 I2C 外设来与 OV5640 进行
SCCB 通讯。
46.2.4 OV5640 的寄存器
控制 OV5640 涉及到它很多的寄存器,可直接查询《ov5640datasheet》了解,通过这些寄存器
的配置,可以控制它输出图像的分辨率大小、图像格式及图像方向等。要注意的是 OV5640 寄
存器地址为 16 位。
官方还提供了一个《OV5640_自动对焦照相模组应用指南(DVP_接口)__R2.13C.pdf》的文档,
它针对不同的配置需求,提供了配置范例,见图 4610。其中 write_SCCB 是一个利用 SCCB 向
寄存器写入数据的函数,第一个参数为要写入的寄存器的地址,第二个参数为要写入的内容。
图4610 调节帧率的寄存器配置范例
46.2.5 像素数据输出时序
对 OV5640 采用 SCCB 协议进行控制,而它输出图像时则使用 VGA 时序(还可用 SVGA、
UXGA,这些时序都差不多),这跟控制液晶屏输入图像时很类似。OV5640 输出图像时,一帧
帧地输出,在帧内的数据一般从左到右,从上到下,一个像素一个像素地输出(也可通过寄存器
修改方向),见图 4611。
图4611 摄像头数据输出
例如,图 4612,若我们使用 Y2-Y9 数据线,图像格式设置为 RGB565,进行数据输出时,Y2-
Y9 数据线会在 1 个像素同步时钟 PCLK 的驱动下发送 1 字节的数据信号,所以 2 个 PCLK 时钟
可发送 1 个 RGB565 格式的像素数据。像素数据依次传输,每传输完一行数据时,行同步信号
HREF 会输出一个电平跳变信号,每传输完一帧图像时,VSYNC 会输出一个电平跳变信号。
图4612DVP 接口时序
FPGA 配置 OV5640 摄像头及 RGB 图像数据采集
本文设计思想采用明德扬至简设计法。在做摄像头数据采集处理之前,需
要配置 OV5640 传感器内部寄存器使其按要求正常工作,详细内容请参见
《OV5640 自动对焦照相模组应用指南》。首先要关注 OV5640 的上电时序:
主控制器控制 RESET PWDN 两个信号按上电时序要求变化,之后允许
ov_config 模块配置内部寄存器。这里始终将 PWDN 拉低。实验中将摄像头
分辨率设置为 720p,即 1280*720 ,帧率为 30fps,图像输出格式是
RGB565。此时摄像头输入时钟 XCLK 频率 24MHz,输出像素时钟 PCLK 为
84MHz。由于实验使用的是 OV5640 双目摄像头模组,且 XCLK 由外部
24MHz 晶振给出,故 ov_config 模块整体结构及端口定义如下:
setup 模块构造上电时序,两个 reg_config 分别配置一个 OV5640 摄像
头。SCCB_interface 子模块负责 SCCB 协议读写寄存器数据。由于 OV5640
摄像头内部寄存器地址为 16 位,因此写寄存器地址阶段分高低字节两次写入。
datasheet 中给出了 OV5640 的 SCCB ID 地址(写),故读 ID 地址为
0X79。