
Arduinoなどのマイコンからライブラリ無しでステッピングモーターを回転制御してみたいと思います。
概要
A4988やL6470などのドライバモジュールを使用して制御したことはあるのですが今回は構造の勉強を兼ねてライブラリなどは使用せずに回転制御を行ってみたいと思います。


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

バイポーラタイプのイメージです。コイルに流れる電流の向きをスイッチで順番に切り替えて回転させます。このスイッチの切り替え制御と回路部分を纏めているのがA4988やL6470といったドライバモジュールになります。このスイッチ部分はHブリッジ2回路分です。
スイッチの切替制御(コイルへの通電順)にはいろいろあるようですが今回は基本的な1相励磁及び2相励磁の制御を試してみます。
1相励磁/2相励磁
それぞれの通電パターンです。
1相励磁パターン
イメージです。縦並びがA相、横並びがB相をイメージしてます。

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

| ステップ | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| A相 | 1 | 0 | 0 | 1 |
| B相 | 1 | 1 | 0 | 0 |
| A^相 | 0 | 1 | 1 | 0 |
| B^相 | 0 | 0 | 1 | 1 |
1相同様に4ステップで1サイクル。1相との違いは2相のコイルに同時に電流を流すこと。消費電力は増えますがその分トルクも増します。1相励磁よりも振動が少ないというメリットもあるとのことですが試してみたところ微妙な違いでした。
実際にブレッドボードで回路を準備してRaspberyPiPicoから制御してみます。
回路

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

ブレッドボードで準備。ステッピングモーターはアリエクから購入。
プログラム
//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の数字変えると回転速度が変えられます。
動作確認

回転させるだけなら簡単でした。振動(騒音)は大き目です。ただ同じフルステップでもA4988使った時の方が明らかに静か。プログラムなのか回路なのか原因不明ですが何かが悪いよう。原因突き止めたいですが面倒ですし、やはり奥が深いということであきらめます。
制御に4線(マイコンから4ピン)も必要となりますし、他にも処理をさせようとするとちょっとプログラムが煩雑なりそうです。特にこだわりや必要が無ければステッピングモーター用のドライバモジュールなどを使用した方が便利で簡単かと。次回は1-2相励磁、マイクロステップで回転させてみたいと思います。
参考
コメント