張興武,趙慶志,張林華,夏汝巖,王政皓,孫小飛
(1.山東理工大學 機械工程學院,山東 淄博 255049;2.山東新華醫療器械股份有限公司,山東 淄博 255086)
傳統的基于PCI圖像采集卡的圖像采集系統存在硬件成本高、體積大、開發周期長、不利于后續改造和拓展等問題[1].而傳統的基于FPGA圖像采集系統需要根據特定應用環境設計特定算法和硬件實現,開發難度大,不利于拓展和移植[2].嵌入式微處理器和TFT LCD的結合及應用[3-6]為解決上述問題提供了可能.為此,本文設計一種嵌入式圖像采集系統,該系統以STM32F103VET6(簡稱STM32F103)為主控制器,以OV7725為圖像采集傳感器,以ILI9341為液晶控制器,通過I2C總線和FSMC總線分別控制OV7725和ILI9341,實現圖像傳感器及液晶控制器與單片機的通信,最終實現圖像的采集、顯示與保存,并應用于可視門鈴及其他應用領域.
以ST公司基于ARM Cortex-M3內核架構的STM32F103VET6[7]芯片為控制平臺,供電電壓2.0~3.6 V,CPU最高主頻72 MHz,支持8080模式LCD并行接口.采用ILI9341液晶控制器芯片顯示圖像信息,該液晶芯片自帶172.8 KB顯存,可保存兩幀RGB圖像數據.采用Omni Vision公司基于COMOS VGA的圖像傳感器OV7725采集圖像信息,最大輸出30萬像素圖像(分辨率640×480),自帶有源晶振和穩壓芯片,并帶有FIFO幀緩存芯片AL422B,該芯片內含384 K的FLASH,可緩存兩幀QVGA圖像數據.該圖像傳感器將采集的圖像數據保存成RGB565格式存入FIFO緩存.STM32讀取緩存中的圖像數據經RGB接口輸出至液晶面板.系統硬件結構如圖1所示.

圖1 系統硬件結構Fig.1 Hardware structure of the system
1)液晶面板與ILI9341通信接口.液晶面板與ILI9341采用RGB接口,液晶面板含28根信號線,其中:RGB信號線各8根,CLK同步時鐘信號線1根,H/YSYNC水平/垂直同步信號線各1根, DE數據使能信號線1根.
2)ILI9341與STM32F103通信接口.ILI9341配置為8080接口通信(由STM32F103的FSMC實現8080接口時序),使用16根數據線按RGB565數據格式傳輸圖像數據.此外還有:CSX片選信號線、RESX復位信號線、R/WDX讀寫信號線各1根,以及SCL/SDA總線時鐘/信號線.
3)OV7725與STM32F103通信接口.由STM32F103的I2C接口完成與OV7725的通信.OV7725共引出20跟引腳,主要引腳有:D0~D9像素數據端口,XCLK/PCLK系統輸入時鐘/像素同步時鐘,HREF/VSYNC行/場同步信號.
為提高系統的可移植性和方便調試,系統采用模塊化設計.主要模塊為:圖像數據采集模塊、圖像顯示模塊和圖像保存模塊.程序運行流程如圖2所示.

圖2 程序運行流程Fig.2 Program running process
本設計以可視門鈴為應用背景,通過兩個按鍵中斷實現系統級功能:Key1中斷啟動程序,對板載各個設備初始化,系統就緒,開啟液晶屏顯示門外彩色圖像;Key2中斷實現截屏保存功能,系統將截屏圖像保存至SD卡內.硬件操作圖如圖3所示.SD卡內移植了FatFs R0.11a版文件系統,STM32可對SD卡內保存的文件圖像進行后期處理.

