クリック無しロータリーエンコーダー
Bournsのクリック無しロータリーエンコーダ(PEC16-4020F-N0024)
が入ってきましたんでどんなものかを確かめてみました。
Arduino-UNOのATmega328PのINT0とINT1につなぐんですが、
ATmega328P入力ポートのヒステリシス幅がちょいと小さいんで、
C-MOSのシュミット入力ゲート「4584」を間に入れてみました。
チャタリング除去の時定数は、
2020年9月12日:ロータリーエンコーダーの2相パルスをピン変化割り込みで取り込む
のプルアップ抵抗10kΩにCRフィルタが10k+0.01uF。
この時の様子をオシロで観察。
A相/B相波形は「クリック有り」の時のような偏りはありません。
平均して2相パルスの列が続きます。
さて、出てくるチャタリングはこんな具合です。
まず、平和な時。 キレイなエッジが見えます。
CH4の波形はINT1割り込み受付で出しているパルス。
※4584をスキップすると、INT1パルスが
バラバラと出ます。
ATmega328pのヒステリシスがもうちょい
大きければば良かったのに・・・
ちょいと大きなチャタリング。
このくらい↑なら除去してくれるんですが、
こうなると↓、10k+0.01uFでのフィルタでは除けません。
4584を入れても、INT1割り込みをミスしている様子が見えます。
※割り込みは正しく働いてますよ。
このエンコーダのスペックには、
Contact Bounce (15 RPM) ・・・ 5.0ms. max
と記してあるんで、このくらいのチャタリングは出てもあた
りまえと考えておかなくちゃなりません。
そこで、CRフィルタのコンデンサを10倍の0.1uFにしてみました。
時定数は10倍の約1mSに。
まぁこんなもんでしょう。
INT0とINT1でのエッジ検出後に、ソフト的にもう1~2ms
遅らせてからA相とB相のH/Lを確認することにします。
これで完成形にもって行きます。
ただし、クロック周波数を変えるんでArduinoからは離れます。
どのみち、Arduino独自の関数ってシリアル出力だけしか
使ってないし。
| 固定リンク
「Arduino」カテゴリの記事
- Arduino UNO R3で±19.9V表示電圧計(2023.10.14)
- 「御詠歌プレーヤー」の製作 (MP3-TF-16Pモジュールの使用例)(2023.08.10)
- Arduino UNO R3のソケット・・思えば違和感がぁ(2023.07.07)
- 初めて買ったArduino UNO・・・今は(2023.05.25)
- 液晶表示コントローラ HD44780で迎撃(2023.05.16)
「割り込み処理」カテゴリの記事
- 初めて買ったArduino UNO・・・今は(2023.05.25)
- 8ビットマイコンの割り込み処理・・・1バイトに収まるなら1バイトに(2023.03.01)
- 8bitマイコンにも16bitのメモリ読み書き命令があった(2022.10.14)
- 何度も言うぞ! Arduino(8bitマイコン)の割り込みには気をつけろ!(2022.10.11)
- ロータリーエンコーダーのチャタリング波形(2022.09.11)
コメント