基于STM32和OV7670的图像采集与显示系统设计
2016-09-08李慧敏樊记明
李慧敏, 樊记明, 杨 笑
(东华大学 机械工程学院,上海 201620)
基于STM32和OV7670的图像采集与显示系统设计
李慧敏, 樊记明, 杨笑
(东华大学 机械工程学院,上海 201620)
针对传统图像采集与显示方案存在成本高、便携性差等问题,设计了一种基于STM32和OV7670的图像采集与显示系统。以STM32F103ZET6微控制器为主控单元,采用串行摄像机控制总线(SCCB)控制OV7670图像传感器输出RGB565,QVGA的图像数据,同时实时显示在TFT LCD上,并将图像以BMP格式保存在SD卡中。实验结果表明:得到的图像清晰流畅,且该系统具有低成本、低功耗、小体积等优点,可满足图像处理与识别的需要。
STM32; OV7670; 图像采集与显示; 图像处理
0 引 言
图像处理技术经过几十年的发展逐渐成熟,已广泛应用于航空航天、生物医学工程、通信工程、工业检测、军事公安等领域[1]。而图像采集是图像处理的前提,原始图像的质量直接影响到图像处理最终的结果。以往的图像采集与处理多是由图像采集卡完成图像采集后再由计算机对其进行处理,这种方法虽然具有处理速度快的优点,但存在着价格昂贵、功耗高、体积大等不足[2]。随着微电子技术的发展和集成电路集成度及工艺的提高,基于嵌入式系统的图像采集处理平台的开发日益增多,它具有成本低廉、结构紧凑、功耗低的优点。STM32F103为ST公司生产的基于ARM Cortex—M3内核的32位微控制器,主频可达72 MHz,具有高性能、低功耗、低成本、稳定等诸多优点[3,4]。OV7670是OmniVision公司生产的一款1/6寸、有效像素30万的互补金属氧化物半导体(CMOS)图像传感器,它通过美国OmniVision公司定制的2线/3线制串行摄像头控制总线(serial camera control bus,SCCB)进行控制,输出并行的8位图像数据,VGA图像输出最高可达30帧/s[5]。
本系统以扬声器焊点位置检测为应用背景、以STM32F103ZET6微控制器为主控单元、以CMOS图像传感器OV7670为图像采集单元、以TFT LCD为图像显示单元、以SD卡为图像存储单元,实现了图像的采集、显示与保存。
1 系统总体方案
图1是系统的总体框图,主要由单片机、图像采集设备、图像显示设备、图像存储设备等组成。其中OV7670图像传感器负责图像数据的采集,STM32微控制器则是整个系统的核心单元,负责图像数据的处理和各模块的控制等,STM32通过对图像传感器寄存器的读写来控制它采集一帧的图像。由于图像传感器的像素时钟高达24 MHz,通过STM32的IO口来直接采集数据比较困难,容易造成数据丢失,且对CPU会造成较大的负担,所以使用AL422B作为先
入先出(FIFO),当一帧图像缓存完后,STM32才将这一帧图像写入显存或暂存到内存中。2.8 in(1 in=2.54 cm)320×240分辨率的TFT LCD实现图像的实时显示,由于一帧RGB565格式、QVGA(320×240)尺寸的图像高达150 KB,而STM32F103ZET6的内部SRAM只有64 KB,故外扩1MB的SRAM实现图像处理中间数据的暂存。SD卡则可以将图像以BMP图片文件格式进行掉电存储,方便计算机等其他设备的查看。
图1 系统总体框图
2 图像采集
2.1SCCB驱动
STM32通过SCCB对OV7670寄存器的读写实现图像数据的采集与输出。常用的2线制SCCB总线是与I2C总线类似的两线串行总线,仅需SIO_C(串行时钟线)和SIO_D(串行数据线)便能实现双向数据传输[6]。SCCB的时序图如图2所示。
图2 SCCB时序图
本系统使用IO口模拟SCCB来实现对OV7670的控制,SIO_C口配置为推挽输出,SIO_D口读数据时配置为上拉输入、写数据时配置为推挽输出,然后根据SCCB时序图来编写驱动程序。
SCCB单字节写操作与I2C一样:
起始信号→器件地址(0x42)→Ack→寄存器地址→Ack→写入数据→Ack→停止信号
单字节读操作则比I2C读操作中间多一个停止信号:
起始信号→器件地址(0x42)→Ack→寄存器地址→Ack→停止信号→起始信号→器件地址(0x43)→Ack→读出数据→NoAck→停止信号
2.2图像数据输出
OV7670中与图像数据输出有关的引脚主要有:
D0—D7:8位像素数据输出信号;
PCLK:像素时钟,每个PCLK输出一个8位图像数据,RGB565格式时,像素为16位,故每个PCLK输出半个像素;
HREF:行同步信号,每个HREF输出一行像素;
VSYNC:帧同步信号,每个VSYNC输出一帧图像。
OV7670的行输出时序图如图3所示,由图可知图像数据在HREF为高时输出,以后每个PCLK时钟输出一个字节数据,RGB565格式时每2个字节组成一个像素(高字节在前,低字节在后)。本系统采用QVGA(320×240)模式、RGB565格式输出图像数据,每帧图像240行,每行320个像素,刚好与TFT LCD的分辨率及颜色格式相匹配。
图3 OV7670行输出时序图
图像数据通过一个FIFO芯片(AL422B)进行缓存,从OV7670存储图像数据至FIFO的过程为:等待VSYNC帧同步信号→复位FIFO写指针→使能FIFO写→等待第二个VSYNC帧同步信号→禁止FIFO写,通过以上5个步骤便完成了一帧图像的缓存。
完成帧缓存后需要将图像数据从FIFO读出,其过程为:复位FIFO读指针→给FIFO读时钟→读第一个像素高字节→给FIFO读时钟→读第一个像素低字节并将高低字节组成16位数据→给FIFO读时钟→循环读取剩余像素至结束,通过以上步骤便可获取一帧完整的图像数据,之后可进行图像显示或暂存到外部SRAM中。
3 图像显示
3.1LCD驱动
本系统使用2.8寸320×240分辨率的TFT LCD作为图像显示设备,控制器为ILI9341,显示方式为RGB565,接口为16位8080并口。由于一帧图像数据高达150KB,为加快显示速度,采用STM32内部自带的静态存储控制器(flexible static memory controller,FSMC)总线,灵活的FSMC来驱动LCD,将LCD当作16位外部SRAM来控制,LCD的RS(命令/数据标志)信号作为地址线以区分命令和数据,与STM32的FSMC_A10相连接。LCD和外扩的1MB SRAM均挂在FSMC总线上,它们使用不同的片选信号以进行区分,LCD接FSMC_NE4,SRAM接FSMC_NE3。值得注意的是:在16数据宽度时,STM32内部AHB地址总线HADDR[25∶1]对应的外部存储器地址为FSMC_A[24∶0],即右移了一位。故LCD写命令(数据)时的地址为0x6C000000+0x07FE(0x0800),而不是0x6C000000+0x03FE(0x0400),即FSMC_A10对应HADDR11。
由于对LCD控制器ILI9341的写操作比读操作快得多,故FSMC的工作模式配置为异步模式A(ModeA),即读/写时间分别由不同的寄存器来控制,模式A的写操作时序如图4所示,片选信号NEx、读使能NOE、写使能NWE均为低电平有效,写操作为(ADDSET+DATAST +2)个HCLK周期。
图4 模式A写操作时序
3.2图像显示过程
完成摄像头及LCD等模块驱动的编写便可以进行图像显示功能的程序设计了,本系统使用一个外部中断来捕捉帧同步信号(VSYNC),第一次帧中断时启动图像数据帧缓存,待到第二次帧中断时关闭数据存储便完成了一帧图像的存储。在主函数中将这帧数据读出并在LCD上进行显示,同时开启下一帧图像的存储,如此循环便可实现图像的实时显示。图像显示流程图如图5所示。
图5 图像显示流程图
4 图像保存
4.1SD卡
SD卡即安全数码卡(secure digital memory card),是一种基于半导体快闪记忆器的新一代记忆设备,广泛使用在便携式装置上。本系统使用4GB金士顿SD卡作为大容量存储设备以长期保存图像数据。SD卡支持2种操作模式:SD卡模式和SPI模式。SD卡模式具有更快的速度,而SPI模式则具有更好的兼容性,本系统使用SPI模式操作SD卡。SD卡与主机的通信采用发送应答机制,即主机每发送一个命令,SD卡都会给出一个应答,以告知主机该命令的执行情况或返回主机需要的数据。SD卡需完成初始化后才能对其进行读写,其初始化流程图如图6(a)所示,读数据流程图如图6(b)所示。
图6 SD卡初始化和读数据流程图
写数据过程与读数据过程类似,不再赘述。需要注意的是,SD卡在初始化的时候SPI时钟最大不能超过400 kHz,可在初始化完成后再将SPI速度提升到18 MHz。
4.2FATFS文件系统
图像数据是以文件的形式保存在SD卡中的,本系统使用FATFS来管理SD卡,实现文件的读/写功能。FATFS是一个免费开源、用标准C语言编写、专为小型嵌入式系统设计的FAT文件系统模块,它的层次结构如图7所示。
图7 FATFS层次结构图
顶层为应用层,用户不必理会FATFS的内部结构及复杂的FAT协议,只需调用它提供的一系列应用接口函数,如f_open、f_close、f_read和f_write等,就可轻易实现文件的读/写。中间层FATFS模块则实现了FAT文件读/写协议,提供了ff.c和ff.h,一般不用修改。用户需要编写的是FATFS模块提供的底层接口,包括存储媒介读/写接口(disk I/O)和供给文件创建修改时间的实时时钟。需用户编写的底层驱动函数有6个:
disk_initialize:初始化磁盘驱动器;
disk_status:返回当前磁盘驱动器的状态;
disk_read:从磁盘驱动器上读取扇区;
disk_write:向磁盘写入一个或多个扇区;
disk_ioctl:控制设备指定特性及某些杂项功能;
get_fattime:获取当前时间。
需要注意的是,在完成FATFS移植和底层驱动编写后,必须先通过f_mount函数注册一个工作区才能开始后续API的使用。读/写文件前必须先打开该文件,f_open/f_close函数(打开/关闭文件)需成对使用,f_write(写文件)之后必须关闭该文件才能有效写入。
4.3BMP编码
本系统将采集到的图像以BMP的图片文件格式保存在SD卡中,BMP(Bitmap,位图文件)是Windows操作系统中的标准图像文件格式,图像深度可选,一般不压缩,没有失真,扫描顺序为自左到右、自下到上。BMP文件一般由文件头、信息头、调色板、位图数据这4部分组成。为与LCD的颜色格式及分辨率一致,系统采用RGB565的方式进行BMP编码,图片宽度和高度分别为240和320,使用读LCD各点颜色值的方法获取图像数据,当拍照按键按下时执行图片保存任务,BMP图片保存的流程图如图8所示。
图8 BMP图片保存流程图
5 测试结果与分析
系统在STM32平台上实现了OV7670图像传感器采集扬声器图像并实时显示到TFT LCD上,同时具有“拍照”功
能,可随时将图像以BMP的图片格式保存在SD卡中,LCD画面及保存后的扬声器BMP图片如图9所示。测试过程中,图像画面显示清晰流畅,QVGA(320×240)输出达到10帧/s,从图片中可以清晰地看出扬声器焊点的位置,为后续的图像处理和识别打下了坚实的基础。
图9 扬声器图像
6 结 论
本文设计的基于STM32和OV7670的图像采集与显示系统能实时采集并显示现场图像,同时还能实现图像的BMP格式保存。该系统具有低成本、低功耗、小体积、高图像质量等优点,可方便地应用到图像处理与识别、视频监控等项目中,同时,本系统在扬声器焊点位置检测中也得到了成功验证。
[1]于殿泓.图像检测与处理技术[M].西安:西安电子科技大学出版社,2006:1-4.
[2]朱奕丹,方怡冰.基于FPGA的图像采集与VGA显示系统[J].计算机应用,2011(5):1258-1261,1264.
[3]李宁.基于MDK的STM32处理器开发应用[M].北京:北京航空航天大学出版社,2008:7-13.
[4]罗超,景林,易金聪.基于STM32的便携式海量温湿度记录仪设计[J].电子技术应用,2012(12):83-86.
[5]OmniVision Technology.OV7670 Datasheet[DB/OL].[2013—10—14]. http:∥www.ovt.com.
[6]付斌,张晓雷,陆扬.CMOS图像传感器时序分析研究[J].传感器与微系统,2007,26(12):47-49,53.
樊记明,通讯作者,E—mail:jm_fan@foxmail.com。
Design of image acquisition and display system based on STM32 and OV7670
LI Hui-min, FAN Ji-ming, YANG Xiao
(College of Mechanical Engineering,Donghua University,Shanghai 201620,China)
Concerning the drawbacks of high cost and poor portability of traditional image acquisition and display scheme, an image acquisition and display system based on STM32 and OV7670 is designed.This system uses STM32F103ZET6 as core controller,use serial camera control bus(SCCB)to control OV7670 image sensor output RGB565,QVGA image data,at the same time,real-time display on TFT LCD is saved in SD card in BMP format.Experimental results show that the obtained image is clear and smooth,and the system has advantages of low cost,low power consumption and small volume,which can meet the needs of image processing and recognition.
STM32; OV7670; image acquisition and display; image processing
10.13873/J.1000—9787(2016)09—0114—04
2015—11—25
TP 752.1
A
1000—9787(2016)09—0114—04
李慧敏(1975-),女,河南漯河人,博士,副教授,主要研究方向为嵌入式系统、数字图像处理。