摘要:本文基于freescale 16位HCS12單片機的輸入捕捉功能設計一種視頻信號采集系統。在該系統中,將CMOS攝像頭的輸出信號二值化,利用單片機輸入捕捉功能實時對信號采樣、處理,提取出黑色導引線的形狀特征。實驗證明:系統能很好地滿足智能車對路徑識別性能和抗干擾能力的要求,實時性好,測量精度高,同時硬件和軟件的開銷都比較小。
關鍵詞:圖像二值化;HCS12單片機;視頻圖像;比較器
引言
第二屆“飛思卡爾”杯全國大學生智能車競賽中,要求各參賽隊賽車在規定的賽道上行駛,速度快者勝出。由于跑道只有黑、白兩色,對圖像的灰度沒有要求,所以只需要反映反射光線的強弱。若用A/D進行采樣,不僅軟件設計比較麻煩,而且測量的精度和響應時間都不夠理想,抗干擾能力也較差。本文摒棄傳統的視頻信號采集方法,結合單片機的輸入捕捉功能,提出一種新的路徑識別方法,并在實際系統中得到應用,實踐表明該方法不僅使系統具有良好的性能,而且容易實現。
視頻信號的特征
使用CHD-918B面陣CMOS攝像頭,通過對內部電路的改造,可以在5 V電壓環境下正常工作,輸出PAL制式模擬視頻信號,如圖1所示。每秒掃描50場圖像,一場又有312.5行,每行圖像信號時間為64us,除去行同步頭,其中有效的圖像信號約為59.3us。所以,若選用S12的A/D轉換器采集,轉換耗時壓力大,圖像分辨率低。
系統設計思想
設計是于白色跑道和黑色導引線對光反射能力不同的設計思路,同時又結合單片機的輸入捕捉功能模塊來實現的。
根據競賽的實際情況和要求,只需要在白色背景的跑道中提取出黑色的導引線,而與圖像的灰度無關,通過分析攝像頭輸出信號的特點,利用比較器將視頻信號二值化,進而把黑色導引線與白色背景區分開來,如圖2所示。同時,由于導引線的寬度是恒定的,行掃描時間和同步頭時間也是定值,通過軟件簡單編程就可以濾除環境干擾,達到不錯的濾波效果。



鑒于MC9S12DG128是HCS12系列單片機的一種,片內設有增強型定時器(ECT),具有輸入捕捉功能,可通過捕捉系統時鐘脈沖來檢測導引線。這樣,計算單片機相應階段內輸入捕捉系統時鐘脈沖的個數就能反映當前的路徑信息。系統的實現如圖3所示。
系統實現
視頻信號同步分離:視頻信號分離電路主要采用視頻同步分離芯片1881,電路原理圖如圖4所示。先將經過預處理的視頻信號通過一個濾波電路接至LM1881的2腳,為了濾除雜波,匹配阻抗,C4選取0.1uF,C2取510pF,R2取620Ω。1腳輸出行同步信號,3腳輸出場同步信號,在實際運用中,二者存在高頻干擾,所以必須加上低通濾波器。
選行電路:在一場視頻信號中共掃描312.5行,沒有必要每一行都進行采樣,只需要選擇性的采集特定行,計算出跑道的大致形狀,同時也為后續處理留出時間。該部分電路主要由一片二進制計數器74LS161實現,原理圖如圖5所示。對行使能信號控制行同步信號的開關,通過對撥碼開關的設置,可對行同步2、4、8、16分頻,選擇采集不同的行。本文在調試過程中設置成4分頻。
二值化電路
視頻信號的二值化主要由芯片MAX941完成,通過調節滑動變阻器的阻值來改變閾值電壓。經反復試驗本文將閾值定在2.55V。防止黑色導引線的邊界處出現毛刺干擾,在二值化輸出端加上RC低通濾波電路。電路圖如圖6所示。
時序關系:在上述幾個電路模塊中,使用了門電路、計數器、比較器,使原有的時序關系發生了變化,后續編程處理和系統的可靠性受到挑戰。在比較器的輸出端加入兩片非門,增大延時,情況得到改善。最后得到的時序關系如圖7所示。其中a為場同步,b為行同步,c是經過4分頻后的行同步信號,d為二值化后的視頻信號,包含著路徑信息。
輸入捕捉:MC9S12DG128單片機的外部晶振為16MHz,由于輸入捕捉寄存器為16位,其計數值最大為65535,需要對系統時鐘進行分頻處理,設分配系數為a,其中
a=2-n,(n=0,1,2…7)
(1)
則分頻后的系統時鐘可由(2)式得,
f1=fo×a=16MHz×2-33=2MHz(2)
即最小單位為0.5us,對應的跑道采集精度,遠處的分辨率為0.4cm,近處的為0.2cm,完全符合路徑識別的要求。輸入捕捉的觸發方式設置成任意沿捕捉,這樣可以簡化硬件電路的設計。以,僅僅需要計算幾個沿變化之間輸入捕捉系統時鐘脈沖的個數,就能精準的反映當前的路徑信。對應圖2,BC段是黑線,DE段是同步頭,AB與CD段反映的是左右視場邊沿到黑線的距離,在后續處理中,可以利用這些信息方便的計算出跑道的曲率和斜率。由于黑色導引線的寬度是一定的,每行有效圖像掃描時間都約為59.3us,根據這些信息就可以剔除明顯的壞點,增強系統得抗干擾能力。
軟件實現:為了節約系統時間,在編程中主要采用中斷處理,并且設置成上升沿觸發。在場中斷期間,先調用屏蔽場同步消隱子程序,把成像效果不好的部分濾除掉,隨后打開行中斷。當經過分頻后的行同步頭到來時,開始捕捉圖像信號的4個任意沿,在相應兩個沿之間,所捕捉到的系統時鐘脈沖個數就反映了當前的路徑信息。另外,為了消除偶然誤差的影響,在不降低系統速度測量精度的前提下,通過使用軟件上的循環隊列算法,保證了路徑信息的準確性。循環隊列的具體實現過程為:通過設置一個長度為L的隊列,每發生一次輸入捕捉中斷就進行一次入隊操作,由隊列“先進先出”的性質,即替換最先入隊數據,能夠保證將最新的刷新數據進行數據處理并進行控制,提高了控制的實時性。該系統部分軟件流程圖如圖8所示。
結語
若采用片內A/D采集,在最高時鐘頻率2MHZ的情況下,進行一次10位精度A/D轉換的時間為7us。這樣,采集的圖像每行只有8個像素,圖像分辨率過低。如果采用超頻的手段來補償,又會降低系統的可靠性。而本文采集的圖像數據分辨率為128×64,每行有128個像素,并且分辨率留有進一步提高的余留量,軟件的編寫也比較簡單。但是該方法目前還不能區分圖像的灰度,是以后需要改進之處。