基于ARM9的图像采集系统文档格式.docx
《基于ARM9的图像采集系统文档格式.docx》由会员分享,可在线阅读,更多相关《基于ARM9的图像采集系统文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
系统具有集成度高、可靠性高、功耗低、稳定性好等特点,可应用在远程监控、工业控制、视频会议、智能家居等诸多领域。
该系统架构也为视频监控系统的发展提供了一种新思路。
关键字:
ARM9、OV9650、uC/OSII、zn_FAT、TFT、SD、IIC
目录
1.总体方案设计1
1.1方案比较1
1.2方案选择1
2.硬件模块2
2.1OV96502
2.2真彩TFT3
2.3触摸屏4
2.4SD卡4
2.5IIC接口5
3.软件模块6
3.1系统平台6
3.1.1μCOS-II6
3.1.2zn-FAT7
3.2系统任务8
3.2.1主菜单显示8
3.2.2触屏扫描9
3.2.3图像采集9
3.2.4文件管理10
3.2.5时钟设置11
3.2.6背光调整11
3.2.7触屏校正11
3.2.8图片浏览12
4.系统调试13
5.设计总结13
参考文献14
附录一程序组织结构图15
1.总体方案设计
为了适应采集图像的真实性、数据的大量性,我们并针对本设计的要求和目标,经过仔细的分析和考证,结合多方参考,对处理器、操作系统、摄像头模块进行了选型。
1.1方案比较
以往的8位单片机如51,AVR,430因价格便宜,硬件搭建简单,程序控制方便而广泛应用于工控,消费电子等产品中,但系统主频太低,存储容量小,难以满足高速图像采集及TFT显示。
目前流行的32位处理器,具有其完整的体系结构以及较高的处理速度,极小的体积、极低的功耗、极低的成本、极高的性能,已在众多嵌入式微处理器中脱颖而出。
对于操作系统,Linux和WindowCE虽然经过多方调试和移植,源码公开,运行稳定,界面友好,但代码容量偏大,不适应本设计大量图像数据的传输,且移植不容易。
而uC/OSII操作系统相对于前两者而言,代码容量偏小,移植简单,具有高速稳定的特点。
对于摄像头模块,USB摄像头虽然占用的系统资源少,运行简单,但无法满足本系统图像采集清晰度、读取速度、帧速的要求,而支持8位/16位数据总线传输的0V系列摄像头正达到了本系统的要求,且其可通过SCCB串行总线进行控制,操作简单。
1.2方案选择
在处理器方面,本系统使用了三星公司的S3C2440A微处理器为主控芯,采用ARM920T内核,最高时钟频率533MHz,298引脚的BGA封装。
该芯片具有MMU虚拟内存管理,独立的8K指令和8K数据缓存,支持DSP指令集,支持数据Cache和质量Cache,LCD控制器,NAND控制器,3通道UART,4通道DMA,带脉宽调制的4路定时器,I/O端口,RTC(realtimeclock),8路10位ADC和触摸屏接口,IIC总线接口,IIS总线接口,USB主机,USB从机,SD座和多媒体卡接口,2路SPI和同步时钟发生器。
在操作系统方面,本系统使用了uC/OSII可抢占实时内核,并结合输入输出设备(触摸屏),以及自制的操作界面,移植了操作直观,界面友好,功耗低、稳定性好的嵌入式图像采集系统界面。
在摄像头方面,本系统选用了具有130万像素的OV9650CMOS摄像头模块,支持8位或16位数据输出,通过SCCB接口进行串行控制,图像清晰度好,帧速可调,且可支持320X240、640X480、1280X1024等多种分辨率的图像采集。
2.硬件模块
图2.1硬件模块连接示意
本系统采用OV9650采集图像,使用320x240分辨率的TFT进行图像呈现,同时采用触摸屏进行人机交互,最后将采集到的图像信息保存到SD中,并将系统设置的重要信息参数以IIC方式写入24C02的EEPROM中。
2.1OV9650
图2.1.1摄像头接口
OV9650是美国OmniVision公司推出的CMOS图像传感器芯片,支持多种分辨率,包括VGAQQVGACIFQCIF等,以及多种数据输出格式,如RawRGBYUV(4:
2:
2)YcbCr(4:
2)等支持8位或16位数据输出,通过SCCB接口对其编程,可实现图像处理的各种基本功能,譬如曝光控制白平衡色彩饱和伽马控制等芯片电压要求低,可应用于嵌入式移动设备,采用两线制SCCB(SerialCameraControlBus)双向同步串行总线,基本兼容IIC。
原理如图2.1.1所示。
CAMDATA0~7:
数据总线,连接到ARM的CAM接口。
CAMHRER:
行同步。
CAMVSYNC:
帧同步。
CAMPCLK:
像素时钟。
IICSDA:
SCCB数据线。
IICSCL:
SCCB时钟线。
2.2真彩TFT
TFT具有低功耗、体积小、显示内容丰富等特点,被广泛应用在消费电子行业。
TFT彩色显示器通过利用三种原色混合的原理显示不同的色彩:
彩色面板中,每个像素都是由3个液晶单元格构成,其中每个单元格前面都分别有红色、绿色、蓝色的过滤片;
光线经过过滤片的处理变成红色、绿色、蓝色,利用三原色的原理组合出不同的色彩。
TFT接口如图2.2.1所示。
VD0~VD23:
为数据总线,直接连接到2440的LCD控制器上。
LCD_PWREN:
为背光使能。
VSYNC:
帧(垂直)同步。
HSYNC:
帧(水平)同步。
VCLK:
LCD时钟。
VDEN:
数据有效使能。
图2.2.1TFT接口
2.3触摸屏
电阻触摸屏是由两层复合膜构成,一层为导电玻璃,另一层为导电薄膜,如图2.3.1所示。
在两层导电层之间有许多细小的透明隔离点把他们绝缘。
当手指触摸屏幕时,两层导电层在触摸点位置就有了接触,控制器侦测到这一接触点,ADC后计算出(X,Y)的坐标。
本系统采用了四线式触摸屏,接口如图2.2.1所示。
图2.3.1触摸屏构成
2.4SD卡
SD卡是可靠数字存储卡,由MMC发展而来,他是为满足最新的视听类消费电子产品对安全、容量、性能等有特殊要求的环境而设计的。
SD卡基于9针接口,最大可工作在25MHz。
其中定义了两种可选择的总线协议,分别是SD和SPI。
(1)SD总线:
CLK:
主机与卡之间的同步时钟。
CMD:
双向的命令/反馈信号。
DAT0~DAT3:
4位双向的数据传输线。
(2)SPI总线:
CS:
主机到卡芯片之间的片选信号。
主机到卡芯片之间的同步信号。
DataIn:
主机到卡芯片之间的数据输入信号。
DataOut:
主机到卡芯片之间的数据输出信号。
本系统采用了高速的SD总线方式,硬件接口如图2.4.1所示。
图2.4.1SD卡接口
2.5IIC接口
IIC总线为同步串行数据传输总线,可构成多主和主从系统。
应用系统中IIC总线多采用主从结构,即总线上只有一个主控节点,总线上的其他设备都作为从设备。
IIC总线上的设备寻址由器件地址接线决定,并且通过访问地址最低位来控制读/写方向。
本系统挂接了两个IIC从机,即24C02和OV9650。
地址分别为:
0x40和0x60。
24C02的硬件接口如图2.5.1所示:
图2.5.124C02接口
3.软件模块
本系统功能强大,界面复杂,为加快项目进程采用了嵌入式实时系统μCOS-II为平台搭建了各功能模块,实现了多任务。
同时也采用了操作简单的zn_FAT文件系统,使文件读取,管理等功能轻松实现。
系统界面全由Photoshop制作而成。
3.1系统平台
根据IEEE(电气和电子工程师协会)的定义,嵌入式系统是“控制、监视或者辅助装置、机器和设备运行的装置”(devicesusedtocontrol,monitor,orassisttheoperationofequipment,machineryorplants)。
从中可以看出嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。
目前国内一个普遍被认同的定义是:
以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
3.1.1μCOS-II
μC/OS-II是一种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统,是专门为计算机的嵌入式应用设计的。
其源码绝大部分代码是用C编写,CPU硬件相关部分是用汇编语言编写的。
具有很强的移植性。
用户只要有标准的ANSI的C交叉编译器,有汇编器、连接器等软件工具,就可以将μC/OS-II嵌人到开发的产品中。
μC/OS-II具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至2KB。
μC/OS-II已经移植到了几乎所有知名的CPU上。
严格地说uC/OS-II只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。
没有提供输入输出管理,文件系统,网络等额外的服务。
uC/OS-II目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等。
uC/OS-II任务状态之间的切换如图3.1.1.1所示
图3.1.1.1uC/OS-II任务状态
3.1.2zn-FAT
Zn-FAT是由我国年轻的电子工程于振南于两年前开始研发,目前已基本成熟的8位机FS修改后可移植到AVR、STM32、DSP、NIOSII等不同类型的处理器上,本系统将其移植到了32位的ARM9处理器上运行良好。
zn-FAT提供了图3.1.2.1所示的软件接口。
图3.1.2.1zn_FAT文件系统功能示意
3.2系统任务
一个任务也被称为一个线程,可以把它看成是一个完全占有CPU资源的简单程序。
对于实时应用程序,这个设计过程就包括了把问题分割成为若干部分,每一部分由相应的任务进行处理。
对每一个任务分配一个优先级,它拥有一组CPU寄存器,并且拥有堆栈区。
3.2.1主菜单显示
图3.2.1.1主菜单界面
TaskMainMenu()部分代码如下所示:
{
switch(i)
{
ca