A4988ドライバーとArduinoでステッピングモーターを制御する方法
このArduinoチュートリアルでは、A4988ステッピングドライバーを使用してステッピングモーターを制御する方法を学習します。次のビデオを見るか、以下のチュートリアルを読むことができます。
A4988は、簡単な操作のためのトランスレータを内蔵したバイポーラステッピングモーターを制御するためのマイクロステッピングドライバーです。つまり、コントローラーから2つのピンを使用するか、1つは回転方向を制御し、もう1つはステップを制御することで、ステッピングモーターを制御できます。
ドライバーは、フルステップ、ハフトステップ、クォーターステップ、8ステップ、16ステップの5つの異なるステップ解像度を提供します。また、電流出力、過熱サーマルシャットダウン、クロスオーバー電流保護を調整するためのポテンショメータがあります。
その論理電圧は3〜5.5 Vであり、適切な追加冷却が提供されている場合は1相あたりの最大電流は2A、ヒートシンクまたは冷却がない場合は1相あたり1Aの連続電流です。
次に、ドライバーのピン配列を詳しく見て、ステッピングモーターとコントローラーに接続します。したがって、ドライバーに電力を供給するためのボタン右側の2つのピン、3〜5.5 Vの電源に接続するために必要なVDDピンとGroundピン、そしてこの場合はコントローラーであるArduinoから始めます。 5 Vを供給するボード。次の4つのピンは、モーターを接続するためのものです。 1Aピンと1Bピンはモーターの一方のコイルに接続され、2Aピンと2Bピンはモーターのもう一方のコイルに接続されます。モーターに電力を供給するために、8〜35 Vの電源に接続する必要がある次の2つのピン、グラウンドとVMOTを使用します。また、電圧スパイクからドライバーボードを保護するために、少なくとも47 µFのデカップリングコンデンサを使用する必要があります。
次の2つのピン、ステップと方向は、モーターの動きを制御するために実際に使用するピンです。方向ピンはモーターの回転方向を制御するため、マイクロコントローラーのデジタルピンの1つに接続する必要があります。この場合、Arduinoボードのピン番号4に接続します。
ステップピンを使用してモーターのミロステップを制御し、このピンに送信される各パルスでモーターが1ステップ移動します。つまり、A4988ドライバーの組み込みトランスレーターがすべてを処理するため、複雑なプログラミング、位相シーケンステーブル、周波数制御ラインなどは必要ありません。ここで、これらの2つのピンは内部でどの電圧にも引っ張られていないため、プログラム内でフローティングのままにしないでください。
次はSLEEPピンで、ロジックローはボードをスリープモードにして、モーターが使用されていないときの消費電力を最小限に抑えます。
次に、RESETピンはトランスレータを事前定義されたホーム状態に設定します。このホーム状態またはホームマイクロステップ位置は、A4988データセットのこれらの図から確認できます。したがって、これらはモーターが始動する初期位置であり、マイクロステップの分解能によって異なります。このピンへの入力状態がロジックローの場合、すべてのSTEP入力は無視されます。リセットピンはフローティングピンであるため、プログラムで制御する意図がない場合は、リセットピンをスリープピンに接続してハイにし、ボードを有効にする必要があります。
次の3つのピン(MS1、MS2、MS3)は、上記の真理値表に従って5つのステップ解像度の1つを選択するためのものです。これらのピンにはプルダウン抵抗が内蔵されているため、ピンを外したままにすると、ボードはフルステップモードで動作します。
最後のENABLEピンは、FET出力をオンまたはオフにするために使用されます。したがって、ロジックハイは出力を無効に保ちます。
コンポーネントは、以下のいずれかのサイトから入手できます:
これが完全な回路図です。ドライブをフルステップモードで使用するので、3つのMSピンを切断したままにして、ドライブの方向ピンとステップピンをArduinoボードのピン番号3と4、およびグラウンドと5Vに接続します。ボードに電力を供給するためのピン。また、デカップリングには100µFのコンデンサを使用し、モーターに電力を供給するために12V、1.5Aのアダプターを使用します。 NEMA 17バイポーラステッピングモーターを使用し、そのワイヤーAとCはピン1Aと1Bに接続され、BとDワイヤーは2Aと2Bピンに接続されます。
モーターを接続する前に、電流がモーターの電流制限内にあることを確認するために、ドライバーの電流制限を調整する必要があります。これを行うには、ボード上のポテンショメータを使用して基準電圧を調整し、次の式を検討します。
ただし、A4988ドライバーボードにはさまざまなメーカーがあるため、この式は常に正しいとは限りません。これが私のケースのデモンストレーションです。ポテンショメータを調整し、0.6Vの基準電圧を測定しました。したがって、電流制限は0.6 * 2の値で、1.2Aに等しい必要があります。
フルステップモードでドライバーを使用しており、このモードのA4988データセットによると、巻線電流は電流制限の70%にしか到達できないため、1.2A*0.7は0.84Aになります。これを確認するために、ステップピンに連続ロジックハイを送信する簡単なコードをアップロードし(電流をよりよく認識できるように)、メーターをモーターの1つの巻線に直列に接続して電源を入れました。私が得たのは0.5Aでした。これは、私の場合、方程式が正しくなかったことを意味します。
これがサンプルコードです。まず、ステップピンと方向ピンを定義する必要があります。私たちの場合、それらはArduinoボードのピン番号3と4であり、stepPinとdirPinという名前が付けられており、セットアップセクションではそれらを出力として定義する必要があります。
最初のループセクションでは、モーターが特定の方向に移動できるように、方向ピンをハイ状態に設定します。これをforループを使用して、モーターを1サイクル完全に回転させます。ドライバーがフルステップモードに設定されており、ステッピングモーターのステップ角度が1.8度、つまり200ステップであるため、フルサイクルで1回転するには、ステップピンに200パルスを送信する必要があります。したがって、forループには200回の反復があり、そのたびにステップピンがハイ状態に設定されてからロー状態に設定されてパルスが生成されます。各digitalWriteの間に、モーターの速度が依存する遅延を追加する必要があります。
このフルサイクルローテーションの後、1秒の遅延を行い、dirPinをロー状態に設定してローテーションの方向を変更し、この400回の反復ループで2フルサイクルローテーションを行います。最後にもう1秒の遅延があります。それでは、コードをアップロードして、どのように機能するかを見てみましょう。
このチュートリアルのもう1つの例を作成しました。ここでは、ポテンショメータを使用してモーターの速度を制御します。その例のソースコードは次のとおりです。A4988ステッピングドライバーのピン配列
A4988電流制限
ArduinoおよびA4988コード
/* Simple Stepper Motor Control Exaple Code
*
* by Dejan Nedelkovski, www.HowToMechatronics.com
*
*/
// defines pins numbers
const int stepPin = 3;
const int dirPin = 4;
void setup() {
// Sets the two pins as Outputs
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
}
void loop() {
digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction
// Makes 200 pulses for making one full cycle rotation
for(int x = 0; x < 200; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
delay(1000); // One second delay
digitalWrite(dirPin,LOW); //Changes the rotations direction
// Makes 400 pulses for making two full cycle rotation
for(int x = 0; x < 400; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
delay(1000);
}
Code language: Arduino (arduino)/* Simple Stepper Motor Control Exaple Code
*
* by Dejan Nedelkovski, www.HowToMechatronics.com
*
*/
// Defines pins numbers
const int stepPin = 3;
const int dirPin = 4;
int customDelay,customDelayMapped; // Defines variables
void setup() {
// Sets the two pins as Outputs
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
digitalWrite(dirPin,HIGH); //Enables the motor to move in a particular direction
}
void loop() {
customDelayMapped = speedUp(); // Gets custom delay values from the custom speedUp function
// Makes pules with custom delay, depending on the Potentiometer, from which the speed of the motor depends
digitalWrite(stepPin, HIGH);
delayMicroseconds(customDelayMapped);
digitalWrite(stepPin, LOW);
delayMicroseconds(customDelayMapped);
}
// Function for reading the Potentiometer
int speedUp() {
int customDelay = analogRead(A0); // Reads the potentiometer
int newCustom = map(customDelay, 0, 1023, 300,4000); // Convrests the read values of the potentiometer from 0 to 1023 into desireded delay values (300 to 4000)
return newCustom;
}
Code language: Arduino (arduino)
製造プロセス
- Arduinoでコインアクセプターを制御する
- LEDを制御するBluetoothを搭載したArduino!
- Arduino Nano:ジョイスティックで2つのステッピングモーターを制御
- ArduinoとMPU6050によるサーボモーターの制御
- DHT11でBlynkの温度と湿度を読み取る方法
- Arduinoで音楽を作る方法
- ArduinoUnoとBluetoothによる車の制御
- ArduinoでModbusを使用する方法
- ジョイスティックで28BYJ-48ステッピングモーター制御を駆動
- ArduinoとPythonを搭載したAIアシスタントロボット
- Bluetoothを使用したスマートサーモスタット、放送および照明制御