基于STM32的简易照相机设计.docx

上传人:b****6 文档编号:13767517 上传时间:2023-06-17 格式:DOCX 页数:19 大小:1.70MB
下载 相关 举报
基于STM32的简易照相机设计.docx_第1页
第1页 / 共19页
基于STM32的简易照相机设计.docx_第2页
第2页 / 共19页
基于STM32的简易照相机设计.docx_第3页
第3页 / 共19页
基于STM32的简易照相机设计.docx_第4页
第4页 / 共19页
基于STM32的简易照相机设计.docx_第5页
第5页 / 共19页
基于STM32的简易照相机设计.docx_第6页
第6页 / 共19页
基于STM32的简易照相机设计.docx_第7页
第7页 / 共19页
基于STM32的简易照相机设计.docx_第8页
第8页 / 共19页
基于STM32的简易照相机设计.docx_第9页
第9页 / 共19页
基于STM32的简易照相机设计.docx_第10页
第10页 / 共19页
基于STM32的简易照相机设计.docx_第11页
第11页 / 共19页
基于STM32的简易照相机设计.docx_第12页
第12页 / 共19页
基于STM32的简易照相机设计.docx_第13页
第13页 / 共19页
基于STM32的简易照相机设计.docx_第14页
第14页 / 共19页
基于STM32的简易照相机设计.docx_第15页
第15页 / 共19页
基于STM32的简易照相机设计.docx_第16页
第16页 / 共19页
基于STM32的简易照相机设计.docx_第17页
第17页 / 共19页
基于STM32的简易照相机设计.docx_第18页
第18页 / 共19页
基于STM32的简易照相机设计.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于STM32的简易照相机设计.docx

《基于STM32的简易照相机设计.docx》由会员分享,可在线阅读,更多相关《基于STM32的简易照相机设计.docx(19页珍藏版)》请在冰点文库上搜索。

基于STM32的简易照相机设计.docx

基于STM32的简易照相机设计

基于STM32的简易照相机设计(2016年5月30日)

基于STM32单片机的简易照相机设计

摘要:

本文设计了一个简易的照相机,包括嵌入式控制器STM32F407核心控制器、OV2640摄像头、SD存储电路、液晶显示模块和外围辅助控制电路。

文中从元器件的基本介绍开始,讲述了制作简易照相机的相关知识和摄像头采集照片的基本原理、实现方法。

设计还重点讲解基于STM32F407如何用软件控制OV2640摄像头模块采集图像数据,进行实时显示,再通过按键控制进行截图拍照,拍照存储为BMP格式的图像,利用对SD卡的配置对图像数据以文件的形式进行存储,通过按键控制选择图像,最后在TFT液晶显示照片和摄像的具体方案。

简易照相机是对复杂繁琐的数码相机进行过滤,提出核心的摄像和拍照部分,结构简单、便于携带,可以应用于小区监控等场所。

关键词:

STM32单片机;OV2640摄像头模块;TFT液晶屏;SD卡

TheDesignofSimpleCameraBasedon

STM32Microcontroller

本设计的实现要求是必须掌握TFTLCD液晶屏的使用原理和方法,并且通过学习和了解摄像头传感器,以及图片编码解码方式,实现照相机的照相功能,并且了解SD卡外部存储设备的使用。

要求实现设计的具体内容如下:

1、STM32单片机驱动液晶屏显示摄像头采集到的图像数据;

2、截取图像数据并使用SD卡存储。

3、通过STM32读取SD卡里存储的图片并显示。

1.3设计意义

数码相机的发展飞速,而且成本也相对较高,研发和完善一个简易照相机对于普通消费人群来说非常实用,而且可以用于各种生活场景。

对于满足人们的日常需求有很大的帮助。

而且成本较低,容易携带,耗电也低。

完善之后会有很大的市场。

而且本身难度适中,对于我来说也是一个很好的锻炼机会。

现在的学科与学科之间的界限已经非常的模糊,相信在以后还会有更多的更为简便新颖的图像采集方式出现,但是这都是基于现有的摄像基础之上的。

所以除去摄像技术的冗杂部分,留下精华所在,既能够学习摄像的基本原理,也可以会帮助人们不会被固有的思维所定式,可以肆意发挥想象添加新的成分,也有利于以后对于这个方面技术的创新发展。

2.总体设计概述

2.1设计方案

