クリック無しロータリーエンコーダー
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」カテゴリの記事
- 「UART←→IrDA」変換IC、MCP2122のクロック供給(2022.06.20)
- 秋月の赤外光送受信モジュール(AE-RPM851A)を使ってみる(IrDAを試す) #2(2022.06.18)
- 秋月の赤外光送受信モジュール(AE-RPM851A)を使ってみる(IrDAを試す)(2022.06.17)
- 4046・VCO回路の直線性改善方法その2(2022.06.13)
- 「ダイソーの観覧車」を回せ! 回路図(2022.05.08)
コメント