[Arduino] Stepperライブラリ


ステッピングモーターを回す時に使った、Stepperライブラリについて。

こんな感じで使ってる。

**********
001  #include <Stepper.h>

002  Stepper stepper(200, 8, 9, 10, 11);

003  void setup() {
004    stepper.setSpeed(60);
005  }

006  void loop() {
007    stepper.step(200);
008    delay(1000);
009  }
**********

002行目で、「使うモーターは200ステップで1回転、使うピンはD8からD11だよ」としてる。
004行目で、「1分で60回転(1秒で1回転)の速度だよ」としてる。
007行目で、「200ステップ(1回転)回して」としてる。

だいぶ省略するけど、ユニポーラの場合はやってることはようはこんだけ。

**********
C:\Program Files\Arduino\libraries\Stepper\src\stepper.cpp
**********
185    switch (thisStep) {
186      case 0:    // 1010
187        digitalWrite(motor_pin_1, HIGH);  // 赤
188        digitalWrite(motor_pin_2, LOW);
189        digitalWrite(motor_pin_3, HIGH);  // 黄
190        digitalWrite(motor_pin_4, LOW);
191        break;
192      case 1:    // 0110
193        digitalWrite(motor_pin_1, LOW);
194        digitalWrite(motor_pin_2, HIGH);  // 緑
195        digitalWrite(motor_pin_3, HIGH);  // 黄
196        digitalWrite(motor_pin_4, LOW);
197        break;
198      case 2:    // 0101
199        digitalWrite(motor_pin_1, LOW);
200        digitalWrite(motor_pin_2, HIGH);  // 緑
201        digitalWrite(motor_pin_3, LOW);
202        digitalWrite(motor_pin_4, HIGH);  // 青
203        break;
204      case 3:    // 1001
205        digitalWrite(motor_pin_1, HIGH);  // 赤
206        digitalWrite(motor_pin_2, LOW);
207        digitalWrite(motor_pin_3, LOW);
208        digitalWrite(motor_pin_4, HIGH);  // 青
209        break;
210    }
**********

順にHIGHにしたりLOWにしたりしてるだけ。

ちなみにこのライブラリ、処理が終わるまで帰ってこない。
つまりモーターを回してる間は何の処理もできない。

当然、マルチタスクでもないしマルチスレッドでもないからこれではね。。。
少なくとも3軸のモーターを同時に動かす必要があり、これは使えないってこと。

だもんで、他の手を考える必要がある。

参考)バイポーラの場合

**********
165    switch (thisStep) {
166      case 0: /* 01 */
167        digitalWrite(motor_pin_1, LOW);
168        digitalWrite(motor_pin_2, HIGH);
169        break;
170      case 1: /* 11 */
171        digitalWrite(motor_pin_1, HIGH);
172        digitalWrite(motor_pin_2, HIGH);
173        break;
174      case 2: /* 10 */
175        digitalWrite(motor_pin_1, HIGH);
176        digitalWrite(motor_pin_2, LOW);
177        break;
178      case 3: /* 00 */
179        digitalWrite(motor_pin_1, LOW);
180        digitalWrite(motor_pin_2, LOW);
181        break;
182    }
**********

関連記事)Arduino関連
https://slilabo.com/?s=arduino

コメント

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