周首杰
摘 要:嵌入式控制是指將單片機(jī)嵌入產(chǎn)品中,對產(chǎn)品起到控制作用。機(jī)械式旋轉(zhuǎn)編碼開關(guān)是通過人工操作旋轉(zhuǎn)方向來控制某個(gè)量的增加或減小。雖然產(chǎn)生的信號只有兩個(gè),但是干擾信號的存在使信號準(zhǔn)確檢測變得相對困難。通常使用的檢測方法有兩種,一是通過中斷方式進(jìn)行外部信號的采集,二是通過查詢方式進(jìn)行信號的檢測。本文對兩種方法進(jìn)行比較,進(jìn)而采用較好的辦法進(jìn)行軟件設(shè)計(jì),有效濾除抖動(dòng)帶來的干擾信號影響。
關(guān)鍵詞:嵌入式產(chǎn)品;機(jī)械旋轉(zhuǎn)編碼開關(guān);信號檢測;抗抖動(dòng);中斷;查詢
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
機(jī)械式旋轉(zhuǎn)編碼開關(guān)是通過旋轉(zhuǎn)過程中產(chǎn)生的觸點(diǎn)接通與斷開來實(shí)現(xiàn)信號的檢測,根據(jù)觸點(diǎn)接通與斷開的先后順序來檢測自身的旋轉(zhuǎn)方向。接通與斷開過程中存在觸點(diǎn)抖動(dòng)情況,使得單片機(jī)檢測過程變得較為復(fù)雜[1-2]。本文提出兩種軟件檢測方法,討論其檢測程序的編寫。
1 編碼開關(guān)原理
圖1是一種機(jī)械式旋轉(zhuǎn)編碼開關(guān)外形圖。其中,1、2腳是作為按鍵開關(guān)使用的,這里不作討論。A、B、C三腳是作為旋轉(zhuǎn)信號提供的,下面重點(diǎn)討論這三個(gè)腳的使用。在硬件接線中,人們將C腳接地,將A、B腳分別接單片機(jī)檢測腳,那么在旋動(dòng)旋鈕時(shí)會形成A腳與C腳的接通與斷開、B腳與C腳的接通與斷開。A腳與C腳的接通與斷開形成動(dòng)作1,B腳與C腳的接通與斷開形成動(dòng)作2,動(dòng)作1和動(dòng)作2是不同時(shí)發(fā)生的,有一個(gè)先后順序,如圖2所示。
圖2為分別向兩個(gè)方向旋轉(zhuǎn)旋鈕時(shí)產(chǎn)生的波形圖。當(dāng)往A端子方向旋轉(zhuǎn)時(shí),A端子與C端子的接通或斷開動(dòng)作領(lǐng)先于B端子。如果往B端子方向旋轉(zhuǎn)時(shí),B端子與C端子的接通與斷開動(dòng)作領(lǐng)先于A端子與C端子的動(dòng)作。人們就可以根據(jù)動(dòng)作的先后順序來判斷旋鈕是左旋還是右旋。
2 編碼開關(guān)的信號檢測
通常,有兩種方法可以檢測編碼開關(guān)的信號[3-4]。一種是采用中斷方式來檢測編碼開關(guān)信號。另一種是采用查詢方式來檢測編碼開關(guān)信號。下面對這兩種檢測方式進(jìn)行一一討論。
2.1 中斷方式檢測編碼開關(guān)信號
以A腳為例說明,將A腳接于單片機(jī)的P3.2(INT0),B腳可任接于單片機(jī)的一個(gè)普通IO口。將A腳設(shè)置成外部中斷0輸入狀態(tài),并設(shè)置成下降沿觸發(fā)中斷。將B腳設(shè)置成懸空輸入狀態(tài)。如果A腳產(chǎn)生中斷,就表示A腳產(chǎn)生了電平下降,在中斷服務(wù)程序中再來檢測B腳是高電平還是低電平。如果B腳也是低電平,說明B腳已經(jīng)于A腳前下降,說明B腳動(dòng)作在前,那旋轉(zhuǎn)方向就是往B腳方向旋轉(zhuǎn)。往B端方向旋轉(zhuǎn)波形圖如圖2(b)所示,此時(shí)在[Δt5]時(shí)間內(nèi)檢測B腳電平就行。如果B腳仍然是高電平,說明B腳電平還沒有產(chǎn)生跳變,A腳跳變在前,說明旋轉(zhuǎn)方向是往A腳方向旋轉(zhuǎn)。往A端方向旋轉(zhuǎn)波形圖如圖2(a)所示,此時(shí)在[Δt2]時(shí)間內(nèi)檢測B腳電平就行。
2.2 查詢方式檢測編碼開關(guān)信號
將A、B兩腳都接于普通IO口,并且都設(shè)置成輸入狀態(tài)。在查詢中先設(shè)一個(gè)條件。只有檢查到兩腳都為高電平時(shí),才允許進(jìn)行第二步查詢,否則不允許進(jìn)行第二步動(dòng)作。接著,檢查腳電平,如果A腳先變低,則旋鈕往A端旋轉(zhuǎn),如果B腳先變低,則旋鈕往B端旋轉(zhuǎn)。
3 軟件去抖動(dòng)設(shè)計(jì)
機(jī)械旋鈕開關(guān)在觸點(diǎn)的接通與斷開中存在很大的抖動(dòng)現(xiàn)象。關(guān)斷AC兩腳或關(guān)斷BC兩腳時(shí)產(chǎn)生的信號抖動(dòng)現(xiàn)象如圖3所示。
所以,在檢測時(shí),軟件必須有去抖動(dòng)設(shè)計(jì)。在按鍵中去抖動(dòng),是指采用多次測量,取相同值來去抖動(dòng)。這里也可以采用同樣的方法來去抖動(dòng)。例如,如果產(chǎn)生中斷服務(wù)程序,就說明A腳已經(jīng)產(chǎn)生了下降沿信號。在中斷服務(wù)程序中,人們可以延長一段時(shí)間后檢測A腳電平是否仍為低,如果A腳為低,那么確定A腳產(chǎn)生了電平下降。接著,再來檢測B腳電平。如果A腳電平為高,說明剛才是一個(gè)干擾信號,就不能用此次中斷所產(chǎn)生的檢測。延時(shí)時(shí)間不能太長,也不能太短。延時(shí)時(shí)間太長可能會影響整個(gè)程序的運(yùn)行。
如果采用查詢方法來檢測旋轉(zhuǎn)方向,就可以利用程序循環(huán)本身的延時(shí)來解決問題。程序在循環(huán)中從頭至尾運(yùn)行一圈是需要一段時(shí)間的。一般為幾十毫秒,那么就分兩次來進(jìn)行檢測,即中間的延時(shí)是幾十毫秒。這個(gè)延時(shí)是可以接受的,因?yàn)樾D(zhuǎn)開關(guān)的旋轉(zhuǎn)速度不會太快。第一次檢測的目的是看是否產(chǎn)生了旋轉(zhuǎn)趨勢,只有產(chǎn)生了旋轉(zhuǎn)趨勢后才能進(jìn)行下一步。旋轉(zhuǎn)趨勢是指在被檢測的兩只腳A、B腳之間,產(chǎn)生了一只腳為高、另一只腳為低的變化。第二步檢測兩只腳是否真的都變低了,如果不是,證明第一步的變化是干擾信號。如果是兩只腳電平都變低了,那么根據(jù)第一步的趨勢,哪只腳電平先變低,就是往哪只腳方向旋轉(zhuǎn)。這種方法看起來簡單,但在實(shí)際使用中非常有效。
5 結(jié)語
經(jīng)過上述分析,筆者更傾向于采用查詢方式的檢測方法。這樣既不用占用寶貴的中斷資源,也可以有效地提高抗干擾能力。
參考文獻(xiàn):
[1]周航慈.單片機(jī)應(yīng)用程序設(shè)計(jì)技術(shù)[M].北京:北京航空航天出版社,2011.
[2]樊非.采用掃描方式設(shè)計(jì)的旋轉(zhuǎn)編碼開關(guān)控制程序[J].IT時(shí)代周刊,2014(300):258-262.
[3]岳巍,李杰,文方哲,等.帶按鍵的旋轉(zhuǎn)編碼開關(guān)與C8051F020單片機(jī)的接口設(shè)計(jì)[J].機(jī)電產(chǎn)品開發(fā)與創(chuàng)新,2015(2):123-125.
[4]王平安.旋轉(zhuǎn)編碼開關(guān)在單片機(jī)中的應(yīng)用[J].長江大學(xué)學(xué)報(bào)(自然科學(xué)版),2013(5):88-91.