今度はチャタリング除去、その考え方
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」カテゴリの記事
- DDS IC「AD9833」をArduino UNO R3で制御:箱入れ #2(2025.07.03)
- DDS IC「AD9833」をArduino UNO R3で制御:箱に入れる(2025.06.30)
- UNO R4はanalogWrite(n,128)でデュティー50%の方形波が出るぞ(2025.06.03)
- DDS IC「AD9833」の出力にバッファアンプを(2025.05.27)
- DDS IC「AD9833」をArduino UNO R3で制御(2025.05.25)
コメント
・ロータリーエンコーダーの2相パルスをタイマー割り込みで
http://igarage.cocolog-nifty.com/blog/2020/09/post-cfd8cf.html
投稿: 居酒屋ガレージ店主(JH3DBO) | 2023年9月10日 (日) 20時30分