关键词:
- 鹰眼摄像头
- LPLD V3库
- OV7725
鹰眼摄像头的优点
1.硬件二值化,二值化效果理想(个人看法不一样)
2.一次传输8个像素,速度可达150帧每秒
3.成像质量、低照度好的OV7725
由于某宙捕食者摄像头停产,不得不换用市面上认为用于智能车比赛较好的摄像头——鹰眼(我也是偷懒的人,能用别人的坚决不自己写)。
鹰眼的驱动步骤
1.了解鹰眼的工作方式(可以参考《OV7725数字摄像头编程基本知识笔记》)
我在驱动鹰眼的时候和山外哥一样,并未使用行中断,而是采用场中断+DMA的方式,可能与大家习惯使用行场中断+DMA采集图像的方式存在差异,不过原理并没有太多区别。
注意:①在K60与PCLK、VSYNC连接的IO处加下拉150Ω的电阻进行阻抗匹配,可以有效减少干扰。不过我在测试的时候并没有加,图像也很稳定,并没有异常。
②鹰眼使用3.3V供电,存在因电池电量不够出现图像上下错位的情况。
2.搞清楚时序图
(忽略图片中的行中断内容)采用场信号上升沿触发中断,开启DMA,根据PCLK的下降沿触发,传输图像。
3.采集图像的思路
使用场中断,DMA传输
①需要采集图像时,开场中断
②判断场中断来了,初始化DMA传输,并启动DMA传输
③每个PCLK下降沿来了都触发DMA传输,把摄像头的输出的值读取到内存数组里。
④DMA停止传输时触发中断,中断里面设置图像采集结束标志,图像采集完毕。
4.使用SCCB
OV7725摄像头的寄存器是EEPRON,有一定单片机基础的同学都知道,其不稳定,数据易丢失,因此程序每次初始化时我们都需要重新写入寄存器设置。下面定义摄像头的各寄存器地址:
#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
#define OV7725_VFix 0x61
#define OV7725_AWBb_blk 0x62
#define OV7725_AWB_Ctrl0 0x63
#define OV7725_DSP_Ctrl1 0x64
#define OV7725_DSP_Ctrl2 0x65
#define OV7725_DSP_Ctrl3 0x66
#define OV7725_DSP_Ctrl4 0x67
#define OV7725_AWB_bias 0x68
#define OV7725_AWBCtrl1 0x69
#define OV7725_AWBCtrl2 0x6A
#d