CH 01ステッピングモーターとは
パルス信号 1 つにつき決まった角度だけ回転する、位置決めに強いモーター。
特徴
- 1 パルスで 1 ステップ角 進む(例:1.8°)
- 角度・回転数をカウントで管理できる
- 低速で大きなトルクを出しやすい
- 大電流が流れるため 専用ドライバ 経由で駆動
今回使用する部品
ステッピングモーター
定格電圧 12V / ステップ角 1.8° の 2 相バイポーラタイプ。
モータードライバ
A4988。STEP / DIR の 2 線でマイコンから制御できる。
外部電源
モーター駆動用に 12V 電源を別途用意する。
Arduino Uno
STEP / DIR 信号を出力する役割。
Point
DC モーターのように速さを制御するのではなく、ステッピングモーターは位置と回数を制御するのが基本。「何度回したいか」をプログラムから組み立てる発想に切り替える。
CH 02配線と接続
A4988 と Arduino を最低限の本数で接続する。STEP と DIR の 2 本だけで方向と回転量をコントロールできる。
ピン対応表
| A4988 側 | 接続先 | 役割 |
| STEP | D9 | パルスを入れるたびに 1 ステップ進める |
| DIR | D8 | HIGH / LOW で回転方向を切り替える |
| VDD | 5V | ロジック電源(Arduino から供給) |
| GND | GND | Arduino と共通グランド |
| VMOT / GND | 外部 12V | モーター駆動用電源 |
| 1A / 1B / 2A / 2B | モーター 4 線 | 2 相コイルへの出力 |
Caution
モーター電源を入れる前に、必ず Arduino と A4988 の GND を共通化しておく。VMOT 投入中にモーター線を抜き差しすると、ドライバ IC が破損することがある。
CH 03プログラム実装
STEP に短いパルスを入れるたびに 1 ステップ進む、というシンプルな仕組みをそのままコードに落とし込む。
ピン定義
const int DIR = 8;
const int STEP = 9;
setup()
void setup() {
pinMode(DIR, OUTPUT);
pinMode(STEP, OUTPUT);
digitalWrite(DIR, LOW);
digitalWrite(STEP, LOW);
}
時計回り / 反時計回り
1 ステップ分のパルスを送る関数を、方向ごとに用意する。delayMicroseconds でパルスの幅を決めるのがポイント。
void clockwise(int delaytime){
digitalWrite(DIR, HIGH);
digitalWrite(STEP, HIGH);
delayMicroseconds(delaytime);
digitalWrite(STEP, LOW);
delayMicroseconds(delaytime);
}
void counter_clockwise(int delaytime){
digitalWrite(DIR, LOW);
digitalWrite(STEP, HIGH);
delayMicroseconds(delaytime);
digitalWrite(STEP, LOW);
delayMicroseconds(delaytime);
}
loop() — 50 ステップずつ往復
void loop() {
for (int i = 0; i < 50; i++) {
clockwise(5000); // 時計回りに 1 ステップ
}
for (int i = 0; i < 50; i++) {
counter_clockwise(5000); // 反時計回りに 1 ステップ
}
}
主要関数の整理
digitalWrite()
STEP / DIR を HIGH / LOW にしてパルスと方向を作る。
delayMicroseconds()
パルス幅をマイクロ秒で制御。値が小さいほど高速回転。
for ループ
「何ステップ回すか」を整数の回数として扱う。
const int
変更しないピン番号は定数として宣言。可読性とミス防止に有効。
Tips
delaytime を小さくすると速く、大きくするとゆっくり回る。ただし小さくしすぎると脱調(ステップが飛ぶ)するので、まずは 5000μs 前後から試すと安定しやすい。
Qiita 原文を読む