找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12902|回复: 2
打印 上一主题 下一主题
收起左侧

正点原子探索者STM32F407例程连载 第40章 OV2640摄像头

[复制链接]
跳转到指定楼层
楼主
ID:134536 发表于 2018-3-13 00:32 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
1.硬件平台:正点原子探索者STM32F407开发板2.软件平台:MDK5.13.固件库版本:V1.4.0

ALIENTEK探索者STM32F4开发板具有DCMI接口,并板载了一个摄像头接口(P8),该接口可以用来连接ALIENTEK OV2640等摄像头模块。本章,我们将使用STM32驱动ALIENTEK OV2640摄像头模块,实现摄像头功能。本章分为如下几个部分:

40.1 OV2640&DCMI简介

40.2 硬件设计

40.3 软件设计

40.4 下载验证

40.1 OV2640&DCMI简介

本节将分为两个部分,分别介绍OV2640和STM32F4的DCMI接口。
40.1.1 OV2640简介

OV2640是OV(OmniVision)公司生产的一颗1/4寸的CMOS UXGA(1632*1232)图像传感器。该传感器体积小、工作电压低,提供单片UXGA摄像头和影像处理器的所有功能。通过SCCB 总线控制,可以输出整帧、子采样、缩放和取窗口等方式的各种分辨率8/10位影像数据。该产品UXGA图像最高达到15帧/秒(SVGA可达30帧,CIF可达60帧)。用户可以完全控制图像质量、数据格式和传输方式。所有图像处理功能过程包括伽玛曲线、白平衡、对比度、色度等都可以通过SCCB接口编程。OmmiVision 图像传感器应用独有的传感器技术,通过减少或消除光学或电子缺陷如固定图案噪声、拖尾、浮散等,提高图像质量,得到清晰的稳定的彩色图像。

OV2640的特点有:

l  高灵敏度、低电压适合嵌入式应用

l  标准的SCCB接口,兼容IIC接口

l  支持RawRGB、RGB(RGB565/RGB555)、GRB422、YUV(422/420)和YCbCr(422)输出格式

l  支持UXGA、SXGA、SVGA以及按比例缩小到从SXGA到40*30的任何尺寸

l  支持自动曝光控制、自动增益控制、自动白平衡、自动消除灯光条纹、自动黑电平校准等自动控制功能。同时支持色饱和度、色相、伽马、锐度等设置。

l  支持闪光灯

l  支持图像缩放、平移和窗口设置

l  支持图像压缩,即可输出JPEG图像数据

l  自带嵌入式微处理器

OV2640的功能框图图如图40.1.1.1所示:



图40.1.1.1 OV2640功能框图

       OV2640传感器包括如下一些功能模块。

       1.感光整列(Image Array)

OV2640总共有1632*1232个像素,最大输出尺寸为UXGA(1600*1200),即200W像素。

2.模拟信号处理(Analog Processing)

模拟信号处理所有模拟功能,并包括:模拟放大(AMP)、增益控制、通道平衡和平衡控制等。

3.10位A/D 转换(A/D)

原始的信号经过模拟放大后,分G和BR两路进入一个10 位的A/D 转换器,A/D 转换器工作频率高达20M,与像素频率完全同步(转换的频率和帧率有关)。除A/D转换器外,该模块还有黑电平校正(BLC)功能。

4.数字信号处理器(DSP)

这个部分控制由原始信号插值到RGB 信号的过程,并控制一些图像质量:

l  边缘锐化(二维高通滤波器)

l  颜色空间转换(原始信号到RGB或者YUV/YCbYCr)

l  RGB色彩矩阵以消除串扰

l  色相和饱和度的控制

l  黑/白点补偿

l  降噪

l  镜头补偿

l  可编程的伽玛

l  十位到八位数据转换

5.输出格式模块(Output Formatter)

该模块按设定优先级控制图像的所有输出数据及其格式。

6.压缩引擎(Compression Engine)

压缩引擎框图如图40.1.1.2所示:

图40.1.1.2 压缩引擎框图

       从图可以看出,压缩引擎主要包括三部分:DCT、QZ和entropy encoder(熵编码器),将原始的数据流,压缩成jpeg数据输出。

7.微处理器(Microcontroller)

OV2640自带了一个8位微处理器,该处理器有512字节SRAM,4KB的ROM,它提供一个灵活的主机到控制系统的指令接口,同时也具有细调图像质量的功能。

8.SCCB接口(SCCB Interface)

SCCB接口控制图像传感器芯片的运行,详细使用方法参照光盘的《OmniVision Technologies Seril Camera Control Bus(SCCB) Specification》这个文档

