Arduino, 스텝모터

스텝모터 (Step Motor)#

  • 펄스 모양의 전압에 의해 일정 각도(스텝 수) 만큼 회전하는 모터.
  • 회전 각도는 입력 펄스 신호의 수에 비례하고, 회전 속도는 입력 펄스 신호의 주파수에 비례한다.

스텝모터 28BYJ-48#

  • 정격전압: 5VDC

  • 기어비: 1/64 $$ \frac {32}{9} \times \frac {22}{11} \times \frac {26}{9} \times \frac {31}{10} = 63.68395 \fallingdotseq 64 $$

  • 스트라이드 각도
    • 스펙상 5.625º / 64 = 0.087890625
      • 그러므로, 360º / 0.087890625 = 4096 스텝
    • 실제로는 11.25º / 64 = 0.17578125
      • 그러므로, 360º / 0.17578125 = 2048 스텝으로 1회전 (이 값이 중요함!)
  • Frequency: 100Hz
  • 토크: 34.3mN,m

모터드라이브 ULN2003#


schematic#

Pin Map#

모터드라이브아두이노
INT111
INT210
INT39
INT48
GNDGND
VCC5V

sketch: 예제1#

#include <Stepper.h>

// 2048:한바퀴(360도), 1024:반바퀴(180도)...
// datasheet를 통해 스트라이드 각도를 계산한 값을 사용
const int stepsPerRevolution = 2048;

// 모터 드라이브에 연결된 핀 IN1, IN3, IN2, IN4
Stepper myStepper(stepsPerRevolution, 11, 9, 10, 8);

void setup() {
  myStepper.setSpeed(14); 
}

void loop() {
  // 시계 반대 방향으로 한바퀴 회전
  myStepper.step(stepsPerRevolution);
  delay(500);

  // 시계 방향으로 한바퀴 회전
  myStepper.step(-stepsPerRevolution);
  delay(500);
}
  • Stepper myStepper(stepsPerRevolution, 11, 9, 10, 8);
    • 모터 드라이브에 연결되는 순서에 유의한다! (IN1, IN3, IN2, IN4 순서임!)
  • myStepper.setSpeed(14);
    • 아두이노 보드의 5V 전원 사용시 16이 최대값.
    • 16 이상은 안정적으로 회전이 안되며, 17을 넣으면 한바퀴 돌고 정지. 18을 넣으면 돌지 않음

sketch: 예제2#

#include <Stepper.h>

// 2048:한바퀴(360도), 1024:반바퀴(180도), 64:11.25도
const int stepsPerRevolution = 64;

// 모터 드라이브에 연결된 핀 IN1, IN3, IN2, IN4
Stepper myStepper(stepsPerRevolution, 11, 9, 10, 8);

void setup() {
  myStepper.setSpeed(16);
}

void loop() {
  
  // 시계 반대 방향으로 한바퀴 회전
  // 64 * 32 = 2048 한바퀴 => 11.25도씩 32번 회전 (360도)
  for(int i=0; i<32; i++) {  
    myStepper.step(stepsPerRevolution);
  }
  delay(500);

  // 시계 방향으로 한바퀴 회전
  // -64 * 32 = 2048 한바퀴 => -11.25도씩 32번 회전 (-360도)
  for(int i=0; i<32; i++) {
    myStepper.step(-stepsPerRevolution);
  }
  delay(500);
}