今度はチャタリング除去、その考え方
2020年9月12日:ロータリーエンコーダーの2相パルスをピン変化割り込みで取り込む
に絡んで、まずはこんなものを作りました。
2020年9月14日:「チャタリング除去回路」じゃなくって「チャタリング発生回路」をどうぞ
エンコーダのA相・B相信号、チャタリングを取り除きながら
エッジ検出してCW・CCW方向のパルス計数をする方法。
このように考えて作っています。
・INT0やINT1、あるいはピン変化割り込みを使う場合は、
ハードウェア的にチャタリングを取り除いておかないと
不要パルスが入った時にミスカウントするかも。
・これらの直接的パルス駆動割り込みを使わない場合は、
タイマー割り込みでの定期的なA相・B相信号の入力処理
が必要。
・定期的な処理ができるのなら、チャタリング除去も
ソフトでできる。
・ただし・・・「入力波形が安定するまで時間待ち」など
という恥ずかしい処理は×。
・こんなロジックでチャタリングを防ぎます。
とりあえずシフトレジスタは4段。
タイマー割り込みの周期で入力信号をシフトしていきます。
4つとも全部がH、あるいは全部がLなら信号が安定した
ということで、入力を確定。
H/Lが混じっていたら不安定=チャタリング中ということで
安定していた時の昔のデータを用います。
スイッチ入力だと、1mSサイクルで10段ほど読んでおけば
ひどいチャタリングのあるスイッチでも大丈夫。
スイッチのオートリピートや長押し処理も、タイマー割り込み内
で完結します。
そして、エンコーダのA相・B相から正逆をカウントする処理は、
そのパルスエッジの検出が不可欠です。
これもやはりシフトレジスタを使って処理、こんな
「回路」で↑↓エッジを作り出します。
このロジックをマイコンの命令に置き換えてプログラム
するわけです。
チャタリング除去の所、全Lを検出している「負論理4入力のAND」
は「正論理4入力・負論理出力のOR」と等価です。
これもプログラムの命令で実現します。
実際のプログラムの様子はこの次に。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
※2相パルスの弁別回路について
・2017年9月12日:C-MOS 2相パルスカウンタの入力部回路
・2017年3月6日:29年前に製作したツール
| 固定リンク
「Arduino」カテゴリの記事
- Arduinoで「ボコスカハンマー」 あれれれれっ?!(2023.12.07)
- 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)
コメント
・ロータリーエンコーダーの2相パルスをタイマー割り込みで
http://igarage.cocolog-nifty.com/blog/2020/09/post-cfd8cf.html
投稿: 居酒屋ガレージ店主(JH3DBO) | 2023年9月10日 (日) 20時30分