周首杰
摘 要:嵌入式控制是指將單片機嵌入產品中,對產品起到控制作用。機械式旋轉編碼開關是通過人工操作旋轉方向來控制某個量的增加或減小。雖然產生的信號只有兩個,但是干擾信號的存在使信號準確檢測變得相對困難。通常使用的檢測方法有兩種,一是通過中斷方式進行外部信號的采集,二是通過查詢方式進行信號的檢測。本文對兩種方法進行比較,進而采用較好的辦法進行軟件設計,有效濾除抖動帶來的干擾信號影響。
關鍵詞:嵌入式產品;機械旋轉編碼開關;信號檢測;抗抖動;中斷;查詢
Abstract: Embedded control refers to embedding the single-chip microcomputer in the product and playing a controlling role on the product. The mechanical rotary coding switch controls the increase or decrease of a certain amount by manually operating the direction of rotation. Although only two signals are generated, the presence of interfering signals makes it relatively difficult to detect the signals accurately. There are two commonly used detection methods, one is to collect external signals by interruption, and the other is to detect signals by query. This paper compared the two methods, and then adopted a better method for software design, effectively filtering out the effects of interference signals caused by jitter.
Keywords: embedded products;mechanical rotary coding switch;signal detection;anti-jitter;interrupt; query
機械式旋轉編碼開關是通過旋轉過程中產生的觸點接通與斷開來實現(xiàn)信號的檢測,根據(jù)觸點接通與斷開的先后順序來檢測自身的旋轉方向。接通與斷開過程中存在觸點抖動情況,使得單片機檢測過程變得較為復雜[1-2]。本文提出兩種軟件檢測方法,討論其檢測程序的編寫。
1 編碼開關原理
圖1是一種機械式旋轉編碼開關外形圖。其中,1、2腳是作為按鍵開關使用的,這里不作討論。A、B、C三腳是作為旋轉信號提供的,下面重點討論這三個腳的使用。在硬件接線中,人們將C腳接地,將A、B腳分別接單片機檢測腳,那么在旋動旋鈕時會形成A腳與C腳的接通與斷開、B腳與C腳的接通與斷開。A腳與C腳的接通與斷開形成動作1,B腳與C腳的接通與斷開形成動作2,動作1和動作2是不同時發(fā)生的,有一個先后順序,如圖2所示。
圖2為分別向兩個方向旋轉旋鈕時產生的波形圖。當往A端子方向旋轉時,A端子與C端子的接通或斷開動作領先于B端子。如果往B端子方向旋轉時,B端子與C端子的接通與斷開動作領先于A端子與C端子的動作。人們就可以根據(jù)動作的先后順序來判斷旋鈕是左旋還是右旋。
2 編碼開關的信號檢測
通常,有兩種方法可以檢測編碼開關的信號[3-4]。一種是采用中斷方式來檢測編碼開關信號。另一種是采用查詢方式來檢測編碼開關信號。下面對這兩種檢測方式進行一一討論。
2.1 中斷方式檢測編碼開關信號
以A腳為例說明,將A腳接于單片機的P3.2(INT0),B腳可任接于單片機的一個普通IO口。將A腳設置成外部中斷0輸入狀態(tài),并設置成下降沿觸發(fā)中斷。將B腳設置成懸空輸入狀態(tài)。如果A腳產生中斷,就表示A腳產生了電平下降,在中斷服務程序中再來檢測B腳是高電平還是低電平。如果B腳也是低電平,說明B腳已經于A腳前下降,說明B腳動作在前,那旋轉方向就是往B腳方向旋轉。往B端方向旋轉波形圖如圖2(b)所示,此時在[Δt5]時間內檢測B腳電平就行。如果B腳仍然是高電平,說明B腳電平還沒有產生跳變,A腳跳變在前,說明旋轉方向是往A腳方向旋轉。往A端方向旋轉波形圖如圖2(a)所示,此時在[Δt2]時間內檢測B腳電平就行。
2.2 查詢方式檢測編碼開關信號
將A、B兩腳都接于普通IO口,并且都設置成輸入狀態(tài)。在查詢中先設一個條件。只有檢查到兩腳都為高電平時,才允許進行第二步查詢,否則不允許進行第二步動作。接著,檢查腳電平,如果A腳先變低,則旋鈕往A端旋轉,如果B腳先變低,則旋鈕往B端旋轉。
3 軟件去抖動設計
機械旋鈕開關在觸點的接通與斷開中存在很大的抖動現(xiàn)象。關斷AC兩腳或關斷BC兩腳時產生的信號抖動現(xiàn)象如圖3所示。
所以,在檢測時,軟件必須有去抖動設計。在按鍵中去抖動,是指采用多次測量,取相同值來去抖動。這里也可以采用同樣的方法來去抖動。例如,如果產生中斷服務程序,就說明A腳已經產生了下降沿信號。在中斷服務程序中,人們可以延長一段時間后檢測A腳電平是否仍為低,如果A腳為低,那么確定A腳產生了電平下降。接著,再來檢測B腳電平。如果A腳電平為高,說明剛才是一個干擾信號,就不能用此次中斷所產生的檢測。延時時間不能太長,也不能太短。延時時間太長可能會影響整個程序的運行。
如果采用查詢方法來檢測旋轉方向,就可以利用程序循環(huán)本身的延時來解決問題。程序在循環(huán)中從頭至尾運行一圈是需要一段時間的。一般為幾十毫秒,那么就分兩次來進行檢測,即中間的延時是幾十毫秒。這個延時是可以接受的,因為旋轉開關的旋轉速度不會太快。第一次檢測的目的是看是否產生了旋轉趨勢,只有產生了旋轉趨勢后才能進行下一步。旋轉趨勢是指在被檢測的兩只腳A、B腳之間,產生了一只腳為高、另一只腳為低的變化。第二步檢測兩只腳是否真的都變低了,如果不是,證明第一步的變化是干擾信號。如果是兩只腳電平都變低了,那么根據(jù)第一步的趨勢,哪只腳電平先變低,就是往哪只腳方向旋轉。這種方法看起來簡單,但在實際使用中非常有效。
5 結語
經過上述分析,筆者更傾向于采用查詢方式的檢測方法。這樣既不用占用寶貴的中斷資源,也可以有效地提高抗干擾能力。
參考文獻:
[1]周航慈.單片機應用程序設計技術[M].北京:北京航空航天出版社,2011.
[2]樊非.采用掃描方式設計的旋轉編碼開關控制程序[J].IT時代周刊,2014(300):258-262.
[3]岳巍,李杰,文方哲,等.帶按鍵的旋轉編碼開關與C8051F020單片機的接口設計[J].機電產品開發(fā)與創(chuàng)新,2015(2):123-125.
[4]王平安.旋轉編碼開關在單片機中的應用[J].長江大學學報(自然科學版),2013(5):88-91.