隨著CCD(Charge CoupLED Device)越來越廣泛地被應用到工業、軍事、民用行業。采用CCD攝像頭作為裝置的前端圖像傳感器并結合其他硬件電路對被測圖像信息進行快速采樣、傳輸及數據處理的應用系統正日益受到人們的關注。本文所介紹的是一種帶有CCD攝像器件的視頻信號處理裝置,主要用于投影屏幕上目標點的坐標測量和光標定位。 1.系統總體設計方案 系統總體設計如圖1所示,激光筆發射到被測畫面的光點被CCD攝像器件接收,CCD攝像器件輸出視頻信號給同步分離電路和整形電路。利用同步分離電路后,可從視頻信號中得到行同步信號和場同步信號和奇偶信號,行同步和場同步信號被送到計數電路。視頻信號經過整形電路后得到光信號,光信號也被送往計數電路,計數電路處理后輸出光點的二維位置信息,此信息經單片機處理后由串口傳輸到計算機,計算機通過軟件編程實現光標的定位并模擬鼠標的單雙擊功能。 圖1 電路總體結構圖 2.系統硬件電路設計 2.1 整形電路 如圖2所示,CCD攝像器件1輸出的視頻信號被直接傳送到運算放大器4放大,運算放大器4輸出的信號一路作為電壓比較器7的一個輸入,另一路被送到最大值保持電路5,最大值保持電路5主要包括電壓跟隨器5、電容C1、穩壓管Dz1 三個器件,當有信號從電壓跟隨器5A連續輸出時,由于二極管D1的存在,電容C1不斷充電,電壓不斷增加,直到信號的最大值到來,這時C1的電壓也增加到最大值,之后再有信號到來時由于其電壓達不到加在電容兩端的電壓,因而電容不再充電,電壓保持不變。當圖中所示的場同步信號到來時,穩壓管Dz1反相導通,電容才迅速放電,再有信號從電壓跟隨器5A 輸出,電容又開始重新充電。通過這種設計,便可以從每場視頻信號中提取出最強的信號,并將這個值通過電壓跟隨器6輸出到電壓比較器7的另一個輸入端,電壓比較器7輸出的信號即為從視頻信號中提取出的光信號,并且該光信號存在這樣的特點:對于每一場視頻信號而言,只有當當前信號值大于以往信號值時,光信號輸出為高電平,否則輸出為低電平。視頻信號最大值過后,光信號輸出時刻保持在低電平。在圖2中,電壓跟隨器6相當于一個高輸入阻抗元件,可以防止電容C1放電過快。電源VCC提供一個鉗位電壓。 圖2 整形電路詳細原理圖 2.2 同步分離電路 視頻信號是反映圖像內容的電視信號, 它的電壓高低表示圖像像素的明暗程度。由于圖像是隨機性的, 因此視頻信號電平也在一定范圍內隨機起伏。視頻信號是在電子掃描作用下, 由攝像頭將明暗不同的景象轉換為相應的電信號, 然后經信號通道傳送出去。目前在傳送視頻信號時,是把影像信號,消隱信號和復合同步信號三者按一定比例結合在一起發送的。我國采用的電視信號是隔行掃描(PAL)制式(黑白為CCIR),行頻為15625Hz,行同步脈寬為4.7μs;場頻為50 Hz,場同步脈寬為160μs。 準確分離視頻信號對系統的成功至關重要,在該系統中視頻信號同步分離可以選用芯片LM1881來實現,輸入為滿足CCIR標準的視頻信號,輸出有復合同步信號、場同步信號、奇偶場標志信號。其中,復合同步信號中包含了周期為64μs的行同步信號和場回掃期間的周期為32μs的場均衡信號、場同步信號。 2.3 計數電路 2.3.1 光信號行計數 選擇20MHz的晶振作為行計數器的計數時鐘脈沖輸入,計數器的時鐘頻率實際上決定了視頻信號每一行的采樣點的數量,即每行水平的數字分辨率。行周期64μs,頻率15625Hz,每行的采樣點為20M/15625=1280,除去行消隱和行同步的時間,每行的有效采樣點可達1000點以上。為了保證計數器不會溢出,需用二進制地址10位,因此我們選擇采用12位計數器。由光信號和場同步脈沖通過與非門接到計數器的清零引腳,由20MHz時鐘信號和行同步脈沖通過與非門接到計數器時鐘脈沖輸入引腳。當光信號到來時計數器開始計數,下一行同步脈沖到來時,會停止計數,同時觸發鎖存器,存儲計數器中的數值,至此就獲得了光點的行坐標。下一場同步脈沖到來時,會將計數器清零,開始新一行的點坐標測量。 圖3 行計數的波形示意圖 2.3.2 光信號場計數 場計數的工作原理與行計數類似,只是計數器時鐘脈沖輸入改為行同步脈沖。光信號到來時開始計數,當場同步脈沖到來時停止計數,觸發鎖存器,存儲計數器中的數值,至此就獲得了光點的場坐標。同時場同步脈沖會將計數器清零,開始新一場的點坐標測量。 由于攝像頭采用隔行掃描方式,兩場構成一幀畫面,奇數場掃奇數行,偶數場掃偶數行,所以此時得到的場坐標與實際值之間有較大誤差。為了提高精度,需要確定當前掃描的是奇數場還是偶數場。如果場計數器中的值為n,LM1881的奇偶場標志腳輸出0,則表明當前掃描的是偶數場,光點實際應在第2n行;若輸出1,表明掃描的是奇數場,光點實際應在第2n-1行。 3.單片機串口通信流程 在本系統中使用的單片機是陵陽SPCE061A,它的UART模塊提供了一個全雙工標準的通信口,用于與外設之間的串行通信。在使用SPEC061A的異步串行端口UART實現與PC通信時,由于SPEC061A的I/O電平和PC不一致,要采用一片MAX232進行電平轉換,MAX232的RXD和TXD分別接SPCE061A的IOB10(TX)和1OB7(RX)。 根據RS-232的標準,SPCE061A單片機是按字節傳輸數據的。利用IOB口的特殊功能和UART IRQ中斷,可以同時完成UART接口數據的接收和發送。SPCE061A單片機串行通信幀結構為:1位啟動位,8位數據位,1位奇偶校驗位,1位停止位。使用UART模塊進行通信時,必須事先分別將管腳I0B7設置為輸入狀態,IOB10設置為輸出狀態。將波特率設置為9600b/s即可滿足本系統實時數據傳輸要求。 初始化的代碼為: *P_IOB_Dir=0x0400; //IOB0"IOB7初始化為輸入,IOB10為輸出 *P_IOB_Attrib=0x0480; *P_UART_BaudScalarHigh=0x05; //波特率設置為9600bps *P_UART_BaudScalarLow=0x00; *P_UART_Command1=0x0000; //允許接收、發送 *P_UART_Command2=0x00C0; 單片機數據發送程序代碼片段為: Ret=*P_UART_Command2; //檢查標志位,查看上次數據是否發送完畢 Ret="Ret"&0x0040; while(Ret==0) //若沒有等待繼續發送 { Ret=*P_UART_Command2; Ret="Ret"&0x0040; *P_Watchdog_Clear=C_WDTCLR; } m1=m&0x000f; //將16進制m1轉ASCLL碼傳送上位機 Hex_ASC(m1); *P_UART_Data=m1; 4.PC機軟件設計 在計算機接收端,由串口1接收單片機發來的數據,采用VB 6.0設計軟件程序,串行通訊利用MSCOMM控件實現[4]。MSCOMM能十分方便地開發出使用計算機串口的計算機通信程序。在本系統中MSCOMM控件采用事件驅動方式從端口獲取數據,軟件處理流程為:打開串口開始接收單片機發送來的數據,首先判斷數據幀的開始字節,是則關閉OnComm接收事件,然后接收數據字節,判斷數據最大最小值,采用坐標轉化算法將接收的坐標轉化為屏幕坐標,最后打開OnComm接收事件,等待下一次OnComm事件產生。 Windows SDK中函數SetCursorPos()可以實現將鼠標光標顯示在投影大屏幕上的激光點處,該函數帶有兩個參數x和y,表示鼠標在屏幕上的坐標。函數mouse_event()可以模擬一次鼠標事件,例如可用如下命令模擬左鍵單擊:mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0。這樣就實現了利用激光筆光點控制目標大屏幕的鼠標指針定位,移動和單雙擊。 5.結束語 試驗表明,裝備設計合理,滿足設計技術指標要求,工作穩定可靠,且具有較強的可擴充性,只需做少許改動即可適應用戶更高的要求,若要求進一步提高光標定位的精度,可選擇更高的晶振作為行計數器脈沖的輸入,必要時對計數器加以擴展。這相當于將像素點加以細化,因而精度提高。 本裝置是配合計算機,投影儀而用于產品演示、電化教學及學術會議等場合的理想演示用工具。經過改裝后,還可用于警員、軍隊槍械的模擬訓練,有著廣闊的應用前景。 |