2015年07月25日

割り込み処理 -第1回:割り込みとは

Arduinoは色々な部品でできており、その中でもプログラムを実行している頭脳のような部品のことをマイコンといいます。マイコンはArduinoだけでなく多くの機器に使われています。
今回はマイコンが持っている機能の割り込み処理について説明します。


目次



1. 割り込み処理とは

割り込み処理の前にプログラムを実行する流れについて説明します。プログラム1つ1つの動きを処理と呼ぶことにします。プログラムを実行するとこの処理を順番に実行していきます。Arduinoの場合は最後の処理を終えた後、最初に戻ってまた順番に処理を実行していきます。

例えば、Arduinoに処理1〜5まであるスケッチを実行させると、Arduinoはそれらの処理を順番に実行し繰り返します。これが普通の流れです。

処理1 → 処理2 → 処理3 → 処理4 → 処理5 → 処理1 → 処理2 → 処理3 → …


一方、割り込み処理を行う場合は、文字通り別の処理が割り込みます。割り込み処理では、
「ある状態を割り込み条件とし、その条件を満たしたらそれまで行っていた処理を一時中断し割り込み処理を実行する。割り込み処理を終えたら元の処理を再開する」
ということを行います。

例えば、先ほどの処理1〜5まであるスケッチで割り込み処理が実行されるとこのようになります。

処理1 → 処理2 → 処理3 → 『割り込みの条件を満たす(割り込み発生)』割り込み処理処理3の再開 → 処理4 → 処理5 → 処理1 → 処理2 → 処理3 → …

処理3でなくても、割り込みが発生すればいつでも割り込み処理を実行します。

処理1 → 処理2 → 処理3 → 処理4 → 処理5 → 処理1 → 『割り込み発生』 → 割り込み処理 → 処理1の再開 → 処理2 → 処理3 → …


このように割り込み処理を行うことで、ある条件で行いたい処理を即座に実行することができます。


2. 割り込み処理の例

割り込み処理の例として、以前作成した7セグメントLEDを使ったタイマーを割り込み処理に変えた場合を説明します。

元々のスケッチの処理は大きく分けて3つです。この3つを順番に実行しています。
処理1:スイッチが押されたかの判定
処理2:表示する数字を計算
処理3:7セグメントLEDに数字を表示

23_割り込み処理_1.png

これを割り込み処理に変えるために、割り込み条件割り込み処理を加えます。割り込み条件は「スイッチが押された」にしようと思いますので、元々の処理1を削除します。
割り込み条件:スイッチが押されたとき
割り込み処理:スイッチが押された場合の数字を計算
処理1(元処理2):表示する数字を計算
処理2(元処理3):7セグメントLEDに数字を表示

これで割り込み処理を実行できるようになりました。
割り込みが発生しないときは処理1と処理2を実行し続けます。

23_割り込み処理_2.png

スイッチが押される(割り込み発生)とそれまで行っていた処理を一時中断し、スイッチが押された場合の数字を計算(割り込み処理)し始めます。それを終えると、元の処理に戻ります。

23_割り込み処理_3.png

割り込み処理の例の説明は以上です。


3. 割り込み処理の利点

割り込み処理の例として7セグメントLEDを使ったタイマーを説明しましたが、正直に言うと先ほどの例は割り込み処理でやってもやらなくても大して変わりません。割り込み処理の利点は割り込みが発生したら即座に処理が実行されるということです。逆に言えば即座に実行される必要がないのなら割り込み処理は不要です。
先ほどのタイマーの場合、人間がスイッチを押す動作はArduinoがスイッチの入力を処理する動作より遅いので、即座に実行する必要はありません。ですので、わざわざ割り込み処理を使う必要はありません。


割り込み処理の利点が活かせる例はある信号が変化した回数を数えるといった場合です。

割り込み処理を使わずに信号が変化した回数を数えると、信号の変化を数える処理とその他の処理が必要になります。
処理1 :信号が変化した回数を数える 
処理2:その他 

この場合、処理2を実行している間に信号が変化しても、その回数は数えられません
下図の場合、信号が3回変化していますが内2回は処理2実行中に変化していますので、プログラムが数えられるのは1回だけです。

23_割り込み処理2_1.png

一方、割り込み処理を使った場合はこのようになります。割り込み条件を信号が変化したとき、割り込み処理は信号が変化した回数を数える、です。
割り込み条件 :信号が変化したとき 
割り込み処理:信号が変化した回数を数える 
処理1(元処理2):その他 

割り込み処理を使えばその他の処理を行っていても、即座に信号が変化した回数を数える処理に移れるので、回数を正確に数えられます。
下図の場合、信号の変化に対して3回とも割り込みが発生しますので。正確に3回数えられます

23_割り込み処理2_2.png

このように素早く変化する信号を確実に捉えたいときは割り込み処理が大いに役立ちます。


