国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

旋轉(zhuǎn)編碼開關(guān)在單片機(jī)中的應(yīng)用

2013-12-01 05:06王平安
關(guān)鍵詞:電位器中斷端口

王平安

(中石化西南石油工程有限公司油田工程服務(wù)分公司,四川 綿陽621000)

旋轉(zhuǎn)編碼開關(guān)又稱旋轉(zhuǎn)編碼器、數(shù)碼電位器等,在電子產(chǎn)品中經(jīng)常使用。該器件具有360°旋轉(zhuǎn)、調(diào)節(jié)范圍廣、調(diào)節(jié)速度可變、可控制、噪音小、壽命長的優(yōu)點[1],功能在一定程度上類似于電位器,但其結(jié)構(gòu)、工作原理和使用方法與普通電位器完全不同[2],在數(shù)字電路中的應(yīng)用有很多,如改變音量的大小,電機(jī)的轉(zhuǎn)速等。

在單片機(jī)電路中,通過旋轉(zhuǎn)編碼開關(guān)來實現(xiàn)相應(yīng)參數(shù)的改變使用起來非常的方便和簡單,可有效的改變或調(diào)節(jié)單片機(jī)的內(nèi)部參數(shù)及對外輸出參數(shù)等。旋轉(zhuǎn)編碼開關(guān)由于在使用過程中,其方向信號的識別和脈沖計數(shù)的增加和減少是整個設(shè)計應(yīng)用中的難點,筆者采用中斷方式、硬件自動處理、IO端口等3種方式介紹旋轉(zhuǎn)編碼開關(guān)在單片機(jī)中的具體應(yīng)用實現(xiàn)。

1 旋轉(zhuǎn)編碼開關(guān)

旋轉(zhuǎn)編碼開關(guān)是一種可用于取代模擬電位器的器件,常用的旋轉(zhuǎn)編碼開關(guān)旋轉(zhuǎn)一周輸出20個脈沖,每個脈沖代表編碼開關(guān)旋轉(zhuǎn)了一定的角度[3]。旋轉(zhuǎn)編碼開關(guān)有3個和5個引腳的,5腳的比3腳的僅多2個按鍵引腳,另外3個引腳的功能與只有3個引腳的旋轉(zhuǎn)編碼開關(guān)功能相同,分別實現(xiàn)旋轉(zhuǎn)時輸出脈沖,在對編碼器進(jìn)行左旋和右旋時,其輸出波形如圖1(a)和圖1(b)所示。

旋轉(zhuǎn)編碼開關(guān)旋轉(zhuǎn)一周分別輸出固定數(shù)目的脈沖數(shù),通過對其波形的識別,可識別出編碼開關(guān)是左旋還是右旋,從而實現(xiàn)其輸入數(shù)值的增加及減少,以實現(xiàn)其在單片機(jī)中的調(diào)節(jié)功能。

圖1 旋轉(zhuǎn)編碼器旋轉(zhuǎn)方向及旋轉(zhuǎn)脈沖數(shù)的識別

2 編碼開關(guān)信號的處理

左轉(zhuǎn)和右轉(zhuǎn)的信號判別是難點,從圖1分析編碼開關(guān)左旋和右旋的波形可知,當(dāng)AC相超前BC相,轉(zhuǎn)動方向為右轉(zhuǎn);當(dāng)BC相超前AC相,則為左轉(zhuǎn)。在左旋時,BC波形的相位滯后于AC相位一定角度,當(dāng)AC波形上升沿時,BC波形為低電平;在右旋時,BC波形超前于AC波形相位一定角度,當(dāng)AC波形為上升沿時,BC波形的電平為高電平。

