目录
1.OV7670 一般摄像头模块
1.1 简介
1.2 管脚定义
1.3 控制方式说明
1.4 采集图像的基本方法
2.OV7670 带 FIFO 摄像头模块
2.1 简介
2.2 管脚定义
2.3 控制方式说明
2.4 图像采集的基本方法
3.问题解答
3.1 图像采集难吗
3.2 学习图像方面的知识需要哪些基础
3.3 初学者遇到问题该怎么解决
3.4 模块提供那些资料
3.5 单片机能够真正的采集图像吗
3.6 带 FIFO 和不带 FIFO 的模块到底哪个好,有什么区别
3.7 模块上有晶振好,还是没晶振好
3.8 摄像头寄存器该怎么设置
3.10 如果想真正实现图像的采集并且能够处理图像数据该如何做
3.11 骑飞电子的那个模块能够适合飞思卡尔小车的比赛
3.12 模块输出到底是模拟的还是数字的
3.15 如何检测摄像头模块是否损坏
3.16 摄像头模块和模组的区别是什么
1.OV7670 一般摄像头模块
1.简介:
OV7670 一般模块指低成本数字输出 CMOS 摄像头,其摄像头包含 30w 像素的 CMOS 图像感光芯片,3.6mm 焦距的镜头和镜头座,板载CMOS 芯片所需要的各种不同电源(电源要求详见芯片的数据文件),板子同时引出控制管脚和数据管脚,方便操作和使用。
图 1.OV7670 一般模块
2.管脚定义:
控制传感器所需的管脚定义如下:
3V3-----输入电源电压(推荐使用 3.3,5V 也可,但不推荐使用)
GDN-----接地点
SIO_C---SCCB 接口的控制时钟(注意:部分低级单片机需要上拉控制,和
SIO_D---SCCB 接口的串行数据输入(出)端(注意:部分低级单片机需要上拉控制,和 I2C 接口类似)
VSYNC---帧同步信号(输出信号)
HREF----行同步信号(输出信号)
PCLK----像素时钟(输出信号)
XCLCK---时钟信号(输入信号)
D0-D7---数据端口(输出信号)
RESTE---复位端口(正常使用拉高)
PWDN----功耗选择模式(正常使用拉低)
3.控制方式说明
采集图像数据需要严格按照 OV 公司的芯片时序进行,这些时序包括:
(1) SCCB 通讯时序,其作用是设置芯片内部寄存器,以控制图像的各种所需功能。其时序和一般的 I2C 时序相似,部分低级单片机要接上拉电阻。
(2) 行输出时序
行输出时序可用来控制一行像素的输出情况,HREF 即一行输出的开始和结束信号,同时在像素时钟的同步下,输出 8 位的像素信号
(3) 全帧输出下的时序情况:(VGA 为例)
该图显示的是一副图像输出的情况下,各控制信号和数据信号的输出。图中,VGA=640X480 大小情况下,帧同步信号,行同步信号(HREF 或者 HSYNC,注:HSYNC 在其它场合下使用,CMOS 可以设置,更多时候用HREF 即可)如图:
4.采集图像的基本方法
(1)单片机直接采集:
这种方法是最简单,最直接,但也是最不好实现的方法,原因是多数的 CMOS 芯片(如 ov7670)的时钟速度可高达 24M,一般单片机的 IO 端口速度根本不可能达到,所以需要高速 MCU。这对多数用户来讲有些不现实。但也不是完全没有办法在低速上实现采集,方法也很简单,那么就是降低 CMOS 的输出速度,不过这需要靠外部的晶振和内部的 PLL 电路以及像素时钟速度,帧速等多个寄存器共同设置,并且要和 MCU 的 IO 速度匹配才可实现。但不建议这么做,原因是:这种寄存器设置将带来更多的学习困难和理解困难,并导致硬件图像的采集速度可能下降到0.5帧以下,同时带来图像失真的可能。
注:部分 CMOS 时钟速度不快,可以单片机直接采集,如 OV7660,但该芯片已经停产。
(2)高级 32 位芯片直接使用
某些 32 位的 ARM 核,MIPS 核,x86 核直接带有 camera 接口,可以直接使用,典型的如三星的 arm9,sc2440 等。
该采集方法请参考具体的芯片器件数据手册。
(3)DMA 方式的采集方法
这种方法一般需要具有 DMA 功能的 16 位以上的高级单片机来实现,通过DMA 方式,直接从总线或者 IO 口采集数据送入内存,内存中的数据可以存储,计算,保留,或者供显示使用。
(4) 间接采集并显示的方法(推荐使用)
这种方法是最容易实现,能够直接看到采集的图像内容。实现采集就显示的功能,这种方法具有较高帧速,一般 QVGA 可保证在 30 帧左右的速度。实际上,这种间接的办法其实就是将CMOS输出的数据直接送到显示屏(如TFT 显示器的内存中)进行显示的,数据并不经过 MCU(所以对 MCU 而言是间接采集),也无法经过 MCU,因此可以达到较高的帧速。
2.OV7670 带 FIFO 模块
1.简介:
OV7670 带 FIFO 模块,是针对慢速的 MCU 能够实现图像采集控制推出的带有缓冲存储空间的一种模块。这种模块增加了一个 FIFO(先进先出)存储芯片,同样包含 30w 像素的 CMOS 图像感光芯片,3.6mm 焦距的镜头和镜头座,板载 CMOS 芯片所需要的各种不同电源(电源要求详见芯片的数据文件),板子同时引出控制管脚和数据管脚,方便操作和使用。
2.管脚定义:
控制传感器所需的管脚定义如下:
3V3-----输入电源电压(推荐使用 3.3,5V 也可,但不推荐)
GDN-----接地点
SIO_C---SCCB 接口的控制时钟(注意:部分低级单片机需要上拉控制,和I2C 接口类似)
SIO_D---SCCB 接口的串行数据输入(出)端(注意:部分低级单片机需要上拉控制,和 I2C 接口类似)
VSYNC---帧同步信号(输出信号)
HREF----行同步信号(输出信号)
PCLK----像素时钟(输出信号)
XCLCK---时钟信号(输入信号)
D0-D7---数据端口(输出信号)
RESTE---复位端口(正常使用拉高)
PWDN----功耗选择模式(正常使用拉低)
STROBE—拍照闪光控制端口(正常使用可以不需要)
FIFO_RCK---FIFO 内存读取时钟控制端
FIFO_WR_CTR----FIFO 写控制端(1 为允许 CMOS 写入到 FIFO,0 为禁止)
FIFO_OE----FIFO 关断控制
FIFO_WRST—FIFO 写指针服务端
FIFO_RRST—FIFO 读指针复位端
3.控制方式说明
由于采用了 FIFO 做为数据缓冲,数据采集大大简便,用户只需要关心是如何读取即可,不需要关心具体数据是如何采集到的,这样可减小甚至不用关心 CMOS 的控制以及时序关系,就能够实现图像的采集。
控制时序如下:
4.采集图像的基本方法
(1)单片机直接采集:
用户只需要按时序图控制相关的几个控制引脚即可,可以很方便的使用在低速单片机上,另外一个好处是,可以直接 IO 口读取数据,读出的数据可以直接送屏,也可以经过 MCU 简单处理;当然也可以不经过MCU,直接送到屏等外围器件使用。
3.问题解答
很多用户在使用本公司的模块时,遇到不少问题,这些问题既有技术问题,也和用户本身知识结构相关,针对这些集中的问题,对此进行问题汇总,并一一解答,希望用户在使用时能够了解。
1. 图像采集难吗?
答:这个问题对初次接触的用户来讲经常会遇到。难和容易都是相对的,它和许多相关的基础知识紧密相联系。从涉及到的学科和内容上来讲,图像采集或者图像处理(硬件)可以讲是数字电子学中最难的,因为它涉及到光学,如颜色,白平衡,色空间,镜头(这些概念在设置传感器寄存器的时候会大量出现)等;涉及到传感器基本原理,如 CMOS 和 CCD的原理和区别;涉及到电子学中的难题,如:海量数据量的传输、存储,涉及到主控制芯片的选择问题,如速度,和处理能力;涉及到电路板的高速布板问题;涉及到图像的编码和解码等算法问题。
特别是当像素不断增加的时候,这些问题会更加突出,因此客观的讲,如果和其它的传感器或者模块相比较,例如温度,无线模块等等还是有一定难度的,这些模块只要给出接口,一般都容易知道如何处理,但图像并不如此。然而,难度是和相关基础知识的多少成反比例的,掌握的相关基础知识越多,就会越觉得简单。
2. 学习图像方面的知识需要哪些基础?
答:首先,基本的光学知识要先了解,比如:什么是颜色空间,RGB,YUV是什么,这些基础的必须了解;其次,扎实的电子学基础,比如:单片机基本上运用自如,时序图看起来没有任何难度;另外,较好的编程能力和读程序能力,这也是硬件图像的基础;最后,上位机中对图形图像的画法,处理等也有较深刻的认识。
3. 初学者遇到的问题改怎么解决?
答:很多用户都是初次学习图像硬件采集的相关内容,甚至刚刚开始单片机学习的用户也想学习这方面的内容。而实际上,他们遇到的问题很雷同,比如,图像中的一些基本概念如 RGB,YUV,模拟图像,数字图像等就比较模糊,电子学中如 FIFO 是什么,也经常被问到。其实,这些简单的基础知识或者概念只要 Google 或者 Baidu 一下,就可以快速找到大量的相关资料。
4. 模块提供的是那些资料?
答:提供图像芯片的数据文件(这个很重要),这里要做个说明,那就是相关资料很少,得来不易。原因是:实际上这些数据文件都是 OV 公司不经意间流出的东西,做为个人,OV 公司一般根本不会提供这些内容的,它只和对应的有芯片需求的公司签订协议,提供相关资料,并且有保密协议。我们获得的资料也是网上公开后得到的。除此之外,我们还提供中文的数据资料文件,SCCB 接口、模块定义、模块原理、模块尺寸等资料。此外,提供了一个基于 C8051F330 的驱动程序,该程序的原理是将模块数据直接送屏显示。网上有人做过 AVR,STM32 单片机的驱动,原理类似,请自己搜索,至于用 8051 等单片机的驱动程序,我们没有做过,但触类旁通,只要理解了原理,驱动方法其实都是一样的。
5. 单片机能够真正的采集图像吗?
答:这个明确的讲是不行的,特别是 8 位的单片机那更是不行的,必须寻求两种解决办法,一种是增加一个缓冲,如 FIFO,另外一个就是使用高速,如采用 32 位 MCU。 8 位单片机实现的多数仅仅是提供一个 SCCB总线读取或者设置的功能。即使是 32 位,比如大家都喜欢的 stm32,它也不能直接用 IO 口采集,因为 IO 速度还是不行,骑飞电子家族曾经做过实验,用 IO 采集,实现的刷屏速率不到 1 帧,基本没有适用价值,除非使用 DMA 方式,也就是使用总线的带宽速度,可以实现采集,但这个速度也只能在 5-10 帧左右!另外一个问题就是,即使采集到,由于一副图像的数据量很大,QVGA的数据量是 320x240x2,你放到哪里呢?所以只能寻找 32 位以上的 MCU。
6. 带 FIFO 和不带 FIFO 的模块到底哪个好,有什么区别?
答:按照上述几个问题,基本能够理清一个思路,那就是,如果针对 8位单片机,图像采集是不现实的,只能用更高级的 MCU 或者采取更灵活的处理手段才能实现真正的图像采集。那么这样就容易明白了,用那种摄像头是根据你的需求来确定的,如果你就是想显示下图像,8 位足够,不带 FIFO 的摄像头足矣,带个 TFT显示屏即可! 如果你的芯片是高级 MCU,ARM9 以上或者 DSP,那么也可以选择这个不带 FIFO 模块的,因为本身高档芯片的速度很快,存储空间也很大,足够直接采集图像数据!如果还想对获取的图像数据做些非常简单的处理(注意是非常简单),请选择 FIFO 摄像头,由于 FIFO 不具备地址功能,因此他也就不具备数据的定位(选址)读取功能,所以不可能有真正的数据处理能力!请切记!!!
另外,带 FIFO 摄像头模块避免了需要了解更多图像输入或者采集的原理,降低了学习难度,用户只需知道如何从 FIFO 中读取数据即可,因此更建议初学者使用该模块!
总结一下就是:两种模块的选择,要具体看项目的需求和目标来确定。
7. 模块上有晶振好,还是没晶振好?
答:晶振选择也是根据外围电路的能力来确定的。由晶振提供时钟(注:4-24M 都可,尽量是 4 的倍数,CMOS 内部有 PLL 功能)信号是可行的。但当前大多数的 MCU 都具有直接输出频率信号的能力,比如,有些芯片,如 CYPRESS ,C8051f 等等,而且这个频率信号一般非常稳定,所以强烈建议用这样的时钟信号直接供给摄像头。至少,如果能输出 50%占空比的 PWM,那么这个也是可以直接供给 CMOS 芯片使用的。
所以,带不带晶振根本没有本质区别,至于好坏,除了多增加成本外,别无它用。
8. 摄像头寄存器该怎么设置
答:没有其它简洁的办法,只能参考 OV 公司的写的很烂数据手册,慢慢阅读理解和消化。稍快一点的办法就是按照骑飞电子提供的一个 Demo,针对其中寄存器的初始化设置和与其相对应的数据手册仔细推敲。当然也可以不去理解,直接使用即可!
9. 骑飞电子模块提供的 Demo 输出的数据是什么格式的?
答:是 RGB565,QVGA 格式的。这样能够很好的和 320x240 的显示屏直接相匹配,方便使用和参考!
10.如果想真正实现图像的采集并且能够处理图像数据该如何做?
答:按下面几个方案选择:
(1)如果想用 8 位实现采集和处理,基本不现实,简单处理的话,用带FIFO 的摄像头;
(2)32 位的高速芯片可以,有些直接有图像传感器接口,有些必须寻找一些办法,如骑飞电子基于 stm32f103 的 DMA 方式;
(3)真正的图像采集和处理,使用 DSP 图像采集处理芯片,如 TI 的和ADI 公司的芯片,但这些芯片价格超高,单片都在 80-200 元之间;
(4)FPGA 也可以实现类似功能,但如果要有速度和处理能力,价格也是几何数的增长;
11.模块那个能够适合飞思卡尔小车的比赛?
答:根据不少用户的反应,现在看来,选择带 FIFO 的头还是更现实些!
12.模块输出到底是模拟的还是数字的
答:是数字摄像头,它的输出是标准格式的,具体可以参考数据手册。至于模拟摄像头一般如 AV 输出,有两种制式,使用时需要编码和解码才能和大多数的数字芯片或者屏连接。
13.如何检测摄像头模块是否损坏
答:通电,加时钟信号,REST 端拉高,PSWN 接地,示波器检测数据端是否有输出,如果有,说明 CMOS 是好的。
14. 摄像头模块和模组的区别是什么
答:
模块就是将 CMOS 传感芯片,外围电路集成到一块 PCB 板子上,需要使用的控制管脚引出,装上摄像头,即称之为模块。
模组就是传感器和微型的镜头集成在一起,有软线 FPC 线引出管脚,但没有外围电路,使用时需要主板提供外围电路才能正常工作。
如果模组使用转接板,也可以达到模块的方便使用的效果,转接板上已经设计好了模组的外围电路,引出了和模块定义一样的管脚,方便控制和操作。