首先摄像头模块的采集照片的原理并不复杂,根绝查阅原理以及参考驱动代码,实现驱动摄像头采集图像是比较方便快捷的,摄像头模块先把采集到的数据保存到一个存储器中,然后单片机直接对摄像头芯片写命令,把数据从存储器中读出,并且在TFTLCD上显示画面。

当有按键按下时,调用FATFS文件系统中的建立文件名函数,采集到图像之后,要截图保存为BMP图像格式的文件,并且在SD卡中创建一个文件夹。

通过文件流的形式将BMP文件存储到SD卡创建的文件夹中,实现存储,然后继续显示,这个过程中如果想调出拍到的照片,就只需要按下按键,将SD卡中的指定文件夹中的BMP文件调用出来(注意这个文件夹中没有别的文件,只有之前拍照得到的文件),再通过TFT显示出来。

系统流程图如图2-1所示。

 

图2-1系统设计方案方框图

2.2电路原理图

这个设计的方案是先用STM32单片机与OV2640摄像头连接,进行图像采集并显示,将采集到的图像信息通过TFT液晶显示屏显示出来。

然后进行扫描等待,当检测到有按键按下时停止显示,若是拍照按键,则开始执行截图拍照功能,并存入SD卡的指定文件夹中。

当保存完成之后,回复到之前摄像的状态继续等待。

若是显示按键,则读取SD相应文件夹中的图片,用液晶屏显示出来。

总体电路设计框图如图2-2所示。

 

 

图2-2系统的总体架构图

2.3器件简介

2.3.1STM32单片机简介

STM32单片机是由ST公司发行的以CortexM3内核为控制核心的微控制器,在2011年,ST公司又推出基于CortexM4内核的STM32F4系列产品。

图2-3STM32芯片样式图

STM32F4家族目前拥有:

STM32F40x、STM32F41x、STM32F42x和STM32F43x等几个系列,数十个产品型号,不同型号之间软件和引脚具有良好的兼容性STM32F42x/43x系列带了LCD控制器和SDRAM接口。

目前STM32F4这些芯片型号都已量产,可以方便的购买到,不过目前来说,性价比最高的是STM32F407。

STM32F4和STM32F1这两个控制器相比,STM32F4有非常明显的优势:

1)有用更加先进的内核。

2)更多的资源可以利用。

3)使用外设功能更加快速,灵敏。

4)更高的性能,更低的功耗。

所以该设计我选择了STM32F4作为主控芯片。

2.3.2TFTLCD液晶屏

(1)TFTLCD液晶屏简介

本设计中使用的液晶显示器由薄膜晶体管构成。

其设计的实物图如图2-4所示,包括实物的正面和反面。

图2-4TFTLCD2.8寸屏实物图

这里采用TFTLCD2.8寸屏幕,该模块采用16位并行口与外部相连接。

考虑到设计中数据量的大小,本设计采用的摄像头不用8位的传输方式。

因为8位的低端摄像头采集的图像信息量少,传输的速度不够快,在视频录像的时候不清晰、而且有卡顿的现象,综合考虑,我选择16位的接口的OV2640摄像头。

(2)显示模块设计

液晶显示器的驱动芯片尤为重要,TFT显示模块采用专用驱动芯片ILI9341作为显示屏的驱动芯片。

ILI9341液晶自带172K的显存,在图像显示的时候,画面比较连贯,特别是针对连续显示的图像。

在16位模式下,ILI9341采用RGB565格式存储颜色数据,能够显示很丰富的图像信息。

驱动芯片的18位数据线与嵌入式控制器的16位数据线以及液晶屏内存的对应关系如图2-5所示。

图2-5对应关系图

从图中可以看出,低5位代表蓝色,中间6位为绿色,高5位为红色。

数值越大,表示该颜色越深。

对于显示屏驱动,由于我使用的是显示屏模块,该模块上已经配置好了一些基本电路,所以实物中只需要直接连线即可,给出显示电路了如图2-6所示。

图2-6显示电路图

2.3.3OV2640摄像头

.

(1)OV2640传感器简介

OV2640传感器是OV公司生产的做为图像处理的芯片,大概是0.25寸。

该采集图像信息的传感器相对体积较小、工作电压为3.3V,提供照相机所需要的摄像和图像处理能力,满足一般照相机的要求。

通过SCCB内部总线,系统可以得到想要一帧帧图像,并且还可以实现调焦等功能。

