《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 測試測量 > 設(shè)計應(yīng)用 > 一種便攜式水下圖像實時采集系統(tǒng)軟件設(shè)計
一種便攜式水下圖像實時采集系統(tǒng)軟件設(shè)計
2015年微型機與應(yīng)用第19期
劉亞雷1,于艷美2,孟春寧1
(1.公安海警學(xué)院 機電管理系,浙江 寧波 315801; 2.寧波大學(xué) 科學(xué)與技術(shù)學(xué)院,浙江 寧波 315801)
摘要: 為了快速、實時地采集水下圖像,提出了一種基于RVMDK開發(fā)平臺的便攜式水下圖像實時采集系統(tǒng)軟件設(shè)計。首先給出了水下圖像采集系統(tǒng)的總體組成,闡述了RVMDK開發(fā)軟件環(huán)境;其次,分別對OV7670程序、LCD程序、SCCB接口程序進(jìn)行了設(shè)計;最后,對提出的圖像采集軟件系統(tǒng)進(jìn)行了試驗。試驗結(jié)果表明,該程序設(shè)計能夠有效地實現(xiàn)水下圖像實時采集功能。
Abstract:
Key words :

  摘  要: 為了快速、實時地采集水下圖像,提出了一種基于RVMDK開發(fā)平臺的便攜式水下圖像實時采集系統(tǒng)軟件設(shè)計。首先給出了水下圖像采集系統(tǒng)的總體組成,闡述了RVMDK開發(fā)軟件環(huán)境;其次,分別對OV7670程序、LCD程序、SCCB接口程序進(jìn)行了設(shè)計;最后,對提出的圖像采集軟件系統(tǒng)進(jìn)行了試驗。試驗結(jié)果表明,該程序設(shè)計能夠有效地實現(xiàn)水下圖像實時采集功能。

  關(guān)鍵詞: 水下圖像采集;OV7670程序;SCCB接口程序;LCD程序

0 引言

  21世紀(jì)是海洋的世紀(jì),水下探測技術(shù)是水下觀測、海洋防衛(wèi)、水下搜救打撈、艦艇檢修等方面的關(guān)鍵技術(shù)之一。海警艦艇機艙集中了船上絕大多數(shù)設(shè)備裝置的儀表,是艦艇航行的關(guān)鍵部分?;赑C機的圖像采集系統(tǒng)具有功能豐富、接口靈活多變、數(shù)據(jù)處理能力強等優(yōu)點[1-2]。該類型圖像采集系統(tǒng)通過硬件傳輸路線連接到多媒體監(jiān)控終端,然后基于通信網(wǎng)絡(luò),將圖像信息傳到一個或者多個監(jiān)控中心[3-4]。系統(tǒng)不僅能夠?qū)崿F(xiàn)多媒體信息處理如壓縮、存儲等基本功能,還能夠?qū)崿F(xiàn)智能存儲和圖像自動識別等高級功能,實現(xiàn)模擬監(jiān)控?zé)o法實現(xiàn)的“監(jiān)控”功能[5-6]。但是該類圖像采集系統(tǒng)在有限空間的機艙內(nèi)部所占體積大,且成本較高,不利于便攜采集。因此,本文設(shè)計了一種快速、實時的水下圖像采集系統(tǒng)軟件,通過試驗驗證,該軟件能夠有效地實現(xiàn)水下圖像便捷、實時采集的功能。

1 水下圖像采集系統(tǒng)的總體設(shè)計

001.jpg

  本系統(tǒng)的總體目標(biāo)是采用帶FIFO的OV7670攝像頭模塊,由STM32F103ZET6單片機通過SCCB總線讀取數(shù)據(jù),并在LCD液晶顯示屏上實時顯示圖像數(shù)據(jù)。如圖1所示為水下圖像采集系統(tǒng)的總體設(shè)計框圖。由圖可知,本系統(tǒng)結(jié)構(gòu)主要由ARM主處理器及其外圍電路、CMOS圖像傳感器、LCD液晶顯示屏等幾部分組成,系統(tǒng)硬件實現(xiàn)簡單。

2 軟件環(huán)境

  軟件以RVMDK為開發(fā)平臺,實現(xiàn)水下圖像采集系統(tǒng)的主要算法、控制流程等。RVMDK源自德國的KEIL公司,是RealView MDK的簡稱。該軟件集成了最領(lǐng)先的技術(shù),支持Cortex-M3主處理器內(nèi)核,本文將選擇RVMDK3.80A版本的編譯器進(jìn)行程序編譯。由于單片機主處理器為STM32F103ZET6,F(xiàn)LASH容量為512 KB,容量偏大,因此選擇startup_stm32f10x_hd.s作為STM32芯片啟動文件。如圖2所示為STM32芯片啟動文件加載圖。

002.jpg

3 水下圖像采集軟件設(shè)計

  3.1 軟件方案設(shè)計

