ロータリーエンコーダの入力

2008-08-08 :  PIC・マイコン
昨日までの累計アクセス数=6,316。 ご訪問頂き、ありがとうございます。         日記@BlogRanking


ロータリーエンコーダには「インクリメンタル方式」と、「アブソリュート方式」の2種類があります。
インクリメンタル方式は、軸が一定量回転するごとにパルスを出力します。

1回転でいくつのパルスを出力するかを分解能と呼びますが、20パルスあたりから5000パルスあたりまであります。
軸が回転するたびにパルスが出るので、軸が何度動いたか、何回転したかといった情報は、
パルスの数を数えることによって得ることができます。

ただ単にパルスが出るだけでは、回転方向の判断が付きませんので、
以下に示すような2相のパルスを出力するように作られています。



右回転では、A相が先にハイからローに変化する。左回転では、B相が先にハイからローに変化する。
つまり、A相がハイからローに変化した時点でのB相の値を見れば回転方向がわかります。

秋月電子通商で売っているのは、インクリメンタル方式のものでした。

端子はA相、B相、GND の3ヶからなっており、見た目はボリュームのようなものです。
これは、1回転(360度)で24パルスです。また、クリック付きです。

そこで、PICとは、10kohm プルアップで、
A相 ---> RB0/INT ( H -> L で割込発生 )
B相 ---> RB7   と繋ぎ、



割込方式でプログラムを作りました。(mikroBASICで)
INT 割込発生時に、先ずB相をチェックしておき、
チャッタリングが収まるまで(1mS)待って、RB0(A相)がローだったら正しい変化時点と判定する。


割込処理ルーチン部分だけ載せます。
(段付けの為、先頭に2B空白がある)
' --------------------- mikroBASIC ソースの一部
sub procedure interrupt ' --- RB0/INT interrupt H->L
 If PORTB.7 = 1 Then
  rl_dir = "R" ' H : Right
 Else
  rl_dir = "L" ' L : Left
 End If
 Delay_ms(1) ' debounce
 If PORTB.0 = 0 Then ' true H->L
  get_data = 1
 Else ' not ( L->H ) Pass
  get_data = 0
 End If
 ClearBit(INTCON,INTF) ' clear INTF
end sub
' ---------------------
以上、お役に立ちましたら幸いです。

お手数をおかけしますが、2クリック(投票を)して頂けるとうれしいです。 ⇒ 日記@BlogRanking
お引き立て頂き、「60代~日記@BlogRanking」で上位になれています。ありがとう御座います。

関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク