• Skip to main content
  • Skip to primary sidebar
  • Skip to footer
  • HOME
  • Arduino
    • Arduino初心者編
    • Arduino基礎編
    • Arduino応用編
    • Arduino実践編
  • Raspberry Pi
  • microbit
  • XBee
  • Scratch
  • Contact Us
  • Privacy Policy

STEMSHIP

ものづくりを通して、科学を学ぼう!

現在の場所:ホーム / Arduino / Arduino初心者編 / Arduino初心者編:DCモータをモータドライバL293Dで制御する

Arduino初心者編:DCモータをモータドライバL293Dで制御する

2020年7月26日 by STEMSHIP コメントを書く

モータにはいくつか種類がありますが、DCモータは最も単純で基礎的なものです。このDCモータの回転速度や回転方向を手軽に制御するために、DCモータの構造やHブリッジ回路、モータドライバL293Dを使用した回路やプログラム、TINKERCADシミュレーションについて紹介します。

DCモータの構造

ホビー用モーターで最もシンプルでよく使われるのがDCモータです。電池式の扇風機やパソコンの冷却ファンでも使われています。

DCモータは永久磁石の磁界内に配置された回転コイルを介して電流が流れます。電流が流れた事によってコイルに力が発生し、その結果コイルが回転します。力が発生する向きは、電流方向が反対になると反対になります。したがって、モータが回転運動を得るために磁界が発生する向きは、コイルに流れる電流の方向が、摺動(しゅうどう)接点を介して半回転ごとに反転するようにしています。

注:図とアニメーションの電流の向きは異なるため、力の向きが異なっています。

Hブリッジ回路

DCモータには比較的大きい電流が必要です。工作用モータであれば、100mA~500mA程度が一般的です。そのため、Arduinoの出力端子から直接モーターを動力を動かす事は出来ません。Arduinoの出力電流は20mA程度であり、40mA以上流すと壊れてしまう恐れがあるため注意してください。Arduinoの出力電流不足を補うためにリレーの時に見たような、トランジスタ回路を使用します。リレーの代わりにDCモータを入れればいいのです。パルス幅変調により、電力を調整することでモータ回転速度を調整することもできます。

しかし、この回路では、モータの回転方向を変えることができないので 極性を逆にする必要があります。すなわち、モーターの両極を個別に制御する必要があります。単純にモータ両極を個別のトランジスタ回路の出力ピンに接続して、片方をHIGHに、もう片方をLOWに切り替えれば問題はすぐに解決出来るはずです。

リレー回路のRELAY1をDCモータに置き換えれば良い

モータドライバL293D

次の図はモータドライバL293DというICを使用した回路で、トランジスタ回路を三角形で表しています。入力(1Aまたは2A)がLOWの場合は、出力(3または6)もLOWに切り替わり、入力(1Aまたは2A)がHIGHの場合は、出力(3または6)もHIGHとなります。方向転換するためには、DCモータをL293の端子3と端子6に接続し、入力端子1Aと2AとにHIGHとLOWを交互に印加する事で、モータの回転方向を制御する事が可能です。Hの字に似ていることから、この回路はHブリッジとも呼ばれています。

ドライバー回路図には他にも入力端子があり、そこの部分にはイネーブル(EN)と記されています。モータを動作させる場合は、そこにHIGH信号を印加する必要があります。LOWに設定すると、ドライバの出力が完全にオフになり、ハイインピーダンス(Arduinoの入力ピンのような動作)になります。したがって、イネーブル端子にPWM信号を印加してモータ制御電力を調整できます。

このようなHブリッジ回路は集積回路(IC)として販売されており、Arduinoボードのマイクロコントローラと同じように、外観は黒色のパッケージです。一般的なモデルは先ほど述べたようにL293Dで、4つの独立したドライバを持っており、 2つの独立したモータを制御する事が出来ます。回転方向を変えなければ、4つのモーターを接続しても問題ありません(モーターの片方の線だけをドライバーに接続し、もう片方の線を動作電圧またはGNDに  接続する)。L293Dのもう一つの良い面は、DCモータのインダクタンスの影響を受けて発生するサージ電圧から,ドライバー部分を保護するためにフリーホイールダイオードを内蔵している事です。

DCモータ駆動回路

