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