これで割り込み処理の説明は終わりです。
次回は実際にarduinoを使って割り込み処理を使います。


マイコンのしくみと動かし方 [ トランジスタ技術special編集部 ]

価格:1,944円
(2015/7/24 11:13時点)


posted by ました at 10:49| Comment(0) | TrackBack(0) | 電子工作の知識 | このブログの読者になる | 更新情報をチェックする

2015年07月20日

モーター制御 -第3回:トランジスタで動かす

前回はダイオードを使ってトランジスタをモーターの逆電圧から保護する方法について説明しました。
今回はArduinoやトランジスタを使ってモーターを動かします。


目次



1. スイッチング回路の設計

モーターの制御はトランジスタによるスイッチング回路で行います。回路は次の順番で設計します。
  • モーターの電流確認
  • トランジスタ選定
  • ベース設計

モーターの電流確認

モーターを動かすために必要な電流を確認します。
LEDの場合は順電圧や抵抗値から順電流を計算できました。モーターの場合はLEDとはまったく違い、特性を表す性能線図から計算します。
下図は使用するモーターFA-130RAの性能線図です。

17_FA-130RA負荷特性.PNG

色々な線がありますが、表している内容はある重さの物を回すのに必要な力(トルク)電流回る早さ(回転数)の関係です。性能線図は左に行くほど回す物が軽いときの、右に行くほど回す物が重いときの関係を表しています。

17_モーター負荷特性_1.png

あるトルクにおける電流と回転数を知りたいときはそのトルクから線をまっすぐ上に引き、電流や回転数の曲線とぶつかるところを探します。線がぶつかったら、そのぶつかったところから線をまっすぐ横に引きます。その横線の値が電流や回転数の値です。

例えば、重い物(トルク:2.5[mN/m])を回すときは電流が約1.5[A]、回転数は約3500[rpm]です(下図上側)。一方、軽い物(トルク:0.25[mN/m])を回すときは電流が約0.15[A]、回転数は約11000[rpm]です(下図下側)。
このように軽い物を回すときは電流が少なく回転が早いですが、重い物を回すときは電流が多く回転が遅いです。

17_モーター負荷特性_2.png

17_モーター負荷特性_3.png

このようにして、モーターに流れる電流は回したい物のトルクと性能線図を元に、線を引いて求めます。

今回モーターで回す物は軽いので0.15[A]くらいしか流れないとは思いますが、回す物が思ったより重い場合に備えて1[A]を想定してスイッチング回路を設計します。

トランジスタ選定

スイッチング回路で1[A]以上流せるトランジスタを選びます。選んだのは秋月電子通商の「トランジスタ 2SC2655L−Y 50V2A (10個入) / 通販コード I-08746」です。
2SC2655の最大コレクタ電流は2[A]ですので、余裕を持ってモーターを動かすことができます。

IMG_8360.jpg

ベース設計

ベース側回路の設計をします。必要なのは、コレクタ電流、増幅率、ベース-エミッタ間電圧、ベース制御電圧です。
ベース制御電圧はArduinoのデジタルピンを使用するので5[V]それ以外の値は2SC2655のデータシートに書いてあります。ただし、計算に使う値はモーターが確実に動くようデータシートの値より少し多くしたり少なくしたりしています。

コレクタ電流を1[A]、トランジスタの増幅率を40倍とします。そうすると、必要なベース電流は25[mA]です。Arduinoのピンは最大40[mA]流せますので、これくらいなら流せます。
$\displaystyle{ \frac{1}{40} = 0.025[A] = 25[mA] }$

ベース-エミッタ間制御電圧を5[V]、ベース-エミッタ間電圧を1[V]とすると、ベース電流を25[mA]以上にするにはベース抵抗を160[Ω]以下にすればよいです。E系列の中で160[Ω]に近くて小さい値は150[Ω]なので、150[Ω]を採用します。
$ \displaystyle{ \frac{5-1}{0.025} = 160[\Omega]}$

これでスイッチング回路の設計が出来ました。

20_DCmotor_Arduino_TrSwitch_schem.png


2. その他の回路の設計

モーターを手動で動かせるようにスイッチのプルダウン回路を付け加えます。回路は以前LEDをスイッチで制御した回路と同じです。

20_DCmotor_Arduino_Pulldown_schem.png


3. 組み立て

スイッチング回路とその他の回路の設計が終わりましたので、この2つの回路を組み合わせると回路は完成です。1項のスイッチング回路と2項のプルダウン回路を組み合わせた回路が下図です。

20_DCmotor_Arduino_schem.png

上図の回路図をブレッドボードに組み立てたのが下図です。

19_DCmotor_Arduino_bb.png

IMG_8353.jpg

