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