« 『アトミック操作』・・・8bitマイコンに限り何か別の言い方なかったか? | トップページ | 手組みするときは片面基板で:1kHz PWM発生回路 »

2020年9月25日 (金)

クリック無しロータリーエンコーダー

Bournsクリック無しロータリーエンコーダ(PEC16-4020F-N0024)
が入ってきましたんでどんなものかを確かめてみました。

こんな形状。
A1_20200925111001

Arduino-UNOのATmega328PのINT0とINT1につなぐんですが、
ATmega328P入力ポートのヒステリシス幅がちょいと小さいんで、
C-MOSのシュミット入力ゲート「4584」を間に入れてみました。

A2_20200925111101
チャタリング除去の時定数は、
2020年9月12日:ロータリーエンコーダーの2相パルスをピン変化割り込みで取り込む
のプルアップ抵抗10kΩにCRフィルタが10k+0.01uF

この時の様子をオシロで観察。
A相/B相波形は「クリック有り」の時のような偏りはありません。
平均して2相パルスの列が続きます。

さて、出てくるチャタリングはこんな具合です。

まず、平和な時。 キレイなエッジが見えます。

B000_20200925111901
CH4の波形はINT1割り込み受付で出しているパルス。
  ※4584をスキップすると、INT1パルスが
   バラバラと出ます。
   ATmega328pのヒステリシスがもうちょい
   大きければば良かったのに・・・

ちょいと大きなチャタリング。
B001_20200925112101

このくらい↑なら除去してくれるんですが、
こうなると↓、10k+0.01uFでのフィルタでは除けません。

B002
4584を入れても、INT1割り込みをミスしている様子が見えます。
   ※割り込みは正しく働いてますよ。

このエンコーダのスペックには、
   Contact Bounce (15 RPM) ・・・ 5.0ms. max
と記してあるんで、このくらいのチャタリングは出てもあた
りまえと考えておかなくちゃなりません。

そこで、CRフィルタのコンデンサを10倍の0.1uFにしてみました。
時定数は10倍の約1mSに。

その結果。

B004_20200925112201
もうひとつ
B005

まぁこんなもんでしょう。
INT0とINT1でのエッジ検出後に、ソフト的にもう1~2ms
遅らせてからA相とB相のH/Lを確認することにします。

これで完成形にもって行きます。
ただし、クロック周波数を変えるんでArduinoからは離れます。
  どのみち、Arduino独自の関数ってシリアル出力だけしか
  使ってないし。

|

« 『アトミック操作』・・・8bitマイコンに限り何か別の言い方なかったか? | トップページ | 手組みするときは片面基板で:1kHz PWM発生回路 »

Arduino」カテゴリの記事

割り込み処理」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« 『アトミック操作』・・・8bitマイコンに限り何か別の言い方なかったか? | トップページ | 手組みするときは片面基板で:1kHz PWM発生回路 »