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