基于S12單片機(jī)的循跡小車視覺(jué)系統(tǒng)設(shè)計(jì)與優(yōu)化
全國(guó)大學(xué)生智能汽車競(jìng)賽已經(jīng)在國(guó)內(nèi)順利舉行兩年。隨著智能車速度的提高,越來(lái)越多的參賽隊(duì)開(kāi)始采用攝像頭作為道路辨識(shí)的主要傳感器,而如何使用單片機(jī)進(jìn)行數(shù)字圖像信號(hào)采集,并識(shí)別賽道路徑是該系統(tǒng)的設(shè)計(jì)重點(diǎn)。目前圖像采集與處理技術(shù)已經(jīng)得到了廣泛的應(yīng)用,但多數(shù)基于圖像的控制系統(tǒng)都采用了DSP等高速處理器,并不適合智能車競(jìng)賽所規(guī)定使用的單片機(jī)平臺(tái)。本文利用CMOS圖像傳感器的可編程特性,設(shè)計(jì)了適用于中低速單片機(jī)的基于FIFO的數(shù)字圖像采集處理系統(tǒng),用MC9S12DG128單片機(jī)進(jìn)行實(shí)時(shí)圖像采集和控制。該系統(tǒng)結(jié)構(gòu)簡(jiǎn)潔、成本低廉、通用性強(qiáng),可方便地移植到各種類型的處理器。
本文引用地址:http://cafeforensic.com/article/173873.htm1 主要芯片
MC9S12DG128是Freescale公司出品的16位單片機(jī),其采用增強(qiáng)型16位HCS12 CPU,內(nèi)部總線時(shí)鐘最高可達(dá)25MHz;片內(nèi)資源包括8KB RAM、128KB Flash、2KB EEPROM、8路10位A/D轉(zhuǎn)換器、SCI、IIC、SPI串行通訊模塊、PWM模塊以及多路CAN總線模塊等。同時(shí)它支持Freescale特有的背景調(diào)試模式(BDM),可以進(jìn)行在系統(tǒng)調(diào)試,使開(kāi)發(fā)效率大大提高。
OV7620[1]是美國(guó)OmniVision公司出品的彩色/黑白CMOS圖像傳感器。這是一種自帶圖像敏感陣列和A/D轉(zhuǎn)換元件、能直接提供8/16位CCIR601、CCIR656等格式視頻數(shù)字信號(hào)的彩色/黑白圖像傳感器,圖像輸出最高速度可達(dá)60S/s,最大圖像分辨率為644×492,5V供電;它具有自動(dòng)增益、自動(dòng)曝光、自動(dòng)白平衡、邊緣增強(qiáng)、伽瑪校正等控制功能;可以通過(guò)I 2 C總線進(jìn)行設(shè)置;同時(shí)OV7620具有圖像開(kāi)窗輸出的功能,即允許用戶可根據(jù)實(shí)際使用需要設(shè)置其內(nèi)部寄存器,使其只輸出完整圖像中的任意一矩形區(qū)域內(nèi)的信號(hào),其范圍從4×2到644×492。這種功能從硬件上屏蔽了圖像中不需要的部分,只保留用戶需要的部分圖像,大大減少了圖像的數(shù)據(jù)量,提高了系統(tǒng)的效率。
FIFO存儲(chǔ)器沒(méi)有地址線,按照先入先出的順序進(jìn)行順序讀寫(xiě),因此是接口電路十分簡(jiǎn)潔,讀寫(xiě)速度快,允許讀寫(xiě)動(dòng)作同時(shí)進(jìn)行。IDT7205是IDT公司生產(chǎn)的高速、低功耗異步FIFO,容量為8 192×9bit,存取時(shí)間最小只有12ns,有空、半滿、滿三個(gè)標(biāo)志位,最大功耗660mW,工作電壓+5V;D0~D8為數(shù)據(jù)輸入總線,Q0~Q8為數(shù)據(jù)輸出總線,為讀寫(xiě)控制端,分別在信號(hào)下降沿鎖存、輸出數(shù)據(jù),是FIFO寫(xiě)滿標(biāo)志位,此外,IDT公司還提供256B~64KB不同容量的FIFO可供選擇。
2 系統(tǒng)硬件結(jié)構(gòu)設(shè)計(jì)
由于所使用的MC9S12DG128單片機(jī)的頻率較低,最高只有25MHz,而攝像頭的圖像輸出速率一般至少有13.5MHz(以30萬(wàn)像素為例),每個(gè)像素的信號(hào)保持時(shí)間不到75ns,若使用單片機(jī)直接采集圖像傳感器輸出的數(shù)字信號(hào),則會(huì)受到其時(shí)鐘頻率的影響,難以將信號(hào)完整地采集進(jìn)系統(tǒng)。
因此本系統(tǒng)使用FIFO芯片IDT7205作為圖像傳感器與單片機(jī)之間的數(shù)據(jù)緩存,通過(guò)設(shè)計(jì)一定的邏輯電路,使圖像傳感器自動(dòng)地將圖像數(shù)據(jù)寫(xiě)入FIFO,同時(shí)MCU開(kāi)始從FIFO讀出數(shù)據(jù)。圖像采集系統(tǒng)結(jié)構(gòu)框圖如圖1所示。
2.1 攝像頭同步信號(hào)分析
OV7620的同步信號(hào)時(shí)序如下:垂直同步信號(hào)VSYN為兩個(gè)正脈沖之間掃描一幀的定時(shí),即完整的一幀圖像在兩個(gè)正脈沖之間;水平同步信號(hào)HREF掃描該幀圖像中各行像素的定時(shí),即高電平時(shí)為掃描一行像素的有效時(shí)間;像素同步信號(hào)PCLK為讀取有效像素值提供同步信號(hào),高電平時(shí)輸出有效圖像數(shù)據(jù),若當(dāng)前圖像窗口大小為320×240,則在VSYN兩個(gè)正脈沖之間有240個(gè)HREF的正脈沖,即240行;在每個(gè)HREF正脈沖期間有320個(gè)PCLK正脈沖,即每行320個(gè)像素。這就是VSYN、HREF、PCLK三個(gè)同步信號(hào)之間的關(guān)系[2]。OV7620同步信號(hào)時(shí)序如圖2所示。
2.2 數(shù)字圖像信號(hào)的采集
為了將圖像傳感器輸出的圖像信號(hào)自動(dòng)地存入FIFO,只需要通過(guò)一個(gè)“與非門(mén)”就能產(chǎn)生符合FIFO要求的寫(xiě)時(shí)鐘脈沖,如圖3所示。將幀同步信號(hào)VSYN引入單片機(jī)輸入口,復(fù)位后V_EN置0,“與非門(mén)”關(guān)閉,輸出1。當(dāng)單片機(jī)檢測(cè)到VSYN上跳后,V_EN輸出1,打開(kāi)“與非門(mén)”。當(dāng)攝像頭輸出有效像素時(shí),HREF為高,PCLK高電平時(shí)像素?cái)?shù)據(jù)有效,三者“與非”后輸出為0,使信號(hào)產(chǎn)生一個(gè)下跳,觸發(fā)FIFO鎖存OV7620輸出的圖像數(shù)據(jù)。
經(jīng)過(guò)圖3電路處理后的系統(tǒng)時(shí)序如圖4所示。寫(xiě)信號(hào)已符合腳的時(shí)序要求,經(jīng)實(shí)際使用,功能正常。
當(dāng)一幀圖像寫(xiě)入FIFO后,單片機(jī)根據(jù)時(shí)序要求在FIFO的腳上產(chǎn)生相應(yīng)脈沖,即可從FIFO中讀出圖像數(shù)據(jù),按照一定格式存入內(nèi)存,進(jìn)行后續(xù)處理。圖5為采集得到的黑線圖像。
雖然單片機(jī)通過(guò)一定的硬件結(jié)構(gòu)等可以實(shí)現(xiàn)圖像信號(hào)的采集,但是由于內(nèi)部結(jié)構(gòu)的原因,其進(jìn)行大數(shù)據(jù)量運(yùn)算的能力有限,進(jìn)行圖像處理速度較慢。通過(guò)以下方法進(jìn)行優(yōu)化,可以使單片機(jī)進(jìn)行一些簡(jiǎn)單的圖像處理和實(shí)時(shí)控制任務(wù)。
3.1 減小圖像數(shù)據(jù)量
CMOS圖像傳感器具有圖像開(kāi)窗輸出(Windowing)的功能,通過(guò)設(shè)置其內(nèi)部相應(yīng)寄存器,可以使CMOS只輸出特定區(qū)域內(nèi)的圖像數(shù)據(jù)。如設(shè)置CMOS使其只輸出畫(huà)面中用戶所關(guān)心部分的圖像信號(hào),圖像數(shù)據(jù)量則可大大減少,同時(shí)也減輕了后期進(jìn)行圖像處理的難度,提高了系統(tǒng)的性能。
在要求圖像精度不高的情況下,為了進(jìn)一步降低圖像數(shù)據(jù)量、減輕單片機(jī)負(fù)擔(dān),可以采取隔行、隔像素采集的方法,即在PCLK和HREF信號(hào)上加入計(jì)數(shù)電路,每隔N行和M個(gè)像素采集一次,這樣在保證圖像可用的情況下數(shù)據(jù)量可減小為原來(lái)的1/(N×M)。
3.2 FIFO異步讀寫(xiě)圖像數(shù)據(jù)
IDT7205具有兩套獨(dú)立的讀寫(xiě)指針,可以同時(shí)進(jìn)行讀和寫(xiě)操作而互不干擾。當(dāng)圖像輸出速度比單片機(jī)讀入速度快許多時(shí),為了提高采集效率,可以讓圖像讀寫(xiě)同時(shí)進(jìn)行,即當(dāng)新的一幀圖像開(kāi)始寫(xiě)入FIFO后,單片機(jī)就開(kāi)始讀取圖像數(shù)據(jù),讀寫(xiě)同時(shí)進(jìn)行,以減少單片機(jī)等待數(shù)據(jù)寫(xiě)入FIFO完成的空閑時(shí)間。
單片機(jī)并不適合完成復(fù)雜的圖像處理算法,如卷積等運(yùn)算。因此在編寫(xiě)圖像處理算法時(shí)應(yīng)根據(jù)單片機(jī)特性,盡量避免使用浮點(diǎn)運(yùn)算,要簡(jiǎn)化算式,或者可以犧牲一定精度來(lái)?yè)Q取時(shí)間。以圖像分割的大津算法(OTSU)為例,該算法遍歷0~255個(gè)灰度值,以找出一個(gè)最小的灰度u,使得到的g最小。
OTSU原始算式:g=Wa×(u0-u)2+Wb×(u1-u)2
OTSU改進(jìn)算式:g=Wa×Wb×(u0-u1)2
使用原始算式和改進(jìn)的等效算式進(jìn)行計(jì)算時(shí),每次迭代中改進(jìn)算式比原始算式少進(jìn)行2個(gè)乘法運(yùn)算,其速度約提高1/3。
本文提出的基于FIFO和單片機(jī)的圖像處理系統(tǒng),結(jié)構(gòu)十分簡(jiǎn)潔,成本低廉,可移植性強(qiáng)。雖然單片機(jī)并不十分適合于大數(shù)據(jù)量的圖像處理任務(wù),但通過(guò)優(yōu)化和精度與性能的折中,可以完成一些簡(jiǎn)單的基于圖像的處理任務(wù),并具有一定的實(shí)時(shí)性。本文介紹的采集系統(tǒng)被用在基于CMOS的智能循跡小車上,使用一片MC9S12DG128單片機(jī)運(yùn)行于24MHz的總線時(shí)鐘并配合IDT7205、OV7620圖像傳感器實(shí)現(xiàn)了圖像采集、處理和小車控制,取得了良好的效果。
評(píng)論