基于CMOS圖像傳感器的視頻采集系統(tǒng)設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:提出了一種采用Altera公司CycloneⅡ系列的FPGA作為主控芯片,采用OV7670這款CMOS圖像傳感器作為視頻信號(hào)源并采用SRAM(靜態(tài)隨機(jī)存儲(chǔ)器)作為數(shù)據(jù)緩存的實(shí)用方案,實(shí)現(xiàn)了對(duì)圖像傳感器寄存器配置、圖像傳感器輸出信號(hào)采集、圖像數(shù)據(jù)格式轉(zhuǎn)換、圖像數(shù)據(jù)緩存及最終在VGA顯示器上進(jìn)行圖像顯示的一系列過程。該視頻采集系統(tǒng)設(shè)計(jì)能夠很好地滿足實(shí)時(shí)圖像的輸出需求。
關(guān)鍵詞:視頻采集;OV7670;FPGA;SRAM;VGA
CMOS與CCD傳感器是目前被普遍采用的2種圖像傳感器。CMOS圖像傳感器可通過CMOS(互補(bǔ)金屬氧化物半導(dǎo)體)技術(shù)將像素陣列與外圍支持電路(如圖像傳感器核心、單一時(shí)鐘、所有的時(shí)序邏輯、可編程功能和A/D轉(zhuǎn)換器)集成在同一塊芯片上。與CCD(電容耦合器件)圖像傳感器相比,CMOS圖像傳感器將整個(gè)圖像系統(tǒng)集成在一塊芯片上,具有體積小、重量輕、功耗低、編程方便、易于控制等優(yōu)點(diǎn),并且可通過I2C,SPI等接口配置其工作方式等功能,可控性強(qiáng)。所以CMOS圖像傳感器在消費(fèi)類電子、汽車電子、工業(yè)控制、圖像處理等領(lǐng)域的應(yīng)用越來越廣泛。
通常視頻數(shù)據(jù)流需要處理的數(shù)據(jù)量大,而且對(duì)于實(shí)時(shí)性的要求也很高,圖像的采集和數(shù)據(jù)處理速度直接影響后續(xù)的圖像顯示質(zhì)量。而可編程邏輯器件FPGA的快速發(fā)展使之在視頻圖像采集及圖像的無損傳輸領(lǐng)域具有得天獨(dú)厚的優(yōu)勢(shì)。因此,本系統(tǒng)針對(duì)OV7670這款CMOS圖像傳感器,采用Altera公司CycloneⅡ系列的FPGA作為主控芯片,來實(shí)現(xiàn)視頻數(shù)據(jù)的無損傳輸及顯示。
1 系統(tǒng)總體結(jié)構(gòu)和工作原理
本視頻采集系統(tǒng)采用OmniVision公司的OV7670數(shù)字圖像傳感器提供數(shù)字視頻信號(hào),采用Altera公司CycloneⅡ系列的FPGA作為主控芯片,并采用單片SRAM(靜態(tài)隨機(jī)存儲(chǔ)器)作為數(shù)據(jù)緩存,將從FPGA輸出的數(shù)字信號(hào)經(jīng)過D/A轉(zhuǎn)換換后輸入到VGA顯示器上進(jìn)行顯示。其總體結(jié)構(gòu)框圖如圖1所示。
系統(tǒng)的工作原理為:系統(tǒng)上電后,F(xiàn)PGA通過標(biāo)準(zhǔn)SCCB(Serial Camera Control Bus)接口對(duì)圖像傳感器芯片的控制寄存器進(jìn)行配置,設(shè)置它的工作方式(如輸出數(shù)據(jù)格式、輸出像素時(shí)鐘、曝光時(shí)間等),在本系統(tǒng)中將圖像傳感器輸出圖像格式設(shè)置為RGB565格式;對(duì)芯片初始化完畢后,F(xiàn)PGA為圖像傳感器提供25 MHz的主時(shí)鐘,實(shí)時(shí)讀出圖像傳感器的行、幀同步信號(hào)以及像素時(shí)鐘和8位圖像數(shù)據(jù)信號(hào);FPGA中數(shù)據(jù)采集與格式轉(zhuǎn)換模塊將讀入的圖像數(shù)據(jù)實(shí)時(shí)兩兩拼接轉(zhuǎn)換成16位RGB數(shù)據(jù),由于圖像數(shù)據(jù)要進(jìn)行跨時(shí)鐘域傳輸,需要由緩存控制模塊中的FIFO進(jìn)行緩沖,然后送到SRAM存儲(chǔ),同時(shí)VGA控制模塊產(chǎn)生VGA顯示時(shí)序,在需要將視頻圖像顯示時(shí)由VGA控制模塊產(chǎn)生讀信號(hào),通過FIFO從SRAM中讀出圖像數(shù)據(jù),圖像數(shù)據(jù)最終經(jīng)D/A轉(zhuǎn)換送到VGA顯示器進(jìn)行顯示。
2 系統(tǒng)各模塊介紹
2.1 圖像傳感器OV7670
本視頻采集系統(tǒng)采用OmniVision公司的OV7670這款CMOS圖像傳感器來采集視頻,為系統(tǒng)提供數(shù)字視頻信號(hào)。
OV7670圖像傳感器體積小,工作電壓低,提供單片VGA攝像頭和影像處理器的所有功能。通過SCCB總線控制,可以輸入整幀、子采樣、取窗口等方式的各種分辨率8位影像數(shù)據(jù)。所有圖像處理功能過程包括伽瑪曲線、白平衡、飽和度、色度等都可以通過SCCB接口編程。而SCCB是和I2C相同的一個(gè)協(xié)議。在本系統(tǒng)中采用Verilog語言描述的I2C配置模塊對(duì)OV7670的控制寄存器進(jìn)行配置。
OV7670共有201個(gè)可供配置的控制寄存器,下面對(duì)幾個(gè)比較重要的控制寄存器進(jìn)行說明。
CLKRC(寄存器地址0x11):配置OV7670輸出像素時(shí)鐘相對(duì)于外部(本系統(tǒng)中為FPGA)提供給OV7670圖像傳感器主時(shí)鐘的分頻。OV7670輸出的像素時(shí)鐘需要輸入FPGA用作數(shù)據(jù)處理的時(shí)鐘。
COM7(寄存器地址0x12):設(shè)置圖像的輸出格式,240)RGB565格式等??梢詫D像分辨率配置成從40×30到VGA分辨率的各尺寸,并且可以將圖像數(shù)據(jù)格式配置成YUV,RGB565,Bayer RGB RAW,Processed Bayer RAW等。這個(gè)寄存器的最高位是用來軟件復(fù)位所有寄存器的值的。
SCALING_XSC(寄存器地址0x70)和SCAUNG_YSC(寄存器地址0x71):主要在調(diào)試的時(shí)候使用,分別將SCALING_XSC和SCALING_YSC的最高位配置為1和0,就可以讓圖像傳感器輸出8色彩帶。這2個(gè)寄存器的其他位分別用于設(shè)置圖像的水平縮放系數(shù)和垂直縮放系數(shù)。
2.2 I2C控制模塊
I2C(Inter-Integrate Circuit)總線是由PHILIPS公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。用來對(duì)OV7670圖像傳感器進(jìn)行配置的SCCB和I2C是相同的協(xié)議。本系統(tǒng)采用I2C控制模塊實(shí)現(xiàn)對(duì)OV7670的控制寄存器的配置。
I2C控制模塊包括I2C時(shí)序控制模塊和OV7670配置模塊。I2C時(shí)序控制模塊用于產(chǎn)生符合標(biāo)準(zhǔn)I2C協(xié)議的SCL和SDA信號(hào),I2C傳輸時(shí)序如圖2所示。時(shí)序控制模塊每次傳輸24位數(shù)據(jù),前8位是從設(shè)備地址(本系統(tǒng)中從設(shè)備即OV7670,將其地址定義為0x42,代表寫OV7670控制寄存器),接下來的8位是從設(shè)備寄存器地址,最后8位是對(duì)OV7670控制寄存器進(jìn)行配置的數(shù)據(jù)。OV7670配置模塊對(duì)從設(shè)備地址、從設(shè)備寄存器地址及配置的寄存器值總共24位數(shù)據(jù)進(jìn)行了定義。本系統(tǒng)的I2C總線的時(shí)鐘采用20 kHz,是由50 MHz的系統(tǒng)時(shí)鐘分頻得到。
由OV7670輸入到FPGA的視頻信號(hào)有8位圖像數(shù)據(jù)cam_data[7:0]、像素時(shí)鐘cam_pclk、行有效cam_href、幀同步cam_vsync。在對(duì)OV7670的控制寄存器進(jìn)行配置后,采用QuartusⅡ軟件提供的SignalTapⅡ邏輯分析儀觀察由OV7670輸入到FPGA的視頻信號(hào),如圖3所示。
2.3 數(shù)據(jù)采集與格式轉(zhuǎn)換模塊
利用I2C配置模塊配置完OV7670的控制寄存器以后,OV7670就能不斷輸出符合要求的8位圖像信號(hào)、像素時(shí)鐘和行幀同步信號(hào)。利用像素時(shí)鐘和行幀同步信號(hào)可以對(duì)采集到的8位RGB565圖像信號(hào)進(jìn)行處理,系統(tǒng)中主要是將采集到的前后2個(gè)8位行數(shù)據(jù)合并成一個(gè)16位數(shù)據(jù),以方便數(shù)據(jù)在后幾個(gè)模塊中的傳輸、緩存及處理。
如圖4所示RGB565時(shí)序及數(shù)據(jù)格式,一個(gè)像素占2個(gè)字節(jié),其中第1個(gè)字節(jié)的前5位用來表示R(Red),第一個(gè)字節(jié)的后3位加上第2個(gè)字節(jié)的前3位用來表示G(Green),第二個(gè)字節(jié)的后5位用來表示B(Blue)。數(shù)據(jù)采集與格式轉(zhuǎn)換模塊將FPGA采集到的數(shù)據(jù)還原成16位的像素?cái)?shù)據(jù)。本系統(tǒng)中OV7670輸入到FPGA的圖像數(shù)據(jù)一幀有240行數(shù)據(jù),在一個(gè)行有效期間有640個(gè)8位數(shù)據(jù),經(jīng)過轉(zhuǎn)換后輸出320個(gè)16位數(shù)據(jù),輸入到緩存控制模塊。
Verilog代碼如下:
2.4 緩存控制模塊
靜態(tài)隨機(jī)存儲(chǔ)器(Static Random Access Memory,SRAM)和同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器(Synchronous DynamicRandom Access Memory,SDRAM)是目前常用的2種存儲(chǔ)器,2種存儲(chǔ)器各有優(yōu)劣,而SRAM相對(duì)于SDRAM時(shí)序控制較為簡單,因此本系統(tǒng)采用SRAM作為數(shù)據(jù)緩存。緩存控制模塊主要實(shí)現(xiàn)將轉(zhuǎn)換后的數(shù)據(jù)緩存在SRAM寫FIFO中以及將從SRAM讀出的數(shù)據(jù)緩存在SRAM讀FIFO中,而前端數(shù)據(jù)采集和處理是用OV7670輸入的25 MHz的像素時(shí)鐘作為主控時(shí)鐘的,而SRAM的讀寫時(shí)鐘為100 MHz,而后端VGA控制模塊的時(shí)鐘也為25 MHz,對(duì)于數(shù)據(jù)在異頻的時(shí)鐘域之間的傳輸,需要利用例化2個(gè)異步FIFO模塊fifo_in和fifo_out作為數(shù)據(jù)在不同時(shí)鐘域之間的緩沖。FIFO通過IP核實(shí)現(xiàn),存儲(chǔ)寬度為16 b,存儲(chǔ)深度選擇512。緩存控制模塊的框圖如圖5所示。利用FIFO解決異頻時(shí)鐘域數(shù)據(jù)同步的方法是用上級(jí)隨路時(shí)鐘寫上級(jí)數(shù)據(jù),然后用本級(jí)時(shí)鐘讀出數(shù)據(jù)。由于時(shí)鐘頻率不同,因此兩個(gè)端口的數(shù)據(jù)吞吐率不一致,設(shè)計(jì)時(shí)要開好緩沖區(qū),并通過監(jiān)控確保數(shù)據(jù)不會(huì)溢出。
2.4.1 fifo_in模塊
在本系統(tǒng)中用數(shù)據(jù)采集與格式轉(zhuǎn)換模塊處理后的16位圖像數(shù)據(jù)作為fifo_in模塊的輸入數(shù)據(jù),每次往FIFO中寫一行數(shù)據(jù)(320個(gè)16位數(shù)據(jù))OV7670輸入的像素時(shí)鐘作為寫時(shí)鐘,行有效cam_href作為FIFO寫使能,F(xiàn)IFO的讀時(shí)鐘rdclk為100 MHz,也是SRAM的讀寫時(shí)鐘。FIFO讀使能產(chǎn)生是通過判斷FIFO寫使能下降沿來生成一個(gè)計(jì)數(shù)值為320的計(jì)數(shù)器,在計(jì)數(shù)期間將讀使能置高,將數(shù)據(jù)由FIFO緩存到SRAM。因?yàn)樵?20個(gè)數(shù)據(jù)寫完后有一段時(shí)間行有效為低,由于SRAM讀速率遠(yuǎn)大于上一級(jí)寫速率,可以充分利用這段時(shí)間將數(shù)據(jù)存入SRAM。
2.4.2 fifo_out模塊
由于采用單片SRAM,SRAM的讀寫要避免沖突。因此通過判斷fifo_out模塊中的wrusedw(FIFO中剩余的數(shù)據(jù)數(shù)量)來控制FIFO的讀/寫。當(dāng)wrusedw的值小于192時(shí),將一個(gè)標(biāo)志位fifo_empty置高。為避免讀寫沖突,將SRAM讀使能的產(chǎn)生分為2種情況,在幀有效信號(hào)置高期間,此時(shí)一幀圖像的數(shù)據(jù)正在由圖像傳感器輸出,SRAM會(huì)存在寫入數(shù)據(jù)的情況,只有在fifo_empty置高和SRAM寫使能下降沿同時(shí)滿足的情況下讀使能才會(huì)置高,而在幀有效信號(hào)為低期間,SRAM不會(huì)寫入數(shù)據(jù),只需在fifo_empty置高時(shí)一個(gè)計(jì)數(shù)值為320的計(jì)數(shù)器開始計(jì)數(shù),在汁數(shù)期間將讀使能置高即可。而FIFO的讀使能來自VGA控制模塊,在需要輸出圖像數(shù)據(jù)到VGA顯示器上顯示時(shí),VGA控制模塊讀FIFO使能置高,來讀取FIFO中的圖像數(shù)據(jù)。
2.5 VGA控制模塊
VGA(Video Graphics Array)即視頻圖形陣列,是IBM在1987年隨PS/2機(jī)一起推出的一種視頻傳輸標(biāo)準(zhǔn),具有分辨率高、顯示速率快、顏色豐富等優(yōu)點(diǎn),在彩色顯示器領(lǐng)域得到了廣泛的應(yīng)用。
VGA控制模塊主要是產(chǎn)生符合要求的VGA時(shí)序,使得視頻圖像數(shù)據(jù)能夠正確地在VGA顯示器上進(jìn)行顯示。本系統(tǒng)中VGA控制模塊產(chǎn)生的是分辨率為640×480,刷新率為60 Hz的VGA時(shí)序,并將從SRAM讀出的16位像素信號(hào)分成5位red信號(hào)、6位green信號(hào)和5位blue信號(hào),輸出到D/A轉(zhuǎn)換電路。
VGA控制模塊中主要利用行同步計(jì)數(shù)器hcnt和場(chǎng)同步計(jì)數(shù)器vcnt來分別產(chǎn)生行同步和場(chǎng)同步。時(shí)序主要參考分辨率為640×480,刷新率為60 Hz的VGA工業(yè)標(biāo)準(zhǔn)時(shí)序,如表1所示。
用于產(chǎn)生行、場(chǎng)同步的Verilog代碼如下:
在VGA控制模塊中利用行同步計(jì)數(shù)和場(chǎng)同步計(jì)數(shù)定義視頻圖像顯示區(qū)域。對(duì)于不同的顯示分辨率,只需參考相應(yīng)的時(shí)序,修改代碼中的水平參數(shù)和垂直參數(shù)即可。由于VGA分辨率是640×480,而OV7670輸出圖像大小為320×240,將顯示器左上角區(qū)域作為視頻圖像顯示區(qū)域。在行同步計(jì)數(shù)和場(chǎng)同步計(jì)數(shù)均計(jì)數(shù)到視頻圖像顯示區(qū)域時(shí),由VGA控制模塊產(chǎn)生讀FIFO信號(hào),來讀取緩存在SRAM中的圖像數(shù)據(jù)進(jìn)行顯示。
3 顯示效果及分析
本系統(tǒng)最終實(shí)現(xiàn)將OV7670采集到的視頻圖像在VGA顯示器上進(jìn)行實(shí)時(shí)顯示,圖像顯示流暢,畫面質(zhì)量較好。顯示效果如圖6所示。
圖像最終的顯示效果受多方面的影響,主要包括圖像傳感器的質(zhì)量、D/A轉(zhuǎn)換質(zhì)量、Verilog語言描述的FPGA硬件設(shè)計(jì)、系統(tǒng)硬件電路設(shè)計(jì)幾方面。本系統(tǒng)中OV7670圖像傳感器采集速度30幀/s,有效像素30萬,靈敏度較高,適合低照度應(yīng)用。針對(duì)不同的應(yīng)用環(huán)境,可以通過修改OV7670控制寄存器的值來調(diào)整傳感器內(nèi)部圖像處理過程中的白平衡、飽和度、色度等來提升特定環(huán)境下的圖像質(zhì)量,但受限于圖像傳感器的有效像素,這種方式所提升的顯示質(zhì)量也是有限的。另外一個(gè)對(duì)圖像質(zhì)雖影響比較大的方面是圖像數(shù)據(jù)D/A轉(zhuǎn)換質(zhì)量。由FPGA輸出的圖像數(shù)據(jù)是數(shù)字信號(hào),而VGA顯示器上的VGA接口接收的是模擬信號(hào),必須經(jīng)過數(shù)字到模擬的信號(hào)轉(zhuǎn)換。
本系統(tǒng)采用權(quán)電阻網(wǎng)絡(luò)來實(shí)現(xiàn)RGB565信號(hào)到VGA接口三基色信號(hào)轉(zhuǎn)換的電路,可基本滿足要求。在對(duì)圖像要求較高的場(chǎng)合,可采用專用的三通道視頻D/A轉(zhuǎn)換芯片來實(shí)現(xiàn)數(shù)模轉(zhuǎn)換,如ADI公司的ADV7125芯片等。另外,數(shù)字接口的發(fā)展為傳輸非壓縮的實(shí)時(shí)數(shù)字視頻提供了很好的支持。數(shù)字視頻接口DVI(Digital Video Interface)和高清晰度多媒體接口HDMI(High Definition Multimedia Interface)都可以替代模擬的VGA接口應(yīng)用到本系統(tǒng)中,從而能以低成本的專用電纜實(shí)現(xiàn)長距離、高質(zhì)量的數(shù)字視頻信號(hào)傳輸。
4 結(jié)語
本視頻采集系統(tǒng)以FPGA為主控芯片,采用SRAM作為緩存,實(shí)現(xiàn)了對(duì)OV7670這款數(shù)字圖像傳感器的輸出視頻信號(hào)的數(shù)據(jù)采集、數(shù)據(jù)處理、數(shù)據(jù)緩存及視頻的最終顯示。隨著CMOS技術(shù)和工藝的飛速發(fā)展,CMOS圖像傳感器的數(shù)據(jù)吞吐量越來越大,分辨率越來越高,對(duì)于更高要求的應(yīng)用環(huán)境,可以采用更高速更高分辨率的CMOS圖像傳感器作為視頻信號(hào)源,可編程邏輯器件FPGA、各種存儲(chǔ)器如SRAM等也朝著高速化發(fā)展,使高分辨率、高速的視頻采集系統(tǒng)的實(shí)現(xiàn)和應(yīng)用成為可能。