9.数字视频接口(Digital Video Port)

OV2640拥有一个10位数字视频接口(支持8位接法),其MSB和LSB可以程序设置先后顺序,ALIENTEK OV2640模块采用默认的8位连接方式,如图40.1.1.3所示:

图40.1.1.3 OV2640默认8位连接方式

OV2640的寄存器通过SCCB时序访问并设置,SCCB时序和IIC时序十分类似,在本章我们不做介绍,请大家参考光盘《OmniVision Technologies Seril Camera Control Bus(SCCB) Specification》这个文档。

接下来,我们介绍一下OV2640的传感器窗口设置、图像尺寸设置、图像窗口设置和图像输出大小设置,这几个设置与我们的正常使用密切相关,有必要了解一下。其中,除了传感器窗口设置是直接针对传感器阵列的设置,其他都是DSP部分的设置了,接下来我们一个个介绍。

传感器窗口设置,该功能允许用户设置整个传感器区域(1632*1220)的感兴趣部分,也就是在传感器里面开窗,开窗范围从2*2~1632*1220都可以设置,不过要求这个窗口必须大于等于随后设置的图像尺寸。传感器窗口设置,通过:0X03/0X19/0X1A/0X07/0X17/0X18等寄存器设置,寄存器定义请看OV2640_DS(1.6).pdf这个文档(下同)。

图像尺寸设置,也就是DSP输出(最终输出到LCD的)图像的最大尺寸,该尺寸要小于等于前面我们传感器窗口设置所设定的窗口尺寸。图像尺寸通过:0XC0/0XC1/0X8C等寄存器设置。

图像窗口设置,这里起始和前面的传感器窗口设置类似,只是这个窗口是在我们前面设置的图像尺寸里面,再一次设置窗口大小,该窗口必须小于等于前面设置的图像尺寸。该窗口设置后的图像范围,将用于输出到外部。图像窗口设置通过:0X51/0X52/0X53/0X54/0X55/0X57等寄存器设置。

图像输出大小设置,这是最终输出到外部的图像尺寸。该设置将图像窗口设置所决定的窗口大小,通过内部DSP处理,缩放成我们输出到外部的图像大小。该设置将会对图像进行缩放处理,如果设置的图像输出大小不等于图像窗口设置图像大小,那么图像就会被缩放处理,只有这两者设置一样大的时候,输出比例才是1:1的。

因为OmniVision 公司公开的文档,对这些设置实在是没有详细介绍。只能从他们提供的初始化代码(还得去linux源码里面移植过来)里面去分析规律,所以,这几个设置,都是作者根据OV2640的调试经验,以及相关文档总结出来的,不保证百分比正确,如有错误,还请大家指正。

以上几个设置,光看文字可能不太清楚,这里我们画一个简图有助于大家理解,如图40.1.1.4所示:

图40.1.1.4 OV2640图像窗口设置简图

       上图,最终红色框所示的图像输出大小,才是OV2640输出给外部的图像尺寸,也就是显示在LCD上面的图像大小。当图像输出大小与图像窗口不等时,会进行缩放处理,在LCD上面看到的图像将会变形。

最后,我们介绍一下OV2640的图像数据输出格式。首先我们简单介绍一些定义:

UXGA,即分辨率位1600*1200的输出格式,类似的还有:SXGA(1280*1024)、WXGA+(1440*900)、XVGA(1280*960)、WXGA(1280*800)、XGA(1024*768)、SVGA(800*600)、VGA(640*480)、CIF(352*288)、WQVGA(400*240)、QCIF(176*144)和QQVGA(160*120)等。

PCLK,即像素时钟,一个PCLK时钟,输出一个像素(或半个像素)。

VSYNC,即帧同步信号。

HREF /HSYNC,即行同步信号。

OV2640的图像数据输出(通过Y[9:0])就是在PCLK,VSYNC和HREF/ HSYNC的控制下进行的。首先看看行输出时序,如图40.1.1.5所示:

图40.1.1.5 OV2640行输出时序

从上图可以看出,图像数据在HREF为高的时候输出,当HREF变高后,每一个PCLK时钟,输出一个8位/10位数据。我们采用8位接口,所以每个PCLK输出1个字节,且在RGB/YUV输出格式下,每个tp=2个Tpclk,如果是Raw格式,则一个tp=1个Tpclk。比如我们采用UXGA时序,RGB565格式输出,每2个字节组成一个像素的颜色(高低字节顺序可通过0XDA寄存器设置),这样每行输出总共有1600*2个PCLK周期,输出1600*2个字节。

再来看看帧时序(UXGA模式),如图40.1.1.6所示:

