R_Castleのアイコン画像
R_Castle 2020年04月20日作成 (2020年04月23日更新)
セットアップや使用方法 セットアップや使用方法 閲覧数 30490
R_Castle 2020年04月20日作成 (2020年04月23日更新) セットアップや使用方法 セットアップや使用方法 閲覧数 30490

DCモーターをArduinoUnoで動かしてみる(その1)

モーターを回してみよう

前回の記事でもご紹介した様に、Arduinoマイコンボードで何か動くものを作ろうとした時、角度を自由に設定可能なサーボモーターを利用出来ることは非常に便利です。

記事リンク:ラジコンサーボモーターをArduinoで動かしてみる(その1)
記事リンク:ラジコンサーボモーターをArduinoで動かしてみる(その2)

ですが、動かそうとする物の内容によっては自動車のタイヤや船のプロペラの様に、自由に回転させ続ける様な動作を制御する必要も生まれてきます。

モーターの動作原理とArduinoUnoへの接続

Arduino各種に限らずほとんどのマイコンボードは、高速で信号を処理する事が出来る代わり制御できるのはスイッチのON/OFF、つまり電圧があるか無いかについてコントロールするだけです。

これに対して、電子工作などで使用する様なモーターのほとんどは、電磁石の原理を応用して電流を力に変えて回転しています。
これらの動作原理については電子部品のメーカーサイトに動作原理から高度なモーターに関する例まで、大変詳しく解説されていますので一度ご覧いただく事をお勧めし、ここでは動作原理についての詳細説明は省かせて頂きます。

Rohm社のモーター制御に関する技術情報サイト
WEBサイトリンク:「TechWebMotor」

簡単にまとめてしまうと、モーターとは磁石で作られた空間の中に収められた電線を巻いたコイルに電圧を加え、コイルに流れる電流で回転する力を生み出すことが出来る部品、という事になります。
ここで重要になるポイントが2点ありますので改めて確認しておきます。

マイコンボードからのON/OFF制御でコントロールできるのは電圧だけ
マイコンICを経由して流すことが出来る電流は非常に少ない

つまり、マイコンICからモーターを自由に動かそうとするプログラムを実行する場合、2つの間で大きな電流をコントロールすることが出来る電子部品による回路を用意する必要があるのです。

モーター使用時の注意

電子回路でモーターを制御する時は「整流ダイオード」の追加を忘れない様に注意しましょう。

モーターは電流をコイルに流す事で生まれる電磁石の効果を利用して回転する部品です。
ですが、スイッチを急にOFFにしたり、外からの力が加わる等によってモーターが回転を続けた場合、モーターは発電機の様に電圧を発生します。
発生する電圧は瞬間的に非常に大きな値になる事があり、場合によっては制御回路の半導体を破壊してしまう事があります。
これを逆起電圧といい、予防の為に発生した逆起電圧を逃がす目的でモーターにダイオードを取り付けます。
このダイオードを特に「整流ダイオード」と呼び、普段電圧が加わる方向とは逆方向にモーターに取り付ける事で、逆起電圧が発生した時のみ電流が流れて制御回路を破損から保護する効果を発揮します。

整流ダイオードの入った回路例

簡単な回路を作る時にはつい忘れがちになりますが、思いもよらないトラブル防止の為に覚えておくと良いと思います。

マイコン制御の基本「トランジスタ制御」

あらゆるマイコン電子工作で必ず使う事になる電子部品の一つ、それがトランジスタです。
トランジスタの例

「抵抗やLEDは知ってるけど、トランジスタって何?」

という方も少なくないと思います。
トランジスタとは、マイコンICなど少ない電流しか流せない制御信号から、今回のモーターやスピーカー等、大きな電流や電圧を必要とする機器を制御する事が出来るようになるスイッチのような役割を持った、半導体と呼ばれる電子部品の一種です。
現在では更に高性能な増幅素子としてFETと呼ばれている物や専用のモータードライブIC等も開発されています。ですが、純粋に1個の信号を制御したい時など今でもトランジスタによる制御回路を利用する事例は沢山ありますので是非覚えておきましょう。

トランジスタの詳細な区分やそれぞれの特徴、増幅回路と呼ばれる信号制御の方式について説明を始めると、それこそ電気の歴史みたいになってしまいますので、ここでは省電力の信号制御を主な用途にしている「バイポーラトランジスタ」について使い方を説明したいと思います。

トランジスタの回路記号

バイポーラトランジスタには「NPN型」と「PNP型」があります。
三本の端子が出ているのが一般的で、それぞれE:エミッタ、C:コレクタ、B:ベースと呼ばれています。

NPNトランジスタはベース-エミッタ間に流れる電流を制御する事でコレクタ-エミッタ間に流れる電流を制御することが出来ます。
PNPトランジスタの場合は少し複雑になり、ベース-コレクタ間の電圧を制御する事でエミッタ-ベース間に流れる電流が変化し、この電流の変化でエミッタ-コレクタ間の電流を制御する事が可能になっています。
両タイプのトランジスタで簡単なON/OFFを制御する回路を描くと、下図の様になります。

制御回路の例

