ハードウェアエンジニアリングの世界

電子機器の量産開発を通じて学んだことを書くブログ

カウントダウンタイマーの紹介

今日は自身が製作したカウントダウンタイマーを紹介します。

現在このカウントダウンタイマーは浜松市にあるエムオーティーさんにて活躍しています。塗装関連の機器を動かすときにタイマーで勝手に電源が切れるようにしたいとの要望をいただき製作させていただきました。

 

f:id:norio_ikedo:20161115022614p:plain

 

かなりシンプルな製品ですが、こだわりポイントもあります。

こだわった点としては、

長期間使用しても不具合が起こらないロータリーエンコーダ

です。

これは意外と簡単なようで、しっかりとアルゴリズムを作りこまなければなりません。

ロータリーエンコーダや、タクトスイッチはチャタリングというノイズを発生させます。このチャタリングが結構厄介で、組み込みソフトの誤動作につながることが多々あります。しかも設計者が開発をする環境では、部品自体もほとんど使われてない状態から始めるので、チャタリングの不具合が現れないこともあります。

www.marutsu.co.jp

 

以前、チャタリングを取り除いて、正しく動作するロータリエンコーダアルゴリズムを考えろというのにチャレンジしたことがあります。僕はこれを解決するのに2週間ほど要した記憶がありますが、同期も同じタイミングでこの問題にチャレンジしており、彼はすんなりと終わらせていました。さっと終わらせていた理由はひどいチャタリングが顕在化していなかったから。ハードウェアでフィルタをかけて、取り除けたようです。

 

自分はというと、回路でフィルターを作ってもチャタリングが残ってしまい、ファームウェアでなんとかしなければならず、同期と比べて複雑なアルゴリズムを作って完了させました。

 

ただこの時の苦労をこのプロダクトで活かすことができました。

ポイントは

すべての状態遷移をチェックする!

ロータリーエンコーダのA相とB相の1つ前の状態と今の状態からなる4bitの変数を作り、この変数をswitch文で正転か反転か、それともノイズなのかをチェックをするというものです。4つの状態がそろったら1つ進むというふうにしました。

これによりチャタリングノイズに強い、エンコーダのカウントアルゴリズムを実現しました。

もしロータリエンコーダアルゴリズムで悩んでいらっしゃる方はこの方法を参考にしてみてください。ソースの公開は積極的に行っていないので、教えて欲しいという方はご連絡いただければと思います。

 

garage-mot.com