图2-7OV2460摄像头模块实物图

(2)OV2640摄像头模块设计

为了方便,设计实物直接使用OV2640模块采集图像信息,传感器的功能框图如2-8所示。

图2-8OV2640功能框图

上图表明,OV2640传感器包含以下一些功能模块。

1)感光整列。

2)模拟信号处理。

3)10位A/D转换。

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

5)输出格式模块。

6)压缩引擎。

7)微处理器。

8)SCCB接口。

9)数字视频接口。

作为用户,我只需要在该模块连接在单片机上之后,对该模块进行基本配置即可,可配置的参数有:

设置图像采集传感器、设置图像的大小、设置采集信息输出大小。

对于OV2640的图像数据格式的输出方式一般有2种,程序可以控制选择哪一种输出方式。

摄像头信息采集模块的电路如图2-9所示。

图2-9OV2640模块电路图

(3)STM32F4DCMI接口简介

STM32F407有一个数字摄像头接口,这个接口采用并行的方式传递数据,可以选择的性的快速接收来自外部的摄像头模块采集的图像数据流。

当数字摄像头接收到的数据时,会把数据被放到一个32位内部的数据寄存器中,然后直接读取的方式进行信息的交流。

图2-10DCMI接口框图

本设计中只需要讲摄像头模块与单片机的DCMI接口相连接,通过程序软件即可直接控制,简单方便。

2.3.4SD卡

(1)SD卡简介

大容量存储设备是单片机运行系统以及存储数据时所必须的设备。

现在的开发系统上,通常使用大容量的SD卡存储图像信息,支持多种方式驱动,本设计的驱动方式采用SPI通信驱动,现在的SD卡有多种,能满足不同应用的要求,本设计选用的就是市面上买到的普通的SD卡。

(2)SDIO控制器简介

STM32F407的控制器支持MMC卡等设备,包含SDIO适配器模块和APB2总线接口2个部分,在显示的实际制作过程,其强大的功能方便使用者快速的控制摄像头。

其功能框图如下图2-11所示。

图2-11STM32F4的SDIO控制器功能框图

图像信息的数据是在内部是以数据块的形式传输的,方便程序控制数据在内部的信息交互,例如:

MMC卡数据传输。

(3)SD卡接口电路

图2-12SD卡接口电路图

本设计使用的单片机具有SD卡槽,只需将SD卡直接放入卡槽中然后使用程序输入一些命令即可初始化。

3.软件设计

3.1程序系统步骤

STM32单片机通过摄像头采集到图像信息,进行等待显示,检测按键是否被按下,当有按键按下的时候,先暂停显示,通过判断按键值,来选择执行步骤,或进行拍照,或调出进行显示。

其中拍照和调处文件显示这两个步骤都是对特定的文件夹进行的。

若检测不到该文件夹的存在,则在拍照的同时就建立该文件夹。

当执行显示步骤的时候,图片先以幻灯片的形式流水播放,可以通过按键进行暂停,并切换。

最后重启系统可以回复拍照功能。

程序控制部分是整个照相机运行的核心,起着控制照相机所有运行状态的作用。

由于STM32F407单片机功能强大,使用方便的特点,这里选择了ST公司的STM32F407作为控制核心部件,其程序控制方框图如图3-1所示。

 

 

是否

 

否是

 

图3-1系统的程序流程图

照相机进入摄像后,即开始不停地扫描按键值,一旦检测到按键被按下,程序就进入判断程序,执行相应的步骤,这里我一共设置了四个按键。

3.2STM32单片机对各个模块的初始化

3.2.1TFT液晶屏的初始化过程

一般TFT液晶屏模块的使用过程如图3-2所示。

图3-2TFTLCD使用流程

这里对于任何类似的液晶,都可以使用以上的图来表示其使用过程。

上图中的,前两步只需要执行一次。

对于液晶屏的画点方法是:

先设置好需要画点的位置,然后写入对应的位置指令,最后写入表示RGB的数据信息,完成这些就可以在液晶屏对应的点画出设计的颜色。

读点方法和画点方法类似,也是按照上图中的步骤进行处理就好了,从这里可以得到设置TFT液晶显示所需要的相关步骤如下:

1)首先配置IO端口;

2)初始化TFTLCD模块;

3)通过函数将信息显示到TFT液晶屏。

