Articles

A4988ドライバとArduinoでステッピングモータを制御する方法

この記事では、A4988ステッピングモータドライバとArduinoでステッピングモータを制御することについて知っておく必要があるすべてが含まれています。 私は配線図、電流制限と多くの例のコードを設定する方法についてのチュートリアルが含まれています。このドライバはArduinoライブラリなしで使用できますが、このチュートリアルの最後にあるAccelStepperライブラリのコード例も参照することを強くお勧めします。 このライブラリは非常に使いやすく、ハードウェアのパフォーマンスを大幅に向上させることができます。各例の後、コードがどのように機能するかを分解して説明するので、ニーズに合わせてコードを変更しても問題はありません。

他のステッピングモータドライバについてもっと知りたい場合は、以下の記事が役に立つかもしれません:

  • How to control a stepper motor with DRV8825 driver and Arduino
  • 28BYJ-48 Stepper Motor with ULN2003 Driver and Arduino Tutorial
  • How to control a Stepper Motor with Arduino Motor Shield Rev3
  • TB6600 Stepper Motor Driver with Arduino Tutorial

Supplies

Hardware components

A4988 stepper motor driver × 1 Amazon
AliExpress
NEMA 17 stepper motor × 1 Amazon
Arduino Uno Rev3 × 1 Amazon
Power supply (8-35 V) × 1 Amazon
AliExpress
Breadboard × 1 Amazon
Capacitor (100 µF) × 1 Amazon
Jumper wires ~ 10 Amazon
AliExpress
USB cable type A/B × 1 Amazon

私はCNCシールドや拡張ボードと組み合わせてこのドライバを使用したいです。 このようなシールドには既にコンデンサが含まれており、マイクロステッピング分解能を簡単に選択できます。 それは配線を大いにもっと簡単にし、ブレッドボードより永久的な解決を必要とすれば大きい選択である。

Tools

Small screwdriver Amazon
Multimeter Amazon
Alligator test leads (optional) Amazon

Software

Arduino IDE

Makerguides.com Amazon Services LLC Associates Programに参加しており、サイトが広告や商品へのリンクによって広告料を獲得する手段を提供するように設計されたアフィリエイト広告プログAmazon.com.

ドライバについて

A4988ドライバの中心には、Allegro MicroSystems製のチップ、トランスレータと過電流保護付きのA4988DMOS Microsteppingドライバがあります。 この統合されたモータドライバは、ステッピングモータの速度と方向の両方を制御するために二つのピンだけを必要とするので、マイクロコントローラとのインターフェイスを非常に簡単にします。

ドライバーは35Vと±2Aの最大出力容量を持ち、NEMA17バイポーラステッピングモーターのような中小規模のステッピングモーターを駆動するのに最適です。

NEMA23のようなより大きなステッピングモータを制御する必要がある場合は、TB6600ステッピングモータドライバを見てみましょう。 このドライバはA4988と同じコードで使用でき、電流定格は3.5Aです。

  • ARDUINOチュートリアル付きTB6600ステッピングモータドライバ

A4988ドライバチップには、過電流、短絡、低電圧ロックアウト、過熱保護のようないくつかの安 次テーブルのより多くの指定を見つけることができます。

A4988 Specifications

Minimum operating voltage 8 V
Maximum operating voltage 35 V
Continuous current per phase 1 A
Maximum current per phase 2 A
Minimum logic voltage 3 V
Maximum logic voltage 5.5 V
Microstep resolution full, 1/2, 1/4, 1/8 and 1/16
Reverse voltage protection?tr>
寸法 15.5×20.5mm(0.6″×0.8″)
コスト 価格を確認

詳細については、ここでデータシートをチェックアウトすることができます。

A4988とDRV8825の違い