モータドライバL293Dを使用して、DCモータ駆動回路を作成します。次の例では、ポテンショメータを介してDCモータを制御します。ポテンショメータを一番右まで回したとき、モータは最高速度で回転します。ポテンショメータが中間位置の時はモータ静止します。ポテンショメータを一番左まで回したとき、最高速度で逆方向に回転します。

L293D の 4 つの内蔵ドライバのうち 2 つだけを使用しています。

集積回路(IC)は、ピン番号を正しい位置に合わせるために、片側(ここでは”L293D”の文字の左側)に小さな切り欠きがあります。この切り欠き部にあるピン番号が1で、そこから反時計回りに、2,3,4・・・と数えます。 対応するピン番号は、データシートで確認してみて下さい。

このスケッチでは,ポテンショメータの位置によって正転と逆転を区別し,PWM信号でモータの電力を制御しています。

#define POT  0
#define EN1  3
#define M1A  4
#define M1B  7

int pos = 0;
int MotorPower = 0;
boolean backwards = false;

void setup() {
  pinMode(EN1, OUTPUT);
  pinMode(M1A, OUTPUT);
  pinMode(M1B, OUTPUT);
}

void loop(){
  pos = analogRead(POT);
  
  if(pos >= 512)
  {
    backwards = false;
    MotorPower = (pos-512) / 2;
  }
  else
  {
    backwards = true;
    MotorPower = (511-pos) / 2;
  }   
  
  if(backwards)
  {
    digitalWrite(M1A, HIGH);
    digitalWrite(M1B, LOW);
  }
  else
  {
    digitalWrite(M1A, LOW);
    digitalWrite(M1B, HIGH);    
  }  

  analogWrite(EN1, MotorPower);
}

実際に回路を組んで実験してみると、特に中間のパワーレンジで、わずかにビープ音が聞こえるかもしれません。このビープ音は、Arduinoのパルス幅変調の周波数が人間に聞こえる範囲内にあるためです。パルスが電圧としてしか存在しない限り(調光LEDのように)認識する事は出来ませんが、今回の回路で音が聞こえたのは、モーターを振動させる事で空気に伝わり、可聴化出来るようになったからです。もしかしたら、路面電車や郊外の電車が近づいてきた時に、同じような音を聞いた事があるかもしれません。これらも似たような現象で説明出来ます。

シミュレーション

先ほどの回路をTINKERCADのシミュレーションで動作確認してみてください。ポテンショメータをクリックして、ポテンショメータを回してみると、マルチメータの表示電圧が変わります。それと同時に、オシロスコープでモニタしているPWMの幅も変わります。そのときのDCモータの回転方向や回転数も変わります。

Filed Under: Arduino初心者編 関連タグ:DCモータ

Reader Interactions

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。

最初のサイドバー

CONTACT US

  • Facebook
  • Twitter
  • Youtube

More to See

Arduinoベースのセンサノード:XBeeデータ収集ノードの製作

2021年9月27日 By STEMSHIP

Arduinoベースのセンサノード:Arduinoを使った温度センサの作製

2021年9月21日 By STEMSHIP

XBeeモジュールとBMP280センサを使用してデータ収集する

2021年5月31日 By STEMSHIP

XBeeモジュールでMicroPythonを使ってセンサを読み取る

2021年5月24日 By STEMSHIP

XBeeモジュールでセンサを読み取る:センサノードの設定と測定

2021年5月17日 By STEMSHIP

カテゴリー

  • Arduino (44)
    • Arduino初心者編 (15)
    • Arduino基礎編 (11)
    • Arduino実践編 (4)
    • Arduino応用編 (11)
    • Arduino番外編 (3)
  • MakeyMakey (1)
  • microbit (11)
  • Raspberry Pi (13)
  • Scratch (6)
  • STEM教育 (5)
  • XBee (15)
  • ものづくり教育 (2)
  • 子供の教育 (2)
  • 科学 (6)
  • 算数 (5)

Tags

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Footer

最近の投稿

  • Arduinoベースのセンサノード:スケッチ(プログラム)の作製
  • Arduinoベースのセンサノード:XBeeデータ収集ノードの製作
  • Arduinoベースのセンサノード:Arduinoを使った温度センサの作製
  • XBeeモジュールとBMP280センサを使用してデータ収集する
  • XBeeモジュールでMicroPythonを使ってセンサを読み取る

タグ

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Search

2023年3月
月 火 水 木 金 土 日
 12345
6789101112
13141516171819
20212223242526
2728293031  
« 10月    

Copyright © 2023 · STEMSHIP.COM