7-3 스테퍼모터

공부하는 학생 A·2024년 2월 17일
0

아두이노 

목록 보기
35/74

스테퍼모터

스텝모터 또는 스테핑모터라고도 하는 스테퍼모터는 디지털 펄스를 기계식 축 회전으로 전환하는 브러시가 없은 동기식 전기 모터이다. 스테퍼모터는 회전을 하는 것이 아니라 한 순간에 한 스텝씩 이동을 한다. 만약 360도 회전을 하려면 최대 200단계로 나누어 한 단계에 1.8도씩 일정한 크기로 축을 이동시킨다. 따라서 피드백 메커니즘이 없어도 각 단계별 펄스 신호에 따라 회전각도와 속도를 정확하게 제어할 수 있다. 180도만 회전할 수 있는 서보모터와 달리 스테퍼모터는 정해진 스텝만큼 이동하면서 끊임없이 회전할 수 있다. 일반적인 감시카메라에서부터 컴퓨터 수치 제어에 의하여 작동이 제어되는 공작 기계인 CNC 기계, 로봇에 이르기까지 스테퍼모터는 고속, 고정밀, 고정도의 제어가 요구되는 영역에 사용된다.

회로 구성

스케치 7-5 스테퍼모터의 시계 방향/반시계 방향 회전 제어

#include <Stepper.h>

// 한 바퀴 (360도)를 완전하게 회전하려면 2048 스텝이 필요
const int stepsPerRevolution = 2048; // (2048 스텝 = 360도 회전)

// Stapper class의 인스턴스인 myStepper를 생성.
// 아두이노 보드의 디지털 8, 9, 10, 11번 핀을
// 스테퍼 모터 드라이브의 IN1, IN3, IN2, IN4에 연결.
// 인스턴스 생성 시 1-3-2-4 순서로 대응되는 핀 번호 입력.
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);    

void setup() {
  myStepper.setSpeed(14); // 스테퍼 모터의 속도를 14RPMs로 설정
}

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

  // 시계 방향으로 한 바퀴 회전
  myStepper.step(-stepsPerRevolution);
  delay(500);
}

스케치 7-5 분석

  • 스테퍼모터가 반시계방향으로 한 바퀴 돌았다가 시계방향으로 한 바퀴 돈다

스케치 7-6 8단계로 한 바퀴 회전하는 스테퍼모터의 구현

#include <Stepper.h>
 
const int stepsPerRevolution = 2048/8;  // (256 스텝 = 45도 회전) 
 
// ULN2003 스테퍼 모듈의 IN1, IN2, IN3, IN4를
// 아두이노의 D8, D9, D10, D11 핀에 순서대로 연결
Stepper myStepper(stepsPerRevolution, 8,10,9,11); // IN 1-3-2-4 시퀀스 
 
void setup() {
  myStepper.setSpeed(120);  // 모터의 속도를 120 RPMs로 설정:
  Serial.begin(9600);   // 시리얼 포트의 초기화:
}
 
void loop() {
  if(Serial.available()){
    Serial.println("clockwise");
    // stepsPerRevolution만큼 8번 이동 (시계 방향으로 1회전):
    for (int x=1;x<9;x++)
    {
      myStepper.step(stepsPerRevolution);
      Serial.println(x); // 현재 반복횟수를 시리얼 모니터에 출력
    }
    delay(500); 
    
    Serial.println("counterclockwise");
    // -stepsPerRevolution만큼 8번 이동 (반시계 방향으로 1회전):  
    for (int x =1;x<9;x++)
    {
      myStepper.step(-stepsPerRevolution);
      Serial.println(x); // 현재 반복횟수를 시리얼 모니터에 출력
    }
    delay(500);
  }
}

스케치 7-6 분석

  • 시계 방향과 반시계 방향으로 정확하게 여덟 단계로 한 바퀴 회전하는 스테퍼모터
    또한 각 반복 단계마다 현재 수행하고 있는 반복 횟수를 시리얼 모니터에 표시

스케치 7-6 실행결과


스케치 7-7 시리얼 통신을 이용한 스테퍼모터의 제어

#include <Stepper.h>

const int STEPS = 2048;  // 2048 스텝 = 360도
// 스텝 수와 스테퍼 모터 드라이브의 IN1, IN3, IN2, IN4이 연결될 아두이노 핀 번호 설정
Stepper stepper(STEPS, 8, 10, 9, 11);  

void setup()
{
  stepper.setSpeed(14); // 스테퍼 모터의 속도를 14rpms로 설정
  Serial.begin(9600);    // 시리얼 통신 시작, 통신 속도는 9600 baudrate
  Serial.println("회전시킬 각도를 입력하시오.");
}

void loop()
{
   if(Serial.available()) {
    int val=Serial.parseInt(); //회전각(-360~360) int형으로 읽기
    
    val=map(val,-360, 360, -2048, 2048); // 회전 각도와 스텝 수의 범위 매핑
    stepper.step(val); 
    Serial.println(val);
    delay(10);
  }
}

스케치 7-7 분석

  • 아두이노 IDE의 시리얼 모니터를 열고 -360도에서 360도 사이의 원하는 스텝 모터의 회전 각도를 정수로 입력하면 그 값이 시리얼 통신을 통하여 아두이노로 전달되어 스테퍼모터의 샤프트가 해당 값 만큼 회전한다.

스케치 7-7 실행결과

profile
Shine like a star, Just like a star

0개의 댓글