陳向春,侯智斌,張峰
(解放軍陸軍軍官學(xué)院,合肥 230031)
在單片機(jī)應(yīng)用系統(tǒng)中,由于圖像采集速度、程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器的尋址空間的限制,要完整存儲(chǔ)30fps、640×480像素大小的一幅圖像是相當(dāng)困難的[1]。本文運(yùn)用較高性能的16位飛思卡爾單片機(jī)在超高頻的情況下直接采集圖像,也只能采集到每行320個(gè)像素,丟失圖像,無(wú)法獲得一幅完整的圖像。本文通過(guò)在圖像采集過(guò)程中增加FIFO芯片AL422B較好地解決了這一問(wèn)題,相對(duì)于采用昂貴的DSP而言,降低了圖像采集系統(tǒng)的成本。
野外作業(yè)時(shí),需要在運(yùn)動(dòng)中知道前方標(biāo)桿和觀察點(diǎn)之間的距離。本文將標(biāo)桿制成等間距紅外點(diǎn)光源標(biāo)桿,滿(mǎn)足了基于單幀靜態(tài)圖像的小孔成像原理測(cè)距模型要求,減少了圖像處理量,提高了測(cè)量的實(shí)時(shí)性、全天候性。H為各點(diǎn)光源標(biāo)桿的實(shí)際距離;n為點(diǎn)光源個(gè)數(shù),它可以通過(guò)圖像處理獲得;f為攝像頭焦距;標(biāo)尺實(shí)際像素物理距離h由攝像頭標(biāo)定取得。遠(yuǎn)距離測(cè)距原理示意圖如圖1所示,整條點(diǎn)光源標(biāo)桿都在攝像頭視野范圍內(nèi)。近距離測(cè)距原理示意圖如圖2所示,點(diǎn)光源標(biāo)桿只有部分在攝像頭范圍內(nèi)。通過(guò)圖1,可求出前方標(biāo)桿與觀察點(diǎn)的距離D。攝像機(jī)的成像幾何關(guān)系也可用小孔成像原理來(lái)近似表示:
圖1 遠(yuǎn)距離測(cè)距原理示意圖
圖2 近距離測(cè)距原理示意圖
根據(jù)單目視覺(jué)測(cè)距的要求,需要通過(guò)一黑白攝像頭實(shí)時(shí)采集前車(chē)的點(diǎn)光源標(biāo)桿,通過(guò)標(biāo)尺上點(diǎn)光源所在的像素距離推算出前車(chē)距離。為了能完整地讀取圖像,本文增加了FIFO芯片,圖像采集原理示意圖如圖3所示。由單片機(jī)監(jiān)測(cè)攝像頭的行/場(chǎng)信號(hào),控制FIFO讀取相應(yīng)的圖像;讀完所有行后,關(guān)閉FIFO讀取圖像功能,開(kāi)始由單片機(jī)從FIFO中讀取圖像數(shù)據(jù),并進(jìn)行相應(yīng)的圖像處理,根據(jù)圖像處理的復(fù)雜程度,決定圖像處理和圖像采集的時(shí)間比。由于FIFO是先入先出,其讀取數(shù)據(jù)時(shí)單片機(jī)只需通過(guò)中斷使能行/場(chǎng)信號(hào),絕大部分時(shí)間單片機(jī)可以用來(lái)進(jìn)行圖像處理。本文采取的是采集一幀圖像后,單片機(jī)利用兩幀圖像的空閑時(shí)間和下一幀F(xiàn)IFO采集時(shí)間,共約3幀時(shí)間進(jìn)行圖像處理和控制,其結(jié)果是圖像由原來(lái)的30fps,變成10fps。盡管幀率慢了,但經(jīng)過(guò)分析得知,在100km/h情況下,滯后距離2.8m,可以滿(mǎn)足要求。
圖3 圖像采集原理示意圖
OV7670是OmniVision公司推出的Camerachiptm圖像傳感器,體積小,工作電壓低。VGA圖像最高達(dá)到30 fps。其主要特性為[3]:
◆感光陣列(共有656×488個(gè)像素,在YUV的模式中有效像素為640×480個(gè));
◆高靈敏度適合低照度應(yīng)用,對(duì)紅外光線敏感;
◆標(biāo)準(zhǔn)的SCCB接口,兼容I2C總線接口;
◆RawRGB、RGB(GRB4:2:2,RGB565/555/444)、YUV(4:2:2)和 YCbCr(4:2:2)輸出格式;
◆支持VGA、CIF和從CIF到40×30的各種尺寸。
本文采用飛思卡爾16位單片機(jī)MC9S12DG128作為主控芯片,該芯片是Freescale公司推出的S12系列微控制器中的一款增強(qiáng)型、汽車(chē)級(jí)的16位微控制器,片內(nèi)總線時(shí)鐘頻率最高可達(dá)25MHz,集成了8KB的RAM、128 KB的Flash、2KB的EEPROM,集成度高,資源也相當(dāng)豐富[2]。
AL422B是AverLogic公司推出的一個(gè)存儲(chǔ)容量為393 216字節(jié)×8位的FIFO存儲(chǔ)芯片。其所有的尋址、刷新等操作都由集成在芯片內(nèi)部的控制系統(tǒng)完成,AL422B內(nèi)部功能結(jié)構(gòu)框圖如圖4所示。
圖4 AL422B內(nèi)部功能結(jié)構(gòu)框圖
AL422B主要特點(diǎn)是[4]:
◆AL422B的存儲(chǔ)體為3Mb(393 216字節(jié)×8位);
◆可以存儲(chǔ)VGA、CCIR、NTSC、PAL和HDTV等制式一幀圖形的信息;
◆獨(dú)立的讀寫(xiě)操作,可以接受不同的I/O速率;
◆高速異步串行存取;
◆讀寫(xiě)周期為20ns;
◆存取時(shí)間為15ns;
◆內(nèi)部DRAM自刷新。
要想在單片機(jī)應(yīng)用系統(tǒng)中實(shí)現(xiàn)數(shù)字圖像的靜態(tài)存儲(chǔ),必須解決存儲(chǔ)速度和存儲(chǔ)容量?jī)纱髥?wèn)題。對(duì)于速度問(wèn)題,需要對(duì)OV7670的數(shù)據(jù)輸出時(shí)序進(jìn)行分析,使其滿(mǎn)足要求。VGA時(shí)序圖如圖5所示。其中PCLK為像素時(shí)鐘,頻率與主頻一致,即27MHz,上升沿時(shí)數(shù)據(jù)輸出有效;VSYNC為場(chǎng)信號(hào);
HREF為水平參考信號(hào),當(dāng)像素在窗口有效時(shí)為高電平,否則為低電平;HSYNC為行信號(hào);D[7:0]為8位數(shù)據(jù)輸出。
圖5 VGA時(shí)序圖
AL422B寫(xiě)操作時(shí)序圖如圖6所示[4],WCK 為AL422B的寫(xiě)入時(shí)鐘,周期最大為1000ns,最小為20ns(對(duì)應(yīng)主頻50MHz);其上升沿時(shí)數(shù)據(jù)寫(xiě)入,隨著該時(shí)鐘輸入其內(nèi)部,寫(xiě)指針自動(dòng)增加??梢?jiàn),AL422B的速度滿(mǎn)足設(shè)計(jì)要求。具體操作時(shí),由單片機(jī)的I/O口控制AL422B的寫(xiě)使能/WE,使其為低電平,使能寫(xiě)功能,數(shù)據(jù)端DI7~0在WCK上升沿時(shí)將數(shù)據(jù)寫(xiě)入。寫(xiě)完一副圖像后,由單片機(jī)的I/O口控制寫(xiě)復(fù)位/WRST,使其為低電平,使能復(fù)位,數(shù)據(jù)寫(xiě)入地址指針將回到0地址位。
圖6 AL422B寫(xiě)操作時(shí)序圖
AL422B讀操作時(shí)序圖如圖7所示。RCK為AL422B的讀出時(shí)鐘,周期最大為1000ns,最小為20ns,當(dāng)/RE和/OE有效時(shí),在其上升沿?cái)?shù)據(jù)有效,隨著該時(shí)鐘輸入,其內(nèi)部的讀指針自動(dòng)增加。當(dāng)單片機(jī)的主頻為25MHz時(shí),還不能直接給OV7670的系統(tǒng)時(shí)鐘XCLK提供時(shí)鐘,我們采用外部晶振提供27MHz的同頻信號(hào)給OV7670。
圖7 AL422B讀操作時(shí)序圖
圖像采集電路原理圖如圖8所示。OV7670的像素時(shí)鐘PCLK直接和AL422B的數(shù)據(jù)讀入時(shí)鐘WCK相連,具體操作時(shí),由單片機(jī)的I/O口控制AL422B的讀使能/RE和輸出數(shù)據(jù)使能/OE,使它們?yōu)榈碗娖?;使能?shù)據(jù)讀出功能,數(shù)據(jù)端DO7~0在RCK上升沿時(shí)將數(shù)據(jù)輸出給單片機(jī)。讀完一副圖像后,由單片機(jī)的I/O口控制寫(xiě)復(fù)位/RRST,使其為低電平,使能復(fù)位,數(shù)據(jù)讀出地址指針將回到0地址位。
圖8 圖像采集電路原理圖
程序設(shè)計(jì)流程如圖9所示。當(dāng)單片機(jī)檢測(cè)到場(chǎng)信號(hào)更新后,開(kāi)始監(jiān)測(cè)行信號(hào)到達(dá),之后使能/WE,開(kāi)始順序讀取圖像。讀完一幀圖像后關(guān)閉/WE,單片機(jī)使能/RE,開(kāi)始讀取首行圖像中的640個(gè)像素。本文采取邊讀邊處理的方式,較好地解決了一幀圖像多達(dá)3MB的問(wèn)題。點(diǎn)光源標(biāo)桿發(fā)出的紅外光線在圖像上呈現(xiàn)出若干個(gè)光暈區(qū)域,找到光暈中心就可以找到點(diǎn)光源的圖像坐標(biāo),為此在讀取的同時(shí)將各像素點(diǎn)與閾值進(jìn)行比較,小于閾值的為疑似點(diǎn)光源并記錄對(duì)應(yīng)坐標(biāo);當(dāng)讀取完一行像素時(shí),得到的將是一組疑似點(diǎn)光源坐標(biāo)的像素位置,將其進(jìn)行統(tǒng)計(jì)求平均,得出點(diǎn)光源在該行的坐標(biāo),最多12個(gè)字節(jié)(正面標(biāo)桿6個(gè),某側(cè)標(biāo)桿6個(gè)),遠(yuǎn)遠(yuǎn)小于整行640個(gè)字節(jié)。
圖9 程序設(shè)計(jì)流程圖
當(dāng)讀取完一幀像素時(shí),得到最多12×480個(gè)字節(jié),單片機(jī)64KB的容量完全可以存儲(chǔ),最后將行求平均,得出最終的點(diǎn)光源坐標(biāo)。經(jīng)驗(yàn)證,所需總時(shí)間在2.15幀圖像內(nèi)完成。
文中討論了基于FIFO芯片和單片機(jī)實(shí)現(xiàn)的點(diǎn)光源圖像采集系統(tǒng),描述了單目點(diǎn)光源測(cè)距原理、圖像采集系統(tǒng)硬件和軟件設(shè)計(jì)方法,著重介紹了FIFO芯片在圖像采集中的橋梁作用。通過(guò)系統(tǒng)樣機(jī)檢驗(yàn),能夠滿(mǎn)足要求,達(dá)到了預(yù)期效果。
[1]邵貝貝.單片機(jī)嵌入式應(yīng)用的在線開(kāi)發(fā)方法[M].北京:清華大學(xué)出版社,2009.
[2]Freescale Semiconductor.MC9S12DG128Device User Guide[EB/OL].[2011-11].http://www.freescale.com.cn.
[3]OmniVision Technologies.OV7670/OV7171CMOS VGA 圖像傳感器[EB/OL].[2011-11].http://www.ovt.com/technologies/.
[4]Aver Logic.AL422DataSheet[EB/OL].[2011-11].http://www.averlogic.com/.