« パナソニックeneloopスタンダード単3、JIS C8708:2019充放電テスト850サイクル目 | トップページ | ロータリーエンコーダーの2相パルスをタイマー割り込みで »

2020年9月15日 (火)

今度はチャタリング除去、その考え方

2020年9月12日:ロータリーエンコーダーの2相パルスをピン変化割り込みで取り込む
に絡んで、まずはこんなものを作りました。
2020年9月14日:「チャタリング除去回路」じゃなくって「チャタリング発生回路」をどうぞ

エンコーダのA相・B相信号、チャタリングを取り除きながら
エッジ検出してCW・CCW方向のパルス計数をする方法。
このように考えて作っています。

・INT0やINT1、あるいはピン変化割り込みを使う場合は、
 ハードウェア的にチャタリングを取り除いておかないと
 不要パルスが入った時にミスカウントするかも。

・これらの直接的パルス駆動割り込みを使わない場合は、
 タイマー割り込みでの定期的なA相・B相信号の入力処理
 が必要。

・定期的な処理ができるのなら、チャタリング除去も
 ソフトでできる。

・ただし・・・「入力波形が安定するまで時間待ち」など
 という恥ずかしい処理は×。

・こんなロジックでチャタリングを防ぎます。

C1_20200915170901

とりあえずシフトレジスタは4段。
タイマー割り込みの周期で入力信号をシフトしていきます。
4つとも全部がH、あるいは全部がLなら信号が安定した
ということで、入力を確定。
H/Lが混じっていたら不安定=チャタリング中ということで
安定していた時の昔のデータを用います。

スイッチ入力だと、1mSサイクルで10段ほど読んでおけば
ひどいチャタリングのあるスイッチでも大丈夫。
スイッチのオートリピートや長押し処理も、タイマー割り込み内
で完結します。

そして、エンコーダのA相・B相から正逆をカウントする処理は、
そのパルスエッジの検出が不可欠です。

これもやはりシフトレジスタを使って処理、こんな
「回路」で↑↓エッジを作り出します。

C2_20200915170901

このロジックをマイコンの命令に置き換えてプログラム
するわけです。

チャタリング除去の所、全Lを検出している「負論理4入力のAND」
は「正論理4入力・負論理出力のOR」と等価です。
これもプログラムの命令で実現します。

実際のプログラムの様子はこの次に。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
※2相パルスの弁別回路について
2017年9月12日:C-MOS 2相パルスカウンタの入力部回路
2017年3月6日:29年前に製作したツール

|

« パナソニックeneloopスタンダード単3、JIS C8708:2019充放電テスト850サイクル目 | トップページ | ロータリーエンコーダーの2相パルスをタイマー割り込みで »

Arduino」カテゴリの記事

コメント

コメントを書く



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




« パナソニックeneloopスタンダード単3、JIS C8708:2019充放電テスト850サイクル目 | トップページ | ロータリーエンコーダーの2相パルスをタイマー割り込みで »