ライブラリを使わずにステッピングモーターを複数同時に制御 – imo Lab.
PR

ライブラリを使わずにステッピングモーターを複数同時に制御

記事内に広告が含まれています。
ブラシレスモーター
スポンサーリンク

概要

 ライブラリは使用せずにRaspberryPi PicoW+A4988+ステッピングモーターの組合せで複数モーター(3個)の同時制御を行ってみました。

 過去、DCモーターやBLDCモーター、ドライバもA4988、L6470、DRV8835など、いろいろな組み合わせで似たようなのことをやったことがあります。ステッピングモーター+A4988の組合せも何年も前で忘れてしまったのであらたにやり直してみました。確か当時は低速域の回転がイマイチだった気がするのですが今回はうまくいっているよう。

回路(A4988配線)

a4988配線図

 マイコンはBluetoothで操作したかったのでPicoWを使ってます。モーター側の配線は使用するモーターを確認して下さい。ただNema規格の一般的なステッピングモーターであれば付属してるリード線がクロスされている場合がほとんどかと思いますのでそのままの順番で繋げば大体OKかと。向きが変わっても回転方向が変わるだけ、、と思います。

A4988ブレッドボード

 このA4988を3個分(モーターの数分)準備します。配線はブレッドボード。

プログラム

//2025/08/03 imo Lab.
//https://garchiving.com

void loop1() {
  loopTime[1] = micros();
  if (mtrRPM[0] != 0 && loopTime[1] - mtrTimer[0] >= interval[0]) {
    mtrTimer[0] = loopTime[1];
    gpio_put(2, 1);
    gpio_put(3, dir[0]);
    gpio_put(6, !gpio_get(9));
  }
  if (mtrRPM[0] == 0) gpio_put(2, 0);

  if (mtrRPM[1] != 0 && loopTime[1] - mtrTimer[1] >= interval[1]) {
    mtrTimer[1] = loopTime[1];
    gpio_put(10, 1);
    gpio_put(11, dir[1]);
    gpio_put(12, !gpio_get(12));
  }
  if (mtrRPM[1] == 0) gpio_put(10, 0);

  if (mtrRPM[2] != 0 && loopTime[1] - mtrTimer[2] >= interval[2]) {
    mtrTimer[2] = loopTime[1];
    gpio_put(13, 1);
    gpio_put(14, dir[2]);
    gpio_put(15, !gpio_get(15));
  }
  if (mtrRPM[1] == 0) gpio_put(13, 0);
}

 モーター制御部分の抜粋です。せっかくPicoを使っているのでマルチコアで処理。core0で通信処理、core1でモーター制御を行ってます。時間監視してモーター速度に応じてパルス出力してます。ちょっとでもタイムラグ減らしたかったのでdigitalRead/Writeではなく、c言語よりの記述で行ってます。正確さはないですがアバウトな速度制御で良ければ十分かと。

 Bluetooth通信を使いたかったのでPicoWを使っているだけで、せっかくPicoなのでマルチコアを使用してます。なのでモーター制御部分だけであればArduinoでも同じ考え方でほぼそのまま行けると思います。

コメント

タイトルとURLをコピーしました