圖3 硬件操作圖Fig.3 Hardware operation picture
OV7725帶有標準SCCB總線接口,而SCCB總線與I2C總線十分類似,因此STM32可直接使用片上外設I2C與OV7725通信,實現對OV7725寄存器的參數配置,進而實現圖像數據采集.相關配置參數可從OV7725數據手冊[8]中查詢.配置OV7725寄存器的主要代碼如下:
/*向OV7725寄存器COM7寫入數據0x80,
進行復位操作*/
if(0==SCCB_WriteByte(0x12,0x80))
{return ERROR;}
/*從VER寄存器讀取OV7725芯片ID,
以確定OV7725是否處于正常工作狀態*/
if(0==SCCB_ReadByte(&Sensor_IDCode,1,0x0b)
{return ERROR;}
if(Sensor_IDCode==OV7725_ID)
{/*利用for循環向OV7725各寄存器寫入
配置參數*/
for(i=0;i {/*Sensor_Config[i].Address是各寄存器地址,Sensor_Config[i].Value是相應寄存器參數*/ if(0==SCCB_WriteByte(Sensor_Config[i]. Address,Sensor_Config[i].Value)) {return ERROR;} } } OV7725自帶的FIFO幀緩存芯片AL422B解決了OV7725與STM32F103之間傳輸速率不一致的問題.OV7725將采集的圖像數據緩存至AL422B后,STM32F103讀取數據至ILI9341顯存緩存起來,再傳輸給液晶屏顯示.當檢測到攝像頭VSYNC引腳的幀結束信號時,說明OV7725已經輸出一幀圖像至幀緩存,STM32即可調用Imag_Display()函數將圖像數據輸出至液晶屏.該函數主要代碼如下: /*在液晶屏上輸出以sx,sy為起點, 以width,height為寬高的矩形圖像*/ void Imag_Display(uint16_t sx,uint16_t sy, uint16_t width,uint16_t height) {uint16_t i,j; uint16_t Camera_Data;//RGB565像素值 /*液晶屏顯示窗口設置*/ ILI9341_OpenWindow(sx,sy,width,height); /*向液晶屏發送填充像素命令*/ ILI9341_Write_Cmd(CMD_SetPixel); for(i=0;i {for(j=0;j {/*循環讀取幀緩存數據,循環次數即每 幀像素個數*/ READ_FIFO_PIXEL(Camera_Data); /*將讀取的數據顯示在LCD上*/ ILI9341_Write_Data(Camera_Data); } } } 當按下Key2鍵后,當前畫面定格1s,并將截屏圖像以BMP格式文件存儲至SD卡.SD卡內移植了FatFs R0.11a版文件系統,STM32F103就可以調用FatFs提供的API對截屏文件進行讀寫操作.SD卡支持SPI和SDIO兩種模式,SDIO模式存取速度快,適合大吞吐量的數據存儲,本系統選擇SDIO通信模式,其與SD卡的數據傳輸由DMA完成.關于SD卡的SDIO通信建立與FatFs文件系統的移植此處不再詳述,請參閱文獻[9-10].BMP圖片保存代碼由Screen_Capture()函數實現,主要代碼如下: int Screen_Capture(uint16_t x,uint16_t y, uint16_t Width, uint16_t Height, char * filename) { /*初始化BMP文件頭*/ unsigned char header[54]= {0x42,0x4d,0,0,0,0,……}; …… /*設定BMP文件大小*/ file_size=(long)Width*(long)Height*3+ Height*(Width%4)+54; /*新建一個BMP文件*/ bmpres=f_open(&bmpfsrc,(char*)filename, FA_CREATE_ALWAYS|FA_WRITE); f_close(&bmpfsrc);//先關閉再寫入 bmpres=f_open(&bmpfsrc,(char*)filename, FA_OPEN_EXISTING|FA_WRITE); if(bmpres==FR_OK) {/*將BMP頭部信息寫入文件*/ bmpres=f_write(&bmpfsrc,header,sizeof(unsigned char)*54,&mybw); for(i=0;i {for(j=0;j {read_data=ILI9341_GetPointPixel( x+j,y+Height-1-i); r=GETR_FROM_RGB16(read_data); g=GETG_FROM_RGB16(read_data); b=GETB_FROM_RGB16(read_data); bmpres=f_write(&bmpfsrc,&b,sizeof(unsigned char),&mybw); bmpres=f_write(&bmpfsrc,&g,sizeof(unsigned char),&mybw); bmpres=f_write(&bmpfsrc,&r,sizeof(unsigned char),&mybw);} if(ucAlign ) bmpres=f_write(&bmpfsrc,kk,sizeof(unsigned char)*(ucAlign),&mybw); }/*自此截屏完畢*/ f_close(&bmpfsrc); return 0; } } 字符顯示測試結果如圖4所示,應用于可視門鈴的圖像顯示測試結果如圖5所示,SD卡保存的BMP圖片如圖6所示.測試過程中圖像輸出(分辨率320×240)達20幀/s,輸出圖像較為流暢.由于本實驗攝像頭模塊較為低端,因此更換攝像頭將會得到更加清晰的圖像. 圖4 字符顯示Fig.4 Character display 圖5 可視門鈴顯示圖像測試Fig.5 Visual doorbell display image test 圖6 保存的BMP圖片Fig.6 Saved BMP image 經實驗驗證,本文所設計的嵌入式圖像采集系統可實現對靜態字符和動態圖像的流暢顯示,系統穩定、可靠,且成本低、功耗低、體積小、可拓展性強,可應用于家庭可視門鈴、公共安防監控、無人或高危工業現場的實時監控.2.2 圖像顯示模塊
2.3 圖像保存模塊
3 實驗結果與分析



4 結束語