マイコンにスイッチを付けよう
~「チャタリングする回路」と「チャタリング防止回路」をオシロで比較~
※一部内容に不備があり、直すまではこのページは公開しないでおいたほうが良いのですが、オシロでチャタリングの波形を追及している部分がもったいない気がするので、このまま公開しておきます。ページ中、不備の部分は不備で示します。

マイコンとは
マイコン

 電子回路の部品のひとつです。

 黒い細長い物体に銀色の足がぞろりと並んだ、よくあるICです。
 C言語などのプログラムを書き込めます。
スイッチとは
タクトスイッチ

 電子回路の部品のひとつです。

 ボタンを押すと回路が左から右へつながります。放すと回路が途切れます。

【1】 グランドって?

 まず、マイコンにスイッチを付ける とはこういうイメージです。不備
 右端の四角い小さな物体がスイッチです。(「タクトスイッチ」と呼ばれるタイプのスイッチです)


test



  gnd このマークはグランドと言います。グランドとは回路のマイナスのことです。
 (他に▽マークなどいくつか形にバリエーションがあります)

 このグランドについて説明します。
 小学生の理科の実験でこういう回路があります。

rika

 この乾電池のマイナス側の線(青色)を、電子回路では グランド と呼んでいます。

 電子回路を書くときは、回路が複雑になると、いちいち グランドをつなげるのは面倒なので、下図のように書きます。

densi

 マイコンの話に戻って、マイコンを電源につなぐと、こうなります。
 理科の実験風に書いています。


micom_rika

 豆電球と違って、プラスマイナスが複数あります。
 これはマイコンが内部で複雑になっているからです。

 上図のようなマイコンのつなぎ方は、そのマイコンのデータシート(説明書)に下図のように載っています。

pin diagram
▲マイコンのデータシートに 電源のつなぎ方が載っている


  電子回路として書き直すと 下図のようになります。

mycom_densi

 グランドとは、単純に回路のマイナスだと思ってもらって大丈夫だと思います。
 以上でグランドの話は終わりです。


【2】チャタリングって?

 マイコンにスイッチを付ける話に戻ります。

test

 
 上図では電源はほとんど省略しています。

 チャタリングとは英語で 「chattering」 であって、意味は、『ぺちゃくちゃしゃべる、機械などが ガチガチ、ガタガタ音を立てる』だそうです。
 ここで言う電子回路のチャタリングも同じような意味です。

chatter
▲スイッチを押したとき、「押された」「押されていない」が、微細な世界で交互に繰り返されている。
 金属と金属が触れ合うことで、左と右の線がつながり回路となり電気が通ります。これがスイッチです。
 しかし、この触れ合うときに、金属がわずかに「触れ合ったり」「触れ合わなかったり」を繰り返すことがあり、その結果、マイコンに対してスイッチのオンオフの繰り返しが伝わってしまいます。
 これをスイッチのチャタリングと言います。

 問題は、たとえば、1回目のスイッチオンでAの処理をして、2回目のスイッチオンでBの処理をしようというときに、押した人(人間)にとっては1回スイッチを押したつもりでも、マイコンとしては2度3度のスイッチオンの情報を受け取っています。
 そうなると一気にA,Bの処理を行ってしまい、人間の意図した動作になりませんよね。


【3】チャタリングする回路の例

 チャタリングを防止する回路はネットにいっぱいありますが、チャタリング<する>回路の例はあまり見かけなかったので、ここで掲載したいと思います。

 下図は単純にスイッチを取り付けた例です。不備
 赤い部分のスイッチがチャタリングします。
 赤い部分以外は難しく見えますが、マイコンのデータシートに載っている推奨回路(使うときは基本的にこうしてくださいという回路)と同じものです。ここでは気にしないで大丈夫です。

 チャタリングとは関係のない話ですが、このスイッチのつなぎ方だと、チャタリングのほかにも問題があります。
 回路を見ると、スイッチがオフのときは、マイコンから出てスイッチへつながるマイコンのピンは回路が途切れている状態になっています。対してスイッチがオンになれば、グランドにつながります。
 回路が途切れているピンをマイコンが調べようとすると、結果は『不定』になってしまいます。つまりオンかオフか、ノイズなどの状況によって変動します。

 でも、ちょっと面倒だから、すぐやりたいことがあるから、というときには、こんな接続もありではないかと思います。

 
