AccelStepperライブラリについて。


先の記事にも書いたけど、これを使うと複数のモーターを同時に回せる。


ここからダウンロードする。
https://github.com/adafruit/AccelStepper

※画面右の「Download ZIP」から落とす。


追記)こっちからのが最新版がダウンロードできるみたい。
http://www.airspayce.com/mikem/arduino/AccelStepper/


こんな感じで使ってる。
**********
001  #include <AccelStepper.h>
002  AccelStepper stepperX(1, 2, 5);
003  int posX = 3600;
004  void setup() {
005    stepperX.setMaxSpeed(3000);
006    stepperX.setAcceleration(1000);
007  }

008  void loop() {
009    if (stepperX.distanceToGo() == 0) {
010      posX = -posX;
011      stepperX.moveTo(posX);
012    }
013    stepperX.run();
014  }
**********

参考)Easy Driver Examples   Example 3: Using a pre-built library - AccelStepper
http://www.schmalzhaus.com/EasyDriver/Examples/EasyDriverExamples.html


このライブラリが対応してるのは以下のタイプ。
**********
C:\Program Files\Arduino\libraries\AccelStepper\AccelStepper.h
**********
264  typedef enum
265  {
266    FUNCTION  = 0, ///< Use the functional interface, implementing your own driver functions (internal use only)
267    DRIVER    = 1, ///< Stepper Driver, 2 driver pins required
268    FULL2WIRE = 2, ///< 2 wire stepper, 2 motor pins required
269    FULL3WIRE = 3, ///< 3 wire stepper, such as HDD spindle, 3 motor pins required
270    FULL4WIRE = 4, ///< 4 wire full stepper, 4 motor pins required
271    HALF3WIRE = 6, ///< 3 wire half stepper, such as HDD spindle, 3 motor pins required
272    HALF4WIRE = 8  ///< 4 wire half stepper, 4 motor pins required
273  } MotorInterfaceType;
**********


モータードライバーの場合はこんな感じの処理をしてる。
**********
C:\Program Files\Arduino\libraries\AccelStepper\AccelStepper.cpp
**********
369  // 1 pin step function (ie for stepper drivers)
370  // This is passed the current step number (0 to 7)
371  // Subclasses can override
372  void AccelStepper::step1(long step)
373  {
374    // _pin[0] is step, _pin[1] is direction
375    setOutputPins(_direction ? 0b10 : 0b00); // Set direction first else get rogue pulses
376    setOutputPins(_direction ? 0b11 : 0b01); // step HIGH
377    // Caution 200ns setup time
378    // Delay the minimum allowed pulse width
379    delayMicroseconds(_minPulseWidth);
380    setOutputPins(_direction ? 0b10 : 0b00); // step LOW
381
382  }
**********

割り込みとかを使用せず、なんちゃって同時稼動をやってるみたい。


まぁ、あんま深くコード読んどらんけどね。


参考)バイポーラの場合
**********
C:\Program Files\Arduino\libraries\AccelStepper\AccelStepper.cpp
**********
385  // 2 pin step function
386  // This is passed the current step number (0 to 7)
387  // Subclasses can override
388  void AccelStepper::step2(long step)
389  {
390    switch (step & 0x3)
391    {
392    case 0: /* 01 */
393      setOutputPins(0b10);
394      break;
395
396    case 1: /* 11 */
397      setOutputPins(0b11);
398      break;
399
400    case 2: /* 10 */
401      setOutputPins(0b01);
402      break;
403
404    case 3: /* 00 */
405      setOutputPins(0b00);
406      break;
407    }
408  }
---


参考)ユニポーラの場合
**********
C:\Program Files\Arduino\libraries\AccelStepper\AccelStepper.cpp
**********
431  // 4 pin step function for half stepper
432  // This is passed the current step number (0 to 7)
433  // Subclasses can override
434  void AccelStepper::step4(long step)
435  {
436    switch (step & 0x3)
437    {
438    case 0:    // 1010
439      setOutputPins(0b0101);
440      break;
441
442    case 1:    // 0110
443      setOutputPins(0b0110);
444      break;
445
446    case 2:    // 0101
447      setOutputPins(0b1010);
448      break;
449
450    case 3:    // 1001
451      setOutputPins(0b1001);
452      break;
453    }
454  }
**********


---

参考記事)Arduino関連
http://slilabo.com/tag/Arduino

---


スポンサード・リンク