それぞれの使い方に適した用途がありますが、マイコンの制御電源と別の電源を使用する事が多いモーター等の機器を使用する場合はNPNトランジスタによる制御回路を構築する事が多いと思います。

トランジスタ制御回路の構築

実際にトランジスタを使いモーターを動かす回路を構築してみます。
最初に使用するモーターの使用を確認します。

マブチモーター「FA-130RA-2270」仕様

詳細についてはマブチモーター(株)公式サイトのカタログスペックもご覧ください。

項目 単位
型式 FA-130RA/2270
電圧 動作範囲:1.5~3.0(公称値:1.5) V
無負荷時回転数 9100 r/min
無負荷時電流 0.20 A
定格回転数 6990 r/min(最大効率時)
定格電流 0.66 A(最大効率時)
定格トルク 0.59/6.0 mN・m/g・cm(最大効率時)
定格出力 0.43 w(最大効率時)
ストールトルク 2.55/26 mN・m/g・cm
ストール電流 2.20 A

ここで消費電流が0.66A=660mAとあります。制御に使用するトランジスタはコレクタにこの値が流せないと安定して制御する事が出来ないのですが、ここで一つ注意があります。
モーターは止まっている状態から急に動き出した時や、突然加速する様な制御をした場合、定められている値を上回る大きな電流が流れる事があります。
これを突入電流といい、カタログに記載がある場合を除けば、大体1.2倍~1.5倍程度の電流が瞬間的に流れます、と考えて置けばいいと思います。

モーターの仕様書等に記載のある「ストール電流」とは、構想上の最大トルクが発生している=モーターが回転できない状態のときに流れる最大の電流値を示します。通常ストールする様な状態でモーターを使用するのはたいへん危険ですので、動くものを作る時はモーターのトルクに余裕があるものを選定して、それを充分制御できるトランジスタ等の電子部品を選ぶようにしましょう。

今回は消費電流660mA×1.2倍=792mA、区切りよく800mAが流せるトランジスタを選定します。
電子部品のカタログや通販サイトを調べるとコレクタ電流がちょうど800mAのトランジスタに「2SC2120-Y」が見つかりました。
このトランジスタを使用する事にして、制御に必要なベース電流の値をデータシートに記載されているグラフから確認します。

多くの通販サイトが電子部品のデータシートをダウンロードできる様になっていますが、見つからなかった場合は検索サイトで
「(部品の型番) データシート」
と調べてみると良いでしょう。

データシートから電流値を確認して、マイコンとベース間に割り込ませる抵抗の値を計算で求め電子部品を準備します。

ベース電流を求める為のグラフ
最初に、データシートから「コレクタ・エミッタ間電圧 VCEV_{CE}」と「コレクタ電流 ICI_{C}」の関係を示したグラフを見つけます。
今回モーターを動作させる電圧は3Vを想定していますので、横軸VCEV_{CE}が3Vのところから上に登っていき、グラフの線が交わる交点を探します。
電圧と電流の交点を見つけます
一番上の交点が750mA位のところを示しています。先ほどの計算では定格電流660mAの1.2倍で約800mAと想定しましたが、グラフ上最大値は750mA位になるという事の様です。

ベース電流を読み取ります
交点からそのまま右にずらしていくと、グラフの右側にも数字が並んでいます。この数値が必要なベース電流の値を示しています。今回の場合6mAと7mAの大体中間を示していますから、ベース電流は6.5mAという事になります。

使用しているArduinoUnoのピン出力は5Vですから、必要な抵抗の値は

(信号電圧5V)÷(ベース電流6.5mA)=769Ω

という事になります。カーボン抵抗は連即した数字2桁×10のn乗で使用が定められているので、近い値である750Ωの抵抗を選定し、回路を構築してみましょう。

モーター駆動回路の例

選定した部品で回路を構築したら、1秒おきにモーターをON/OFFするプログラムを動かしてみましょう。

1秒おきにモーターを回転/停止させるプログラム

/*****************************************************************/ int Motor = 13; // モーター動作確認用に13番ポートのLEDも利用します。 int Time = 1000; // 連続動作時間を指定します。 void setup() { pinMode(Motor, OUTPUT); } void loop() { digitalWrite(Motor, HIGH); // モーター回転 delay(Time); digitalWrite(Motor, LOW); // モーター停止 delay(Time); } /*****************************************************************/

今回はプログラムが簡単です。周辺の回路の準備が出来れば、制御するプログラム自体はそう難しくないという事が判ると思います。
また、今回の回路はモーターを1方向にON/OFFするだけになっています。この様な制御回路は「I(アイ)ブリッジ」と呼ばれており、方向固定の回転制御を行う時に使用されています。
ですが色々動く電子工作を作る様になると、回転方向の切り替えを含めた速度コントロールが出来る様になった方が何かと便利です。

次回の投稿では、モーターの回転方向迄制御できる「Hブリッジ」の概要を説明した上で、もっと手軽にモーター制御が行えるドライバーICのコントロール方法について解説したいと思います。

3
  • R_Castle さんが 2020/04/20 に 編集 をしました。 (メッセージ: 初版)
  • R_Castle さんが 2020/04/23 に 編集 をしました。 (メッセージ: 整流ダイオードに関する記述追加しました。)
ログインしてコメントを投稿する