[笔记]OV7725入门使用

写在前面

最近在研究OV7725摄像头的使用,通过学习有了一定的了解,故记录下来。通过使用STM32f103单片机为主控,控制OV7725实时显示图像到野火3.2寸LCD。

摄像头简介

摄像头图像传感器件可以分为CCD和CMOS,现在的智能手机大部分都是CMOS类型的数字摄像头。CCD和CMOS的区别,有以下几点:

  • 成像材料:CCD是“电荷耦合器件”(Charge Couple Device)的简称,而CMOS是“互补金属氧化半导体”(Complementary Metal Oxide Semiconductor)的简称。
  • 功耗:CCD的像素由MOS电容构成,读取电荷信号,需要使用电压相当大(至少12V)的二相或三相或四相时序脉冲信号,才能有效的传输电荷。因此CCD的采集图像系统除了要多个电源之外,其外设电路也会消耗相当大功耗。而CMOS光电传感器只需要使用一个单电源5V或3V,功耗小,仅为CCD的1/8~1/10.
  • 成像质量:CCD制作技术起步早,技术成熟,质量高。CMOS主要缺点是噪声高及灵敏度低,不过现在CMOS技术也在提升。


OV7725的硬件组成

OV7725摄像头模块带有FIFO,其硬件由OV7725内部图像传感器,FIFO组成,其中内部图像传感器是不需要我们去了解的,其利用光学原理,把光信号转换为电信号,经过各种处理,这些信号存储成一个个像素点表示的数字图像,我们在使用OV7725时不需要了解图像传感器。
FIFO是一个“缓冲器”,本质是SRAM,因为STM32F1系列单片机主频低,内部SRAM容量低等原因,处理OV7725数据时较慢,无法及时处理,所以需要使用一个缓冲器,用来起缓冲作用,OV7725输出的数据首先存储在FIFO中,当存储一帧数据时,STM32开始读取数据,读完数据,FIFO再次被写入一帧数据,依次反复,完成摄像头显示。而STM32F4系列单片机的主频高,并且内含DCMI外设,可以使用DCMI外设直接控制摄像头,所以使用STM32F4系列单片机不需要使用FIFO。

数据传输时序

在OV7725的使用种涉及多个时序控制:
一是SCCB时序,这是STM32和OV7725之间的通讯方式,STM32通过SCCB时序向OV7725写入相关寄存器配置。
二是FIFO读写时序,FIFO的写入端连接的是OV7725输出端连接的是STM32。
三是摄像头输出的VGA时序,摄像头的输出VGA时序因为和FIFO写入时序类似,所以直接连接FIFO输入端。

SCCB时序

SCCB时序类似I2C协议,其实直接可以使用I2C协议代替SCCB,在OV7725的控制中,使用模拟I2C代替SCCB协议。
STM32通过SCCB协议向OV7725写入相关的寄存器配置,初始化OV7725等。

FIFO时序

首先要知道FIFO芯片的引脚:

image-20200307185511765

FIFO芯片同时支持写和读,所以它的输入和输出引脚是独立的,DI[0:7]和DO[0:7]。

写时序

写时序,当 WE引脚为低电平时,FIFO的写入处于使能状态,随着WCK的运转,DI[0:7]表示的数据将会按照地址递增的方式存入FIFO,当 WE引脚为高电平时候,关闭输入,FIFO将不会被写入。写数据时候,通常会把 WRST设置为低电平,将写指针复位到0地址。

image-20200307190034429

读时序

OERE引脚均为低电平时,输出处于使能状态,随着RCK时钟的运转DO[0:7]将数据按地址递增的方式输出。读数据的时候,通常会把 RRST设置低电平,将读指针复位到0地址。

image-20200307190306730

VGA时序

