只做收藏使用
原博客地址
侵权删
点击打开链接http://blog.csdn.net/lxk7280/article/details/26975233
凭借着OV7620,将已经调好速度控制和角度控制的车子能跑起来了。基础功能实现后就开始对车子优化了。
一个好的人眼睛最重要,同样对于一个好的平衡车,摄像头传感器最重要。因此我决心首先做的是对摄像头的优化。
方针:
OV7620 --> OV7725(鹰眼摄像头) 使用:KEIL 鹰眼摄像头 超核库
OV7620的缺点:
OV7620是1/3”CMOS彩 {MOD}/黑白图像传感器。它支持连续和隔行两种
扫描方式,VGA与QVGA两种图像格式;最高像素为664×492,
帧速率为30fps。而他的缺点正是在此,帧速率太低。每秒中只能产生30唱图像。可以确定他的
VSYNC信号为30HZ。
帧速率不高为何是缺点:
因为车子跑到一定速度之后,图像变化很快,帧的速率低导致了道路实时性差,不能够及时刷新道路情况。所以会影响智能车的提速。
鹰眼摄像头(OV7725)的优点:
1.高达150HZ的帧频率。
2.硬件二值化。(也有人认为是缺点。)
3.BGA封装:
但是鹰眼的制造商野火,采用捆绑销售,每次买的时候必须购买套装。不过商家也是为了购买者着想,因为很多人不会自己驱动OV7725,只会对例程进行修改,不会移植,这样的购买者买套件确实也不失为一个好方法。
不过博主比较穷,在一番软磨之下,商家给我单卖了一个鹰眼摄像头(OV7725),在此谢谢商家了。
驱动鹰眼的步骤:
1.知道该款摄像头的工作特点和方式。
第一大步:理解时序图。
2.在我介绍OV7620的使用(http://blog.csdn.net/lxk7280/article/details/22207001)的时候,就说了理解时序图是驱动一款摄像头的重中之重。尤其是对于鹰眼这款比较特殊的摄像头。
接下来一个必须理解的地方,否则就驱动不了该款摄像头。
那就是:鹰眼摄像头的一个PCLK信号传来的时候,会传输8个像素点。而不是OV7620的一个PCLK信号,对应1个像素点。
So:如果一行为80个点,那么一个行信号中只会有10个PCLK信号,而不是80个PCLK信号。
示例:采集到:0xFF 0X00 。 对应二值化的像素点。 黑黑黑黑白白白白
为了更好的让自己理解鹰眼摄像头的时序图,我在实验室的示波器上仔细看了下各个信号的波形。如下图:
场信号和行信号波形:
看完这么多关于时序图的波形后,相信大家对鹰眼摄像头的波形都了解了。
接下来开始进攻第二大部分:SCCB的操作。
3. 没有对SCCB进行操作,就没办法操作摄像头。
有人会奇怪为什么使用OV系列的摄像头每次都要进行SCCB的操作呢?难道它自己不会保存上次的操作结果吗?
原因是:OV系列的摄像头的寄存器是EEPROM,不稳定,数据很容易丢失,因此程序每次初始化时我们都要重新写入寄存器设置。
需要修改的寄存器有,PCLK速率,帧率、图像亮度、对比度、 {MOD}饱和度、镜像等功能。
步骤:
首先给出OV7725的SCCB各个功能对应的寄存器的写入值:
[objc] view
plain copy
print?
-
#ifndef _OV7725_REG_H_
-
#define _OV7725_REG_H_
-
-
#define OV7725_ID 0x21
-
-
-
#define OV7725_GAIN 0x00
-
#define OV7725_BLUE 0x01
-
#define OV7725_RED 0x02
-
#define OV7725_GREEN 0x03
-
#define OV7725_BAVG 0x05
-
#define OV7725_GAVG 0x06
-
#define OV7725_RAVG 0x07
-
#define OV7725_AECH 0x08
-
#define OV7725_COM2 0x09
-
#define OV7725_PID 0x0A
-
#define OV7725_VER 0x0B
-
#define OV7725_COM3 0x0C
-
#define OV7725_COM4 0x0D
-
#define OV7725_COM5 0x0E
-
#define OV7725_COM6 0x0F
-
#define OV7725_AEC 0x10
-
#define OV7725_CLKRC 0x11
-
#define OV7725_COM7 0x12
-
#define OV7725_COM8 0x13
-
#define OV7725_COM9 0x14
-
#define OV7725_COM10 0x15
-
#define OV7725_REG16 0x16
-
#define OV7725_HSTART 0x17
-
#define OV7725_HSIZE 0x18
-
#define OV7725_VSTRT 0x19
-
#define OV7725_VSIZE 0x1A
-
#define OV7725_PSHFT 0x1B
-
#define OV7725_MIDH 0x1C
-
#define OV7725_MIDL 0x1D
-
#define OV7725_LAEC 0x1F
-
#define OV7725_COM11 0x20
-
#define OV7725_BDBase 0x22
-
#define OV7725_BDMStep 0x23
-
#define OV7725_AEW 0x24
-
#define OV7725_AEB 0x25
-
#define OV7725_VPT 0x26
-
#define OV7725_REG28 0x28
-
#define OV7725_HOutSize 0x29
-
#define OV7725_EXHCH 0x2A
-
#define OV7725_EXHCL 0x2B
-
#define OV7725_VOutSize 0x2C
-
#define OV7725_ADVFL 0x2D
-
#define OV7725_ADVFH 0x2E
-
#define OV7725_YAVE 0x2F
-
#define OV7725_LumHTh 0x30
-
#define OV7725_LumLTh 0x31
-
#define OV7725_HREF 0x32
-
#define OV7725_DM_LNL 0x33
-
#define OV7725_DM_LNH 0x34
-
#define OV7725_ADoff_B 0x35
-
#define OV7725_ADoff_R 0x36
-
#define OV7725_ADoff_Gb 0x37
-
#define OV7725_ADoff_Gr 0x38
-
#define OV7725_Off_B 0x39
-
#define OV7725_Off_R 0x3A
-
#define OV7725_Off_Gb 0x3B
-
#define OV7725_Off_Gr 0x3C
-
#define OV7725_COM12 0x3D
-
#define OV7725_COM13 0x3E
-
#define OV7725_COM14 0x3F
-
#define OV7725_COM16 0x41
-
#define OV7725_TGT_B 0x42
-
#define OV7725_TGT_R 0x43
-
#define OV7725_TGT_Gb 0x44
-
#define OV7725_TGT_Gr 0x45
-
#define OV7725_LC_CTR 0x46
-
#define OV7725_LC_XC 0x47
-
#define OV7725_LC_YC 0x48
-
#define OV7725_LC_COEF 0x49
-
#define OV7725_LC_RADI 0x4A
-
#define OV7725_LC_COEFB 0x4B
-
#define OV7725_LC_COEFR 0x4C
-
#define OV7725_FixGain 0x4D
-
#define OV7725_AREF1 0x4F
-
#define OV7725_AREF6 0x54
-
#define OV7725_UFix 0x60
-