楊會(huì)建,楊陽,張環(huán),朱瑩
(長春理工大學(xué) 電子信息工程學(xué)院,長春 130022)
視頻圖像采集傳感器主要有CCD傳感器和CMOS傳感器兩種。CMOS傳感器是利用CMOS工藝制造的圖像傳感器,主要利用了半導(dǎo)體效應(yīng)。它可以輕易地將周邊電路(如AGC、CDS、Timing generator、或DSP等)集成到傳感器芯片中[1]。因此與CCD傳感器相比,CMOS傳感器具有成本低、低功耗及高整合度等特點(diǎn)[2]。近年來,CMOS傳感器得到了越來越廣泛地應(yīng)用,視頻監(jiān)控系統(tǒng)就是其中一個(gè)領(lǐng)域。本設(shè)計(jì)正是針對這一領(lǐng)域,利用FPGA的強(qiáng)大并行處理能力,將CMOS傳感器采集信息進(jìn)行并行處理后實(shí)時(shí)顯示。
采用FPGA的EP2C8Q208C8作為主控芯片,CMOS傳感器采用具有內(nèi)嵌放大器、A/D轉(zhuǎn)換、顏色空間轉(zhuǎn)換、白/黑像素校正等單元的由OmniVision所研制的OV7670圖像傳感器。每次上電復(fù)位后首先通過主控芯片根據(jù)SCCB通信協(xié)議對OV7670相關(guān)寄存器進(jìn)行配置,使其工作在RGB或YUV、自動(dòng)白平衡等狀態(tài)。在初始化CMOS傳感器之后,為確保數(shù)據(jù)的準(zhǔn)確性,前10幀數(shù)據(jù)丟棄,然后開始進(jìn)行圖像采集。
圖1 OV7670硬件原理圖
OV7670的硬件連接圖如圖1所示。采用3.3V電壓供電,CMOS_XCLK為系統(tǒng)輸入時(shí)鐘,由FPGA分頻后的25M時(shí)鐘提供,CMOS_PCLK為輸出像素時(shí)鐘,用來為數(shù)據(jù)采集提供時(shí)鐘。CMOS_SCLK和CMOS_SDAT為SCCB通信時(shí)所需的時(shí)鐘信號(hào)和數(shù)據(jù)信號(hào),其中時(shí)鐘信號(hào)為單向輸入,數(shù)據(jù)信號(hào)為雙向傳輸,初始化OV7670只需通過這兩個(gè)信號(hào)線即可。CMOS_D[7..0]為8位數(shù)據(jù)信號(hào),用來采集視頻信息。CMOS_HREF和CMOS_VSYNC是視頻采集時(shí)的行幀同步信號(hào),配合像素時(shí)鐘使用。值得注意的是,對于SCCB通信信號(hào)CMOS_SCLK和CMOS_SDAT必須外接上拉4.7K電阻,才能輸出高電平。因?yàn)镾CCB內(nèi)部采用了Open Drain結(jié)構(gòu),如果不接上拉電阻只能輸出低電平。
1.2.1 通信協(xié)議
SCCB(OmniVision serial camera control bus),是歐姆尼圖像技術(shù)公司開發(fā)的串行攝像頭控制總線[3],廣泛應(yīng)用于OV系列圖像傳感器上。SCCB是一種三線總線,由SCCB_E、SIO_C和SIO_D組成。SCCB_E是控制芯片工作的信號(hào),當(dāng)進(jìn)行通信時(shí),必須置1,SIO_C是時(shí)鐘信號(hào),SIO_D是雙向數(shù)據(jù)信號(hào),一個(gè)主控制器可以控制至少一個(gè)以上從設(shè)備。當(dāng)SCCB_E無效時(shí),變?yōu)閮删€控制總線,兼容I2C總線接口。本文采用兩線SCCB接口如圖2所示[4],只有SIO_C(時(shí)鐘信號(hào)線)和SIO_D(數(shù)據(jù)信號(hào)線)兩條[5]。FPGA作為主控制器,用來對OV7670(從控制器)的寄存器地址0x00-0xC9進(jìn)行相關(guān)配置,使其工作在不同的模式下,如RGB(565)或YUV、鏡像方式、自動(dòng)白平衡等。
圖2 兩線控制模塊
SCCB的寫操作通信協(xié)議如圖3所示。ID Address是CMOS的器件地址,OV7670為0x42;Sub-address為寄存器地址;Write data是具體的寫入數(shù)據(jù),X表示無關(guān)位。對于讀操作通信協(xié)議,第一、二相和寫操作一樣,第三相的地址為0x43,第四相為寫入數(shù)據(jù),最后一位NA必須置1。
通信過程如下:首先發(fā)送器件ID地址,然后發(fā)送寄存器地址,對于寫通信格式,通過FPGA往CMOS寄存器里寫數(shù)據(jù)。對于讀通信格式,需要再次發(fā)送CMOS器件地址,但需注意此時(shí)最低位應(yīng)為1,最后再將寄存器里數(shù)值讀出。THD:STA為在將時(shí)鐘拉低之前必須提前將數(shù)據(jù)位拉低的最小開始條件保持時(shí)間,至少為0.6μs。
圖3 SCCB寫通信數(shù)據(jù)格式
系統(tǒng)在檢測到SIO_C和SIO_D都為邏輯低后就進(jìn)行數(shù)據(jù)通信。在通信過程中,每次傳輸一位數(shù)據(jù)在時(shí)鐘上升沿到來之前必須至少有0.1μs的建立時(shí)間。而在時(shí)鐘上升沿之后同樣數(shù)據(jù)要保持一定的時(shí)間不變,這個(gè)時(shí)間稱為保持時(shí)間THD:DAT,最小值可以為0。只有當(dāng)建立時(shí)間和保持時(shí)間都滿足通信協(xié)議要求,數(shù)據(jù)才能被寫入觸發(fā)器。
每次通信完之后,在將數(shù)據(jù)位SIO_D拉高之前需將時(shí)鐘SIO_C拉高TSU:STO的時(shí)間,至少為0.6μs。通信協(xié)議如圖4所示。
圖4 SCCB通信協(xié)議
1.2.2 SCCB寄存器配置
利用Verilog語言在Quartus中對CMOS傳感器進(jìn)行模塊化設(shè)計(jì),生成的RTL視圖如下圖5所示。iCLK是FPGA提供的25M時(shí)鐘用來給OV7670的系統(tǒng)時(shí)鐘,iRST_N是系統(tǒng)復(fù)位信號(hào),Config_Done是寄存器配置完后的標(biāo)志位。主要是通過I2C_SCLK和I2C_SDAT根據(jù)SCCB協(xié)議來設(shè)置相關(guān)寄存器值,從而驅(qū)動(dòng)OV7670,使其在一定的模式下采集視頻信息。
圖5 SCCB配置RTL視圖
圖6是配置OV7670的流程圖。系統(tǒng)上電后通過硬件復(fù)位使整個(gè)芯片處于復(fù)位狀態(tài)。復(fù)位結(jié)束后,F(xiàn)PGA根據(jù)SCCB的通信協(xié)議設(shè)置OV7670的物理地址、寄存器地址,然后再對相關(guān)寄存器配置,在對所有寄存器配置完成后,接下來就可以驅(qū)動(dòng)OV7670。因?yàn)槊看伟l(fā)送時(shí)的物理地址是固定的0x42,所以寄存器LUT_DATA只需存儲(chǔ)寄存器地址和需配置的數(shù)據(jù)即可。本設(shè)計(jì)為了提高系統(tǒng)的靈活性,采用索引的方式,程序設(shè)計(jì)中只需讓索引值LUT_INDEX小于寄存器數(shù)n即可。當(dāng)需配置的寄存器數(shù)改變時(shí),只需改變寄存器數(shù)n。部分寄存器的配置如表1所示。
圖6 SCCB流程圖
表1 部分寄存器的配置
1.2.3 SCCB波形仿真
為了驗(yàn)證程序通信的正確性,需要利用Modelsim仿真工具對其進(jìn)行波形仿真。圖7是對寄存器配置的仿真波形圖。從仿真波形可以看到,此時(shí)的開始條件保持時(shí)間為0.1ms,開始條件建立時(shí)間遠(yuǎn)大于600ns,建立時(shí)間是0.05ms,保持時(shí)間為0,仿真結(jié)果和通信協(xié)議很好的符合一致。
圖7 Write寄存器仿真波形
配置完OV7670寄存器后,可進(jìn)行視頻數(shù)據(jù)采集。數(shù)據(jù)采集的信號(hào)線有像素時(shí)鐘PCLK,行同步HREF和幀同步VSYNC[6],分辨率為640*480。幀同步VSYNC低有效,行同步HREF為高時(shí)進(jìn)行數(shù)據(jù)采集,且每次HREF維持高電平的時(shí)間為640個(gè)像素時(shí)鐘,在此期間不斷采集數(shù)據(jù)送至FPGA內(nèi)部WRFIFO進(jìn)行緩存。當(dāng)VSYNC低電平持續(xù)507個(gè)像素時(shí)鐘后被拉高,至此一幀數(shù)據(jù)采集完成[7]。圖8是其時(shí)序圖,tsu為建立時(shí)間,≥15ns,thd是保持時(shí)間,≥8ns;下降沿到數(shù)據(jù)輸出有效時(shí)間tPDV≤5ns。tPHH和tPHL分別是像素時(shí)鐘下降沿到HREF上升沿和下降沿的時(shí)間,最大為5ns,最小可以為0。
圖8 數(shù)據(jù)采集時(shí)序圖
圖9是利用SignalTap II采集的波形圖。從波形圖中可知,系統(tǒng)時(shí)鐘和像素時(shí)鐘同步,在cmos_vsync為低且cmos_href為高時(shí)數(shù)據(jù)開始采集,之前數(shù)據(jù)都為0。在每次時(shí)鐘的上升沿到來之前數(shù)據(jù)已經(jīng)穩(wěn)定約20ns,大于數(shù)據(jù)建立時(shí)間要求的至少15ns。保持時(shí)間同樣約為20ns,大于數(shù)據(jù)保持時(shí)間要求的至少8ns。波形很好的滿足了建立時(shí)間和保持時(shí)間等各項(xiàng)時(shí)間系數(shù),符合設(shè)計(jì)要求。
圖9 SignalTap II信號(hào)波形圖
視頻采集顯示部分采用通用的工業(yè)VGA標(biāo)準(zhǔn)接口,在FPGA和VGA接口之間加入ADV7123數(shù)模轉(zhuǎn)換芯片,將FPGA內(nèi)部緩存在RDFIFO中的16位數(shù)據(jù)讀出經(jīng)過ADV7123轉(zhuǎn)換[8]成3位模擬量輸出。對于VGA的場同步信號(hào)VSYNC和行同步信號(hào)HSYNC,是由FPGA同步控制的。需要注意的是,和CMOS采集信號(hào)的幀行信號(hào)不同,當(dāng)VSYNC和HSYNC都為高電平時(shí),數(shù)據(jù)有效輸出。
對于要求顯示的靜態(tài)字體,利用FPGA的ROM來配置,將顯示的字體以.mif文件加載到ROM中,視頻實(shí)時(shí)顯示如圖10所示。
圖10 視頻實(shí)時(shí)顯示
本設(shè)計(jì)是針對視頻采集系統(tǒng)設(shè)計(jì)的方案,以并行、快速的FPGA為主控芯片,采用了OmniVision公司的OV7670傳感器來采集視頻信息。根據(jù)SCCB通信協(xié)議對OV7670相關(guān)寄存器進(jìn)行了控制,使其采集信號(hào)格式為RGB565。而后利用SignalTap II對視頻采集信號(hào)進(jìn)行了時(shí)序分析,最后VGA視頻實(shí)時(shí)顯示很好的證明了該設(shè)計(jì)的可行性。該設(shè)計(jì)除具有電路簡單,低功耗、低成本等一系列優(yōu)點(diǎn)外,只要將外部電路稍加改動(dòng)就可以應(yīng)用于其他視頻采集系統(tǒng)中,能夠?yàn)橐院笤O(shè)計(jì)出更高級(jí)的視頻監(jiān)控系統(tǒng)奠定基礎(chǔ)。
[1]CMOS傳感器_百度百科[EB/OL]http://baike.baidu.com/view/356089.2015-02.
[2]刁曉靜.無線多傳感器網(wǎng)絡(luò)中圖像傳輸系統(tǒng)的實(shí)現(xiàn)[D].南京:南京理工大學(xué),2006.
[3]楊侃,孫堯,詹艷艷.基于S3C44B0嵌入式系統(tǒng)的SCCB 設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2008,31(22):183-186.
[4]苑瑋琦,湯永華.OmniVision圖像傳感器的SCCB總線協(xié)議在DSP中的實(shí)現(xiàn)[J].儀器儀表學(xué)報(bào),2006,27(6):1687-1688.
[5]褚紅娟,隋國榮.基于SCCB通信的FPGA視頻采集模塊[J].自動(dòng)化儀表,2010,31(11):68-70,74.
[6]劉鑫.基于ARM的圖像采集系統(tǒng)的設(shè)計(jì)[D].武漢:武漢理工大學(xué),2007.
[7]薛敏彪,吳廣偉,王健,等.嵌入式機(jī)載視頻輸出接口設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2011,34(2):9-11,14.
[8]高強(qiáng),王煒,劉建,等.SCCB總線配置的FPGA視頻采集與顯示系統(tǒng)設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2014,14(1):73-75.