003.jpg

  如圖3所示為水下圖像采集程序流程圖。首先是系統(tǒng)初始化程序,主要包括TFT液晶顯示模塊的初始化、SCCB接口、OV7670攝像頭、FIFO緩存器AL422B模塊的初始化。系統(tǒng)產(chǎn)生中斷指令,使得FIFO_WEN置高電位,再次產(chǎn)生中斷指令,使得FIFO_WEN置低電位,從而完成一個FIFO_WEN周期。讀取FIFO_WEN數(shù)據(jù),檢測是否完成一幀,如果完成,則檢測是否收到采集完畢指令,如此往復(fù)循環(huán),直到采集完畢。

  3.2 OV7670程序設(shè)計

  通過OV7670.c代碼先編程設(shè)計OV7670相關(guān)的I/O口和SCCB接口,完成OV7670的寄存器序列的初始化工作。OV7670的寄存器特多,配置很麻煩,本文用到的配置序列,存放在ov7670_init_reg_tbl數(shù)組里面,通過這個二維數(shù)組來存儲初始化序列寄存器和寫入寄存器的數(shù)值,整個數(shù)組存放在ov7670cfg.h文件中。ov7670cfg.h文件的代碼如下:

  const u8 ov7670_init_reg_tbl[][2]=

  {

  /*以下為OV7670 QVGA RGB565參數(shù)*/

  {0x3a,0x04},

  {0x40,0x10},

  {0x12,0x14},//QVGA,RGB 輸出

  {0x6e,0x11},  //100

  {0x6f,0x9f},  //0x9e for advance AWB

  {0x55,0x00},  // 亮度

  {0x56,0x40},  // 對比度

  {0x57,0x80},

  //0x40,change according to Jim′s request

  };

  #end if

  以上代碼中,每個條目的第一個字節(jié)為寄存器地址,第二個字節(jié)為設(shè)置的值,比如{0X3a,0x04},就表示在0X3a地址,寫入0X04這個值。

  通過對寄存器的配置,完成了OV7670攝像頭模塊的程序設(shè)計,使OV7670工作在QVGA模式,以RGB565格式輸出。在完成初始化之后,準(zhǔn)備讀取OV7670采集的圖像數(shù)據(jù)。

  3.3 LCD初始化程序設(shè)計

  TFT-LCD液晶顯示模塊程序設(shè)計的關(guān)鍵在于FSMC控制器的配置和寄存器地址的計算。單片機的FSMC使用的是AHB3提供的時鐘信號,STM32微處理器的FSMC控制器對外設(shè)地址映射從0X60000000開始到0X9FFFFFFF結(jié)束,一共由4個Bank組成,在TFT-LCD程序設(shè)計過程中選擇了Bank1。寄存器地址則由TFT-LCD的RS和CS端與FSMC接口的連接方式來計算。本文STM32與TFT模塊連接時,僅將2.8英寸的TFT屏看成一個SRAM來處理。本程序函數(shù)用來驅(qū)動ILI9320LCD芯片。程序函數(shù)如下:

  void LCD_Init(void)

  {GPIO_InitTypeDef GPIO_InitStructure;

  FSMC_NORSRAMInitTypeDef

  FSMC_NORSRAMInitStructure;

  FSMC_NORSRAMTimingInitTypeDefreadWriteTiming;

  FSMC_NORSRAMTimingInitTypeDefwriteTiming;

  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE);  //使能FSMC時鐘

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOG|RCC_APB2Periph_AFIO,ENABLE);

  //使能PORTB,D,E,G以及AFIO復(fù)用功能時鐘

  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;

  //PB0推挽輸出背光

  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;  //推挽輸出

  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

  GPIO_Init(GPIOB,&GPIO_InitStructure);

  ..........

  readWriteTiming.FSMC_AddressSetupTime=0x01;

  //地址建立時間(ADDSET)為2個HCLK1/36 MHz=27 ns

  readWriteTiming.FSMC_AddressHoldTime=0x00;

  readWriteTiming.FSMC_DataSetupTime=0x0f;

  readWriteTiming.FSMC_BusTurnAroundDuration=0x00;

  readWriteTiming.FSMC_CLKDivision=0x00;

  readWriteTiming.FSMC_DataLatency=0x00;

  readWriteTiming.FSMC_AccessMode=FSMC_AccessMode_A;  //模式A

  writeTiming.FSMC_AddressSetupTime=0x00;

  //地址建立時間(ADDSET)為1個HCLK

  writeTiming.FSMC_AddressHoldTime=0x00;

  //地址保持時間(A)

  writeTiming.FSMC_DataSetupTime=0x03;

  //數(shù)據(jù)保存時間為4個HCLK

  writeTiming.FSMC_BusTurnAroundDuration=0x00;

  writeTiming.FSMC_CLKDivision=0x00;

  writeTiming.FSMC_DataLatency=0x00;

  writeTiming.FSMC_AccessMode=FSMC_AccessMode_A;  //模式A

  3.4 SCCB接口初始化程序設(shè)計

  由于對攝像頭的工作參數(shù)的配置是通過SCCB來實現(xiàn)的,因此在軟件設(shè)計時,首先設(shè)計出SCCB程序從而控制攝像頭的相關(guān)參數(shù)。SCCB設(shè)計程序如下:

  void SCCB_Init(void)

  {

  GPIO_InitTypeDef  GPIO_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOG, ENABLE);  //使能PB端口時鐘

  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;

  //端口配置

  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//輸入

  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

  GPIO_Init(GPIOG, &GPIO_InitStructure);

  GPIO_SetBits(GPIOG,GPIO_Pin_13);  //輸出高電平

  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3; //端口配置

  GPIO_Init(GPIOD, &GPIO_InitStructure);

  GPIO_SetBits(GPIOD,GPIO_Pin_3);  //輸出高電平

  SCCB_SDA_OUT();

  }

  以上是模擬SCCB初始化函數(shù)、使能PB端口時鐘和相關(guān)引腳的配置。SCCB起始信號函數(shù)如下:

  void SCCB_Start(void)

  {

  SCCB_SDA=1;  //數(shù)據(jù)線高電平

  SCCB_SCL=1;  //在時鐘線高的時候數(shù)據(jù)線由高至低

  delay_us(50);

  SCCB_SDA=0;

  delay_us(50);

  SCCB_SCL=0;

  //數(shù)據(jù)線上電位恢復(fù)低電平(對于單操作函數(shù)必要)

  }

  通過SCCB起始信號函數(shù)可以看出,當(dāng)時鐘為高電平時,數(shù)據(jù)線由高到低為SCCB起始信號,在激活狀態(tài)下,SDA和SCL均為低電平。SCCB的停止信號如下:

  void SCCB_Stop(void)

  {

  SCCB_SDA=0;

  delay_us(50);

  SCCB_SCL=1;

  delay_us(50);

  SCCB_SDA=1;

  delay_us(50);

  }

  通過SCCB停止信號函數(shù)可以看出,當(dāng)時鐘為高電平的時候,數(shù)據(jù)線的由低到高為SCCB停止信號,在空閑狀況下SDA和SCL均為高電平。

