ステッピングモーターの制御回路とプログラム例(1相/2相励磁) – imo Lab.
PR

ステッピングモーターの制御回路とプログラム例(1相/2相励磁)

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

 Arduinoなどのマイコンからライブラリ無しでステッピングモーターを回転制御してみたいと思います。

スポンサーリンク

概要

 A4988やL6470などのドライバモジュールを使用して制御したことはあるのですが今回は構造の勉強を兼ねてライブラリなどは使用せずに回転制御を行ってみたいと思います。

 久しぶりにステッピングモーターを触るのでおさらいから始めます。

ステッピングモーター概要

ステッピングモーター回路概要

 バイポーラタイプのイメージです。コイルに流れる電流の向きをスイッチで順番に切り替えて回転させます。このスイッチの切り替え制御と回路部分を纏めているのがA4988やL6470といったドライバモジュールになります。このスイッチ部分はHブリッジ2回路分です。

 スイッチの切替制御(コイルへの通電順)にはいろいろ種類があるようですが今回は基本的な1相励磁及び2相励磁の制御を試してみます。

1相励磁/2相励磁

 それぞれの通電パターンです。

1相励磁パターン

 イメージです。縦並びがA相、横並びがB相をイメージしてます。

1相励磁通電パターン
ステップ234
A相1000
B相0100
A^相0010
B^相0001

 1相ずつ通電して磁界の向きを制御します。4ステップで1サイクル。最も簡単な方法かと思います。消費電力は少ないが振動、騒音は大きくなるとのこと。1相励磁はあまり使われることはないそうです。

2相励磁パターン

1相励磁通電パターン
ステップ234
A相1001
B相1100
A^相0110
B^相0011

 1相同様に4ステップで1サイクル。1相との違いは2つのコイルに同時に電流を流すこと。消費電力は増えますがその分トルクも増します。1相励磁よりも振動が少ないというメリットもあるとのことですが試してみたところ微妙な違いでした。

 実際にブレッドボードで回路を準備してRaspberyPiPicoから制御してみます。

回路

DRV8835ステッピングモーター回路

 スイッチ部のHブリッジ2回路分はDRV8835モジュールを使いました。マイコンはPico。

ステッピングモーター、DRV8835ブレッドボード

 ブレッドボードで準備。ステッピングモーターはアリエクから購入。

スポンサーリンク

プログラム

//2025/07/10 imo Lab.
//ステッピングモーター 1相/2相励磁制御 by Raspberry Pico
//https://garchiving.com

#define A1 15
#define A2 14
#define B1 13
#define B2 12

void setup() {
  Serial.begin(115200);
  analogWriteFreq(60000);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(14, OUTPUT);
  pinMode(15, OUTPUT);
}

void loop() {
  static uint8_t type;
  if (Serial.available() > 0) {
    type = Serial.read();
  }

  if (type == '1') {
    //1相励磁
    Serial.println("1phase");
    motorControl(1, 0, 0, 0);
    motorControl(0, 1, 0, 0);
    motorControl(0, 0, 1, 0);
    motorControl(0, 0, 0, 1);
  }

  if (type == '2') {
    //2相励磁
    Serial.println("2phase");
    motorControl(1, 1, 0, 0);
    motorControl(0, 1, 1, 0);
    motorControl(0, 0, 1, 1);
    motorControl(1, 0, 0, 1);
  }
}

void motorControl(bool a, bool b, bool c, bool d) {
  uint8_t power = 170;
  analogWrite(A1, a * power);
  analogWrite(B1, b * power);
  analogWrite(A2, c * power);
  analogWrite(B2, d * power);
  delay(3);
}

 単純なスイッチON/OFF(digitalWrite)では電流がかなり流れてしまったので、PWM出力で疑似的に出力下げてます。ArduinoIDEなどのシリアルモニタから「1」を送信で1相励磁、「2」を送信で2相励磁の切り替えができます。delayの数字変えると回転速度が変えられます。

動作確認

ステッピングモーター動作確認GIF

 思ったよりも簡単に回転させることができました。やはり振動(騒音)は大き目です。

 制御に4線(マイコンから4ピン)も必要となりますし、他にも処理をさせようとするとちょっとプログラムが煩雑なりそうです。特にこだわりや必要が無ければステッピングモーター用のドライバモジュールなどを使用した方が便利で簡単かと。次回は1-2相励磁、マイクロステップで回転させてみたいと思います。

参考

コメント

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