王平安
(中石化西南石油工程有限公司油田工程服務分公司,四川 綿陽621000)
旋轉編碼開關又稱旋轉編碼器、數(shù)碼電位器等,在電子產(chǎn)品中經(jīng)常使用。該器件具有360°旋轉、調(diào)節(jié)范圍廣、調(diào)節(jié)速度可變、可控制、噪音小、壽命長的優(yōu)點[1],功能在一定程度上類似于電位器,但其結構、工作原理和使用方法與普通電位器完全不同[2],在數(shù)字電路中的應用有很多,如改變音量的大小,電機的轉速等。
在單片機電路中,通過旋轉編碼開關來實現(xiàn)相應參數(shù)的改變使用起來非常的方便和簡單,可有效的改變或調(diào)節(jié)單片機的內(nèi)部參數(shù)及對外輸出參數(shù)等。旋轉編碼開關由于在使用過程中,其方向信號的識別和脈沖計數(shù)的增加和減少是整個設計應用中的難點,筆者采用中斷方式、硬件自動處理、IO端口等3種方式介紹旋轉編碼開關在單片機中的具體應用實現(xiàn)。
旋轉編碼開關是一種可用于取代模擬電位器的器件,常用的旋轉編碼開關旋轉一周輸出20個脈沖,每個脈沖代表編碼開關旋轉了一定的角度[3]。旋轉編碼開關有3個和5個引腳的,5腳的比3腳的僅多2個按鍵引腳,另外3個引腳的功能與只有3個引腳的旋轉編碼開關功能相同,分別實現(xiàn)旋轉時輸出脈沖,在對編碼器進行左旋和右旋時,其輸出波形如圖1(a)和圖1(b)所示。
旋轉編碼開關旋轉一周分別輸出固定數(shù)目的脈沖數(shù),通過對其波形的識別,可識別出編碼開關是左旋還是右旋,從而實現(xiàn)其輸入數(shù)值的增加及減少,以實現(xiàn)其在單片機中的調(diào)節(jié)功能。
圖1 旋轉編碼器旋轉方向及旋轉脈沖數(shù)的識別
左轉和右轉的信號判別是難點,從圖1分析編碼開關左旋和右旋的波形可知,當AC相超前BC相,轉動方向為右轉;當BC相超前AC相,則為左轉。在左旋時,BC波形的相位滯后于AC相位一定角度,當AC波形上升沿時,BC波形為低電平;在右旋時,BC波形超前于AC波形相位一定角度,當AC波形為上升沿時,BC波形的電平為高電平。
波形如圖1所示,AC信號超前BC信號一個時間Δt,該時間隨旋轉的快慢而不同,通過檢測AC信號上升時BC信號的電平值的高低,便能識別出其旋轉方向。在AC信號上升時,BC信號為ON,此時旋轉編碼開關右旋轉;AC信號上升時BC的信號為OFF,此時旋轉編碼開關左旋轉;因此,只需要在AC信號上升沿的瞬間,判斷BC信號的高低狀態(tài),便可實現(xiàn)旋轉編碼器的方向識別,通過對AC信號的脈沖數(shù)根據(jù)旋轉方向來實現(xiàn)加減計數(shù),便能實現(xiàn)旋轉編碼開關信號值的輸入。
在使用編程時,只需要判斷當輸出AC為跳變?yōu)楦唠娖綍r,輸出BC當時的電平狀態(tài)就可以判斷出是左旋還是右旋,對于查詢方式,無法直接獲取AC或BC的電平跳變狀態(tài),則通過定時查詢AC和BC的狀態(tài),便能實時對旋轉編碼開關的方向識別。由于對其方向的識別和脈沖信號的處理是應用中的主要技術難點,下面介紹旋轉編碼開關在宏晶STC51單片機上的幾種較為典型的硬件接口及軟件識別及處理方法。
STC51單片機的計數(shù)器T2本身只有自動遞增或遞減的功能,利用T2的該功能,便能自動實現(xiàn)對旋轉編碼開關的方向和脈沖的計數(shù),通過簡單的程序便能實現(xiàn)旋轉編碼開關的正轉或反轉的計數(shù)和方向識別。
編碼開關信號的捕獲,通過采用計數(shù)器功能來實現(xiàn)。筆者采用STC89C54 RD單片機計數(shù)器T2來實現(xiàn)。STC單片機的計數(shù)器T2有3種工作模式:捕獲、自動重新裝載(遞增或遞減計數(shù))和波特率發(fā)生器,編碼開關的信號處理采用的是自動裝載模式,通過遞增計數(shù)和遞減計數(shù)實現(xiàn)旋轉編碼開關正反向計數(shù)。定時器的自動重裝模式如圖2所示。
圖2 定時器自動重裝模式(DCEN=1)
圖3 采用T2讀取旋轉編碼開關的硬件電路
該種方式中未采用計數(shù)器T2中斷方式,主要是由于要計數(shù)器T2產(chǎn)生中斷,需要每次中斷后改變RCAP2 H、RCAP2L中的值和TH2、TL2中的值,使得產(chǎn)生中斷的程序變得較復雜。通過T2的自動遞增和遞減計數(shù)來實現(xiàn),T2將不會產(chǎn)生中斷,在軟件中通過讀取TH2和TL2的值,便能自動讀取出旋轉編碼開關的調(diào)節(jié)值,使程序變得更為簡單。
利用宏晶51單片機的T2的自動重裝功能,很好的解決旋轉編碼器的轉向及計數(shù)的識別,單片機的P1.0腳是T2的計數(shù)輸入端口,P1.1是T2的方向輸入端口,如圖3所示,W1為旋轉編碼器的3個引腳,中間是公共端C腳,上端為A腳,下端為B腳,旋轉時AC、BC信號如圖1(a)和圖1(b)所示,將AC信號輸入到單片機的P1.0腳,BC信號輸入到單片機的P1.1腳。該電路中,R1和R2是輸入的上拉電阻,阻值選擇為10kΩ便可以,C1和C2為濾波電容,選擇為0.1μF,可以消除A,B信號的抖動,經(jīng)過實踐證明,該電路可保證編碼開關的正常工作。
由于程序中未能使用T2中斷,程序只需要初始化T2的工作方式和對TH2、TL2賦值便完成初始化,在主程序中,并沒使用中斷函數(shù),而是直接通過對T H2、TL2進行訪問,僅對TL2進行了數(shù)據(jù)處理。在該種方式中,TL2相當于一個寄存器使用,通過訪問TL2便能實現(xiàn)對旋轉編碼開關的數(shù)據(jù)輸入。主要實現(xiàn)程序如下:
由于單片機外部中斷可以實現(xiàn)脈沖邊沿信號和電平觸發(fā)信號2種中斷功能,可以很方便捕獲旋轉編碼開關輸入信號電平的變化,能夠及時處理脈沖信號跳變時的方向信號,從而識別旋轉編碼開關的旋轉方向。該電路中采用了單片機的INT0及一個IO腳來實現(xiàn)對旋轉編碼開關的另一信號的識別,如果中斷輸入信號AC變化時,根據(jù)BC電平信號的高低便能判別旋轉編碼開關的左旋和右旋,并對中斷信號AC的值作增加或減少處理,實現(xiàn)編碼開關數(shù)值的處理。
INT0是單片機的中斷電路,利用該端口將在編碼開關轉動時,會產(chǎn)生中斷,由中斷程序來實現(xiàn)旋轉編碼開關輸入量的識別,其電路如圖4所示,P3.2為MCS51單片機的INT0中斷端口,P1.2為普通IO端口。
圖4 采用INT0中斷方式讀取編碼開關的硬件電路圖
INT0作編碼開關輸入時,采用中斷方式,在編寫程序時,需要對INT0進行中斷和初始化,在INT0產(chǎn)生中斷后,其轉向由中斷程序進行處理,該方式中,如果編碼開關沒有轉動,中斷程序將不會執(zhí)行,可提高單片機處理其他任務的能力,通過占用1個中斷IO端口和普通IO端口便可實現(xiàn)其信息的輸入。通過中斷方式讀取的初始化實現(xiàn)程序如下:
上述編碼開關輸入方法中,要占用計數(shù)器T2、中斷INT0等IO端口,由于單片機的計數(shù)器、中斷端口的數(shù)量有限,被輸入編碼開關占用后,有可能造成單片機該類輸入端口數(shù)量不夠,通過普通IO端口實現(xiàn)旋轉編碼開關數(shù)據(jù)輸入能夠有效解決由于單片機中斷資源不足的情況。
該方式可采用普通的IO端口作為編碼開關的A、B輸入,電路硬件圖參考圖2所示,假設P1.2仍為編碼開關的BC端輸入,P3.2為AC端輸入,程序中不使用中斷方式,把P3.2作為普通IO端口方式,其他硬件原理同上面介紹的功能相同。
圖5 IO口處理編碼開關的流程圖
在該種方式下,由于P3.2作為普通的IO端口,普通IO端口只能采用查詢方式訪問,軟件中只能采用查詢來進行訪問,如果直接采用查詢程序,必將耗費大量的單片機運算周期,降低其運行速度。通過定時查詢方式,便可有效降低程序查詢開銷,提高系統(tǒng)效率。定時查詢使用定時器產(chǎn)生定時中斷,定時查詢編碼開關AC和BC的輸入狀態(tài),從而完成對編碼開關的輸入脈沖及旋轉方向的處理。數(shù)碼電位器的采樣頻率不能太低,否則會限制旋轉編碼開關的旋轉速度[4],取的時間掃描周期為1 ms,圖5是時鐘主頻為12 MHz的程序流程圖。
對于旋轉編碼開關在單片機的應用中介紹了3種常用方法,根據(jù)單片機的資源使用情況,可根據(jù)設計中的實際情況采用不同的方法來實現(xiàn)旋轉編碼開關的輸入。通過采用旋轉編碼開關實現(xiàn)控制參數(shù)的變化比采用傳統(tǒng)按鈕方式更加方便直觀。由于其硬件簡單,編程也容易實現(xiàn),且它的軟、硬件可移植性強[5],可適用于不同的單片機電路中。
[1]楊紹洲,王勝軍,陳宏文 .數(shù)碼電位器在醫(yī)學儀器的應用和編程[J].中國醫(yī)療器械雜志,2002,26(6):447-448.
[2]陳國杰 .數(shù)碼電位器的單片機接口方法及其編程[J].計算機應用,2000(4):38-40.
[3]王子博 .編碼器四倍頻電路的單片機高速算法設計[J].控制與檢測,2007(11):73-74,78.
[4]陳國杰 .數(shù)碼電位器的單片機接口方法及其編程[J].電子技術,2000(4):38-40.
[5]方煒,任一峰 .絕對值型編碼器數(shù)據(jù)采集設計[J].中北大學學報(自然科學版),2007,28(z1):60-62.