デジタル回路へのスイッチ入力の波形解析

デジタル回路へのスイッチ入力の波形解析

 今回は実際のスイッチの波形を観測して、FPGA設計の方針を決めます。スイッチの回路にはRCのフィルタを入れないで、単純な回路でFPGAに入力することとします。

 回路的には次のような回路になります。ダイオードクリップを挿入しても、今回の回路にはほとんど影響は無いでしょう。実際の製品では静電気対策を行ってください。

 この回路で、実際にスイッチを連打してみました。その波形を次に示します。

 観測波形のカーソルを読み取ると、周期が156msecでスイッチを押しているのは波形がLowの時間ですから、押している時間は約50msecです。

 これまでの経験でだいたい200msecでスイッチを読むと通常の連打は読み取ることができます。上の観測例では156msecなので、時々取りこぼす感じです。

 たとえば、ゲーム機のコントローラやパソコンのキーボード等ですともっと早くスイッチを読まないと取りこぼしが多くてイライラすると思います。

 時間的な感覚はこれで測ることができました。しかし、FPGAでスイッチを読むにあたり一番厄介なのは同期化なのです。

 スイッチは人が操作するので、FPGAには同期できません。同期設計を前提としているFPGAには非常に扱いにくい信号という事になります。

 なので、何とかしてFPGAに入った最初の段階で同期化する必要があります。

 まずスイッチ波形を良く観測します。スイッチを押している時間は50msecぐらいで、チャタリングはデジタル回路へのスイッチ入力と静電気対策の考え方で計測した通り188usecでした。押している時間50msecとチャタリング時間188usecなので、両者は桁が違いますからチャタリングは1msec以内に収まっていると考えても問題ないでしょう。

 であれば、10msecでスイッチをリードする。というのはどうでしょうか?チャタリングは十分に収まっている時間ですし、押している時間に5サンプルぐらいの余裕があります。

 次にスイッチを押す。という行為ですが、人がスイッチを押したときと離したとき、どちらが「押した」と認識するのでしょうか? これは押した時です。つまり、スイッチを押しているのは50msecだったのですが、50msecのスタート時間がスイッチを押した瞬間です。この瞬間を捉えられれば、人の操作とハードウェアの動作の感触が近いと思われます。時々、スイッチを話した時に動作するハードウェアがあります。マウスのボタンは離した時がクリックですね。このように製品の使われ方や仕様によって、扱いが違いますので設計の仕様で確認してください。

 それを波形で見ると、波形の立下りがスイッチを押した瞬間になります。

 つまり波形の立下りを検出し、なおかつFPGAのクロックに同期できれば、スイッチを正確に読むことができる。という事になります。この波形は連打しているので、スイッチを押し続けている。という感覚で動作はさせていません。

 次回はFPGAのクロックに同期してスイッチ波形の立下りを検出し、なおかつチャタリングを除去する。という方針でHDLで設計してみます。