VGA时序是OV7725输出图像使用的时序,D2-D9 数据线在 PCLK 在上升沿阶段维持稳定, 并且会在 1 个像素同步时钟 PCLK 的驱动下发送 1 字节的数据信号,所以 2 个 PCLK 时钟可发送 1 个 RGB565 格式的像素数据。当 HREF 为高电平时, 像素数据依次传输,每传输完一行数据时,行同步信号 HREF 会输出一个电平跳变信号间隔开当前行和下一行的数据;一帧的图像由 N 行数据组成, 当 VSYNC 为低电平时,各行的像素数据依次传输, 每传输完一帧图像时,VSYNC 会输出一个电平跳变信号 。因为VGA时序与FIFO的写时序类似,故OV7725的输出接到FIFO的输入。

image-20200307190655201


OV7725模块引出引脚

image-20200307191010536

从上图 可了解到, 与 OV7725 传感器像素输出相关的 PCLK 和 D[0:7]并没有引出, 因为这些引脚被连接到了 FIFO 的输入部分, OV7725 的像素输出时序与 FIFO 的写入数据时序是一致的,所以在 OV7725 时钟 PCLK 的驱动下, 它输出的数据会一个字节一个字节地被 FIFO 接收并存储起来。其中最为特殊的是 WEN 引脚,它与 OV7725 的 HREF 连接到一个与非门的输入,与非门的输出连接到 FIFO 的 WE 引脚,因此,当 WEN 与 HREF 均为高电平时, FIFO 的 WE为低电平,此时允许 OV7725 向 FIFO 写入数据。

外部控制器通过控制 WEN 引脚, 可防止 OV7725 覆盖了还未被控制器读出的旧 FIFO数据。另外, 在 OV7725 输出时序中, 只有当 HREF 为高电平时, PCLK 驱动下 D[0:7]线表示的才是有效像素数据,因此,利用 HREF 控制 FIFO 的 WE 可以确保只有有效数据才被写入到 FIFO 中 。


OV7725模块采集图像过程

  • 利用 SIO_C、 SIO_D 引脚通过 SCCB 协议向 OV7725 的寄存器写入初始化配置。
  • 初始化完成后, OV7725 传感器会使用 VGA 时序输出图像数据, 它的 VSYNC 会首先输出帧有效信号(低电平跳变) , 当外部的控制器(如 STM32) 检测到该信号时, 把 WEN 引脚设置为高电平,并且使用 WRST 引脚复位 FIFO 的写指针到 0地址。
  • 随着 OV7725 继续按 VGA 时序输出图像数据, 它在传输每行有效数据时, HREF引脚都会持续输出高电平, 由于 WEN 和 HREF 同时为高电平输入至与非门, 使得其连接到 FIFO WE 引脚的输出为低电平,允许向 FIFO 写入数据, 所以在这期间, OV7725 通过它的 PCLK 和 D[0:7]信号线把图像数据存储到 FIFO 中, 由于前面复位了写指针,所以图像数据是从 FIFO 的 0 地址开始记录的。
  • 各行图像数据持续传输至 FIFO, 受 HREF 控制的 WE 引脚确保了写入到 FIFO 中的都是有效的图像数据, OV7725 输出完一帧数据时, VSYNC 会再次输出帧有效信号,表示一帧图像已输出完成 。
  • 控制器检测到上述 VSYNC 信号后,可知 FIFO 中已存储好一帧图像数据, 这时控制 WEN 引脚为低电平,使得 FIFO 禁止写入, 防止 OV7725 持续输出的下一帧数据覆盖当前 FIFO 数据 。
  • 控制器使用 RRST 复位读指针到 FIFO 的 0 地址,然后通过 FIFO 的 RCLK 和DO[0:7]引脚, 从 0 地址开始把 FIFO 缓存的整帧图像数据读取出来。 在这期间,OV7725 是持续输出它采集到的图像数据的,但由于禁止写入 FIFO,这些数据被丢弃了。
  • 控制器使用 WRST 复位写指针到 FIFO 的 0 地址,然后等待新的 VSYNC 有效信号到来,检测到后把 WEN 引脚设置为高电平, 恢复 OV7725 向 FIFO 的写入权限,OV7725 输出的新一帧图像数据会被写入到 FIFO 的 0 地址中, 重复上述过程。

摄像头的整个控制过程:
image-20200307191504642

image-20200307191513989



[参考文献]

  • 《野火@零死角玩转STM——F103指南者》

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×