李慧敏, 樊記明, 楊 笑
(東華大學 機械工程學院,上海 201620)
?
基于STM32和OV7670的圖像采集與顯示系統設計
李慧敏, 樊記明, 楊笑
(東華大學 機械工程學院,上海 201620)
針對傳統圖像采集與顯示方案存在成本高、便攜性差等問題,設計了一種基于STM32和OV7670的圖像采集與顯示系統。以STM32F103ZET6微控制器為主控單元,采用串行攝像機控制總線(SCCB)控制OV7670圖像傳感器輸出RGB565,QVGA的圖像數據,同時實時顯示在TFT LCD上,并將圖像以BMP格式保存在SD卡中。實驗結果表明:得到的圖像清晰流暢,且該系統具有低成本、低功耗、小體積等優點,可滿足圖像處理與識別的需要。
STM32; OV7670; 圖像采集與顯示; 圖像處理
圖像處理技術經過幾十年的發展逐漸成熟,已廣泛應用于航空航天、生物醫學工程、通信工程、工業檢測、軍事公安等領域[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是系統的總體框圖,主要由單片機、圖像采集設備、圖像顯示設備、圖像存儲設備等組成。其中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.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.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.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圖片保存流程圖
系統在STM32平臺上實現了OV7670圖像傳感器采集揚聲器圖像并實時顯示到TFT LCD上,同時具有“拍照”功
能,可隨時將圖像以BMP的圖片格式保存在SD卡中,LCD畫面及保存后的揚聲器BMP圖片如圖9所示。測試過程中,圖像畫面顯示清晰流暢,QVGA(320×240)輸出達到10幀/s,從圖片中可以清晰地看出揚聲器焊點的位置,為后續的圖像處理和識別打下了堅實的基礎。

圖9 揚聲器圖像
本文設計的基于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-),女,河南漯河人,博士,副教授,主要研究方向為嵌入式系統、數字圖像處理。