基于圖像傳感器的CPLD視覺系統(tǒng)設(shè)計(jì)與研究
目前,關(guān)于視覺系統(tǒng)的研究已經(jīng)成為熱點(diǎn),也有開發(fā)出的系統(tǒng)可供參考。但這些系統(tǒng)大多是基于PC機(jī)的,由于算法和硬件結(jié)構(gòu)的復(fù)雜性而使其在小型嵌入式系統(tǒng)中的應(yīng)用受到了,限制。上述系統(tǒng)將圖像數(shù)據(jù)采集后,視覺處理算法是在PC機(jī)上實(shí)現(xiàn)的。隨著嵌入式微處理器技術(shù)的進(jìn)步,32位ARM處理器系統(tǒng)擁有很高的運(yùn)算速度和很強(qiáng)的信號(hào)處理能力,可以作為視覺系統(tǒng)的處理器,代替PC機(jī)來實(shí)現(xiàn)簡(jiǎn)單的視覺處理算法。下面介紹一種基于ARM和CPLD的嵌入式視覺系統(tǒng),希望能分享嵌入式視覺開發(fā)過程中的一些經(jīng)驗(yàn)。
1 系統(tǒng)方案與原理
在嵌入式視覺的設(shè)計(jì)中,目前主流的有以下2種方案:
方案1 圖像傳感器+微處理器(ARM或DSP)+SRAM
方案2圖像傳感器+CPLD/FPGA+微處理器+SRAM
方案1系統(tǒng)結(jié)構(gòu)緊湊,功耗低。在圖像采集時(shí),圖像傳感器輸出的同步時(shí)序信號(hào)的識(shí)別需要借助ARM的中斷,而中斷處理時(shí),微處理器需要完成程序跳轉(zhuǎn)、保存上下文等工作,降低了圖像采集的速度,適合對(duì)采集速度要求不高、功耗低的場(chǎng)合。
方案2借助CPLD來識(shí)別圖像傳感器的同步時(shí)序信號(hào),不必經(jīng)過微處理器的中斷,因而系統(tǒng)的采集速度提高,但CPLD的介入會(huì)使系統(tǒng)的功耗提高。
為了綜合以上2種方案的優(yōu)勢(shì),在硬件上采用“ARM+CPLD+圖像傳感器+SRAM”。該方案充分利用了CPLD的可編程性,通過軟件編程來兼有方案1的優(yōu)勢(shì),具體體現(xiàn)在以下方面:
?、俟牡母叩涂梢钥刂?。對(duì)于功耗有嚴(yán)格要求的場(chǎng)合,通過CPLD的可編程性將時(shí)序部分的接口與ARM的中斷端口相連,僅僅是組合邏輯的總線相連,可以降低CPLD的功耗從而達(dá)到方案1的效果;對(duì)于采集速度要求高而功耗要求不高的情況,可以充分發(fā)揮CPLD的優(yōu)勢(shì),利用組合與時(shí)序邏輯來實(shí)現(xiàn)圖像傳感器輸出同步信號(hào)的識(shí)別,并將圖像數(shù)據(jù)寫入SRAM中。
?、谄骷倪x擇可以多樣。在硬件設(shè)計(jì)上,所有總線均與CPLD相連;在軟件設(shè)計(jì)上,不同的模塊單獨(dú)按功能封裝。這樣以CPLD為中心,系統(tǒng)的其他器件均可更換而無需對(duì)CPLD部分程序進(jìn)行改動(dòng),有利于系統(tǒng)的功能升級(jí)。作為本系統(tǒng)的一種應(yīng)用,開發(fā)了視覺跟蹤的程序,可以在目標(biāo)和背景顏色對(duì)比強(qiáng)烈的情況下對(duì)物體進(jìn)行跟蹤。通過對(duì)CMOS攝像頭采集來的數(shù)據(jù)進(jìn)行實(shí)時(shí)處理,根據(jù)物體的顏色計(jì)算出被追蹤物體的質(zhì)心坐標(biāo)。下面分別描述系統(tǒng)各部分的功能。
2 系統(tǒng)硬件
2.1 硬件組成及連接
系統(tǒng)的硬件主要有4部分:CMOS圖像傳感器OV6620、可編程器件CPLD、512 KB的SRAM和32位微處理器LPC2214。
OV6620是美國(guó)OmniVision公司生產(chǎn)的CMOS圖像傳感器,以其高性能、低功耗適合應(yīng)用在嵌入式圖像采集系統(tǒng)中,本系統(tǒng)圖像數(shù)據(jù)的輸入都是通過OV6620采集進(jìn)來的;可編程器件CPLD采用Altera公司的EPM7128S,用Verilog硬件編程語言在QuartusII下編寫程序;作為系統(tǒng)的數(shù)據(jù)緩沖,SRAM選用的是IS61LV5128,其隨機(jī)訪問的特性為圖像處理程序提供了便利;而LPC2214在PLL(鎖相環(huán))的支持下最高可以運(yùn)行在60 MHz的頻率下,為圖像的快速處理提供了硬件支持。
0V6620集成在一個(gè)板卡上,有獨(dú)立的17 MHz晶振。輸出3個(gè)圖像同步的時(shí)序信號(hào):像素時(shí)鐘PCLK、幀同步VSYNC和行同步HREF。同時(shí),還可以通過8位或16位的數(shù)據(jù)總線輸出RGB或YCrCb格式的圖像數(shù)據(jù)。
在硬件設(shè)計(jì)上,有2個(gè)問題需要解決:
①圖像采集的嚴(yán)格時(shí)序同步;
?、陔pCPU共享SRAM的總線仲裁。
解決第一個(gè)問題的關(guān)鍵在于如何實(shí)時(shí)、準(zhǔn)確地讀取OV6620的時(shí)序輸出信號(hào),據(jù)此將圖像數(shù)據(jù)寫入SRAM中。這里采用的解決方案是用CPLD來實(shí)現(xiàn)時(shí)序信號(hào)的識(shí)別以及圖像數(shù)據(jù)的寫入。CPLD在硬件上可以識(shí)別信號(hào)的邊沿,速度更快,通過Verilog語言編寫Mealy狀態(tài)機(jī)來實(shí)現(xiàn)圖像數(shù)據(jù)的SRAM寫入,更加穩(wěn)定。
對(duì)于雙CPU共享SRAM,可以通過合理的連接方式來解決。考慮到CPLD的可編程性,將OV6620的數(shù)據(jù)總線,LPC2214的地址、數(shù)據(jù)總線以及SRAM的總線都連接到CPLD上。通過編程來控制總線之間的連接,只要在軟件上保證總線的互斥性,即在同一時(shí)刻有且僅有一個(gè)控制器(CPLD或者LPC2214)來操作SRAM的總線,就可以有效地避免總線沖突。這樣,硬件上的仲裁就可以通過軟件來保證,該過程可以通過在CPLD中編寫多路數(shù)據(jù)選擇器來實(shí)現(xiàn)。
各器件之間的連接關(guān)系如圖1所示。
由圖1可見,微處理器的總線接在CPLD上,在對(duì)功耗有嚴(yán)格要求的場(chǎng)合中,只需要在CPLD中,將OV6620的同步時(shí)序信號(hào)所對(duì)應(yīng)的引腳與LPC2214連接在CPLD上的中斷引腳相連,系統(tǒng)就可以轉(zhuǎn)換成方案1的形式。對(duì)CPLD而言,引腳相連的僅僅是組合邏輯,降低了功耗。方案1的具體工作過程可見參考文獻(xiàn)。而對(duì)于采集速度要求較高的場(chǎng)合,CPLD部分的程序源代碼見本刊網(wǎng)站www.mesnet.com.cn——編者注。下面重點(diǎn)介紹這種情況下的應(yīng)用。
2.2 工作過程
系統(tǒng)上電后,首先由LPC2214通過I2C總線配置攝像頭的工作狀態(tài),需要配置的主要有輸出圖像的數(shù)據(jù)格式、速率、是否白平衡,以及自動(dòng)增益是否打開。配置完成后,LPC2214發(fā)出圖像采集的信號(hào)給CPLD,此時(shí)CPlD操作SRAM的總線,并通過對(duì)OV6620輸出時(shí)序的檢測(cè)將圖像數(shù)據(jù)寫入SRAM。當(dāng)然,寫入SRAM需要嚴(yán)格符合SRAM的操作時(shí)序。一幀圖像采集完成后,CPLD置位標(biāo)志位來通知LPC2214,如果LPC2214處于空閑狀態(tài),則通知CPLD將總線使用權(quán)切換至LPC2214,由LPC2214讀取SRAM中的數(shù)據(jù)并進(jìn)行圖像處理。同時(shí),發(fā)送信號(hào)給CPLD進(jìn)行數(shù)據(jù)采集,圖像的采集和處理將并行執(zhí)行,提高了系統(tǒng)的工作效率。當(dāng)再次采集完一幀數(shù)據(jù)后,重復(fù)上述過程。
2.3 硬件方案的特點(diǎn)
LPC2214負(fù)責(zé)圖像處理,CPLD負(fù)責(zé)圖像數(shù)據(jù)的采集,很好地實(shí)現(xiàn)了功能上的封裝??梢钥吹剑珻PLD將與硬件時(shí)序相關(guān)的程序封裝,與外界的接口僅為標(biāo)志狀態(tài)線以及數(shù)據(jù)采集總線,極大地方便了系統(tǒng)的升級(jí)而無需改動(dòng)圖像采集部分的硬件和軟件。甚至更換為其他型號(hào)功能更為強(qiáng)大的微處理器,只要按照上述標(biāo)志狀態(tài)線的約定來操作,系統(tǒng)仍然可以正常工作,增強(qiáng)了系統(tǒng)的兼容性和可移植性。
3 系統(tǒng)軟件
系統(tǒng)軟件主要由ARM微處理器和CPLD兩部分程序構(gòu)成。ARM部分的代碼使用C語言在ADSl.2環(huán)境下開發(fā),而CPLD部分則使用Verilog硬件語言在QuartusII下開發(fā)。
3.1 CPLD部分程序設(shè)計(jì)
CPLD的程序主要分為2部分:組合邏輯和時(shí)序邏輯。組合邏輯主要完成總線仲裁,程序并不依賴CPLD的全局時(shí)鐘;時(shí)序邏輯完成對(duì)信號(hào)的檢測(cè),根據(jù)SRAM的操作時(shí)序?qū)D像數(shù)據(jù)寫入。
在總線仲裁部分,需要注意的是:對(duì)CPLD而言,不同的時(shí)刻同一總線的數(shù)據(jù)流人方向是不同的。因而在Verilog中,需要聲明總線為雙向端口。具體的總線仲裁程序如下:
對(duì)雙向端口的總線操作總結(jié)如下:
?、傩枰刂菩盘?hào)指明端口在某一時(shí)刻的方向;
②輸出高阻即代表該雙向端口是輸入狀態(tài),此時(shí)可以作為普通的輸入端口來使用。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論