ArduinoとA4988ドライバーでステッピングモーターを制御: ステップバイステップガイド
このArduinoチュートリアルでは、A4988ステッピングドライバーを使用してステッピングモーターを制御する方法を学びます。以下の動画をご覧いただくか、書面によるチュートリアルをお読みください。 A4988は、バイポーラステッピングモーター用のマイクロステッピングドライバーで、簡単な操作のための内蔵トランスレーターを持っています。これにより、コントローラーからわずか2本のピン(1つは回転方向制御、もう1つはステップ制御)でステッピングモーターを制御できます。 ドライバーは5種類のステップ分解能(フルステップ、ハーフステップ、クォーターステップ、エイスステップ、シックスティーンステップ)を提供します。また、出力電流調整用のポテンショメーター、過熱保護、クロスオーバー電流保護機能を備えています。 ロジック電圧は3〜5.5V、適切な冷却があれば最大フェーズ電流2A、ヒートシンクや冷却なしでは1Aの連続フェーズ電流が可能です。 ドライバーのピン配置を詳しく見て、ステッピングモーターとコントローラーに接続してみましょう。右下の2ピン(VDDとGND)はドライバーの電源用で、3〜5.5Vの電源(この場合はArduinoボードの5V)に接続します。続く4ピンはモーター接続用で、1Aと1Bピンをモーターの1つのコイルに、2Aと2Bピンをもう1つのコイルに接続します。モーター電源用の次の2ピン(GNDとVMOT)は8〜35Vの電源に接続し、ドライバーボードを電圧スパイクから保護するため、少なくとも47µFのデカップリングコンデンサも必要です。 次の2ピン(STEPとDIR)が実際にモーターの動きを制御するピンです。DIRピンはモーターの回転方向を制御し、マイクロコントローラーのデジタルピンの1つ(この場合はArduinoのピン4)に接続します。 STEPピンでマイクロステップを制御し、このピンにパルスが送られるたびにモーターが1ステップ動きます。つまり、複雑なプログラミング、フェーズシーケンステーブル、周波数制御ラインなどは不要で、A4988ドライバーの内蔵トランスレーターがすべて処理してくれます。なお、これら2ピンは内部でどの電圧にもプルアップ/ダウンされていないため、プログラムでフローティング状態にしないように注意が必要です。 次にSLEEPピンがあり、ロジックローでボードをスリープモードにし、モーター未使用時の消費電力を最小化します。 RESETピンはトランスレーターを事前定義されたホーム状態に設定します。このホーム状態(ホームマイクロステップ位置)は、A4988データシートの以下の図から確認できます。これらはモーターが開始する初期位置で、マイクロステップ分解能によって異なります。このピンへの入力がロジックローの場合、すべてのSTEP入力は無視されます。RESETピンはフローティングピンなので、プログラムで制御するつもりがない場合はSLEEPピンに接続してハイにし、ボードを有効化する必要があります。 次の3ピン(MS1、MS2、MS3)は、上記の真理値表に従って5種類のステップ分解能から1つを選択するためのものです。これらのピンには内部プルダウン抵抗があるため、未接続のままにするとフルステップモードで動作します。 最後のENABLEピンはFET出力のオン/オフに使用します。ロジックハイで出力を無効化します。 以下のサイトから部品を入手できます: 完全な回路図はこちらです。フルステップモードで使用するため、3つのMSピンは未接続のままにし、ドライバーのDIRとSTEPピンをArduinoのピン3と4に接続、GNDと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となります。これを確認するために、STEPピンに継続的にロジックハイを送るシンプルなコードをアップロード(電流をわかりやすくするため)、モーターの1つの巻線に直列にメーターを接続して電源を入れました。結果は0.5Aで、私のケースでは式が正しくなかったことがわかります。 サンプルコードはこちらです。まずSTEPとDIRピンを定義します。この場合はArduinoのピン3と4で、stepPinとdirPinと名付け、setup()で出力に設定します。 loop()ではまずDIRピンをハイにしてモーターを特定の方向に動かせるようにします。このforループでモーターを1回転させます。ドライバーがフルステップモードで、ステッピングモーターのステップ角が1.8度(200ステップ)の場合、STEPピンに200パルスを送ることで1回転します。forループは200回繰り返され、それぞれSTEPピンをハイ→ローにしてパルスを作ります。各digitalWriteの間に遅延を入れ、そこからモーターの速度が決まります。 この1回転後、1秒待機し、DIRピンをローにして回転方向を反転、今度は400回ループで2回転させます。最後にさらに1秒待機します。コードをアップロードして動作を確認してみましょう。 もう1つ例を作成しました。ポテンショメーターでモーターの速度を制御する例です。そのソースコードはこちら:概要