波形如圖1所示,AC信號超前BC信號一個時間Δt,該時間隨旋轉(zhuǎn)的快慢而不同,通過檢測AC信號上升時BC信號的電平值的高低,便能識別出其旋轉(zhuǎn)方向。在AC信號上升時,BC信號為ON,此時旋轉(zhuǎn)編碼開關(guān)右旋轉(zhuǎn);AC信號上升時BC的信號為OFF,此時旋轉(zhuǎn)編碼開關(guān)左旋轉(zhuǎn);因此,只需要在AC信號上升沿的瞬間,判斷BC信號的高低狀態(tài),便可實現(xiàn)旋轉(zhuǎn)編碼器的方向識別,通過對AC信號的脈沖數(shù)根據(jù)旋轉(zhuǎn)方向來實現(xiàn)加減計數(shù),便能實現(xiàn)旋轉(zhuǎn)編碼開關(guān)信號值的輸入。

在使用編程時,只需要判斷當(dāng)輸出AC為跳變?yōu)楦唠娖綍r,輸出BC當(dāng)時的電平狀態(tài)就可以判斷出是左旋還是右旋,對于查詢方式,無法直接獲取AC或BC的電平跳變狀態(tài),則通過定時查詢AC和BC的狀態(tài),便能實時對旋轉(zhuǎn)編碼開關(guān)的方向識別。由于對其方向的識別和脈沖信號的處理是應(yīng)用中的主要技術(shù)難點,下面介紹旋轉(zhuǎn)編碼開關(guān)在宏晶STC51單片機(jī)上的幾種較為典型的硬件接口及軟件識別及處理方法。

3 單片機(jī)定時器T2處理旋轉(zhuǎn)編碼開關(guān)輸入

STC51單片機(jī)的計數(shù)器T2本身只有自動遞增或遞減的功能,利用T2的該功能,便能自動實現(xiàn)對旋轉(zhuǎn)編碼開關(guān)的方向和脈沖的計數(shù),通過簡單的程序便能實現(xiàn)旋轉(zhuǎn)編碼開關(guān)的正轉(zhuǎn)或反轉(zhuǎn)的計數(shù)和方向識別。

3.1 T2處理旋轉(zhuǎn)編碼開關(guān)的原理

編碼開關(guān)信號的捕獲,通過采用計數(shù)器功能來實現(xiàn)。筆者采用STC89C54 RD單片機(jī)計數(shù)器T2來實現(xiàn)。STC單片機(jī)的計數(shù)器T2有3種工作模式:捕獲、自動重新裝載(遞增或遞減計數(shù))和波特率發(fā)生器,編碼開關(guān)的信號處理采用的是自動裝載模式,通過遞增計數(shù)和遞減計數(shù)實現(xiàn)旋轉(zhuǎn)編碼開關(guān)正反向計數(shù)。定時器的自動重裝模式如圖2所示。

圖2 定時器自動重裝模式(DCEN=1)

圖3 采用T2讀取旋轉(zhuǎn)編碼開關(guān)的硬件電路

該種方式中未采用計數(shù)器T2中斷方式,主要是由于要計數(shù)器T2產(chǎn)生中斷,需要每次中斷后改變RCAP2 H、RCAP2L中的值和TH2、TL2中的值,使得產(chǎn)生中斷的程序變得較復(fù)雜。通過T2的自動遞增和遞減計數(shù)來實現(xiàn),T2將不會產(chǎn)生中斷,在軟件中通過讀取TH2和TL2的值,便能自動讀取出旋轉(zhuǎn)編碼開關(guān)的調(diào)節(jié)值,使程序變得更為簡單。

3.2 T2旋轉(zhuǎn)編碼開關(guān)輸入的硬件電路

利用宏晶51單片機(jī)的T2的自動重裝功能,很好的解決旋轉(zhuǎn)編碼器的轉(zhuǎn)向及計數(shù)的識別,單片機(jī)的P1.0腳是T2的計數(shù)輸入端口,P1.1是T2的方向輸入端口,如圖3所示,W1為旋轉(zhuǎn)編碼器的3個引腳,中間是公共端C腳,上端為A腳,下端為B腳,旋轉(zhuǎn)時AC、BC信號如圖1(a)和圖1(b)所示,將AC信號輸入到單片機(jī)的P1.0腳,BC信號輸入到單片機(jī)的P1.1腳。該電路中,R1和R2是輸入的上拉電阻,阻值選擇為10kΩ便可以,C1和C2為濾波電容,選擇為0.1μF,可以消除A,B信號的抖動,經(jīng)過實踐證明,該電路可保證編碼開關(guān)的正常工作。

