您的位置 首页 被动

根据STM32的OV7670摄像头总结

一、OV7670模块:介绍一下OV7670传感器:CMOS器件;标准的SCCB接口,兼容IIC接口;内置感光阵列,时序发生器,AD转换器,模拟信号处理,数字信号处理器…..大致工作过程

  一、OV7670模块:

  介绍一下OV7670传感器:CMOS器材;规范的SCCB接口,兼容IIC接口;内置感光阵列,时序发生器,AD转换器,模拟信号处理,数字信号处理器…..

  大致作业进程:光照射到感光阵列发生相应电荷,传输到相应的模拟信号处理单元,再由AD转换为数字信号,在经由数字信号处理器插值到RGB信号,最终传输到屏幕上……

  先了解一下根底知识:现在市面上的OV7670模块分两种:1、带FIFO芯片;2、不带FIFO芯片。当然带FIFO的要贵一点~下面介绍带FIFO和不带FIFO的作业原理:

    

  图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数据)

  具体请看代码注释~

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/beidong/183868.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部