4 實驗分析

  為了方便操作,整個系統(tǒng)設(shè)計為外接電源供電,同時打開控制面板來控制供電。控制面板帶總開關(guān)、燈光旋轉(zhuǎn)開關(guān)、攝像頭控制接口、燈光控制接口和電源輸入接口,通過220 V交流電轉(zhuǎn)12 V直流電轉(zhuǎn)換器實現(xiàn)STM32、攝像頭、LED燈光的供電一體化。整個系統(tǒng)的供電由4根電源線控制,包含18根攝像頭信號線和兩根LED燈光控制線。

  由于攝像頭前設(shè)計了33顆專業(yè)級LED燈,總光源面積為504π mm2。實驗前將LED燈光全部打開且調(diào)節(jié)到最亮狀態(tài),用不同環(huán)徑(中間空出攝像頭的位置)的不透光的圓環(huán)形黑紙條成比例地遮住LED燈,分別在明亮、一般、較暗三種環(huán)境下進(jìn)行圖像采集實驗。明亮、一般、較暗環(huán)境的判斷標(biāo)準(zhǔn)如表1所示。三種情況下圓柱體的圖像采集情況如圖4、5、6所示。

004.jpg

  從以上在不同燈光環(huán)境下采集的同一物體圖像可以看出,三種環(huán)境下石塊紋理清晰可見,從而證實了本文設(shè)計的水下圖像采集軟件能夠有效地實現(xiàn)圖像采集功能,并且在不同的燈光強度下,圖像采集效果不同,燈光強度越強,采集效果越好。

5 結(jié)論

  結(jié)合論文的研究目標(biāo),給出了包含OV7670攝像頭模塊、STM32F103ZET6單片機處理器模塊、SCCB總線讀取數(shù)據(jù)模塊以及LCD液晶顯示屏模塊的水下圖像采集系統(tǒng)。分別對系統(tǒng)的OV7670程序、LCD程序、SCCB接口程序進(jìn)行了設(shè)計。通過在不同燈光強度下的試驗,證實了本文設(shè)計的水下圖像采集軟件能夠有效地實現(xiàn)水下圖像采集功能。

  參考文獻(xiàn)

  [1] 張磊.基于ARM的CMOS數(shù)字圖像傳感器圖像采集系統(tǒng)的研究與設(shè)計[D].哈爾濱:哈爾濱工程大學(xué),2008.

  [2] 劉甲玉.基于ARM的圖像采集與無線傳輸技術(shù)的研究[D].蕪湖:安徽工程大學(xué),2010.

  [3] 詹青龍.網(wǎng)絡(luò)視頻技術(shù)及應(yīng)用[M].西安:西安電子科技大學(xué)出版社,2004.

  [4] OSTHEIMER D, LEMAY S, GHAZAL M. A modular distributed video surveillance system over IP[C]. Canadian Conference on Electrical and Computer Engineering, 2006: 518-521.

  [5] 梁修如,嚴(yán)國萍.嵌入式視頻監(jiān)控服務(wù)器系統(tǒng)典型方案及其性能分析[J].電視技術(shù),2005,24(10):93-96.

  [6] 耿艷明,王宏遠(yuǎn).一種基于IP的視頻監(jiān)控系統(tǒng)設(shè)計[J].電視技術(shù),2004,23(3):75-77.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。