在機電產(chǎn)品設計中,有時(shí)需要檢測物體間的相對運動(dòng),包括運動(dòng)方向和運動(dòng)距離。若采用機械式的結構,比如機械鼠標中的滾輪和軌跡球,則會(huì )由于頻繁的機械運動(dòng)而發(fā)生故障,導致精度下降甚至失效,維修起來(lái)也不方便。另外它需要兩個(gè)物體表面相接觸,靠相互間的摩擦進(jìn)行工作,這在某些場(chǎng)合是不能允許的。解決方案之一就是采用光電器件,運用光學(xué)原理來(lái)測定運動(dòng)。安捷倫公司的HDNS2000就是為此而設計的,雖然它的市場(chǎng)是針對光學(xué)鼠標,但也可以作為一種高性能而又廉價(jià)的器件運用于工業(yè)控制領(lǐng)域中。 1 HDNS2000芯片介紹 1.1 主要功能與特性 HDNS2000是安捷倫推出的高性能的光學(xué)感測芯片,它的內部包含三個(gè)基本模塊:圖像拾取系統、DSP處理器、PS/2或四狀態(tài)輸出轉換器,如圖1所示。在HDNS2000芯片的底部有一個(gè)感光眼,如同一個(gè)小型的攝像頭,不斷地對物體表面進(jìn)行拍照,接著(zhù)將前后兩次的圖像送入DSP中進(jìn)行處理,以判斷物體移動(dòng)的方向和大小,最后將數據轉化為PS/2格式或者以?xún)赏ǖ浪臓顟B(tài)格式輸出。圖2中的(a)與(b)分別為芯片前后兩次拾取的圖像。比較圖2中的(a)和(b)可以看出,物體向左下方移動(dòng)了一點(diǎn)。 HDNS2000的圖像拾取系統每秒鐘可以拾取1500張圖像,可以精確地測量最高30.48 cm/s(12 英寸/s)的運動(dòng),解析度為400點(diǎn)每英寸。 1.2 引腳介紹 HDNS2000的主要引腳框圖如圖3所示。 PS2_C:PS/2接口的時(shí)鐘端。 MODE/XA:復用引腳,接高電平時(shí)表示選擇PS/2模式;否則,為XA輸出。 RB/XB:復用引腳,PS/2模式時(shí)為鼠標右鍵輸入;否則,為XA輸出。 MB/YB:復用引腳,PS/2模式時(shí)為鼠標中鍵輸入;否則,為YB輸出。 LB/YA:復用引腳,PS/2模式為鼠標左鍵輸入;否則,為YA輸出。 XY_LED:激光LED控制輸出,在物體長(cháng)時(shí)間不移動(dòng)時(shí),HDNS2000可以控制LED關(guān)閉,以節約能量。 VDD3:3.3 V直流電源輸入。 REFB:內部參考引腳,通過(guò)電容與VDD3相連。 PS2_D :PS/2接口的數據端。 NRESET:低電平復位引腳。 VDD5:5 V直流電源輸入。 GND:電源地。 OSC2:晶振輸出。 OSC1:晶振輸入,外接18.432 MHz晶振。 2 HDNS2000與AVR單片機接口設計 2.1 HDNS2000與AT90S8015接口 HDNS2000直接提供有PS/2接口,方便了PS/2鼠標的設計;但在機電控制中,為了提高效率,宜直接采用HDNS2000的另一種輸出模式,即X向與Y向兩通道四狀態(tài)輸出模式。此時(shí)XA、XB指示X向移動(dòng)狀態(tài),而YA、YB指示Y向移動(dòng)狀態(tài)。圖 4為HDNS2000與AVR單片機AT90S8515的接口原理圖。接口主要占用了4個(gè)引腳,其它兩個(gè)是可選的,所以,即使是AVR中最低檔的ATtiny系列也可以方便地與HDNS2000連接。 另外在對節能要求不高的場(chǎng)合,可以將激光LED的一端直接與地相連接,而通過(guò)控制開(kāi)關(guān)三極管2N3906來(lái)主動(dòng)控制HDNS2000的工作狀態(tài)。本文作者在設計時(shí)正是采用的這種方式。在進(jìn)行系統設計時(shí),最好采用安捷倫公司提供的套件,其中包括HDNS2000芯片、HDNS2100透鏡、HDNS2200 激光LED卡件及HLMP-ED80激光LED,激光波長(cháng)為639 nm。 2.2 四位狀態(tài)機的工作過(guò)程 在HDNS2000內部有兩個(gè)狀態(tài)機分別指示X、Y兩個(gè)方向,每個(gè)狀態(tài)機又有四個(gè)穩定的狀態(tài)。圖5是狀態(tài)機的示意圖。由圖5可見(jiàn),一開(kāi)始系統處于狀態(tài)0,每當檢測到物體向正向或反向移動(dòng)1個(gè)單位時(shí)就轉移到下一個(gè)狀態(tài),所以只要連續監測狀態(tài)機狀態(tài)的變化就可以判斷物體移動(dòng)的方向和距離。圖6(a)和(b)分別為負向移動(dòng)和正向移動(dòng)時(shí)狀態(tài)機輸出的波形。值得注意的是,每個(gè)狀態(tài)的最少停留時(shí)間為133μs。 2.3 接口軟件設計 由狀態(tài)機輸出波形圖可以看出,有一種很簡(jiǎn)單自然的接口設計方法,就是將狀態(tài)輸出引腳接到單片機的外部中斷引腳上,使其在每個(gè)波形的上下邊沿都產(chǎn)生中斷,再在中斷處理程序中,檢測另一對應波形的電平高低,就可以判斷移動(dòng)方向。比如在XA的上升沿時(shí),若XB是低電平就是左移,若XB是高電平就是右移。這種方法需要單片機提供足夠多的外部中斷。若同時(shí)檢測X向與Y向運動(dòng),且單片機1個(gè)引腳不能同時(shí)提供上升沿和下降沿中斷的情況下,就需要占用8個(gè)中斷、8條引腳;而目前許多單片機僅提供2個(gè)外部中斷引腳,這種要求顯然較為苛刻。 另一種方式就是降低精度要求,僅在XA與YA的上升沿進(jìn)行檢測,此時(shí)僅需要2個(gè)外部中斷引腳。但這種方式在一種極端條件下會(huì )出錯,讀者可以自行分析。若只檢測X一個(gè)方向,則可以同時(shí)檢測上下沿中斷,這樣不會(huì )出錯。這種方式犧牲了一點(diǎn)對運動(dòng)換向和震顫的敏感度;但編程簡(jiǎn)單,不失為一種好方法。 本文采用的是查詢(xún)方式,這種方式不占用任何中斷,且能夠不損精度地同時(shí)檢測X向與Y向運動(dòng)。前面已經(jīng)提過(guò),每個(gè)狀態(tài)的最小保持時(shí)間為133 μs,所以,只要將查詢(xún)的周期控制在60μs之下就可以抓住每個(gè)狀態(tài)的變化。對于A(yíng)T90S8515,若按晶振為8 MHz計算,則只需將查詢(xún)周期匯編指令數控制在450條以下就可以了。實(shí)際上,以下給出的C語(yǔ)言程序經(jīng)過(guò)編譯后只有不大于60條匯編指令,完全能夠滿(mǎn)足系統要求。 該方法的基本思想是將狀態(tài)機的前一狀態(tài)與現在的狀態(tài)組合在同一字節內,如表1所列,尋找其中的規律,簡(jiǎn)化程序設計。表1中以PRE開(kāi)頭的表示前一狀態(tài)的對應值。 以X向移動(dòng)為例(僅看前半字節),正向移動(dòng)時(shí)對應的值為0b1000、0b1110、0b0111、0b0001,負向移動(dòng)時(shí)對應的值為0b0010、0b1011、0b1101、0b0100。假設狀態(tài)不變的情況已經(jīng)排除,且查詢(xún)周期足夠短,不會(huì )出現相對周期的組合值。所以只要能將以上兩組值區分開(kāi)來(lái)就可以了,這也正是程序中兩條條件判斷語(yǔ)句的目的。讀者可以對照程序自行驗證。接口程序如下: while(1){ state=PINA&0xcc; state_change=state^pre_state; combo_state=sate | (pre_state>>2); if(state_change & 0x0c) { if((combo_state & 0x06) == 0x06) {asm("INC R20");goto next;} if((combo_state | 0x09) == 0x09) {asm("INC R20");goto next;} asm("DEC R20"); } next: if(state_change & 0xc0) { if((temp & 0x60) == 0x60) {asm("INC R21");goto end;} if((temp | 0x90) == 0x90) {asm("INC R21");goto end;} asm("DEC R21"); } end:pre_state=state;} 程序已經(jīng)事先定義了寄存器R20與R21分別為X、Y向的計數器,用來(lái)表示X、Y向移動(dòng)的距離。以上程序段利用內嵌匯編語(yǔ)句優(yōu)化了程序結構。實(shí)際上,還可以對編譯器生成的匯編代碼進(jìn)行優(yōu)化,這里就不再詳述了。 結 語(yǔ) 以上軟硬件接口設計雖然是以功能強大的AVR單片機作為例子,但通過(guò)仔細分析不難發(fā)現,在簡(jiǎn)單的應用場(chǎng)合,用普通的51單片機,甚至如AT89C2051在12 MHz晶振頻率下也可以實(shí)現其功能。所以整個(gè)系統會(huì )是相當廉價(jià)的。 安捷倫公司最近在繼HDNS2000之后,又推出了升級芯片HDNS2051和適于無(wú)線(xiàn)應用的芯片HDNS2030,除了更強的處理能力外,主要改進(jìn)還在于采用了單電源供電,提供了省電模式,去掉了不實(shí)用的PS/2接口,引入了同步串行口,允許用戶(hù)對分辨率進(jìn)行設置等。這些改進(jìn)極大地方便了用戶(hù)的使用,一方面擴大了其光學(xué)感測芯片市場(chǎng)占有率,另一方面無(wú)疑也為機電產(chǎn)品設計者提供了一種更強大、更方便、更廉價(jià)的運動(dòng)檢測方案。 |