chattering_circuit


 マイコンにスイッチを単純につなげただけの回路…
 それだと不定になるので対処を行った回路…
 その対処と、さらにチャタリングも防止した回路…

 このページでは3種類のスイッチ回路を紹介します。
 次はこの2種類目の回路です。(下図)
 電子工作では一番よく見かけるスイッチの回路だと思います。

 下図のこの回路では「不定」の問題について対処しています。
 スイッチオンではグランドにつながり、スイッチオフでは、3.3Vにつながります。
(※スイッチオンでグランドにつなげたとき、3.3Vにも抵抗を介してつながったままだが、なぜこれで大丈夫なのか。これについては知りたいところですが、私の課題です)
(※スイッチオンでグランドにつなげることを「負論理」というが、これはどういうことか。この説明も課題です)

 こうすることで、不定ではなくなり、安定した回路になります。
 ただし、オンとオフを瞬間的に繰り返すチャタリングの問題はまだ残っています。
 でもそんなにこだわらない場合は、この回路で十分かもしれません。

(※ 回路図の右上のスイッチ部分と、左下のリセットスイッチ部分が ほぼ同じ回路になっています。リセットも同じスイッチの回路ってことですね)
  
chattering_circuit

 ところで、このようにチャタリングする回路を示しても、これが本当にチャタリングしているかどうか気になりませんか?

 チャタリングするときの波形とか、ネットや書籍で模式図が示されていると思いますが、オシロスコープで実際に測定したチャタリングの波形はあまり見かけない気がします。自分が作ったスイッチの回路がどんなふうにチャタリングしているのか実際にみたいですよね?
 このページの後のほうでやり方と写真を掲載しようと思います。


【4】チャタリング防止回路


chattering_circuit

 スイッチを緑の部分のようにして取り付ければ、チャタリング防止スイッチになります。
 私がこのような回路を作ったのではなくて、本を見ました。

電子工作の素『電子工作の素』後閑哲也 著 技術評論社 刊  2580円+税

良書だなぁと、私は思ってます。
この本のP172~P173でチャタリングについて記述されています。
上記回路の各抵抗の意味もざっと説明されています。
有名なpicfun.comのサイトの方の著書です。


【5】チャタリングする回路は、本当にチャタリングしている?

 チャタリングする回路と、チャタリング防止回路の2つを比べてみたいので、上記の各回路図をひとまとめにして、スイッチで点灯させるLEDも付けたのが次の回路です。

回路図
test_circuit


上図の回路を実際に組んでみると 下の写真のようになります。
test circuit photo

 ※C言語(MPLAB C30)ソースコードはこのページの最後です。


 この回路でチャタリングするスイッチと、チャタリング防止のスイッチと2つのスイッチを押してみて、LED点灯のようすを見たところ、特に違いがわかりませんでした。
 LEDを点灯するだけといった用途ではチャタリング防止は必要ないということですね。

 先に述べたように、1回目のスイッチオンでAの処理、2回目のスイッチでBの処理というように、処理を分けることで違いを見ることができると思います。
 それか、オシロスコープでチャタリングの波形を見ることです。

 ここではオシロスコープでチャタリングの波形を見ることにします。


【5.5】オシロスコープの『トリガ』機能を使う

osciオシロスコープ

オシロスコープはそのままだと、せわしなく波形が動いていて、チャタリングのようなごく一瞬の様子は、すぐに過ぎ去ってしまいます。

