본문 바로가기
Arduino

[아두이노] 스텝 모터 제어 with Easy driver(A3967)

by weareyoung24 2022. 4. 29.

스텝 모터와 모터 드라이버

스텝 모터(step motor, stepping motor, stepper motor)는 브러시리스 모터(BLDC)로 동작 제어가 스텝 단위로 제어가 되는 모터를 말한다(= 스텝 각이 1.8도인 모터는 펄스, 즉 신호를 1번 주면 1.8도 회전을 한다).

모터 드라이버는 모터의 컨트롤러(아두이노, 라즈베리파이 등)와 모터를 이어주는 모듈을 말한다. 앞서 설명했듯이 스텝 모터는 펄스를 통해 스텝 단위로 제어하는데 모터 드라이버를 통해 컨트롤러가 펄스를 제어할 수 있다.

이번 글에서는 컨트롤러로 아두이노, 모터 드라이버는 Easy driver를 사용해 스텝 모터를 제어해보겠다.

 

준비물

  준비물 역할
1 아두이노 나노 컨트롤러
2 Easy driver(A3967) 모터 드라이버
3 12V 어댑터 외부 전원
4 스텝 모터 모터

스텝모터

사용할 스텝 모터의 품명은 NK-244-01AT로 42각 2상이다. 2상 스텝 모터이기에 1 스텝에 1.8도 이동한다.

6선 스텝 모터며 구매처가 제공하는 모터의 결선도는 아래 그림과 같다.

기본 스텝 모터 결선도

다만 실제 적용을 했을 때 녹색과 적색을 바꾼 경우 정상적으로 동작하는걸 보아 결선도 정보가 잘못된 것으로 보인다. 결선도를 다시 그려보면 아래 결선도와 같고 이를 적용하겠다.

올바르게 동작하는 스텝 모터 결선도

Easy driver(A3967)

사용할 모터 드라이버는 Easy driver다. 드라이버에 연결은 아래 그림처럼 하면 된다.

Easy driver 핀 연결

주요 핀을 살펴보자. 먼저 좌측 상단에 Motor Coil A와 B가 있다. 왼쪽부터 순서대로 A+, A-, B+, B- 를 연결해주면 된다. 따라서 위 스텝모터 결선도에 따라 검정, 빨강, 초록, 파랑 선을 연결해준다.

우측 상단에는 Power In 핀이 있다. 이는 외부 전원을 넣어주는 핀이다. 이 글에서는 12V 어댑터를 통해 전원을 연결해줬다.

Power In 왼쪽에는 Enablerhk MS2 핀이 있다. 이는 Easy driver가 마이크로 스테핑 드라이버라 있는 핀이다.

마이크로 스테핑 드라이버는 스텝 모터의 각도를 다시 나눌 수 있다는 의미다. Easy driver는 full, half, quarter, eighth로 각도를 나눌 수 있는데 full을 쓰는 경우 스텝 각이 1.8도, half는 0.9도, quarter는 0.45도, 마지막으로 eighth는 0.225도로 나눠짐을 의미한다. Enable(MS1), MS2 핀을 통해 full, half, quarter, eighth 중 선택을 할 수 있으며 default는 eighth이다. 이번 글에서는 기본값을 사용하겠다.

우측 아래에는 GND, Step Input, Direction Input 핀이 있는데 이는 아두이노와 연결해주면 된다.

 

회로 구성

회로 구성도

회로는 위 회로 구성도 그림과 같이 구성한다. Motor Coil에는 좌측부터 A+, A-, B+, B- 순서로 연결하고 외부 전원을 Power 핀에 연결해준다. 컨트롤러인 아두이노 나노와 연결은 GND 연결, STEP 핀은 D3, DIR 핀은 D2에 연결한다. 다른 디지털 핀에 연결해줘도 괜찮다.

 

실행 코드

#define DIR_PIN 2
#define STEP_PIN 3
 
void setup(){
  pinMode(DIR_PIN, OUTPUT);
  pinMode(STEP_PIN, OUTPUT);
 
  Serial.begin(9600);
}

// can control motor speed with delay time
int delay_micro_time = 70;
int delay_big_step = 1000;

void loop(){
  digitalWrite(DIR_PIN, HIGH);

  // 200 as 45 degree since 1600 represent 360 degree 
  for (int i = 0; i < 200; i++)
  { 
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(delay_micro_time);
    digitalWrite(STEP_PIN, LOW);
    delayMicroseconds(delay_micro_time);
  }
  delay(delay_big_step);
}

;코드를 보면 먼저 step, dir 핀을 정의해주고 output으로 설정해준다.

delay_micro_time은 스텝 모터에 1 펄스를 주고 대기하는 시간이다. 스텝 모터에 신호를 주는 과정은 HIGH를 부여해 1 펄스를 주고 Low로 변경하는 과정을 반복하는 것이다. 따라서 HIGH 설정, LOW 설정 후 delay 시간을 조절해 모터의 회전 속도를 조절할 수 있다. 다만 단위가 microsecond(10^-6) 임에 유의하자.

마지막으로 회전 각도 조절이다. 1.8도 스텝 각을 갖는 모터를 8분위로 나눴으니 총 1600번 이동해야 1번 회전을 한다. 따라서 본 코드는 45도 회전, 1초 정지, 45도 회전을 반복하는 코드임을 알 수 있다.

혹시 회전 방향을 바꾸고싶다면 DIR 핀에 HIGH가 아닌 LOW를 주면 된다.

댓글