鄧兆翠 張鳳登
(上海理工大學光電信息與計算機工程學院,上海 200093)
在高精度位置控制場合,光電增量式編碼器(以下簡稱編碼器)是一種常用的位移檢測傳感器。當檢測對象的直線位置或者角位置發(fā)生變化時,帶動編碼器轉動,編碼器便會發(fā)出A、B兩路相位相差±90°的、規(guī)則的數(shù)字脈沖信號。位移量與脈沖個數(shù)成正比,而A、B兩路脈沖的相位關系則表示編碼器的轉動方向,即位移量的變化方向。編碼器正轉時,A脈沖相位相對B脈沖超前90°;而編碼器反轉時,A脈沖相位相對B脈沖滯后90°。因此,通過對脈沖個數(shù)的可逆計數(shù),即可實現(xiàn)對位移量的可逆計數(shù),從而計算出被檢測對象的精確位移。
由于實際應用場合存在物理或電路干擾,會對A、B兩路脈沖輸出產(chǎn)生抖動和毛刺,影響兩路脈沖相位關系的判斷和脈沖個數(shù)的計數(shù),從而影響計數(shù)結果。因此,必須在實現(xiàn)可逆計數(shù)的同時,在不降低計數(shù)速度的前提下,最大限度地降低毛刺和抖動干擾,提高計數(shù)精度。
編碼器輸出的脈沖波形如圖1所示。由圖1可知,當A相處于下降沿、B相為高電平時,表示編碼器正轉;當A相處于下降沿、B相為低電平時,表示編碼器反轉;無轉動時,A、B輸出皆為低電平。
圖1 編碼器輸出脈沖波形圖Fig.1 Waveforms of the output pulse of encoder
單中斷計數(shù)法的原理如下[1-2]。將 A 相接到INT0,將中斷0觸發(fā)方式設置為下降沿觸發(fā);B相接到普通的I/O口。在中斷0的中斷服務程序中,讀取B相電平,如果B相電平為高電平,則表示正轉,反之為反轉。同時在中斷服務程序中計一次脈沖數(shù),根據(jù)判斷出的轉動方向加1或者減1。
對應的單中斷計數(shù)法C51程序如下。
通過圖1所示脈沖波形可以觀察到,理想狀態(tài)下,位移量與A相脈沖個數(shù)和B相脈沖個數(shù)均成正比,這是因為A相脈沖與B相脈沖一一對應。但是利用單中斷計數(shù)方法,即只以A相一路脈沖個數(shù)作為計數(shù)依據(jù)時,A相上的毛刺會嚴重影響計數(shù)結果。如在沒有位移變化的情況下,A相出現(xiàn)毛刺;而B相正常、為低電平時,那么A相上的每一毛刺都會致使計數(shù)減1,導致檢測結果比實際位移量偏小。因此,采用單中斷計數(shù)方法雖然軟硬件實現(xiàn)簡單,但計數(shù)精度不可靠,只能用于計數(shù)精度較低的場合[3-4]。
由圖1可知,當B相為高電平時,A相正跳變?yōu)榉崔D,負跳變?yōu)檎D,A、B脈沖成對出現(xiàn)。鑒于此,雙中斷計數(shù)方法僅當B相為高電平時才對A相脈沖信號進行計數(shù),并通過A相電壓的跳變方向判斷編碼器轉動方向。相對于單中斷計數(shù)法,采用雙中斷計數(shù)法,當B相為低電平時,A相出現(xiàn)的毛刺并不會引起計數(shù)誤差;而僅在A相、B相同時出現(xiàn)毛刺的情況下才可能導致計數(shù)誤差,精確度明顯提高[5-6]。
雙中斷計數(shù)法硬件連接圖如圖2所示。
圖2 雙中斷計數(shù)法硬件連接圖Fig.2 Hardware connections for double interrupt counting method
圖2中,INT0和INT1都分別設為以下降沿觸發(fā)。當DIR由高到低跳變時,觸發(fā)INT0,表示正轉,相應的中斷服務程序進行加1計數(shù);當DIR由低到高跳變時,觸發(fā)INT1,表示反轉,相應的中斷服務程序進行減1計數(shù)[7-8]。
在圖2所示的硬件連接圖的基礎上,對應的雙中斷計數(shù)法的C51程序如下。
當然,雙中斷計數(shù)法也有它的不足之處。它占用了兩個外部中斷,在一個完整的控制系統(tǒng)中,這是十分占用資源的;同時,一次計數(shù)引發(fā)一個外部中斷和計數(shù)器中斷,在實時控制系統(tǒng)中,這將影響其他控制部分的實時性。因此,雙中斷計數(shù)法不適用于高速計數(shù)兼需實時控制的場合。
為了解決雙中斷計數(shù)法占用過多中斷資源、影響控制程序的實時性等問題,掃描計數(shù)法將編碼器的A、B相分別連接到80C51的普通I/O口,采用固定時間間隔同時掃描A、B兩相電平,結合A、B兩相的相位次序,同時完成計數(shù)和辨向。
根據(jù)圖1所示輸出脈沖波形,每隔1/4周期采樣一次A、B脈沖序列。由采樣得到的脈沖序列可以觀察到:正轉時 A 路 ={1,0,0,1,1}、B 路 ={1,1,0,0,1};反轉時 A 路 ={1,1,0,0,1}、B 路 ={1,0,0,1,1}。
為了分析A、B脈沖的相位關系,固定地將A相作為高位、B相作為低位,并將同時刻采樣值相加,得出反轉 的 數(shù) 組 為 {3,2,0,1,3}、正 轉 的 數(shù) 組 為{3,1,0,2,3}。以下是基于8051、晶振頻率為12 MHz、掃描間隔為1 ms的掃描計數(shù)法的C51程序。
若掃描間隔為1 ms,則最快4 ms掃描一個完整的計數(shù)數(shù)組,這樣便完成一次可逆計數(shù)。以ALPS(阿爾卑斯)的EC11E型號編碼器為例,編碼器旋轉360°發(fā)出18個脈沖,掃描計數(shù)法采用1 ms的掃描間隔,可以完成角速度5°/ms以下的位移控制場合的計數(shù)。如果該控制系統(tǒng)中與編碼器連接的轉輪的半徑為0.5 m,則由V=ωr,可得V=(5 000°/180°)×π ×0.5≈43.6 m/s=157 km/h,即掃描計數(shù)法可完成線速度在157 km/h以下速度場合的計數(shù)[9-10]。
若要用于更高計數(shù)速度的場合,可以適當減小掃描周期。掃描計數(shù)法硬件設計簡單,軟件掃描時間固定,不影響其他控制程序的實時性。此外,該方法同時掃描兩列脈沖序列作為計數(shù)和辨向依據(jù),減小了單一相位上毛刺的干擾,提高了計數(shù)精確度。
本文從軟硬件結合的角度,分別分析與介紹了利用一個外部中斷和兩個外部中斷以及掃描脈沖序列對編碼器進行可逆計數(shù)的方法。對比發(fā)現(xiàn),使用一個外部中斷時,軟硬件容易實現(xiàn),但是計數(shù)誤差偏大,不適合精確位置控制系統(tǒng);使用兩個外部中斷的方法時,會影響其他控制功能的實時性,因此其比較適合高速、純位移檢測的場合;而掃描方法嚴格依據(jù)脈沖相位關系進行同步辨向和計數(shù),能很好地消除毛刺干擾,且該方法可根據(jù)適用的速度適當調整掃描周期,能適應一般高速計數(shù)的場合。
[1]李朝青.單片機原理及接口技術[M].北京:北京航天航空大學出版社,1999.
[2]郭光明,王秀華.光電增量編碼器與微處理器的接口電路[J].電子與自動化,1997(5):42-43.
[3]潘明東.光電編碼器輸出脈沖的幾種計數(shù)方法[J].電子工程師,2004,30(8):69 -71.
[4]張?zhí)旆?51單片機C語言開發(fā)詳解[M].北京:電子工業(yè)出版社,2008.
[5]鐘富昭.8051單片機典型模塊設計與應用[M].北京:人民郵電出版社,2007.
[6]唐中燕,楊曉紅,楊靜.基于單片機的智能型光電編碼器計數(shù)器[J].儀器儀表用戶,2001,8(5):11 -13.
[7]高偉,李玄曾.光電編碼器的信號處理電路研究[J].陜西師范大學繼續(xù)教育學報,2007,24(2):116 -118.
[8]任駿原.用Multisim軟件分析觸發(fā)器的狀態(tài)變化過程[J].實驗科學與技術,2001(1):53-56.
[9]俞竹青,潘全勝.一種光電編碼器用可編程計數(shù)電路的設計[J].傳感器技術,2002(10):22 -24.
[10]劉江省,宋健.一種基于單片機的增量式光柵參考信號處理方法[J].工具技術,2009(7):109-111.