DRV8825はA4988と非常に似ていますが、いくつかの重要な違いがあります。

  • DRV8825は1/32マイクロステッピングを提供しますが、A4988は1/16ステッ より高いmicrosteppingはより滑らかで、より静かな操作で起因するが、常に必要とされない。
  • 電流制限ポテンショメータは別の場所にあります
  • 基準電圧と電流制限の関係は異なります。
  • DRV8825は1.9μ sの最小ステップパルス持続時間を必要とし、A4988は1μ sの最小ステップパルス持続時間を必要とします。
  • DRV8825は、より高い電圧モータ電源(45V対35V)で使用することができます。 これはそれがLCの電圧スパイクからの損傷により少なく敏感であることを意味する。
  • DRV8825は、追加の冷却なしでA4988よりもわずかに多くの電流を供給することができます。DRV8825のピン配列はA4988のピン配列とまったく同じであるため、ドロップイン交換として使用することができます。
    A4899(左)対DRV8825(右)

    マイクロステップ設定

    ステッピングモーターは、通常、ステップを持っています回転ごとの1.8°または200のステップのサイズは、これ完全なステップを示します。 A4988のようなマイクロステッピングドライバは、中間ステップ位置を許可することにより、より高い解像度を可能にします。 これは、中間電流レベルでコイルに通電することによって達成されます。例えば、モータを四分の一ステップモードで駆動すると、4つの異なる電流レベルを使用することにより、200ステップ/回転のモータに800マイクロステップ/回転が得られます。

    A4988ピン配置

    解像度(ステップサイズ)セレクタピン(MS1、MS2、MS3)を使用すると、に従って五つのステッ以下の表に示す。

    MS1 MS2 MS3 Microstep resolution
    Low Low Low Full step
    High Low Low 1/2 step
    Low High Low 1/4 step
    High High Low 1/8 step
    High High High 1/16 step

    三つの入力はすべて100k ωのプルダウン抵抗を内蔵しているため、三つのマイクロステップ選択ピンを切断したままにすると、フルステ私はしばしばこれらのドライバと組み合わせてCNCシールドまたは拡張ボードを使用します。

    拡張ボードには、MS1–MS3をハイまたはローに設定するための3つのdipスイッチがあり、CNCシールドにはジャンパーを取り付けることができます。 ブレッドボードでドライバを使用している場合は、ジャンパー線を使用してセレクターピンを5Vに接続することができます(つまり、それらをハイにする)。H2>

    Arduinoとステッピングモータを備えたA4988ステッピングモータドライバの配線図/回路図。上記の配線図/回路図は、A4899ドライバをステッピングモータとArduinoに接続する方法を示しています。

    接続は次の表にも示されています:

    A4988 Connections

    A4988 Connection
    VMOT 8-35V
    GND Motor ground
    SLP RESET
    RST SLP
    VDD 5V
    GND Logic ground
    STP Pin 3
    DIR Pin 2
    1A, 1B, 2A, 2B Stepper motor
    • モーター電源はGNDとVMOT(右上)に接続されています。
    • ステッピングモータの二つのコイルは、1A、1Bおよび2A、2B(下記参照)に接続されています。
    • GNDピン(右下)はマイクロコントローラのグラウンドピンに接続され、VDDは5Vに接続されています。
    • STP(step)ピンとDIR(direction)ピンはそれぞれデジタルピン3と2に接続されています。 あなたがしたい場合は、別のデジタルピンを選択することができますが、これらは私がこのチュートリアルとサンプルコードのために使用されたも
    • SLPピンはアクティブ-ロー入力です。 つまり、このピンをロー-レベルにすると、ドライバはスリープモードになり、消費電力が最小化されます。 RSTはアクティブ-ロー入力でもあります。 ローにプルすると、ハイにプルするまで、すべてのステップ入力は無視されます。 このピンを使用していない場合は、隣接するSLP/SLEEPピンに接続してハイにし、ドライバをイネーブルにすることができます。
    • EN(enable)ピンは切断したままにすることができ、デフォルトでロー-レベルにプルされます。 このピンがハイ-レベルに設定されると、ドライバはディスエーブルされます。このチュートリアルの残りの部分では、MS1、MS2、およびMS3を切断したままにしているため、ドライバはフルステップモードで動作します。 これにより、コードの説明が少し簡単になります。 通常、私は1/8または1/16マイクロステッピングを使用し、適切なピンを5Vに接続します(紹介の表を参照)。

      警告

      A4988キャリアボードは、低ESRセラミックコンデンサを使用しているため、特に数インチよりも長い電源リードを使用する場合、破壊的なLC電圧

      ドライバを保護するために、VMOTとGNDの間に電解コンデンサを接続することができます。 Pololuは47μ f以上のコンデンサを提案しています(私は100μ fのコンデンサを使用しました)。 私はアマゾンからこれらの品揃えボックスが好きです、このように私はいつも手元に適切なサイズのいくつかのコンデンサを持っています。

      どのように正しいステッピングモータ配線を決定するには?ステッピングモーターのデータシートが見つからない場合は、モーターを正しく配線する方法を理解するのが難しい場合があります。

      ステッピングモーターのデータシートが見つからない場合は、モーターを正しく配線する方法を理解するのが難しい場合があります。 私は4線バイポーラステッピングモーターを接続する方法を決定するために、次のトリックを使用します:

      あなたが識別する必要がある唯一のものは、モー 一方のコイルからのワイヤは1Aと1Bに接続され、もう一方のコイルは2Aと2Bに接続されますが、極性は関係ありません。

      一つのコイルから二つのワイヤを見つけるには、モータを切断して次の操作を行います。

      1. ステッピングモータのシャフトを手で回転させ、回転
      2. 今、モーターからワイヤのランダムなペアを選択し、一緒に裸の端に触れます。
      3. 次に、ステッピングモーターのシャフトをもう一度回転させてみてください。あなたは多くの抵抗を感じる場合は、同じコイルからのワイヤのペアを発見しました。

      あなたは抵抗を感じる場合は、同じコイルからのワイヤのペア シャフトを自由に回転できる場合は、別のペアのワイヤを試してみてください。 次に、2つのコイルを上の配線図に示すピンに接続します。

      (それがまだ不明な場合は、以下のコメントを残してください、より多くの情報はまた、上で見つけることができますRepRap.org

      どのように現在の制限を設定するには?

      あなたのArduinoのプログラミングを開始し、ドライバを使用して起動する前に、あなたは多くの人が忘れていることを行う必要がある一つの非常

      このステップは非常に複雑ではありませんが、ステッピングモーターとドライバーを保護するために絶対に必要です。 適切な電流制限を設定しないと、モーターがそれよりも多くの電流を流すか、ドライバーが処理できるよりも多くの電流を流す可能性があります。

      電流制限を設定するには、基準電圧を測定し、それに応じてオンボードのポテンショメータを調整する必要があります。 小さなドライバー、基準電圧を測定するためのマルチメータ、およびアリゲーターテストリード(オプションですが、非常に便利)が必要になります。

      A4988ドライバの電流制限配線図。

      リファレンス電圧を測定するには、ドライバに電力を供給する必要があります。 A4988はVDD(5V)を介して電力を必要とするだけで、RSTとSLPを一緒に接続する必要があります。 これを行う間、ステッピングモーターを切断するのが最善です。

      既にドライバを配線している場合は、ステッピングモータ以外のすべてを接続したままにすることができます。 ArduinoのUSBポートから電源を入れることができます。

      A4988 Connection
      VDD 5V
      RST SLP
      SLP RESET
      GND Ground
      Required connections to set the current limit

      Current limit formula

      The next step is to calculate the current limit with the following 式:

      電流制限=Vref÷(8×Rcs)

      Rcsは電流検出抵抗です。 2017年1月以前にPololuからa4988ドライバを購入した場合、Rcsは0.050Ωになります。 それ以降に販売されたドライバは、0.068Ωの電流検出抵抗を備えています。つまり、0.068Ωの電流検出抵抗を備えたボードの電流制限が1Aの場合、Vrefは540mVになるはずです。

      電流検出抵抗の位置。 画像:www.ポロールcom

      正しい電流制限を選択するには、ステッピングモーターのデータシートを見てください。 あなたのモーターの現在の評価を見つけることができなければ私は1Aの現在の限界から始まることを推薦します。ボーナス情報:フルステップモードでドライバを使用する場合、各コイルを流れる電流は設定された電流制限の約70%に制限されます。 これは、フルステップモードで電流制限を40%高く設定するか、1.4Aに設定する必要があることを意味します。 マイクロステッピングを使用する場合は、上記の式が適用されます。モータの電源電圧を変更する場合は、電流制限を再調整する必要があります。

      モータの電源電圧を変更する場合は、電流制限を再調整する必要があります。

      あなたのモーターが多くの騒音を作っている場合は、電流制限を下げるようにしてください。 モータがステップを逃さないように、電流制限を十分に高く設定することをお勧めします。

      Vrefの測定

      今度は、下の写真(GNDとポテンショメータ)にマークされた2つの点の間の基準電圧(Vref)を測定し、計算した値に調整する必要があります。

      Vrefプローブポイント(GNDとポテンショメータ)。

      現在の制限を設定するには、ドライバーにクランプされたアリゲーターテストリードを使用することをお勧めします。 これは電位差計を調節し、参照の電圧を同時に測定することを可能にする。注:電流制限を測定する別の方法があり、それはステッピングモータの電流引き込みを直接測定することです。 個人的に私は上記の方法をはるかに簡単に見つけます。

      Pololuは彼らのウェブサイトで次のことを言及しています:注:コイル電流は電源電流と非常に異なる場合があるため、電源で測定した電流を使用して電流制限を設定しないでください。 あなたの現在のメートルを置く適切な場所はあなたのステッピングモータコイルの1つと直列にあります。P>Pololu

      電流制限FAQ

      ステッピングモーターを接続する必要がありますか?
      いいえ、電流制限を設定するときにステッピングモーターをドライバに接続する必要はありません。 Vref電圧の測定に干渉することがあります。Arduino motor sketchを実行してモーターを回転させる必要がありますか?

      いいえ、上記の質問を参照してください。

      vrefを上げるには、ポテンショメータのクロックを反時計回りに回す必要がありますか?
      これはドライバーの製造元によって異なります。 DRV8825またはA4988の純正Poluluブレイクアウトボードをお持ちの場合は、ポテンショメータを時計回りに回してVrefを上げ、反時計回りに下げます。

      ドライバを冷却する

      A4988ドライバICは、コイルあたり2Aの最大電流定格を持っていますが、ヒートシンクなしでは、過熱を開始す

      ドライバは、通常、私はすぐにインストールすることをお勧めします小さな接着剤で裏打ちされたヒートシンクが付属しています。 また、本当に安いためにAmazonから小さなヒートシンクの束を購入することができます。

      ステッピングモーターを制御するための基本的なArduinoのサンプルコード

      ドライバを配線し、現在の制限を設定したので、Arduinoをコンピュータに接続し、コードをアップロードする時間です。 Arduino IDEを使用して、次のコード例をArduinoにアップロードできます。 この特定の例では、ライブラリをインストールする必要はありません。

      このスケッチは、ステッピングモータの速度、回転数、および回転方向の両方を制御します。コードフィールドの右上隅にあるボタンをクリックすると、コードをコピーできます。

      コードをコピーするには、次の手順を実行します。

      コードをコピーするには、

      コードの仕組み:

      スケッチは、ステップピンと方向ピンを定義することから始まります。 私はそれらをArduinoピン3と2に接続しました。

      ステートメント#definedirPinstepsPerRevolutionsetup()pinMode()

      void setup() { // Declare pins as output: pinMode(stepPin, OUTPUT); pinMode(dirPin, OUTPUT);}

      loop()セクションでは、モーターをCW方向にゆっくりと回転させ、CCW方向に素早く回転させます。 次に、モータが各方向に5回転を高速で回転させます。 では、どのように速度、回転方向、回転数を制御しますか?

      回転方向の制御:

      ステッピングモーターの回転方向を制御するには、DIR(方向)ピンをHIGHまたはLOWのいずれかに設定します。 このためには、関数digitalWrite()を使用します。 ステッピングモーターの接続方法に応じて、DIRピンをハイに設定すると、モーターがCWまたはCCWを回すことができます。

      ステップ数または回転数の制御:

      この例のスケッチでは、forループはステッピングモーターが取るステップ数を制御します。 Forループ内のコードは、ステッピングモーターの1ステップになります。 ループ内のコードは200回実行されるため(stepsPerRevolution)、これは1回転になります。 最後の2つのループでは、forループ内のコードが1000回実行され、1000ステップまたは5回転になります。

      forループの2番目の項を任意の数のステップに変更できることに注意してください。 for(int i = 0; i < 100; i++)は100ステップ、または半回転になります。

      制御速度:

      ステッピングモータの速度は、STEPピンに送信するパルスの周波数によって決まります。 周波数が高ければ高いほど、モーターの動作が速くなります。 コード内でdelayMicroseconds()を変更することで、パルスの周波数を制御できます。 遅延が短いほど、周波数が高くなり、モータの動作が速くなります。Mike McCauleyによって書かれたAccelStepperライブラリは、プロジェクトに使用する素晴らしいライブラリです。 利点の一つは、それが加速と減速をサポートしていることですが、それはあまりにも他の素敵な機能がたくさんあります。このライブラリの最新バージョンはこちらからダウンロードするか、下のボタンをクリックしてください。

      あなたはスケッチに行くことによってライブラリをインストールすることができます>Includeライブラリ>Add。Arduino IDEのZIPライブラリ…。別のオプションは、ツールに移動することです>ライブラリの管理…またはWindowsでCtrl+Shift+Iと入力します。 ライブラリマネージャは、インストールされているライブラリのリストを開いて更新します。あなたは’accelstepper’を検索し、Mike McCauleyによってライブラリを探すことができます。 最新バージョンを選択し、[インストール]をクリックします。

      連続回転サンプルコード

      次のスケッチは、一定の速度で連続的に一つ以上のステッピングモータを (加速または減速は使用されません)。

      コードの仕組み:最初のステップは、#include <AccelStepper.h>のライブラリを含めることです。次のステップは、A4988からArduinoへの接続とモータインタフェースタイプを定義することです。 ステップおよび方向ドライバを使用する場合は、モータインタフェースタイプを1に設定する必要があります。 他のインターフェイスの種類はここで見つけることができます。

      ステートメント#definedirPinと言及すると、コンパイラはプログラムがコンパイルされるときに値2に置き換えられます。次に、適切なモータインタフェースタイプと接続を持つAccelStepperクラスの新しいインスタンスを作成する必要があります。この場合、私はステッピングモーターを’stepper’と呼んでいましたが、’z_motor’や’liftmotor’などの他の名前も使用できます。 AccelStepper liftmotor = AccelStepper(motorInterfaceType, stepPin, dirPin);。 ステッピングモーターに指定する名前は、後でその特定のモーターの速度、位置、および加速度を設定するために使用されます。 AccelStepperクラスの複数のインスタンスを、異なる名前とピンで作成できます。 これは容易に2つ以上のステッピングモーターを同時に制御することを可能にする。コードの

      // Create a new instance of the AccelStepper class:AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);

      setup()セクションでは、ステップ/秒で最大速度を定義します。 毎秒1000ステップ以上の速度は信頼できない可能性があるため、これを最大値として設定します。 私は最高速度を定義したいステッピングモーター(’stepper’)の名前を指定することに注意してください。 複数のステッピングモーターが接続されている場合は、モーターごとに異なる速度を指定できます。

      void setup() { // Set the maximum speed in steps per second: stepper.setMaxSpeed(1000); stepper2.setMaxSpeed(500);}

      loop()setSpeed()を使用します。 (これはコードの設定セクションに配置することもできます)。

      stepper.runSpeed()stepper.setSpeed(-400);モーターを反対方向に回します。

      ステップ数または回転数を制御するコード例

      モーターが特定のステップ数を回転させるには、whileループをstepper.currentPosition()と組 次のコード例を使用して、モーターを前後に動かすことができます。

      コードの説明:

      loop()セクションまでのコードの最初の部分は、前の例とまったく同じです。ループでは、whileループをcurrentPosition()stepper.setCurrentPosition(0)でゼロに設定します。p>

       // Set the current position to 0: stepper.setCurrentPosition(0);

      次に、whileループを使用します。 Whileループは、括弧内の式()がfalseになるまで、連続的かつ無限にループします。 だから、この場合、私はステッピングモーターの現在の位置が400ステップに等しくないかどうかを確認します(!=は、と等しくないことを意味します)。 そうではありませんが、ステッピングモーターをsetSpeed()で設定された一定の速度で実行します。

      ループの残りの部分では、速度と目標位置が異なるだけでまったく同じことを行います。

      加減速コード例

      次のスケッチを使用すると、複雑なコーディングなしで、ステッピングモータの動きに加減速を追加することができます。 次の例では、モーターは毎秒200ステップの速度と毎秒30ステップの加速度で前後に実行されます。

      コードの説明:

      セットアップ()では、最大速度に加えて、加減速を定義する必要があります。 このためには、関数setAcceleration()を使用します。

      void setup() { // Set the maximum speed and acceleration: stepper.setMaxSpeed(200); stepper.setAcceleration(30);}

      コードのループセクションでは、モーターが事前に定義された数のステップを回転させるために別の方法を使用しました。 関数stepper.moveTo()stepper.runToPostion()は、モーター(加減速付き)を目標位置に移動し、目標位置になるまでブロックします。 この関数はブロックされているため、他のものを同時に制御する必要がある場合は、これを使用しないでください。この記事では、A4988ステッピングモータドライバとArduinoでステッピングモータを制御する方法を示しました。 私はあなたがそれが有用で有益であることを願っています。 あなたがした場合は、また、電子機器やものを作ることが好きな友人とそれを共有してください!

      私は個人的に3Dプリンタや他のCNC関連のプロジェクトの束のためにこのドライバをたくさん使用していますが、私はあなたがこのドライバ ご質問、提案がある場合、またはあなたは物事がこのチュートリアルで欠落していると思われる場合は、以下の下にコメントを残してください。