マイコンソフトを使用してエンコーダーを使う
ロータリーエンコーダー画像
ロータリーエンコーダからのA相B相のパルス信号をマイコンで処理します。回転方向のデコードに位相差を利用するのはロジックICと変わりません。 位相差を取り出すのには片側のパルスエッジで割り込みをかけその時に反対側の位相はHiであるのかLoであるのかで見極めます。
MCUはRL78G13(64pin)を使用します。P13-7とP7-3にエンコーダー接続されています。
この動作試験ではCRによるチャタリングのフィルターは入れてありませんがロジックICを使ったものよりチャタリングに敏感です。 特にINTP0(P13-7側)側にはフィルターが必要です。
1 |
「コード生成を利用する」を選択してプロジェクトを新規作成します。 シリアルはIICA0をシングルスターにします。設定はデフォルトです。 ウォッチドッグタイマは使用しないにしてください 他はデフォルトです。 |
2 |
最初の2度と変更できない「端子割当設定」はデフォルトにします。クロック設定は高速メインモード(2.7~5.5v)、オンチップでバッグ設定 は「使用する」、残りのリセット・・、安全・・、データフラッシュ はデフォルト。 |
3 |
ポートは14の1を入力にしてプルアップにチェックを入れます。(プルアップのチェックはプルアップ抵抗を別途設けるなら要りません) |
4 |
シリアルはIICA0をシングルマスターにします。設定はデフォルトです。 |
5 |
他はデフォルトです。 |
メーカー推奨入力回路例です。
チャタリング・摺動ノイズ
光学式エンコーダーには整形回路が入っていますので考える必要はないと思いますが、今回使用している手回しのエンコーダーは 接点式です。従って回した時にチャタリングが起きますが、この処理をしておかないと複数の割り込みが掛かりその回数分カウント される可能性があります。(割り込み処理時間よりもチャタリング時間が短ければ受け付けられません) この処理にはCRフィルターとできることならシュミットトリガーを組み合わせる、ソフトウェアでタイミングを見計らって入力を 再確認する。等の方法を取ります。
チャタリングの時間
チャタリング時間につきましては、エンコーダーの仕様を2社2機種で確認したところ、1秒間に1回転させた時立ち上がりも立ち下がりも 3msec程度のようです。24クリック型で1回転で24パルス発生します。1秒間で一回転すると1クリックあたり約40msecです。 デューティ50%ならHi:20msec、Lo:20msecになるはずですが手持ちの実機(10年ぐらい前のもの:時々実験で使用)のデューティは 30%以下のようです。1秒あたり2回転させるような使い方をすると短い方のパルスは6msec程度になりますが3msecの確認時間をとっても 動作には十二分な3msec残ります。
ハードウェア対策
P13-7端子を使って割り込みINTP0を発生します。マニュアルによればこの端子には入力にシュミットトリガーを使用しています。 CRによるフィルターはシュミット回路と組み合わせると効果が高いのでこの端子を使用しました。チャタリングにより何度も繰り返し 割り込みがかかるとその分全てカウントされてしまいます。
他の端子を使用する場合はRL78のハードウェアマニュアル”端子の入出力回路一覧”をご確認ください。
ソフトウェア対策
割り込み処理で計数しますとP13-7端子が立ち下がる(設定によっては立ち上がり)都度INTP0割り込みが発生し計数します。チャタリングが発生すると 一旦立ち上がってすぐに再び立ち下がりますのでまた計数します。本来は1回の計数ですがチャタリングにより2回(もしくは複数回)計数し ます。これを防ぐには割り込み発生で直ちに計数するのではなく時間待ち(例えば1msec)してから計数するようにします。エンコーダーの仕様書に拠れば3msec程度は見込むべきと思いますが実測では1msecで十分でした。(ゆっくり回すと時間は延びますが考慮してありません)
Copyright © 面白半分