はじめに
ステッピングモーターを低速で動かすと「ガタガタ」と振動することがあります。
これは共振と呼ばれる現象で、モーター内部の機械的な振動が電気的な駆動周波数と一致すると発生します。
今回は、ArduinoとA4988を使ってNEMA17ステッピングモーターを30〜120 rpmで駆動し、どの速度で共振が発生するかを実験しました。
ステッピングモーターの共振について
ステッピングモーターの共振は、低速域と高速域の2カ所に存在します。
- 低速側(約70rpm付近)
- 高速側(200rpm付近)
下のグラフのように、これらの領域ではトルクが一時的に落ち込み、脱調(ステップ抜け)が起こりやすくなります。

なぜデータシートに共振点が書かれていないのか?
共振周波数はモーター単体では決まらないため、メーカーはデータシートに明記していない場合があります。
実験環境
項目 | 使用機材・部品名 | 説明 |
---|---|---|
ステッピングモーター | Iverntech Titan Extruder 用 NEMA17 ステッピングモーター(42×23 mm) | 小型・軽量タイプ。3Dプリンター・CNなどで使用される。 |
ドライバ | RUIZHI A4988 | Arduinoと組み合わせて使用。マイクロステップ制御にも対応。 |
マイコン | Arduino | ステップパルスを生成してモーターを制御。 |
駆動電圧 | 12 V | ー |
ステップモード | フルステップ | ー |
回転速度 | 30〜120 rpm(5 rpm刻み) | ー |
回路図(接続図)
A4988とArduinoの基本的な配線は以下の通りです👇
接続ポイント(概要)
- VMOT:モーター電源(8〜35 V)
- VDD:ロジック電源(3〜5.5 V)
- GND:共通グランド
- STEP:Arduino のデジタルピン9
- DIR:Arduino のデジタルピン8
- MS1〜MS3:オープン(フルステップ動作)
- RESET と SLEEP:ショート
実験コード(Arduinoスケッチ)
const int DIR = 8; // 回転方向ピン(A4988のDIRへ)
const int STEP = 9; // ステップパルスピン(A4988のSTEPへ)
const int STEPS_PER_REV = 200; // モーター1回転あたりステップ数
const int RPM_START = 30; // 最低回転数
const int RPM_END = 120; // 最大回転数
const int RPM_STEP = 5; // スイープ刻み
const unsigned long DWELL_MS = 3000; // 各速度で保持する時間(ms)
void setup() {
pinMode(DIR, OUTPUT);
pinMode(STEP, OUTPUT);
digitalWrite(DIR, HIGH); // 時計回り
Serial.begin(115200);
delay(200);
Serial.println(“Starting resonance sweep…”);
}
void loop() {
// 上昇スイープ
for (int rpm = RPM_START; rpm <= RPM_END; rpm += RPM_STEP) {
runAtRPM(rpm, DWELL_MS);
}
delay(500);
// 下降スイープ
for (int rpm = RPM_END; rpm >= RPM_START; rpm -= RPM_STEP) {
runAtRPM(rpm, DWELL_MS);
}
delay(500);
}
void runAtRPM(int rpm, unsigned long hold_ms) {
float steps_per_sec = (float)rpm * STEPS_PER_REV / 60.0;
unsigned long pulse_delay = (unsigned long)(1000000.0 / (steps_per_sec * 2.0)); // us
Serial.print(“RPM: “);
Serial.print(rpm);
Serial.print(” Step/s: “);
Serial.print(steps_per_sec, 1);
Serial.print(” Pulse delay(us): “);
Serial.println(pulse_delay);
unsigned long tStart = millis();
while (millis() – tStart < hold_ms) {
digitalWrite(STEP, HIGH);
delayMicroseconds(pulse_delay);
digitalWrite(STEP, LOW);
delayMicroseconds(pulse_delay);
}
}
実験結果
30〜120 rpmの範囲で動作させたところ、80 rpm付近で明らかに共振が発生しました。
まとめ
今回、A4988とArduinoを使ってNEMA17ステッピングモーターを30〜120rpmで回転させたところ、80rpm付近で共振が発生しました。
この速度では振動や音が大きく、安定した動作が得られません。
共振が起きる速度帯を避けるように設計しましょう。
関連記事
ステッピングモーターの速度やVrefテストをまとめた記事です。
➡️ステッピングモータが脱調する原因と対策|回転速度・Vref・脱調の関係を検証
コメント