基于STM32的OV7670摄像头总结_ov7670 dma

图1:不带FIFO

图2:带FIFO

下面就讲解这两种方式的适用范围:

  • 不带FIFO:这种方法最简单,最直接,但是最不好实现的方法,原因是多数的CMOS芯片(如OV7670)的时钟速度可以高达24M,一般单片机的IO口速度根本达不到(stm32的IO速度,寄存器比库函数快,博主之前测,用库函数IO口速度好像是2.5Mhz,而用寄存器IO口速度是8M吧,速度相差较大)。当然,高级的MCU,如ARM9以上或者DSP图像处理芯片等,本身处理速度快,内存大而且有的还带camera接口,可以不用带FIFO。主要是人家价格也高啊

  • 但也不是不是完全没有办法在低速上实现采集,方法也很简单,那么就是降低CMOS 的输出速度,不过这需要靠外部的晶振和内部的PLL 电路以及像素时钟速度,帧速等多个寄存器共同设置,并且要和MCU 的IO 速度匹配才可实现。但不建议这么做,原因是:这种寄存器设置将带来更多的学习困难和理解困难,并导致硬件图像的采集速度可能下降到0.5 帧以下,同时带来图像失真的可能。

  • 还有一种方法就是DMA方式采集,代码复杂,速度在5-10帧左右。(博主本来想用该方法的,可是基础差,调试困难。会接着调试~)

  • 注:部分CMOS 时钟速度不快,可以单片机直接采集,如OV7660,但该芯片已经停产。

  • 带FIFO:由于采用了FIFO 做为数据缓冲,数据采集大大简便,用户只需要关心是如何读取即可,不需要关心具体数据是如何采集到的,这样可减小甚至不用关心CMOS 的控制以及时序关系,就能够实现图像的采集。

注意:FIFO不具备地址功能,因此他也就不具备数据的定位(选址)读取功能,所以不可能有真正的数据处理能力!

总的来说:带FIFO比不带FIFO操作起来更简单,8位MCU也能胜任。下面我们参考战舰摄像头实验(带FIFO的OV7670模块)

二、OV7670的图像数据输出格式:(参考战舰开发指南)

先简单了解几个定义:

  • VGA:分辨率为640*480的输出模式
  • QVGA:分辨率为320*240的输出格式
  • QQVGA:分辨率为160*120的输出格式
  • PCLK:像素时钟,一个PCLK时钟,输出1个像素或半个像素
  • VSYNC:帧同步信号
  • HREF/HSYNC:行同步信号

先看行输出时序:


图3:OV7670行输出时序

图3中,图像数据在HREF为高的时候输出,当HREF变高后,每一个PCLK时钟,输出一个字节数据。比如我们采用VGA时序,RGB565格式输出,每两个字节组成一个像素的颜色(高字节在前,低字节在后),这样每行输出总共有640*2个PCLK周期,输出640*2个字节。

在来看
帧时序:

图4:OV7670帧时序

在图4中,VSYNC位高时产生一个帧同步信号,故当产生两个帧同步信号时,一帧数据输出完成。注意:图中的HSYNC和HREF其实是一个引脚产生的信号,只是在不同的场合下面,使用不同的信号方式。

三、战舰OV7670模块原理图讲解:

图5:战舰OP7670模块原理图

在图5中,我们用3种颜色的线,将OV7670模块原理图中几个重要芯片同MCU“连”了起来。不多说,看图~

四、存储和读取图像数据的过程及程序讲解(参考原子哥的开发指南和代码)
       对于该模块,我们只关心两点:1、如何存储图像数据;2、如何读取图像数据

1、存储(OV7670往FIFO中写数据)

战舰OV7670模块存储图像数据的过程为:等待OV767同步信号->FIFO写指针复位->FIFO写使能->等待第二个同步信号->FIFO写禁止,通过以上5个步骤就可以完成一帧图像的存储

2、读取(MCU从FIFO中读取数据)

读取过程:FIFO读指针复位->给FIFO读时钟(FIFO RCLK)->读取第一个像素高字节->给FIFO读时钟(FIFO RCLK)->读取第一个像素低字节->给FIFO读时钟(FIFO RCLK)->读取第二个像素高字节->循环读取剩余像素->结束

比如QVGA模式,RGB565格式,我们总共循环读取320*240*2次,就可以读取一帧数据,把这些数据写入LCD模块,就可以看到摄像头的画面了。

程序讲解:(主要是OV7670对FIFO的写控制和MCU从FIFO中读取数据)

1、利用外部中断来对OV7670进行写操作控制

图6:外部中断对OV7670进行写控制

详细解释请看代码注释~

2、MCU从FIFO中读取数据(更新LCD显示)

图7:更新LCD显示函数(MCU读取FIFO数据)

详细请看代码注释~

欢迎下载研华科技主题白皮书: 【深度剖析】研华多核异构ARM核心板之机器视觉应用案例 [摘要] TI Sitara系列AM5718/5728是采用ARM+DSP多核异构架构,可以实现图像采集、算法处理、显示、控制等功能,具有实时控制、低功耗、多标准工业控制网络互联、工业人机界面的优化、2D/3D图形处理、1080 HD的高清视频应用、工业控制设备的小型化等特点。广泛应用在机器视觉、工业通讯、汽车多媒体、医疗影像、工厂自动化、工业物联网等领域。 https://www.eefocus.com/resource/advantech/index.p... 前言: 使用单片机方案的简单图像处理在很多情况下有应用,比如颜色的跟踪识别,给智能控制的机器人来的视觉系统,能使设计更加的智能化。在各种机器人大赛中都有图像处理应用的身影,低调却非常的有用。虽然只是对图像的颜色跟踪,但是这样却可以应用到很多的场合。 本方案介绍的是基于Colibri_GD32F207+OV7670+SPI_LCD的图像处理->颜色跟踪。 系统框图如下: 实物PIN脚连接图: 管脚配置: 设计应用描述及心得总结: 1. Colibri_GD32F207这个板子的MCU是有camera的接口的,但是没有引出来,使用使用了FIFOOV7670摄像头,数据口使用GPIO。OV7670是30W的摄像头最大是支持VGA 640*480的像素,但是应为液晶的分辨率只有320*240,所以讲OV7670配置为QVGA 320*240的像素输出。 2. 同样板子上的MCU是有LCD 的接口的,但是也是应为没有将这部分的IO全部引出来,所以使用SPI LCD ,这样可以节省很多的 IO,但是也造成了使用GD32f207处理图片的时候速度变慢。如果这部分做些修改,处理的速度将达到每秒7帧以上。 3.本设计发挥了GD32F207的最大的速度,主频配置为了120MHZ。 4. 本设计集成了对图片设定的识别颜色条件为:Condition={30,70,130,255,100,170,40,40,320,240}; 5. 识别使用的是HSV空间,这个RGB的区别是,HSV更加符合人眼对颜色的认知模式。H是色调,S是色饱度,V是色温。其中的S值会受到环境亮度的影响。 6. 识别的算法做了对目标的大小,坐标等的识别,集成了图像搜索的膨胀、腐蚀算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值