工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

L298Nモータードライバー– Arduinoインターフェース、仕組み、コード、回路図

このArduinoチュートリアルでは、Arduinoを使用してDCモーターを制御する方法を学習します。 DCモーターを制御するためのいくつかの基本的な手法をよく見て、L298NモータードライバーとArduinoボードを使用してDCモーターを制御する方法を学習する2つの例を示します。

次のビデオを見るか、以下のチュートリアルを読むことができます。

DCモーターの速度は、モーターへの入力電圧を制御するだけで制御できます。最も一般的な方法は、PWM信号を使用することです。

PWMDCモーター制御

PWM、またはパルス幅変調は、高速で電源をオン/オフすることにより、電子デバイスに流れる電圧の平均値を調整できるようにする技術です。平均電圧は、デューティサイクル、つまり信号がオンになっている時間と信号がオフになっている時間の長さによって異なります。

したがって、モーターのサイズに応じて、Arduino PWM出力をトランジスタのベースまたはMOSFETのゲートに接続し、PWM出力を制御することでモーターの速度を制御することができます。低電力のArduinoPWM信号は、高電力モーターが駆動されるMOSFETのゲートのオンとオフを切り替えます。

HブリッジDCモーター制御

一方、回転方向を制御するには、モーターを流れる電流の方向を逆にする必要があります。これを行う最も一般的な方法は、Hブリッジを使用することです。 Hブリッジ回路には、トランジスタまたはMOSFETの4つのスイッチング素子が含まれており、中央のモーターがHのような構成を形成しています。 2つの特定のスイッチを同時にアクティブにすることで、電流の方向を変更して、モーターの回転方向を変更できます。

したがって、PWMとHブリッジの2つの方法を組み合わせると、DCモーターを完全に制御できます。これらの機能を備えた多くのDCモータードライバーがあり、L298Nはその1つです。

L298Nドライバー

L298Nは、2つのDCモーターの速度と方向を同時に制御できるデュアルHブリッジモータードライバーです。このモジュールは、最大2Aのピーク電流で5〜35Vの電圧を持つDCモーターを駆動できます。

L298Nモジュールのピン配置を詳しく見て、どのように機能するかを説明しましょう。モジュールには、モーターAとB用の2つのネジ留め式端子台と、アースピン用のもう1つのネジ留め式端子台、モーター用のVCC、および入力または出力のいずれかである5Vピンがあります。

これは、モーターのVCCで使用される電圧に依存します。モジュールには、ジャンパーを使用して有効または無効にできるオンボード5Vレギュレーターがあります。モーターの供給電圧が最大12Vの場合、5Vレギュレーターを有効にし、5Vピンを出力として使用できます(たとえば、Arduinoボードに電力を供給するため)。ただし、モーター電圧が12Vを超える場合は、ジャンパーを切断する必要があります。これらの電圧は、オンボードの5Vレギュレーターに損傷を与えるためです。この場合、ICが正しく動作するために5V電源に接続する必要があるため、5Vピンが入力として使用されます。

ここで、このICは約2Vの電圧降下を引き起こすことに注意してください。したがって、たとえば、12V電源を使用する場合、モーター端子の電圧は約10Vになります。これは、12VDCモーターから最大速度を引き出すことができないことを意味します。

次はロジック制御入力です。イネーブルAピンとイネーブルBピンは、モーターの速度を有効にして制御するために使用されます。このピンにジャンパーが存在する場合、モーターが有効になり、最大速度で動作します。ジャンパーを取り外すと、PWM入力をこのピンに接続して、モーターの速度を制御できます。このピンをアースに接続すると、モーターが無効になります。

次に、入力1と入力2のピンは、モーターAの回転方向を制御するために使用され、入力3と4は、モーターBの回転方向を制御するために使用されます。これらのピンを使用して、L298NIC内のHブリッジのスイッチを実際に制御します。入力1がLOWで入力2がHIGHの場合、モーターは前方に移動します。逆に、入力1がHIGHで入力2がLOWの場合、モーターは後方に移動します。両方の入力が同じ場合、LOWまたはHIGHのいずれかでモーターが停止します。同じことが入力3と4およびモーターBにも当てはまります。

ArduinoおよびL298Nモータードライバー

それでは、いくつかの実用的なアプリケーションを作成しましょう。最初の例では、ポテンショメータを使用してモーターの速度を制御し、プッシュボタンを使用して回転方向を変更します。これが回路図です。

したがって、L298Nモータードライバー、DCモーター、ポテンショメーター、プッシュボタン、およびArduinoボードが必要です。

このArduinoチュートリアルに必要なコンポーネントは、以下のリンクから入手できます。

  • L298Nドライバー………………………………..
  • 12V高トルクDCモーター…………..
  • プラスチックタイヤホイール付きDCモーター……。
  • Arduinoボード………………………………
  • ブレッドボードとジャンパー線…………

Arduinoコード

Arduinoコードは次のとおりです:

/*  Arduino DC Motor Control - PWM | H-Bridge | L298N  -  Example 01

    by Dejan Nedelkovski, www.HowToMechatronics.com
*/