3.3 T2處理旋轉(zhuǎn)編碼開關(guān)的程序

由于程序中未能使用T2中斷,程序只需要初始化T2的工作方式和對TH2、TL2賦值便完成初始化,在主程序中,并沒使用中斷函數(shù),而是直接通過對T H2、TL2進(jìn)行訪問,僅對TL2進(jìn)行了數(shù)據(jù)處理。在該種方式中,TL2相當(dāng)于一個寄存器使用,通過訪問TL2便能實現(xiàn)對旋轉(zhuǎn)編碼開關(guān)的數(shù)據(jù)輸入。主要實現(xiàn)程序如下:

4 中斷方式處理旋轉(zhuǎn)編碼開關(guān)

由于單片機(jī)外部中斷可以實現(xiàn)脈沖邊沿信號和電平觸發(fā)信號2種中斷功能,可以很方便捕獲旋轉(zhuǎn)編碼開關(guān)輸入信號電平的變化,能夠及時處理脈沖信號跳變時的方向信號,從而識別旋轉(zhuǎn)編碼開關(guān)的旋轉(zhuǎn)方向。該電路中采用了單片機(jī)的INT0及一個IO腳來實現(xiàn)對旋轉(zhuǎn)編碼開關(guān)的另一信號的識別,如果中斷輸入信號AC變化時,根據(jù)BC電平信號的高低便能判別旋轉(zhuǎn)編碼開關(guān)的左旋和右旋,并對中斷信號AC的值作增加或減少處理,實現(xiàn)編碼開關(guān)數(shù)值的處理。

4.1 INT0旋轉(zhuǎn)編碼開關(guān)輸入的硬件電路

INT0是單片機(jī)的中斷電路,利用該端口將在編碼開關(guān)轉(zhuǎn)動時,會產(chǎn)生中斷,由中斷程序來實現(xiàn)旋轉(zhuǎn)編碼開關(guān)輸入量的識別,其電路如圖4所示,P3.2為MCS51單片機(jī)的INT0中斷端口,P1.2為普通IO端口。

圖4 采用INT0中斷方式讀取編碼開關(guān)的硬件電路圖

4.2 INT0處理旋轉(zhuǎn)編碼開關(guān)的程序

INT0作編碼開關(guān)輸入時,采用中斷方式,在編寫程序時,需要對INT0進(jìn)行中斷和初始化,在INT0產(chǎn)生中斷后,其轉(zhuǎn)向由中斷程序進(jìn)行處理,該方式中,如果編碼開關(guān)沒有轉(zhuǎn)動,中斷程序?qū)⒉粫?zhí)行,可提高單片機(jī)處理其他任務(wù)的能力,通過占用1個中斷IO端口和普通IO端口便可實現(xiàn)其信息的輸入。通過中斷方式讀取的初始化實現(xiàn)程序如下:

5 IO端口處理旋轉(zhuǎn)編碼開關(guān)的程序

上述編碼開關(guān)輸入方法中,要占用計數(shù)器T2、中斷INT0等IO端口,由于單片機(jī)的計數(shù)器、中斷端口的數(shù)量有限,被輸入編碼開關(guān)占用后,有可能造成單片機(jī)該類輸入端口數(shù)量不夠,通過普通IO端口實現(xiàn)旋轉(zhuǎn)編碼開關(guān)數(shù)據(jù)輸入能夠有效解決由于單片機(jī)中斷資源不足的情況。

5.1 IO端口處理旋轉(zhuǎn)編碼開關(guān)硬件電路

該方式可采用普通的IO端口作為編碼開關(guān)的A、B輸入,電路硬件圖參考圖2所示,假設(shè)P1.2仍為編碼開關(guān)的BC端輸入,P3.2為AC端輸入,程序中不使用中斷方式,把P3.2作為普通IO端口方式,其他硬件原理同上面介紹的功能相同。