ここでオシロスコープの『トリガ』という機能が必要になります。
難しそうで、ちょっとめんどくさそうにも思えますが、なんとか使います。

以下は私が自分用に作成したトリガ機能の操作手順マニュアルです。
下記で「立ち上がり」と言っている部分は、今回は「立ち下り」となります。
つまり電圧が上から下へ下降した際に、その瞬間をとらえよう、ということです。
オシロスコープの機種はインステック社の「GDS-1072A-U」です。

トリガ機能を使えば、ある条件で波形を止めて観測することが
可能だと思うが、実際はどうなのだろうか。


***

●ある信号の立ち上がりで画面を固定するには以下のようにする。
   
1. オシロスコープ操作パネルの TRIGGER 欄の MENU ボタンを押す。
2. 画面の 型式 ボタンで エッジ を選ぶ。
3. 操作パネルの TRIGGER 欄の LEVEL つまみで トリガレベル を調節する。
ある信号のハイが3.3Vなら、3V付近にする。
   
4. 画面の スロープ/結合 ボタンを押す。項目それぞれ以下のようにする。
       
スロープ        立ち上がり
結合            DC
除去フィルタ    オフ
ノイズ除去        オフ
       
5. 画面の 前に戻る ボタンを押す。

6. 次に、画面の モード ボタンで ノーマル にする。
オート     通常通り、画面を動かし続けるが、トリガがあるとトリガがあったことを表示して知らせる。
ノーマル    トリガのたびに画面を更新する。
SINGLE        SINGLEボタンを押す。1回のトリガを表示し以降は何もしない。Run/Stop ボタンで解除。
7. 画面の ソース ボタンは プローブ の CH1, CH2 を選べる。


以上で条件が合えば、トリガされて、画面に表示される。
画面に表示されたら、一般的な操作で波形を大きく表示したりできる。


●表示されない場合:

ケース1 トリガできたが、信号が画面外にある
→操作パネルの HORIZONTAL 欄の TIME/DIV つまみで時間軸を縮めてトリガし直したり、HORIZONTAL 欄の 左右 つまみを回して探したりする。
           
ケース2 測定したい条件が、小さな電圧で、トリガレベルが高い状態のとき、いつまでも測定されない。
→ 操作パネルの TRIGGER 欄の LEVEL つまみで トリガレベル を下げる。
       

●その他の機能:
       
ホールドオフ
波形の中にトリガが かかることができる信号が複数あるような波形の観測で使う。トリガ後の不要部分を時間でスキップ。


以上のような操作でトリガした画像が下図です。

チャタリングした波形3枚と、チャタリングを防止した画像1枚(伏せました)です。
画像はオシロスコープの ハードコピー ボタンでUSBメモリに保存した画像です。


chat1チャタリングした波形1

ボタンを押した瞬間、下部でぐずっています。
瞬間的にオンオフを繰り返してはいませんが、オンになりそうな、ならなそうな、優柔不断な動きにはなっています。

chat2チャタリングした波形2

こちらは、一瞬下がろうとして、また戻って。
ちょっと下がったときに、もしかしたらマイコンは「オン」したね、と検知するかもしれません。

chat3チャタリングした波形3

こちらは、グズグズ、スコンって感じです。

チャタリングを防止していない回路では、ボタンを押すたびに、以上のように万華鏡のごとく、いろいろな波形になります。


nochatそして、チャタリングを防止した波形

チャタリングを防止した回路では、どうなるでしょうか。
ご自分で実験して観察してください。
新しい発見があると思います。



以上の通り、チャタリングする回路は、確かにチャタリングしていました。
ここまで読んでくれてありがとうございました。m(__)m

テストに使用したソースコードはこんな感じです。特に変哲のないものです。
MPLAB C30 (PIC24用Cコンパイラ)

#include "p24HJ32GP202.h"
#define     F_CPU    40000000UL