图40.1.1.6 OV2640帧时序

上图清楚的表示了OV2640在UXGA模式下的数据输出。我们按照这个时序去读取OV2640的数据,就可以得到图像数据。

最后说一下OV2640的图像数据格式,我们一般用2种输出方式:RGB565和JPEG。当输出RGB565格式数据的时候,时序完全就是上面两幅图介绍的关系。以满足不同需要。而当输出数据是JPEG数据的时候,同样也是这种方式输出(所以数据读取方法一模一样),不过PCLK数目大大减少了,且不连续,输出的数据是压缩后的JPEG数据,输出的JPEG数据以:0XFF,0XD8开头,以0XFF,0XD9结尾,且在0XFF,0XD8之前,或者0XFF,0XD9之后,会有不定数量的其他数据存在(一般是0),这些数据我们直接忽略即可,将得到的0XFF,0XD8~0XFF,0XD9之间的数据,保存为.jpg/.jpeg文件,就可以直接在电脑上打开看到图像了。

OV2640自带的JPEG输出功能,大大减少了图像的数据量,使得其在网络摄像头、无线视频传输等方面具有很大的优势。OV2640我们就介绍到这。



图40.1.2.3 ALIENTEK OV2640摄像头模块外观图

模块原理图如图40.1.2.4所示:


这些线的连接,探索者STM32F4开发板的内部已经连接好了,我们只需要将OV2640摄像头模块插上去就好了。特别注意:DCMI摄像头接口和I2S接口、DAC、SDIO以及1WIRE_DQ等有冲突,使用的时候,必须分时复用才可以,不可同时使用。实物连接如图40.2.2所示:

图40.2.2 OV2640摄像头模块与开发板连接实物图
40.3 软件设计
软件设计请直接下载附件的pdf讲解和实验工程。
40.4 下载验证
在代码编译成功之后,我们通过下载代码到ALIENTEK探索者STM32F4开发板上,在OV2640初始化成功后,屏幕提示选择模式,此时我们可以按KEY0,进入RGB565模式测试,也可以按KEY1,进入JPEG模式测试。
当按KEY0后,选择RGB565模式,LCD满屏显示压缩放后的图像(有变形),如图40.4.1所示:



图40.4.1 RGB565模式测试图片
此时,可以按KEY_UP切换为1:1显示(不变形)。同时还可以通过KEY0按键,设置对比度;KEY1按键,设置饱和度;KEY2,可以设置特效。
当按KEY1后,选择JPEG模式,此时屏幕显示JPEG数据传输进程,如图40.4.2所示:
图40.4.2 JPEG模式测试图
默认条件下,图像分辨率是QVGA(320*240)的,硬件上:我们需要一根RS232串口线连接开发板的COM2(注意要用跳线帽将P9的:COM2_RX连接在PA2(TX))。如果没有RS232线,也可以借助我们开发板板载的USB转串口实现(有2个办法:1,改代码;2,杜邦线连接P9的PA2(TX)和P6的RX)。
我们打开上位机软件:串口摄像头.exe(路径:光盘à\6,软件资料à软件à串口摄像头软件à串口摄像头.exe),选择正确的串口,然后波特率设置为115200,打开即可收到下位机传过来的图片了,如图40.4.3所示:
图40.4.3 串口摄像头软件接收并显示JPEG图片
我们可以通过KEY_UP设置输出图像的尺寸(QQVGA~UXGA)。通过KEY0按键,设置对比度;KEY1按键,设置饱和度;KEY2按键,设置特效。
同时,你还可以在串口,通过USMART调用SCCB_WR_Reg等函数,来设置OV2640的各寄存器,达到调试测试OV2640的目的,如图40.4.4所示:
图40.4.4 USMART调试OV2640
       从上图还可以看出,帧率为15帧,这和我们前面介绍的OV2640在UXGA模式,输出帧率是15帧是一致的。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

板凳
ID:144749 发表于 2020-1-26 23:25 | 只看该作者
gzxyssw 发表于 2018-4-26 20:51
您好,我下载程序后,用串口2接收数据,这时电脑端摄像头助手会闪退,后面我用串口助手查看接收数据,把接 ...

我跟你一样的情况,查看数据显示ff d8 .... ff d9,用串口软件显示会闪退 用16进制转图片的软件保存打开不能显示
回复

使用道具 举报

沙发
ID:310098 发表于 2018-4-26 20:51 | 只看该作者
您好,我下载程序后,用串口2接收数据,这时电脑端摄像头助手会闪退,后面我用串口助手查看接收数据,把接收的数据转换成JPEG格式时出现格式不正确,请问该怎么办
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表