• 公開日:2018年12月03日
  • | 更新日:2022年10月14日

[7SEGルーレット貯金箱製作]第4話タクトスイッチの罠、ソレノイドの逆起電力

前回までの奮闘記

こんにちは、すーさんです。
前回までで7セグメントLEDにシフトレジスタ(SN74HC595N)を使って数字を0~9まで表示させることに成功しました。

今回は7セグメントLEDとタクトスイッチ、ソレノイドを連動させ動かして行きます!

タクトスイッチとの連動


まずブレッドボード上に回路図通りにタクトスイッチを配線していきます。

その後、前回までで作成したプログラムに追加する形でタクトスイッチを押すと
0~9まで動いている7セグメントLEDが停止するコードを考えていきます。

今回はタクトスイッチ1回押すごとに割り込み処理を発生させ、
7セグメントLEDが止まるようにしました。

タクトスイッチの罠

タクトスイッチと7セグメントLEDを連動させるプログラムはすぐにできたので実際に7セグが停止するのか動作確認していきます。

何度か動作確認をしていると、数字が上手く止まったり、止まらなかったり・・・。

何故このようなことが起こるのか調べてみたところ、「チャタリング」が原因ではないかという結論に至りました。

チャタリングって?


チャタリングとはスイッチを押したときにON/OFFが非常に短い時間繰り返される現象のことです(図1)。

この現象が原因で7セグが止まったり、止まらなかったりしているのでは?

早速、オシロスコープで波形を見てみることに。

波形を見たところ、チャタリングが発生しているときに見られる波形を確認することができました(写真1)。

写真1は立ち上がり(タクトスイッチを放した時)の波形のみですが、立ち下がり(タクトスイッチを押した時)にも同じような波形が見られました。

このチャタリング箇所を消すことができれば、タクトスイッチの誤作動がなくなると考えました。

チャタリングを除去する方法はハードで改善する方法とソフトで改善する方法があるのですが、今回はハード面でチャタリングを除去する方法をためしてみることにします。

チャタリング防止回路(RC回路)

仕様書作成した時点でのスイッチ箇所の回路図を以下に変更してブレッドボード上に配線してみました(図2)。

図2の青枠で囲ってある箇所がRC回路です。
この回路を追加することにより、タクトスイッチをON/OFFした際に電圧が抵抗とコンデンサによって充放電され、徐々に電圧が減少、増加し最終的にVcc(Hi)、GND(Low)に落ち着きます。

つまり充放電する時間がチャタリング時間よりも長ければ、チャタリングの影響をマイコンは受けなくなります。

RC回路を追加したあとの波形は以下のようになだらかになりました(写真2)。
このなだらかさ加減はT=R×Cで求めることができるとのこと(T:時定数)。

つまりTの値をチャタリング時間より長く設定できるように抵抗とコンデンサを選定していけばいいということになります。
今回チャタリング時間は約200μsということがわかったので、R=10k、C=0.1μFとし10k×0.1μF=1000μs(1ms)としてRC回路を作成しました。

本来RC回路を追加して波形をなだらかにすると入力信号(ON,OFF)がはっきりしないためシュミットトリガNOT.ICを入力する直前に入れ、ONとOFFの信号を明確にしてマイコンに信号を入力します。

今回は使用したマイコンMSP430G2553の各ポート内にシュミットトリガ回路が組み込まれていたため、製作する基板上には追加していません(図3)。

実際に7セグメントLEDを動かし、タクトスイッチを押して止めてみると誤作動なく停止させることができました。

タクトスイッチと7セグメントLEDの連動が成功したので、スイッチと7セグを1つずつ増やしブレッドボード上にて動作を確認していき、特に問題なく動かすことに成功!どんどん部品をブレッドボード上に追加します。

ここまでのコードがこちらになります。

ソースコード

7セグメントLEDとソレノイド、LEDの連動

続いて7セグメントLEDとタクトスイッチ各2つずつを乗せたブレッドボード上にLEDとコインボックスの鍵となるソレノイドを追加していきます。

7セグメントLEDを動かしタクトスイッチでそれぞれ停止させ、7セグの表示が2つとも7になった時にソレノイドとLEDを起動させます。

回路図通りに配線し、プログラムを追加し実行してみます。現段階では7セグメントLEDをランダム表示していないので、タイミングよくタクトスイッチを押せば7を揃えることができます。

1回目の動作確認では7が揃ったと同時にLEDが点灯しソレノイドが起動させることに成功したのですが、2回目以降の動作確認ではソレノイドが全く動かない状況に・・・。

ソレノイドの逆起電力

調べるとソレノイドをトランジスタのスイッチング回路で制御する場合、ソレノイドをON→OFFにした際に逆起電力というものが発生しトランジスタのVceの最大定格電圧を超え、トランジスタを破壊するとのこと。

私が仕様書製作した際のソレノイド箇所の回路図がこちらになります(図4)。

そこで逆起電力を防止するためにダイオードをソレノイドに並列に接続しました(図5)。
ダイオードとトランジスタを新しいものに変え、再度何度か動作確認したところ問題なくソレノイドを動かすことができました。

ここまでのソースコードはこちらになります。

ソースコード

7セグメントLEDとソレノイド、LEDの連動

仕様書作成の段階でもう少し調べてから回路図を書いておけばよかった・・・と同時に、実験しといてよかったと感じました。

実際にユニバーサル基板に部品を半田付けする際に迷いなく配線することができそうです!
部品同士を連動させるプログラムの書き方もわかってきました。

後はセンサの動作確認を行い、いよいよユニバーサル基板に半田付けをしていきます!

[7SEGルーレット貯金箱]シリーズ