_FBS(BSS_NO_FLASH & BWRP_WRPROTECT_OFF )
_FGS(GSS_OFF & GCP_OFF & GWRP_OFF )
_FOSCSEL(FNOSC_PRIPLL & IESO_ON)
_FOSC(FCKSM_CSECME & IOL1WAY_OFF & POSCMD_XT )
_FWDT(FWDTEN_OFF & WINDIS_OFF)
_FPOR(FPWRT_PWR32 & ALTI2C_OFF)

int main() {

    //          fedcba9876543210
    TRISB =     0b1111110011011111;    //1: input, 0: output
    TRISA =     0b0000000011101111;
   
    while( 1 ) {
            if( ! PORTBbits.RB6 ) {
                LATBbits.LATB8 = 1;
                LATBbits.LATB9 = 1;
            } else {
                LATBbits.LATB8 = 0;
                LATBbits.LATB9 = 0;
            }
            if( ! PORTBbits.RB7 ) {
                LATAbits.LATA4 = 1;
            } else {
                LATAbits.LATA4 = 0;
            }
    }
   
    return 1;
}


以上
***

『How 2 make ? コーナー ~そのWEBコンテンツ、どうやって作るの?~

 インターネットのホームページでは巧みなGIFアニメーションが掲載されていたりしますが、それらを作ったソフトウェアは何か?といった情報は一緒に掲載されていません。
 このページでも同じようなニーズがあるかなと思って、どんなソフトウェアを使ったのか紹介したいと思います。

how2マイコンとスイッチをつなげた図
 → 「Microsoft Excel 2010」 の作図機能

Excelは計算もできるし、作図もできるし、ちょっとしたアプリケーションも作れて、よくよく考えてみればとても便利ですね。

how2理科の実験の回路図
 → 「Microsoft Excel 2010」 の作図機能

理科の実験の回路図もExcelを使っています。
豆電球の中のフィラメント(スプリング状のもの)は、曲線を加工(曲線を形作る頂点のハンドルをいじる作業)して作ります。慣れるまでは正体不明の作業だと思います。

how2スイッチを押した図
 → 「Microsoft Excel 2010」 の作図機能

指の図は、爪などはプリセットで用意されている半月状の図形を使うとか、そうやって手軽に作ります。

私はドローの作図はExcelを愛用しています。

how2画像の一部の色を変更
→ 「Paintgraphic2 Pro」の「特定の色相を変換..」機能

いつもPaintgraphic2 Proを使っています。
でも どことなくクセのあるソフトで、初心者の方にはとっつきにくいと思います。
(ソースネクスト 価格4500円程度)


how2回路図
 → 「D2CAD」

有名なソフトです。シェアウェアですが無料でも使えます。
結構使いやすいですが、多少のバグがあるみたいです。
開発が進められていないのが残念。

how2このページ
 → 「BlueGriffon」

フリーウェアのホームページオーサリングツールです。
有名なKompozerというソフトと同じ流れで生まれたソフトのようです。
まだ開発途中のようで、完成度は低めの状態です。
「オーサリング」とは素材を組み合わせて文書を作ることです。
活用前の「author」とは作家、作品、創始者といった意味です。
画面を見ると、難しそうに感じるかもしれません。中級者用かな…?


(余談) Word2010の作図機能を使わない理由:

・拡張子docxのWord2010ファイルのとき、複数の図形をマウスの範囲指定で一度に選択できません。これはキャンバスを使えば選択できるようになります。しかし、キャンバスでは図形の整列ができません
・拡張子docの互換ファイルのとき、上記の問題は起きません。しかし、作成した図形をコピーして他のアプリケーションに画像として貼り付けできません

というように、キャンバスなり互換ファイルなり、対策を取った先で別の問題が発生しているのでWord2010の作図は他のアプリのためには使えないと思います。Excel2010ではこのWord2010の問題が一切ないのでオススメなのです。

以上
2013/9 d_kawakawa

ページ制作 homepage6047


ページの上端へ (もくじ開く)