A4988ステッピングドライバーのピン配置


このArduinoチュートリアルに必要なコンポーネント
回路図

A4988電流制限



ArduinoとA4988のコード
/* シンプルなステッピングモーター制御サンプルコード
*
* by Dejan Nedelkovski, www.HowToMechatronics.com
*/
// ピン番号定義
const int stepPin = 3;
const int dirPin = 4;
void setup() {
// 2つのピンを出力に設定
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
}
void loop() {
digitalWrite(dirPin, HIGH); // モーターを特定の方向に動かす
// 200パルスで1回転
for(int x = 0; x < 200; x++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(500);
digitalWrite(stepPin, LOW);
delayMicroseconds(500);
}
delay(1000); // 1秒待機
digitalWrite(dirPin, LOW); // 回転方向を変更
// 400パルスで2回転
for(int x = 0; x < 400; x++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(500);
digitalWrite(stepPin, LOW);
delayMicroseconds(500);
}
delay(1000);
}コード言語: Arduino (arduino)/* シンプルなステッピングモーター制御サンプルコード
*
* by Dejan Nedelkovski, www.HowToMechatronics.com
*/
// ピン番号定義
const int stepPin = 3;
const int dirPin = 4;
int customDelay, customDelayMapped; // 変数定義
void setup() {
// 2つのピンを出力に設定
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
digitalWrite(dirPin, HIGH); // モーターを特定の方向に動かす
}
void loop() {
customDelayMapped = speedUp(); // カスタムspeedUp関数から遅延値を取得
// ポテンショメーターに依存するカスタム遅延でパルスを作成(モーター速度が決まる)
digitalWrite(stepPin, HIGH);
delayMicroseconds(customDelayMapped);
digitalWrite(stepPin, LOW);
delayMicroseconds(customDelayMapped);
}
// ポテンショメーター読み取り関数
int speedUp() {
int customDelay = analogRead(A0); // ポテンショメーターを読み取り
int newCustom = map(customDelay, 0, 1023, 300, 4000); // 0〜1023の読み取り値を目的の遅延値(300〜4000)に変換
return newCustom;
}コード言語: Arduino (arduino)
製造プロセス
- スマート貯金箱を作ろう:Arduino Nanoでコインアクセプターを制御
- ArduinoでBluetooth経由でLEDを制御 – シンプルDIYガイド
- Arduino Nanoとジョイスティックで2軸ステッピングモーターを制御:Visuinoで簡単プログラミング
- Arduino & MPU6050:SG90 & MG996Rサーボの精密制御
- DHT11 と Blynk で温湿度をリアルタイム監視する Arduino チュートリアル
- Arduinoで楽器演奏:音階生成のステップバイステップガイド
- Arduino UnoとBluetoothでラジコンカーを遠隔操作:ステップバイステップガイド
- ArduinoでModbusをマスターする:ステップバイステップガイド
- ジョイスティックで精密制御:Arduino UNOと28BYJ-48ステッピングモーター
- ArduinoとPythonで作るAIアシスタントロボット「ジャウndice」
- Bluetooth対応スマートサーモスタット & 照明制御システム