2016年9月25日日曜日

L298N Dual H-Bridge Motor Controller moduleを使ってみた。

フルブリッジドライバL298Nの動作確認していた矢先にAmazonで中国から購入していたL298N Dual H-Bridge Motor Controller moduleが到着しました。

同等品を国内で買うと¥1,500〜2,000するようなのですが、中国から購入すると送料込みで¥220〜300で買えてしまいます。勿論、到着まで1週間以上要したりハンダが劣化していたりと問題が皆無なわけじゃないですが趣味で使用する分には十分かと思います。

ちなみに、取り扱う上での情報は、
  • メインチップ、ST社の生産としてL298N。
  • 低発熱、優れた抗干渉性能。
  • 46Vする高い作業電力、大電流が3A MAXに到達し、現在継続することができる25ワットに2A、電源です。
  • 1つの2相ステッピングモータ、1つの4相ステッピングモータまたは2つのDCモータを駆動することができます。
  • 12V以上の駆動電力は、電源などの外部5V電源を使用してください時に内蔵78M05、しかし、ドライブの電源から電力を得ます。
仕様:
ダブルHブリッジドライブ
チップ:L298N(ST NEW)
論理電圧:5V
駆動電圧:5V-35V
論理現在:0ミリアンペア、36ミリアンペア
駆動電流:2A(MAXシングルブリッジ)
最大消費電力:25W
サイズ:約40 * 40 * 25ミリメートル

って感じの怪しい日本語しか掲載されていませんので、必要となる情報はネット検索となります。
結構簡単に情報見つかりますけどね。
で、自分なりにもまとめてみました。

全体的な構成とPINの配置は下図な感じです。
ヒートシンク(図の黒い塊の箇所)に囲まれているのがL298Nです。
PINの名称は、このモジュールの名称でなくL298NのPIN名称に合わせています。

外部電源(SUPPLY VOLTAGE VS)からレギュレータ(78M05)を介して駆動電圧5V(LOGIC SUPPLY VOLTAGE VSS)を供給出来るので図の左下部のジャンパを取り付けておけばArduinoからの電源配線は必要なくなります。
※外部電源の電圧が12V以下の場合のみジャンパ接続する事で給電できます。12V超の場合は、ジャンパを取り外しArduinoからLOGIC SUPPLY VOLTAGE VSSへの5V供給が必要となります。

ENABLE A、ENABLE BはジャンパでLOGIC SUPPLY VOLTAGE VSSと接続されていますが、ステッパーモーターの使用やらDCモーターの速度コントロールを行う場合は図の右下の様にジャンパを取り外しArduino上のPWM接続可能なPIN(Arduino UNO R3だと3、5、6、9、10、11のいずれか)と接続します。

実際に接続してみます。

L298Nに直接配線するよりはスッキリします。

次に、動作テストするためのスケッチです。

int enA = 10;
int in1 = 9;
int in2 = 8;
int enB = 5;
int in3 = 7;
int in4 = 6;

void setup() {
  pinMode(enA, OUTPUT);
  pinMode(enB, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  Serial.begin(9600);
}

void demoOne() {
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  analogWrite(enA, 200);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  analogWrite(enB, 200);
  delay(2000);

  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);
  delay(2000);
  
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
}

void demoTwo() {
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);

  Serial.println("analogWrite 0->256");
  for (int i = 0; i < 256; i++) {
    analogWrite(enA, i);
    analogWrite(enB, i);
    delay(20);
  }

  Serial.println("analogWrite 256->0");
  for (int i = 255; i >= 0; --i) {
    analogWrite(enA, i);
    analogWrite(enB, i);
    delay(20);
  } 

  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
}

void loop() {
  Serial.println("demo 1");
  demoOne();
  delay(1000);
  Serial.println("demo 2");
  demoTwo();
  delay(1000);
}

実行させると、正回転、逆回転、加速、減速を繰り返します。
シリアルモニタにも実行状況が表示されるので、正常に動作しているか確認してみましょう。

他のモータードライバモジュールもどの様なものかと調べていて、気になったのが秋月電子通商で取り扱っているL298N使用 2Aデュアルモーターコントローラーで、”制御は各モーターに対して、イネーブル(回転する/しない)と回転方向の指定を2線でおこないます。”との記載があり、どの様にしてるのだろう?と回路図のリンクがあったので調べてみました。
で、74HC00を使って制御しているのがわかったので、取り敢えず組んでみました。
※下図の状態だとHIGHの場合に正常動作しない事がわかりました。近日中に修正します。
74HC00を使用する場合、出力をプルダウンする必要があるそうです。

修正しました。30/Sep/2016
修正内容:
元の回路図と抵抗の位置を変更し、Arduino側からの信号は抵抗を介する様になっています。74HC00の入力時の抵抗は、5V動作時には不要なようですが3.3V動作時に不具合があったので取り付けてあります。また、PWM制御の際にもノイズが乗っているようなので、そちらも抵抗を取り付けています。

スッキリしていたのが、複雑化して本末転倒なのですが、上図のジャンパピンの箇所に『ENABLE A - 10』、『INPUT 1 - 9』と『ENABLE B - 5』、『INPUT 3 - 7』に接続していたものを接続すれば動作します。

74HC00は、2系統入力を持つNANDを4つ載せたICです。
真理値表
入力出力
LOWLOWHIGH
LOWHIGHHIGH
HIGHLOWHIGH
HIGHHIGHLOW

以上の様な動作をするので、2つのNANDを経由させることで”LOW"、"HIGH"を入力するだけで"HIGN - LOW"、"LOW - HIGH"の出力結果が得られます。停止はENABLEを0にする事で対応ってところでしょうか。

ほとんど意味ないですが、お遊びとして試してみました。

0 件のコメント:

コメントを投稿