ダイオードの取り付け場所ですが、モーターに直接半田付けしています。これは逆電圧を少しでも早く逃がすためです。
電気にもはやさがありますので、線の長さによって電気が届く時間が変わりますモーターとダイオードの距離を短くすることで、少しでも早く逆電圧を逃がそうとしています。
とはいえ、これくらいの電流のモーターですと多少モーターとダイオードの距離があっても問題はないと思います。


4. スケッチ

スケッチはArduino公式が公開しているサンプルスケッチButtonを使います。2番ピンがHIGHになる(=スイッチを押す)と13番ピンがHIGHになる(=モーターが回る)スケッチです。


5. 動かす

これが実際に動かした動画です。スイッチを押す度にモーターが回っています。



これでArduinoを使ってモーターを回すことが出来ました。
次回やることは未定ですが、そろそろスケッチをもう少し作り込もうかなと思っています。


参考資料

  1. 作者名:マブチモーター. ページ名:"性能線図の見方と使用例". サイト名:マブチモーター. http://www.mabuchi-motor.co.jp/ja_JP/technic/t_0201.html, (参照 2015-07-19)


サインスマート RFID マスターキット モーターサボー、LCD、多種のセンサー Arduino IDE/AVR/MCU勉強者用

価格:11,300円
(2015/7/20 13:28時点)


posted by ました at 13:29| Comment(0) | TrackBack(0) | 電子工作の実践 | このブログの読者になる | 更新情報をチェックする

2015年07月12日

モーター制御 -第2回:ダイオード

前回はモーターとトランジスタを直接繋いでしまうと、モーターの逆電圧でトランジスタが壊れるという話をしました。
今回は逆電圧の保護対策とそのために使用するダイオードという部品について説明します。

10_モーター回路保護付き_1.png


目次



1. ダイオードの説明

ダイオードというのは電流を一方方向にだけ流す部品です。ダイオードには使用目的によってたくさんの種類あります。今回は使用するのは一般整流用ダイオードです。
ダイオードには足が2本あり、それぞれの足をアノードカソードといいます。ダイオードには方向があり、アノードからカソードへ向かう方向を順方向、カソードからアノードへ向かう方向を逆方向といいます。電流は順方向のときに流れ、逆方向では流れません
これがダイオードの回路図と写真です。回路図も写真も線が入っている方がカソードです。

09_ダイオード_1.png

電気を水で例えるとダイオードは弁のようなはたらきをします。。順方向では弁が開き水が流れますが(下図上側)、逆方向では弁が閉じ水が流れません(下図下側)。

09_ダイオード_3.png

09_ダイオード_2.png


2. ダイオードによる逆電圧保護

ダイオードを使い逆電圧を逃がすことで、モーターに接続されているトランジスタを保護します。
これがダイオードで保護したときの回路です。モーターとダイオードを並列接続しています。ダイオードの向きは電源の+側にカソード、-側にアノードです。

0709_DCmotor_Diode_schem.png

スイッチがONのときはダイオードの向きが逆方向となるので、モーターのみに電流が流れ、モーターが動きます。

10_モーター回路保護付き_2.png

スイッチがOFFになった瞬間逆電圧が発生します。このときダイオードの向きは逆電圧に対して順方向ですので、逆電圧で発生した電流はダイオードへ流れ、逆電圧を抑えることができます。

10_モーター回路保護付き_3.png

下図はダイオード保護回路なし(上側)と保護回路あり(下側)で逆電圧が発生したときのモーター電圧波形です。保護回路なしの場合は約-160[V]の逆電圧が発生していますが、保護回路ありの場合は約-10[V]に抑えられています。

10_逆電圧波形保護ありなし_1.png

10_逆電圧波形保護ありなし_2.png

逆電圧が完全になくなったわけではありませんが、こうすることでトランジスタが逆電圧で壊れる可能性が大幅に減ります。


このようにダイオードを使うことで、モーターから発生する逆電圧を抑えることができます。
この逆電圧はモーターに限らずコイルを使った部品ならばなんでも発生します。例えばリレー(コイルを使ったスイッチのようなもの)を使用した場合も逆電圧対策としてダイオードが必要です。
次回はArduinoでモーターを動かしてみます。


参考文献

  1. 村田製作所. "ダイオードとは?". 村田製作所ホーム. http://www.murata.co.jp/elekids/compo/diode/, (参照 2015-7-10)
  2. Panasonic. "電子回路におけるリレー使用上のご注意". Panasonic邦人のお客様. https://www3.panasonic.biz/ac/j/control/relay/app_circuits/index.jsp#ANCHOR1, (参照 2015-7-10)


広告

電子回路がわかる本 なるほどナットク! / 宇田川弘 【単行本】

価格:1,296円
(2015/7/12 18:39時点)



posted by ました at 18:41| Comment(0) | TrackBack(0) | 電子工作の実践 | このブログの読者になる | 更新情報をチェックする