歡迎您光臨本站 登入註冊首頁

HDNS2000與AVR單片機的介面設計

admin @ 2014-03-19 , reply:0

概述

HDNS2000與AVR單片機的介面設計摘要:安捷倫(Agilent)公司的HDNS2000晶元是一種高性能的運動檢測器件,在目前的光學滑鼠中應用廣泛,其易用性和廉價性使其非常適合應用於中低精度的運動……
HDNS2000與AVR單片機的介面設計

摘要:安捷倫(Agilent)公司的HDNS2000晶元是一種高性能的運動檢測器件,在目前的光學滑鼠中應用廣泛,其易用性和廉價性使其非常適合應用於中低精度的運動和位置檢測中。本文介紹HDNS2000的功能、特點,從硬體與軟體兩個方面討論HDNS2000與AVR單片機的介面設計。


在機電產品設計中,有時需要檢測物體間的相對運動,包括運動方向和運動距離。若採用機械式的結構,比如機械滑鼠中的滾輪和軌跡球,則會由於頻繁的機械運動而發生故障,導致精度下降甚至失效,維修起來也不方便。另外它需要兩個物體表面相接觸,靠相互間的摩擦進行工作,這在某些場合是不能允許的。解決方案之一就是採用光電器件,運用光學原理來測定運動。安捷倫公司的HDNS2000就是為此而設計的,雖然它的市場是針對光學滑鼠,但也可以作為一種高性能而又廉價的器件運用於工業控制領域中。


1 HDNS2000晶元介紹


1.1 主要功能與特性


HDNS2000是安捷倫推出的高性能的光學感測晶元,它的內部包含三個基本模塊:圖像拾取系統、DSP處理器、PS/2或四狀態輸出轉換器,如圖1所示。在HDNS2000晶元的底部有一個感光眼,如同一個小型的攝像頭,不斷地對物體表面進行拍照,接著將前後兩次的圖像送入DSP中進行處理,以判斷物體移動的方向和大小,最後將數據轉化為PS/2格式或者以兩通道四狀態格式輸出。圖2中的(a)與(b)分別為晶元前後兩次拾取的圖像。比較圖2中的(a)和(b)可以看出,物體向左下方移動了一點。




HDNS2000的圖像拾取系統每秒鐘可以拾取1500張圖像,可以精確地測量最高30.48 cm/s(12 英寸/s)的運動,解析度為400點每英寸。


1.2 引腳介紹


HDNS2000的主要引腳框圖如圖3所示。



PS2_C:PS/2介面的時鐘端。


MODE/XA:復用引腳,接高電平時表示選擇PS/2模式;否則,為XA輸出。


RB/XB:復用引腳,PS/2模式時為滑鼠右鍵輸入;否則,為XA輸出。


MB/YB:復用引腳,PS/2模式時為滑鼠中鍵輸入;否則,為YB輸出。


LB/YA:復用引腳,PS/2模式為滑鼠左鍵輸入;否則,為YA輸出。


XY_LED:激光LED控制輸出,在物體長時間不移動時,HDNS2000可以控制LED關閉,以節約能量。


VDD3:3.3 V直流電源輸入。


REFB:內部參考引腳,通過電容與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向兩通道四狀態輸出模式。此時XA、XB指示X向移動狀態,而YA、YB指示Y向移動狀態。圖 4為HDNS2000與AVR單片機AT90S8515的介面原理圖。介面主要佔用了4個引腳,其它兩個是可選的,所以,即使是AVR中最低檔的ATtiny系列也可以方便地與HDNS2000連接。




圖4 HDNS2000與AT90S8015介面原理圖



    另外在對節能要求不高的場合,可以將激光LED的一端直接與地相連接,而通過控制開關三極體2N3906來主動控制HDNS2000的工作狀態。本文作者在設計時正是採用的這種方式。在進行系統設計時,最好採用安捷倫公司提供的套件,其中包括HDNS2000晶元、HDNS2100透鏡、HDNS2200 激光LED卡件及HLMP-ED80激光LED,激光波長為639 nm。


2.2 四位狀態機的工作過程


