基于单片机的图像采集系统设计.docx
《基于单片机的图像采集系统设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的图像采集系统设计.docx(20页珍藏版)》请在冰豆网上搜索。
![基于单片机的图像采集系统设计.docx](https://file1.bdocx.com/fileroot1/2023-1/28/ffcf6710-0e28-4184-b0d6-14d9bab6df43/ffcf6710-0e28-4184-b0d6-14d9bab6df431.gif)
基于单片机的图像采集系统设计
目录
0前言1
1总体方案设计1
2系统硬件设计2
3软件设计4
3.1软件设计概述4
3.2程序流程图5
3.3子程序模块设计5
4系统调试及结果分析7
5结论及进一步设想11
参考文献11
课程设计体会13
附录1元件清单14
附录2系统电路图15
附录3源程序16
基于单片机的图像采集系统
刘杰薇沈阳航空航天大学自动化学院
摘要:
传统的工业级图像处理采集系统大多是由CCD摄像头、图像采集卡和PC机组成,虽已得到了广泛的应用,但是它具有结构复杂,成本高,体积大,功耗大等缺点。
随着单片机的迅速发展,开发一种智能控制及智能处理功能的微型图像处理采集系统成为可能,并且也克服了传统图像处理采集系统的诸多缺点。
本设计的图像采集系统采用AT89C51单片机为中心器件,利用74LS373寄存器、62256存储器。
将软、硬件有机地结合起来,使得系统能够实现对摄像头传输的图像信号的采集,并保存在外置存储芯片中。
其中软件系统采用C语言编写程序,包括延时程序、地址顺延程序等,硬件系统利用PROTEUS强大的功能来实现,简单切易于观察,在仿真中就可以观察到实际的工作状态。
关键字:
单片机;图像采集;数字摄像头
0前言
近年来随着科技的飞速发展,单片机的应用正在不断的走向深入,同时带动着传统控制检测日新月异更新。
在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面的知识是不够的,还要根据具体的硬件结构,以及针对具体的应用对象的软件结合,加以完善。
数字图像采集由于其大数据量通常采用DSP等高速处理器来实现。
在某些领域方面图像实时性的要求并没有那么高,因此,本文采用STC89C51单片机作为控制器进行图像采集。
1总体方案设计
方案一:
由于C51单片机的RAM存储容量有限,而且受到C51单片机的IO工作频率的限制,直接通过C51单片机采集完整一帧的数字信号很难实现。
因此,在C51单片机和数字摄像头之间加入一个先进先出存储器,由PC端通过串口控制C51单片机启动采集信号,采集一帧数据先放入存储器,然后单片机从存储器读出数据并通过串口发送至PC显示。
整体设计框图如下:
图1系统整体框图
整个系统由OV7670感光元件,先进先出存储器AL422B,STC89C51单片机,以及其他外围电路构成。
OV7670是由omnivision公司产生的图像感光元件,其主要提供了D0-D7八个数字像素输出信号。
AL422B这个先进先出的DRAM数据存储器主要用于存放完整的一帧OV7670的图像数据。
在系统初始化后,等待上位机发出采集命令或配置寄存器命令,若接收到采集命令则在启动一帧采集,开始往AL422B写入数据,在外部中断检测到下一个下降沿的时候发出采集一帧结束标志符,结束一帧数据写入。
方案二:
由STC12LE5A60S2单片机和OV7670图像传感器及相应的外接电路组成。
其硬件电路如图2所示。
图2SO图像采集系统硬件电路图
STC12LE5A60S2单片机和OV7670图像传感器的输入电压均为3.3V,由于多数的供电装置提供的直接电压为5V,系统增加了5V转3.3V电压转换电路。
STC12LE5A60S2单片机的内存储器仅为1280Byte,不足以存储一幅用于处理与识别的数字图像,因此,系统外接了32KB的存储器BS62LV256用于存储像素灰度值。
由于单片机资源限制,P0口既作为数据输入口,又作为数据输出口,通过使用74HC573锁存器扩展端口资源。
系统的外接电路多,降低了系统的抗干扰性,同时采集到的图像数据传输途径长,降低了系统速度。
方案确定:
以前并未接触过STC12LE5A60S2单片机,短时间也不容易掌握,所以还是选择基于51单片机来完成此次课程设计要求。
由于C51单片机的RAM存储容量有限,而且受到C51单片机的IO工作频率的限制,直接通过C51单片机采集完整一帧的数字信号很难实现,而在protues仿真中并未找到先进先出存储器AL422B,如果采用方案一,仿真会出现一定困难。
因此,在本次课程设计中,我选择扩展一个62256数据存储器,用来存储摄像头输出的有用的数字信号。
摄像头输出的信号不存储在单片机中,存在扩展的62256数据存储器中,也为之后需要扩展其他功能提供了便利条件。
如下图所示:
图3图像采集装置系统框图
2系统硬件设计
2.1硬件设计概述
整个图像采集装置由数字摄像头、图像采集系统两个个模块组成。
2.2数字摄像头概述
摄像头可以分为两类,若图像数据是在摄像头和采集卡两部分完成数字化的,此摄像头就是模拟摄像头;然而若是在摄像头内部完成数字化的则是数字摄像头。
数字摄像头不仅可以减少图像的噪音,而且与模拟摄像头相比,它更显著的提高了摄像头的信噪比、增加了摄像头的动态范围以及最大化图像灰度范围。
目前,摄像头的研究围绕数字摄像头展开。
数字摄像头的芯片主要分为CCD和CMOS两种。
CCD(ChargeCoupledDevice),又称为电荷耦合器件,以百万像素为单位。
CCD是一种感光半导体芯片,用于捕捉图形,广泛运用于扫描仪、复印机以及无胶片相机等设备。
此类摄像头与胶卷的原理相似,即光线穿过一个镜头,将图形信息投射到CCD上。
但又有不同,CCD既没有能力记录图形数据,也没有能力永久保存下来,甚至不具备“曝光”能力,因此所有图形数据都会不停留地送入一个A/D转换器,一个信号处理器以及一个存储设备如内存芯片或内存卡等。
CCD有各式各样的尺寸和形状,其中,最大的有2×2平方英寸。
CMOS(ComplementaryMetalOxideSemiconductor),又叫做互补金属氧化物半导体。
它是计算机系统内一种重要的芯片,保存了系统引导所需的大量资料。
CMOS传感器便于大规模生产,且速度快,成本较低,是数码相机关键器件的发展方向之一,在今后的发展应用中有着举足轻重的地位。
数字摄像头中的图像传感器是其主要元器件,依据CCD与CMOS芯片构成的两种在“内部结构”和“外部结构”上都是不同的传感器,即:
(1)在内部结构(传感器本身的结构)上,CCD的成像点为X-Y纵横矩阵排列,每个成像点由一个光电二极管和其控制的一个邻近电荷存储区组成。
光电二极管将光线(光量子)转换为电荷(电子),聚集的电子数量与光线的强度成正比。
在读取这些电荷时,各行数据被移动到垂直电荷传输方向的缓存器中。
每行的电荷信息被连续读出,再通过电荷/电压转换器和放大器传感。
这种构造产生的图像具有低噪音、高性能的特点。
但是生产CCD需采用时钟信号、偏压技术,因此整个构造复杂,增大了耗电量,也增加了成本;CMOS传感器周围的电子器件,如数字逻辑电路、时钟驱动器以及模/数转换器等,可在同一加工程序中得以集成。
CMOS传感器的构造如同一个存储器,每个成像点包含一个光电二极管、一个电荷/电压转换单元、一个重新设置和选择晶体管以及一个放大器,覆盖在整个传感器上的是金属互连器(计时应用和读取信号)以及纵向排列的输出信号互连器,可以通过简单的X-Y寻址技术读取信号。
(2)在外部结构(传感器在产品上的应用结构)上,CCD电荷耦合器需在同步时钟的控制下,以行为单位一位一位地输出信息,运行速度较慢,而CMOS光电传感器在采集光信号的同时就可以取出电信号,还能同时处理各单元的图像信息,运行速度比CCD电荷耦合器快很多。
除此之外,CMOS光电传感器的加工采用半导体厂家生产集成电路的流程,可以将数字相机的所有部件集成到一块芯片上,如光敏元件、图像信号放大器、信号读取电路、模数转换器、图像信号处理器及控制器等,都可集成到一块芯片上,还具有附加DRAM的优点。
从上述两种数字摄像头的对比中可以得出,COMS数字摄像头满足设计的三条原则,安全可靠、集成度高、高性能、低噪音、成本低廉、经济实惠等。
综上,本设计采用CMOS数字摄像头。
本设计中采用的数字摄像头主要由OV6620图像传感器构成,具体如图4所示。
图4数字摄像头OV6620
OV6620摄像头模块采用OV6620彩色数字CMOS图像传感器,其图像是PAL制,一帧图像为352×288像素,数据格式为YCrCb4:
2:
2GRB42:
2和rawGRB。
OV6620的优点:
供电电压低,简化电路;内部集成A/D和视频分离模块,简化电路,并且使得采集程序简单,采集质量高;视频信号转换在内部进行,减轻单片机负担。
OV6620传感器包括一个356×292分辨率的图像阵列,一个模拟信号处理器,双8位模/数转换器,模拟视频复用器,数字数据格式器和视频端口,SCCB接口和寄存器,数字控制包括时钟模块、曝光和黑白平衡。
3.摄像头与单片机的连接
由于未做硬件部分,并且摄像头与单片机的连接部分并未能从protues仿真中看出,为了简化此课程设计,本次研究内容是从8位数据总线之后的部分开始进行研究的。
图5摄像头与单片机连接框图
2.3图像采集系统概述
本系统中,硬件电路主要有电源电路,晶振电路,复位电路,采集开关,存储电路,以及一些按键电路等。
(1)单片机简介
本系统设计采用AT89C51单片机。
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容(由于在微机原理中学过C-51的具体知识,这里不再详细说明)。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效的微控制器。
(2)电源电路
电源电路是系统最基本的部分,任何电路都离不开电源部分,由于三端集成稳压器件所组成的稳压电源线路简单,性能稳定,工作可靠,调整方便,已逐渐取代分立元件,在生产中被广泛采用,由于是小系统,我们采用7809电源提供+5V稳压电压。
(3)晶体振荡电路
MCS--51单片机内部的振荡电路是一个高增益反相放大器,引线XTAL1和XTAL2分别为反向振荡放大器的输入及内部时钟工作电路的输入和来自反向振荡器的输出,该反向放大器可以配置为片内振荡器。
这里,我们选用51单片机12MHZ的内部振荡方式,电路如下:
电容器C1,C2起稳定振荡频率,快速起振的作用,C1和C2可在20-100PF之间取,这里取33P,接线时要使晶体振荡器X1尽可能接近单片机。
图6晶体振荡电路
(4)复位电路
为了保证单片机的可控运行,需要给单片机加复位电路,一般情况下,单片机的复位电路有以下几项功能:
1)上电复位可以对内部寄存器进行复位,否则寄存器状态未知;
2)同步内、外部时钟信号。
防止频率不稳及晶振停振;
3)有些高级芯片,不先复位根本部工作;
4) 有复位引脚的芯片必须加复位,这是电子设计的基本要求;
5) 在电路上电时候或电压波动不稳定的时候,当给单片机上电那一瞬间,电压有在几微秒内(有的是几毫秒内)不是直接跳变到5V的而是一个直线上升的阶段,这时候,单片机不能正常工作,需要复位电路给它延时以等到电压稳定;
6) 由于单片机在工作过程中可能会受到各种干扰因素,所以不排除单片机出错的可
能,当单片机的程序“跑飞”时可以通过复位电路是单片机恢复正常的运行状态; 单片机的复位电路主要有以下几种方式:
上电复位方式、外部脉冲复位方式、上电+按钮复位方式以及软件复位等。
本系统为了实现方便,使用硬件复位方式,即采用按钮电平复位的方式,见图3所示。
图7复位电路
(4)采集开关
OV7670图像传感器:
OV7670是美国OmniVision公司的彩色/黑白CMOS图像传感器。
这是一种自带图像敏感阵列和A/D转换元件、能直接提供8位RGB/YUV等格式视频数字信号的彩色/黑白图像传感器。
由于protues软件中没有OV7670传感器,所以可用8个开关,模拟由摄像头输出的8位数字信号。
8个开关与单片机的P1口连接,模拟接收到由OV7670图像传感器传出的信号,以实现protues的仿真。
图8采集开关电路
(5)存储电路
由于单片机内存有限,不能完成一帧数据的保存,所以需要在单片机外部扩展一个数据存储器。
本课程设计我选用的是62256数据存储器,它是一个32K的外部存储器。
为了使单片机频率与存入的数据同频率,在外部存储器前面加了一个74LS373锁存器,并把锁存器中的LE引脚与单片机中ALE引脚连接在一起,这样锁存跳变信号就与单片机的晶振频率相同。
待锁存器接受到跳变信号,把数据传送至外扩存储器中。
如图5所示。
图9存储电路
3软件设计
3.1软件设计概述
在软件设计中,一般采用模块化的程序设计方法,它具有明显的优点。
把一个多功能的复杂的程序划分为若干个简单的、功能单一的程序模块,有利于程序的设计和调试,提高了程序的阅读性和可靠性,使程序的结构层次一目了然。
各程序模块都要完成一个明确的任务,实现某个具体的功能,如:
延时、初始化、地址顺延等,在具体需要时调用相应的模块即可。
功能描述:
8为数字信号可存储中外扩展的数据存储器中。
3.2程序流程图
主程序:
先初始化,设定初始存储地址,并设置好存储地址区域长度,再把采集的数据存入指定地址,当设定的地址有数据存入后,再自动转至下一个存储区间。
N
Y
图10主程序流程图
3.3子程序模块设计
(1)延时程序
由于单片机处理的速度很快,为了我们方便观察需要加入延时程序,在消除键盘抖动时也要用到延时程序。
延时程序不做实质性任何运算,只是消耗时间而已。
此部分程序为:
voiddelay(INT16Ux)//定义延时子函数
{
INT8Ut;//定义一个变量
while(x--)//x每次自减1,知道x==0,退出循环体
for(t=0;t<120;t++);//先给t幅值,t=0,判断t是否小于120,如果是执行t自加1的操作,如果不是结束循环
}
(2)地址顺延程序
最开始需要初始化,设定两个变量,由它们来确定存储的起始及地址的长度。
当有数据存入到当时的存储区域地址后,自动转换到另一个地址区域存储数据。
此部分程序为:
while
(1)
{
for(i=a;i<=b;i++)
{
a=b;//地址顺延
b=2*b;
XBYTE[i]=(INT8U)P1;//数据类型强制转换
delay(1000);
}
4系统调试及结果分析
编写好的源程序在Keil编译后呈现很多错误,例如:
在语句后面忘记“;”号,十六进制数表示应为0x,把0误打成字母O,变量名输入错误等。
这些错误很多都是由于自己粗心造成的,在智能仪器实验以及上学期的课程设计中也出现过这些错误,所以自己能很快的改正过来。
编译后结果如图所示:
图11有错误程序编译后结果
图12修正后正确程序编译后结果
用PROTEUS将编译生成的.HEX文件下到单片机中,点击运行按相应的操作键即可看到仿真结果。
调整与单片机P1口相连的8个开关,可得到不同的8位二进制数,通过memorycontents可以看到在62256中数据存储的情况。
仿真结果如下图所示:
图130xfa硬件仿真显示结果
图140xfa硬件仿真显示结果
图150xfc硬件仿真显示结果
图160xe4硬件仿真结果
图1662256存储结果
结果分析:
通过调整开关的闭合,改变8位二进制数的值,从memorycontents中可以明显看到存储的数据与开关的值相对应,例如:
如图8中开关所表示的8位二进制数为1111101,换算成十六进制数为0xfa,与memorycontents中显示想符合,所以此结果正确。
5结论及进一步设想
根据实验要求,本次课设基本完成了设计要求,由于图像采集系统并不一定仅仅局限于采集功能,还可以进行多项的扩展,可以利用AT89C51强大的扩展功能,进一步丰富图像采集的功能,例如可加入后续的图像处理等等众多功能。
单片机以其强大的功能和良好的兼容性可以更好的为我们服务,通过查阅各种资料,多了解一些单片机的有关知识,可以为以后的工作和学习生活创造更多的便利条件。
参考文献
[1]边树海,马斌,王长涛,韩中华,孟庆斌.基于单片机的数字图像采集系统设计.沈阳建筑大学信息与控制工程学院.
[2]杨凌霄编著.微型计算机原理及应用.徐州:
中国矿业大学出版社,2004.
[3]李群芳主编.单片机原理、接口及应用.北京:
清华大学出版社,2005.
[4]任志敏一种基于C51单片机的图像采集处理系统设计.电脑开发与应用,1003-5850(2013)03-0057-03.
[5]李为民梁济仁韦卫星,单片机图像采集与网络传输.广西民族学院--电子与通信工程学院
[6]吴金戌,沈庆阳,郭庭吉.8051单片机实践与应用.北京:
清华大学出版社,2002.
[8]张靖武,周灵彬.单片机系统的Proteus设计与仿真.北京:
电子工业出版社,2007.
课程设计体会
经过这两周的课程设计,使自己的对课堂上所学习到的知识有了更深层次的理解,虽然这次课程设计的题目不难,但是学习到了完成设计的方法:
应根据题目要求,首先把所需的硬件、软件实现的功能弄明白,先把硬件部分设计出来,再把软件所需实现的功能分别用模块的形式实现,最后进行汇总调试,得以实现所有所要求的功能。
在软件编译过程中,发现自己很粗心经常犯一些小错误,好在在智能仪器实验中也运用过本次课程设计运用的keil软件,在之前做实验的时候也出现过类似的错误,所以这些问题得以很快的解决。
本设计涉及到的技术领域较为广泛,但由于受时间、个人经验等条件的限制,设计工作中仍存在许多需要完善和改进的问题:
如I/O管理简单,可对图像识别做一定的研究,图像数据传输有一定的时间延时等等。
最后很感谢在本次课程设计中李忠海老师的帮助,得以让本次课程设计按要求完成。
[2014年1月8日完成]
附录1元件清单
元件名称
型号
数量
单片机
AT89C51
1
寄存器
74LS373
2
开关
9
电阻
220Ω
1
电阻
10kΩ
1
数据存储器
62256
1
晶振
CRYSTAL
1
电容
10uf
1
电容
22pf
2
附录2系统电路图
附录3源程序
#include
#include
#include
#defineINT8Uunsignedchar//宏定义
#defineINT16Uunsignedint
sbitp30=P3^0;//位定义
sbitp31=P3^1;
INT16Ui;
INT16Ua;
INT16Ub;
//延时函数
voiddelay(INT16Ux)
{
INT8Ut;
while(x--)
for(t=0;t<120;t++);
}
voidLEDON()
{
p30=0;
}
voidLEDBLINK()
{
p30=1;
delay(100);
p30=0;
delay(100);
}
//主程序
voidmain()
{
a=0x00;//初始化
b=0x10;
LEDON();//初始时LED点亮
//扩展内存数据处理完成后LED闪烁
while
(1)
{
for(i=a;i<=b;i++)
{
a=b;//地址顺延
b=2*b;
XBYTE[i]=(INT8U)P1;//数据类型强制转换
delay(1000);
}
LEDBLINK();
delay(100);}
}