首先初始化相应的IO口,主要是为了驱动LCD,将IO端口配置成LCD所需要的模式,有关IO口的配置有八种工作方式(这部分内容可以参考《STM32F4中文参考手册》这里不做细致介绍)。

有关初始化TFTLCD,其实就是向液晶屏控制器中写入初始化的设置值,它规定怎么显示图像信息。

本设计直接使用的是由系统默认的初始化序列,只有在初始化成功之后,LCD才能正常使用。

3.2.2OV2640传感器初始化过程

1)配置OV2640控制引脚,并配置OV2640工作模式

OV2640通过对寄存器进行配置,再设置对应输出输入状态,退出掉电模式,然后复位OV2640摄像头,之后再结束复位,然后就是对摄像头进行基础化的设置,可以根据实际的需要,设置图像的输出格式,例如:

JPEG。

2)配置相关引脚的模式和复用功能,使能时钟。

首先把引脚设置成摄像头需要的配置,然后对于个别引脚,需要开启复用功能,因为在单片机中很多引脚实际上会设有很多功能,如果需要开启某一项功能的话,需要开启复用。

3)配置DCMI相关设置。

系统在这里是设置DCMI_CR寄存器,同时开启帧中断,编写DCMI中断服务函数,方便进行数据处理。

另外,实际的显示过程中,系统通常采用JPEG的方式输出图像,我们只需要采用正常模式直接采集。

4)配置DMA。

(有关STM32的另一个小知识点,由于篇幅原因,不过多介绍)

这里我采用的是连续采集模式并将采集到的数据输出到LCD(RGB565模式或内存(JPEG模式),所以源地址都是DCMI_DR,而目的地址可能是LCD->RAM或者SRAM的地址。

DCMI的DMA传输采用的是DMA2数据流1的通道1来实现的。

(有关DMA知识,可以查阅STM32开发指南)

5)设置OV2640的图像输出大小,使能DCMI捕获。

开启DCMI捕获是通过调用库函数进行开启的,只需要开启相应寄存器的使能位即可正常工作了。

开启DCMI捕获的方法如下:

DCMI_CaptureCmd(ENABLE);//DCMI捕获使能(函数内容过多,就不贴出来了)

3.2.3SD卡初始化过程

系统在驱动SD卡的过程中,最重要的步骤就是SD卡的初始化,一般都有一套标准的流程。

我对SD卡的初始化主要是调用官方提供的库函数进行初始化,其内容就是首先需要给卡上电,通电后写入一个复位指令对卡进行软复位,之后紧接着在传递另一个指令(这里指令的引用需要参考固定的范式),用于区分不同的SD卡。

主机通过ACMD41的参数设置来发送指令。

4、系统调试与结果分析

4.1设计实现

本课题研究的内容主要是简易照相机设计。

以STM32F407开发板为基础,使用了TFT液晶显示屏模块,OV2640摄像头模块和SD卡接口模块。

取得了以下成果。

(1)通电之后,程序可以正常运行,检测各个模块是否初始化成功,成功了则开始实时显示图像。

不成功则屏幕提示错误。

(2)经过反复的实验证明,摄像头模块可以在灯光良好的情况下采集到清晰的图片,并且显示照片的时候,可以非常清晰,不会有显示不稳定的现象出现,但是如果说没有拍照便直接显示,系统会出现短暂迟钝的现象。

采集照片的时候,液晶屏会停止接受摄像头数据,当拍照结束之后,还可以继续接受图像数据进行显示。

但是当进入到图片显示过程的时候,程序无法在退回拍照功能,只可以通过复位按键重新运行程序进行拍照。

(3)照相机设置了两种图片模式,一种是BMP模式,一种是JPG模式。

在互不干扰的情况下可以进行显示。

而且在正常显示的过程中可以以幻灯片的形式播放图片,两种图片由于格式不同,播放形式不同。

可以通过按键控制幻灯片的停止与进行。

(4)拍照过程还可以调焦距。

在设计过程中,程序中添加了调焦距的功能,但是只能放大一倍。

图像会由于摄像头的像素问题,放大之后会有点点模糊,但是不会影响图像的观看。

4.2出现的问题和解决的方法

在实物制作中,最开始我尝试自己焊接STM32的最小系统,但是发现最小系统的电路太过复杂,而且SD卡接口部分电路无法手焊,所以直接使用了开发板进行试验,整个开发板我只使用了它现成的电路接口。

