学习知识内容:
*** 摄像头原理+OV7670开发手册
* IIC通信(软件)
* OV7670初始化程序和获取图像程序
* lcd液晶初始化程序
* 主函数编写**
整体开发流程:
一.摄像头成像,组成原理
本次摄像头原理参考好文章:https://blog.csdn.net/qq_40732350/article/details/88541417
摄像头的设计与人的眼睛成像原理一致
camera的成像框架
景物通过凸镜头反射聚焦到感光片(CCD/CMOS:图像传感器)中,感光片产生电荷传导自ADC进行数模信号转换,形成RAW颜色数据,经过ISP图像处理算法(变成RGB,YUV常见的像素颜色格式)储存到相应的储存其中,在让CPU读取显示到相应的显示设备中
二. 摄像头基本结构
摄像头结构组成:
Lens:镜头,负责成像和对焦
Holder:基座,负责固定镜头
IR:红外滤波片,负责过滤红外光(滤除人不可见的波)
Sensor:图像传感器,负责将图像转换电信号
PCB:印刷电路板,负责供电控制及信号传输
FPC:可绕性印刷电路板,负责接口
马达:用来改变像距
三.介绍几个摄像头核心
图像传感器CCD,CMOS
CCD就像传统相机的底片一样的感光系统,是感应光线的电路装置,你可以将它想象成一颗颗微小的感应粒子,铺满在光学镜头后方,当光线与图像从镜头透过、投射到CCD表面产生电流,将感应到的内容转换成数码资料储存起来。CCD像素数目越多、单一像素尺寸越大,收集到的图像就会越清晰
CCD:好用,图像更清晰,公益复杂,贵
CMOS:便宜,简单,图像质量较差
电荷耦合器件(CCD)原理简单。我们可以把它想象成一个没有盖子的记忆芯片。撞击记忆单元的光子在这些单元中产生电子(光电效应),因此光子的数目与电子的数目互成比例(光的明暗)。然而光子的波长(颜色)并没有被转换为电子。换言之,CCD 裸芯片实际上没有把色彩信息转换为任何形式的电信号。拍摄出来的照片是黑白的!(那为啥能得到彩色数据?)
大多数相机的方案:拜尔滤光片(马赛克滤波片)+单CCD+算法插值(ISP运算)。 拜尔滤光片使每个像素只能产生红、绿或蓝三色当中一种颜色的值。但是在输出时,由相机处理单元执行空间色彩插值法,使每个像素均包含三基色的成分。
拜尔滤光片原理
拜尔滤光片使每个像素只能产生红、绿或蓝三色当中一种颜色的值
如
通过拜尔滤光片的值为:
由于人对红色光不敏感,对绿色光敏感,所以拜尔滤光片的色彩比为:红:绿:蓝 = 1:2:1
所以为了得到真实色彩值,红和蓝的算法一样,和绿不一样。
ISP图像处理算法
原始的数据图像经过ISP颜色差算法,算出正确的颜色数据(RGB为一个字,所以ISP中有数据格式的转变,
RAW->RGB,YUV)
二.OV7670摄像头模块 -《PZ-0V7670 摄像头模块开发手册》
使用的设备:普中STM32F103学习版与之配套的OV7670摄像头,lcd液晶屏和原理图资料
内容:
1 OV7670 介绍
2 硬件设计
3 软件设计
4 实验现象
OV7670 简单简介(更多信息查看相应的开发手册)
通过 SCCB 总线控制,可以输出整帧、子采样、取窗口等方式的各种分
辨率 8 位影像数据。该产品 VGA 图像最高达到 30 帧/秒。用户可以完全控制
图像质量、数据格式和传输方式。
描述的是 OV7670/OV7171 图像传感器的功能模块,包括:****(加粗为比较重要的模块**)**
●感光阵列(Image Array)(共有 656x488 个像素,其中在 YUV 的模式中,有效像素为 640x480 个)(cmos)
●模拟信号处理理( Analog Processing)
●A/D 转换
●测试图案发生器器( Test Pattern Generator)
●数字信号处理器(DSP)
●图像缩放( Image Scaler)
●时序发生器( Video Timing Generator)内部信号发生器和分布、帧率时序、自动曝光控制、输出外部时序( VSYNC、HREF/HSYNC 和 PCLK)。
●数字视频端口( Digital Video Port)
●SCCB 接口
●LED 和闪光灯输出控制
Note1: DSP(镜头校正、去噪声、黑白点补偿、自动白平衡等)配置文档-《OV7670 Software Application Note》*
像素输出格式:
VGA,即分辨率为 640480 的输出模式;
QVGA,即分辨率为 320240 的输出格式,也就是本手册我们需要用到的格
式;
QQVGA,即分辨率为 160*120 的输出格式;
数据输出时序
PCLK,即像素时钟,一个 PCLK 时钟,输出一个像素(或半个像素,高字节+低字节)。
VSYNC,即帧同步信号。
HREF /HSYNC,即行同步信号(有效时,数据才被穿走或者写入)
OV7670 的图像数据输出(通过 D[7:0])就是在 PCLK, VSYNC 和 HREF/
HSYNC 的控制下进行的(一个高电平开始写数据,再次高电平时写数据完成)。首先看看行输出时序,如图所示:
对外输出时序
因为 OV7670 的像素时钟( PCLK)最高可达 24Mhz,我们用 STM32F103ZET6
的 IO 口直接抓取,是非常困难的,也十分占耗 CPU(可以通过降低 PCLK 输出
频率,来实现 IO 口抓取,但是不推荐这样操作)。所以,我们并不是采取直接
抓取来自 OV7670 的数据,而是通过 FIFO 读取,PZ-OV7670 摄像头模块自带了
一个 FIFO 芯片,用于暂存图像数据,有了这个芯片,我们就可以很方便的获取
图像数据了
对外引脚描述
(1)如何存储图像数据。
PZ-OV7670 摄像头模块存储图像数据的过程为:等待 OV7670 同步信号→
FIFO 写指针复位→FIFO 写使能→等待第二个 OV7670 同步信号→FIFO 写禁
止。通过以上 5 个步骤,我们就完成了 1 帧图像数据的存储。
(2)如何读取图像数据。
在存储完一帧图像以后,我们就可以开始读取图像数据了。读取过程为:
FIFO 读指针复位→给 FIFO 读时钟( FIFO_RCLK)→读取第一个像素高字节→
给 FIFO 读时钟→读取第一个像素低字节→给 FIFO 读时钟→读取第二个像素
高字节→循环读取剩余像素→结束。
方法:中断检测同步帧跳变,第一次跳变:数据可以开始写入FIFO了,第二次跳变,数据写入完成可开始读取
硬件接口
OV的大量寄存器在文档:《OV7670高级数据手册》
程序可改进:SCCB通信方式用硬件,或者库函数编写