#define enA 9
#define in1 6
#define in2 7
#define button 4

int rotDirection = 0;
int pressed = false;

void setup() {
  pinMode(enA, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(button, INPUT);
  // Set initial rotation direction
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
}

void loop() {
  int potValue = analogRead(A0); // Read potentiometer value
  int pwmOutput = map(potValue, 0, 1023, 0 , 255); // Map the potentiometer value from 0 to 255
  analogWrite(enA, pwmOutput); // Send PWM signal to L298N Enable pin

  // Read button - Debounce
  if (digitalRead(button) == true) {
    pressed = !pressed;
  }
  while (digitalRead(button) == true);
  delay(20);

  // If button is pressed - change rotation direction
  if (pressed == true  & rotDirection == 0) {
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    rotDirection = 1;
    delay(20);
  }
  // If button is pressed - change rotation direction
  if (pressed == false & rotDirection == 1) {
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    rotDirection = 0;
    delay(20);
  }
}
Code language: Arduino (arduino)

説明: したがって、最初に、プログラムに必要なピンといくつかの変数を定義する必要があります。セットアップセクションでは、ピンモードとモーターの初期回転方向を設定する必要があります。ループセクションでは、ポテンショメータの値を読み取ることから始め、そこから得られる0から1023までの値、PWM信号の0から255までの値、または0から100%のデューティサイクルの値にマッピングします。 PWM信号。次に、analogWrite()関数を使用して、PWM信号をL298Nボードのイネーブルピンに送信します。これにより、実際にモーターが駆動されます。

次に、ボタンを押したかどうかを確認します。その場合は、入力1と入力2の状態を逆に設定して、モーターの回転方向を変更します。押しボタンはトグルボタンとして機能し、押すたびにモーターの回転方向が変わります。

L298Nモータードライバーを使用したArduinoロボットカーコントロール

これを学んだら、Arduinoロボットカーを自分で作ることができます。回路図は次のとおりです。

必要なのは、2つのDCモーター、L298Nモータードライバー、Arduinoボード、および制御用のジョイスティックだけです。電源は3.7Vのリチウムイオン電池を3本使用し、合計11Vを使用しました。シャーシを3mmのティック合板で作成し、金属製のブラケットを使用してモーターを取り付け、モーターにホイールを取り付け、前面にスイベルホイールを取り付けました。

それでは、Arduinoコードを見て、それがどのように機能するかを見てみましょう。 (下に完全なコードがあります)

int xAxis = analogRead(A0); // Read Joysticks X-axis
int yAxis = analogRead(A1); // Read Joysticks Y-axisCode language: Arduino (arduino)

ピンを定義した後、ループセクションで、ジョイスティックのX軸とY軸の値を読み取ることから始めます。ジョイスティックは、実際にはArduinoのアナログ入力に接続された2つのポテンショメータで構成されており、0から1023までの値があります。ジョイスティックが中央位置にある場合、両方のポテンショメータまたは軸の値は約512です。

>

少し許容誤差を追加し、470から550までの値を中心と見なします。したがって、ジョイスティックのY軸を後方に移動し、値が470を下回ると、4つの入力ピンを使用して2つのモーターの回転方向を後方に設定します。次に、減少する値を470から0に変換し、増加するPWM値を0から255に変換します。これは、実際にはモーターの速度です。

// Y-axis used for forward and backward control
  if (yAxis < 470) {
    // Set Motor A backward
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    // Set Motor B backward
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
    // Convert the declining Y-axis readings for going backward from 470 to 0 into 0 to 255 value for the PWM signal for increasing the motor speed
    motorSpeedA = map(yAxis, 470, 0, 0, 255);
    motorSpeedB = map(yAxis, 470, 0, 0, 255);
  }Code language: Arduino (arduino)

同様に、ジョイスティックのY軸を前方に移動し、値が550を超えると、モーターを前方に移動し、550から1023までの読み取り値を0から255までのPWM値に変換します。ジョイスティックが中央にある場合、モーターの速度はゼロになります。

次に、車の左右の制御にX軸をどのように使用するかを見てみましょう。

// X-axis used for left and right control
  if (xAxis < 470) {
    // Convert the declining X-axis readings from 470 to 0 into increasing 0 to 255 value
    int xMapped = map(xAxis, 470, 0, 0, 255);
    // Move to left - decrease left motor speed, increase right motor speed
    motorSpeedA = motorSpeedA - xMapped;
    motorSpeedB = motorSpeedB + xMapped;
    // Confine the range from 0 to 255
    if (motorSpeedA < 0) {
      motorSpeedA = 0;
    }
    if (motorSpeedB > 255) {
      motorSpeedB = 255;
    }
  }Code language: Arduino (arduino)

繰り返しになりますが、最初にX軸の読み取り値を0から255までの速度値に変換する必要があります。左に移動するには、この値を使用して左のモーター速度を下げ、右のモーター速度を上げます。ここでは、算術関数のために、2つの追加の「if」ステートメントを使用して、モーター速度の範囲を0〜255に制限します。

車を右に動かすのにも同じ方法が使われます。

関連:555タイマーICを使用してPWMDCモーター速度コントローラーを作成する方法

印加電圧やモーター自体によっては、低速になるとモーターが動き出しなくなり、ブーンという音がします。私の場合、PWM信号の値が70未満の場合、モーターは移動できませんでした。したがって、この2つのifステートメントを使用して、実際には70〜255の速度範囲に制限しました。 L298NドライバのイネーブルピンへのPWM信号。

// Prevent buzzing at low speeds (Adjust according to your motors. My motors couldn't start moving if PWM value was below value of 70)
  if (motorSpeedA < 70) {
    motorSpeedA = 0;
  }
  if (motorSpeedB < 70) {
    motorSpeedB = 0;
  }
  analogWrite(enA, motorSpeedA); // Send PWM signal to motor A
  analogWrite(enB, motorSpeedB); // Send PWM signal to motor BCode language: Arduino (arduino)

Arduinoロボットカーの例の完全なコードは次のとおりです。

/*  Arduino DC Motor Control - PWM | H-Bridge | L298N
         Example 02 - Arduino Robot Car Control
    by Dejan Nedelkovski, www.HowToMechatronics.com
*/

#define enA 9
#define in1 4
#define in2 5
#define enB 10
#define in3 6
#define in4 7

int motorSpeedA = 0;
int motorSpeedB = 0;

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

void loop() {
  int xAxis = analogRead(A0); // Read Joysticks X-axis
  int yAxis = analogRead(A1); // Read Joysticks Y-axis

  // Y-axis used for forward and backward control
  if (yAxis < 470) {
    // Set Motor A backward
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    // Set Motor B backward
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
    // Convert the declining Y-axis readings for going backward from 470 to 0 into 0 to 255 value for the PWM signal for increasing the motor speed
    motorSpeedA = map(yAxis, 470, 0, 0, 255);
    motorSpeedB = map(yAxis, 470, 0, 0, 255);
  }
  else if (yAxis > 550) {
    // Set Motor A forward
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    // Set Motor B forward
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH);
    // Convert the increasing Y-axis readings for going forward from 550 to 1023 into 0 to 255 value for the PWM signal for increasing the motor speed
    motorSpeedA = map(yAxis, 550, 1023, 0, 255);
    motorSpeedB = map(yAxis, 550, 1023, 0, 255);
  }
  // If joystick stays in middle the motors are not moving
  else {
    motorSpeedA = 0;
    motorSpeedB = 0;
  }

  // X-axis used for left and right control
  if (xAxis < 470) {
    // Convert the declining X-axis readings from 470 to 0 into increasing 0 to 255 value
    int xMapped = map(xAxis, 470, 0, 0, 255);
    // Move to left - decrease left motor speed, increase right motor speed
    motorSpeedA = motorSpeedA - xMapped;
    motorSpeedB = motorSpeedB + xMapped;
    // Confine the range from 0 to 255
    if (motorSpeedA < 0) {
      motorSpeedA = 0;
    }
    if (motorSpeedB > 255) {
      motorSpeedB = 255;
    }
  }
  if (xAxis > 550) {
    // Convert the increasing X-axis readings from 550 to 1023 into 0 to 255 value
    int xMapped = map(xAxis, 550, 1023, 0, 255);
    // Move right - decrease right motor speed, increase left motor speed
    motorSpeedA = motorSpeedA + xMapped;
    motorSpeedB = motorSpeedB - xMapped;
    // Confine the range from 0 to 255
    if (motorSpeedA > 255) {
      motorSpeedA = 255;
    }
    if (motorSpeedB < 0) {
      motorSpeedB = 0;
    }
  }
  // Prevent buzzing at low speeds (Adjust according to your motors. My motors couldn't start moving if PWM value was below value of 70)
  if (motorSpeedA < 70) {
    motorSpeedA = 0;
  }
  if (motorSpeedB < 70) {
    motorSpeedB = 0;
  }
  analogWrite(enA, motorSpeedA); // Send PWM signal to motor A
  analogWrite(enB, motorSpeedB); // Send PWM signal to motor B
}Code language: Arduino (arduino)

このチュートリアルはこれですべてです。次のビデオでは、スマートフォンとワイヤレス制御を有効にするためのBluetoothと無線デバイスを追加して、このArduinoロボットカーをアップグレードします。

以下のコメントセクションでお気軽に質問してください。Arduinoプロジェクトのコレクションを確認することを忘れないでください。


製造プロセス

  1. IRリモコンをハックする方法
  2. ラインフォロワーロボット
  3. ArduinoMegaをNEO-6MGPSモジュールとインターフェースする方法
  4. Arduinoトレーニングプラットフォーム
  5. サーミスタの使い方は簡単ですか?!
  6. DIY Arduinoロボットアーム–ハンドジェスチャで制御
  7. DCモーター制御ライブラリ
  8. スクラップDVDドライブ、L293Dを使用してミニCNC2Dプロッタを作成する方法
  9. 自宅でジェスチャ制御ロボットを作る方法
  10. ここにアイデアがあります:ブレイン・コンピューター・インターフェースがどのように機能するか
  11. ダイレクト ドライブ モーターの利点 – それが何であり、どのように機能するか。