在HDNS2000內部有兩個狀態機分別指示X、Y兩個方向,每個狀態機又有四個穩定的狀態。圖5是狀態機的示意圖。由圖5可見,一開始系統處於狀態0,每當檢測到物體向正向或反向移動1個單位時就轉移到下一個狀態,所以只要連續監測狀態機狀態的變化就可以判斷物體移動的方向和距離。圖6(a)和(b)分別為負向移動和正向移動時狀態機輸出的波形。值得注意的是,每個狀態的最少停留時間為133μs。




2.3 介面軟體設計


由狀態機輸出波形圖可以看出,有一種很簡單自然的介面設計方法,就是將狀態輸出引腳接到單片機的外部中斷引腳上,使其在每個波形的上下邊沿都產生中斷,再在中斷處理程序中,檢測另一對應波形的電平高低,就可以判斷移動方向。比如在XA的上升沿時,若XB是低電平就是左移,若XB是高電平就是右移。這種方法需要單片機提供足夠多的外部中斷。若同時檢測X向與Y向運動,且單片機1個引腳不能同時提供上升沿和下降沿中斷的情況下,就需要佔用8個中斷、8條引腳;而目前許多單片機僅提供2個外部中斷引腳,這種要求顯然較為苛刻。


另一種方式就是降低精度要求,僅在XA與YA的上升沿進行檢測,此時僅需要2個外部中斷引腳。但這種方式在一種極端條件下會出錯,讀者可以自行分析。若只檢測X一個方向,則可以同時檢測上下沿中斷,這樣不會出錯。這種方式犧牲了一點對運動換向和震顫的敏感度;但編程簡單,不失為一種好方法。


本文採用的是查詢方式,這種方式不佔用任何中斷,且能夠不損精度地同時檢測X向與Y向運動。前面已經提過,每個狀態的最小保持時間為133 μs,所以,只要將查詢的周期控制在60μs之下就可以抓住每個狀態的變化。對於AT90S8515,若按晶振為8 MHz計算,則只需將查詢周期彙編指令數控制在450條以下就可以了。實際上,以下給出的C語言程序經過編譯后只有不大於60條彙編指令,完全能夠滿足系統要求。


該方法的基本思想是將狀態機的前一狀態與現在的狀態組合在同一位元組內,如表1所列,尋找其中的規律,簡化程序設計。表1中以PRE開頭的表示前一狀態的對應值。



表1 組合前後兩狀態在同一位元組



































位bit



3



2



1



0





XA



XB



PRE_XA



PRE_XB



位bit



7



6



5



4





YA



YB



PRE_YA



PRE_YB




 


以X向移動為例(僅看前半位元組),正向移動時對應的值為0b1000、0b1110、0b0111、0b0001,負向移動時對應的值為0b0010、0b1011、0b1101、0b0100。假設狀態不變的情況已經排除,且查詢周期足夠短,不會出現相對周期的組合值。所以只要能將以上兩組值區分開來就可以了,這也正是程序中兩條條件判斷語句的目的。讀者可以對照程序自行驗證。介面程序如下:


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;}


程序已經事先定義了寄存器R20與R21分別為X、Y向的計數器,用來表示X、Y向移動的距離。以上程序段利用內嵌彙編語句優化了程序結構。實際上,還可以對編譯器生成的彙編代碼進行優化,這裡就不再詳述了。



結 語


以上軟硬體介面設計雖然是以功能強大的AVR單片機作為例子,但通過仔細分析不難發現,在簡單的應用場合,用普通的51單片機,甚至如AT89C2051在12 MHz晶振頻率下也可以實現其功能。所以整個系統會是相當廉價的。


安捷倫公司最近在繼HDNS2000之後,又推出了升級晶元HDNS2051和適於無線應用的晶元HDNS2030,除了更強的處理能力外,主要改進還在於採用了單電源供電,提供了省電模式,去掉了不實用的PS/2介面,引入了同步串列口,允許用戶對解析度進行設置等。這些改進極大地方便了用戶的使用,一方面擴大了其光學感測晶元市場佔有率,另一方面無疑也為機電產品設計者提供了一種更強大、更方便、更廉價的運動檢測方案。



[admin via 研發互助社區 ] HDNS2000與AVR單片機的介面設計已經有2611次圍觀

http://cocdig.com/docs/show-post-38083.html