实物的稳定也全靠开发版的电路稳定,如果使用最小系统板也是可以的,由于资金问题,我并未花钱购买,而是直接使用的手边有的开发板。

程序编写的过程中,基本上是参考每一种外设提供的驱动源码,由于外设在使用过程中,内部寄存器基本都固定配置的,所以直接参考官方提供的源码比较方便快捷,只需要掌握一些关键部分即可,例如程序中摄像头数据提取部分,TFT显示源码,还有SD卡存储数据和调出数据的关键部分,这些官方提供的程序源码只需要理解这些关键部分,即可很好的使用。

开发板的电路稳定,外设的官方源码的周密,让我在实物制作过程中相当轻松,虽然感觉比较偷工减料,但是需要了解的地方也基本了解了,而且省时省力。

当然也会有一些难题,主要难题在于整个过程中我自己的程序功底并不扎实,会有一些语句不懂不会调用,例如在程序中实现图像的截取,这个部分我并不能很好的理解,在后面实物制作过程中曾经为难了我一段时间,不过在之后花了大量的时间,也是勉强攻破了这个难关,不过很明显能体现出自己的水平不够,仍然需要好好的学习。

4.3电路实物图展示

 

结论

这次的制作虽然没有亲自动手焊接电路,但是制作过程也是查阅很多资料才能完成的,首先是自己的基础不扎实,不可以自己按照外设的寄存器要求自己编写程序,只能使用官方源码,再者,整个实物牵涉到一些在学校中未曾接触到的一些知识,我对于这些知识并没有很好的认知和学习,可以这样说,之前选择这个题目,是盲目的!

不过这也是老师的用心之处,他给我指出了对于软件方面的发展之路,通过这次实物的制作,让我了解到了嵌入式这一广阔的天地!

所以,我觉得这次设计,完成与否都是次要,主要是老师的良苦用心!

实物的制作需要动手实现,但是由于各种原因,我选择了最偷工减料的开发板进行实现,因为我觉得这个题目的主题并不是实物的制作,而是对于程序方面的一次考验!

因为外设并不是很多,而且电路也太过细致,没办法手工焊出,而且STM32的最小系统并不经济,所以我并未选择购买,而是选择了老师给我提供的开发板进行实物制作。

对于程序方面,很多内容是我现在的学习程度无法理解的,于是在老师的指引下,我开始一点点的专研其中不懂的地方,虽然实物制作出来之后对于整个外设驱动源码的理解还是模棱两可。

可是相比之前那已经算是很清晰了。

老师也说,这是一大块内容,并不是三两天能够学习好的,所以我会在以后的学习过程中认准方向,更加努力。

致谢

首先这次制作中,我有一些一起参加全国电赛的同学,他们之前做过相关的研究,并且取得了一定的成绩,在我最开始的制作时,他们给了我一些大致的方向,并且向我提供了一些非常有用的文档,在此感谢。

在中期的学习过程中老师给了我至关重要的作用,给我指明了学习的方向和学习的道路。

通过从网上查阅出来的资料,始终是没有头绪和章法的,老师直接给了我一套教程让我学习,之后的实物制作的灵感和思路也是来源于老师给的教程。

并且在实物制作的时候,老师考虑了我的情况,慷慨的把自己的开发板借给我使用,而且还尽力满足我的一些需求。

在此,老师需要我诚心感谢,老师的指导,终身受用。

最后实物制作的过程,是在寝室进行的,我需要感谢我的几个室友。

室友对我的论文制作也是积极帮助,给我提供一个有力条件,有时候调试程序要到深夜,室友也能包容理解我,并且时刻关心我的设计进度,我遇到瓶颈的时候为我出谋划策,心烦的时候安慰我。

四年大学情谊体现的淋漓尽致。

全篇论文结束,我的大学生活也到此结束,我需要感谢我的父母。

整个学生生涯一步一步的走过来,父母一直对我给予最大的支持和期望。

如今我可以自己独立完成产品的设计,我需要感谢我的父母,他们一直含辛茹苦,在背后默默支持着我。

以前无论遇到什么困难,父母永远是最相信我的人,现在依然也是。

整个设计的完成我觉得父母也是在期待着,所以我有十足的动力想要完成并且完美这个论,给一份让我自己也给我父母满意的毕业设计。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 数学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2