圖5 IO口處理編碼開關(guān)的流程圖

5.2 IO端口處理旋轉(zhuǎn)編碼開關(guān)的程序

在該種方式下,由于P3.2作為普通的IO端口,普通IO端口只能采用查詢方式訪問,軟件中只能采用查詢來進(jìn)行訪問,如果直接采用查詢程序,必將耗費(fèi)大量的單片機(jī)運(yùn)算周期,降低其運(yùn)行速度。通過定時查詢方式,便可有效降低程序查詢開銷,提高系統(tǒng)效率。定時查詢使用定時器產(chǎn)生定時中斷,定時查詢編碼開關(guān)AC和BC的輸入狀態(tài),從而完成對編碼開關(guān)的輸入脈沖及旋轉(zhuǎn)方向的處理。數(shù)碼電位器的采樣頻率不能太低,否則會限制旋轉(zhuǎn)編碼開關(guān)的旋轉(zhuǎn)速度[4],取的時間掃描周期為1 ms,圖5是時鐘主頻為12 MHz的程序流程圖。

6 結(jié) 語

對于旋轉(zhuǎn)編碼開關(guān)在單片機(jī)的應(yīng)用中介紹了3種常用方法,根據(jù)單片機(jī)的資源使用情況,可根據(jù)設(shè)計中的實際情況采用不同的方法來實現(xiàn)旋轉(zhuǎn)編碼開關(guān)的輸入。通過采用旋轉(zhuǎn)編碼開關(guān)實現(xiàn)控制參數(shù)的變化比采用傳統(tǒng)按鈕方式更加方便直觀。由于其硬件簡單,編程也容易實現(xiàn),且它的軟、硬件可移植性強(qiáng)[5],可適用于不同的單片機(jī)電路中。

[1]楊紹洲,王勝軍,陳宏文 .數(shù)碼電位器在醫(yī)學(xué)儀器的應(yīng)用和編程[J].中國醫(yī)療器械雜志,2002,26(6):447-448.

[2]陳國杰 .數(shù)碼電位器的單片機(jī)接口方法及其編程[J].計算機(jī)應(yīng)用,2000(4):38-40.

[3]王子博 .編碼器四倍頻電路的單片機(jī)高速算法設(shè)計[J].控制與檢測,2007(11):73-74,78.

[4]陳國杰 .數(shù)碼電位器的單片機(jī)接口方法及其編程[J].電子技術(shù),2000(4):38-40.

[5]方煒,任一峰 .絕對值型編碼器數(shù)據(jù)采集設(shè)計[J].中北大學(xué)學(xué)報(自然科學(xué)版),2007,28(z1):60-62.

猜你喜歡
電位器中斷端口
一種端口故障的解決方案
Hepatitis C virus antigens enzyme immunoassay for one-step diagnosis of hepatitis C virus coinfection in human immunodeficiency virus infected individuals
基于FPGA的中斷控制器設(shè)計*
端口阻塞與優(yōu)先級
跟蹤導(dǎo)練(二)(5)
千里移防,衛(wèi)勤保障不中斷
Mixly開源項目設(shè)計10:用自制多量程歐姆表測量電位器的電阻
8端口IO-Link參考設(shè)計套件加快開發(fā)速度
衛(wèi)星三端口DC-DC變換器技術(shù)綜述
Varian Clinic 23EX 加速器電位器故障維修一例
通榆县| 青岛市| 隆子县| 赞皇县| 达尔| 和静县| 全州县| 肥城市| 晋城| 涪陵区| 偃师市| 云龙县| 漳平市| 房山区| 南昌县| 永福县| 惠水县| 兴和县| 兴山县| 从江县| 阜新| 孟连| 云南省| 康马县| 镇雄县| 彭州市| 九寨沟县| 宜都市| 扎兰屯市| 浪卡子县| 湖北省| 宝应县| 河间市| 富民县| 东乌珠穆沁旗| 平潭县| 栾城县| 潍坊市| 萨嘎县| 土默特左旗| 河池市|