반응형

 【 아두이노 기초 】 #31 스텝(Step Motor)모터의 이해


  이번 시간부터는 스텝 모터를 제어해 보도록 하자.  먼저 스텝 모터를 잘 이해하는 것이 필요 한데,  처음에는 구조나 개념 이해가 어려울 수 있겠지만, 앞으로 여러 번의 실습을 차근차근해본다면 이해하는데 많은 도움이 될 것이다.


▶ 스텝모터 외형과 구조


《 스텝모터의 실제 내부 구조 모습 





- 스테핑 모터는 펄스 모양의 전압에 의해 일정 각도 회전하는 전동기이다.

- 회전 각도는 입력 펄스의 신호의 수에 비례하고, 회전 속도는 입력 펄스 신호의 주파수에 비례한다.
- 스테핑 모터를 구동하려면 사용하려는 모터는 몇 상 모터인지? 어떤 여자 방식을 이용하여 동작시킬 것인지를 고려해야 한다
- 모터를 구성하고 있는 권선 수에 따라 한 펄스당 회전하는 회전각이 달라진다.
- 스테핑 모터의 회전은 A /A   ,   B /B  상을 연속적으로 인가하면 모터가 회전한다.
- 스텝 각이 1.8도인 모터에  펄스를 100개 인가하면 모터는 180도를 회전하게 된다.  (200펄스 → 360도 회전)
- 스텝 모터의 구동방식에는 유니폴라(uni-polar)바이폴로(bi-polar) 구동방식이있다.

- 구동방식을 분류하면, 하나의 상(코일: A /A)을 구동하는 1상 여자 방식과, 2상 여자 방식, 1-2상 여자 방식이 있다.



▶ 스텝모터 구동 원리 설명




《 DC 모터의 구조 》

스텝모터의 원리를 이해하기 위해서는 DC모터의 구조를 파악하여 무엇이 다른지 파악하면 도움이 된다. 

 아래 이미지는 DC 모터의 구조로서, 전원공급기(Power Supply)에서 브러시를 통해 전류가 N극과 S극이 있는 로터 코일로 흐르게 되면, 플레밍의 왼손법칙에 의한 방향으로 로터코일이 힘을 받아 회전하게 된다.  




《 스텝 모터의 구조와 원리 》

 DC 모터와 달리 스텝모터는 전자석의 기능을 이용하여 로터(모터 회전축)를 돌리는 구조다.  아래 이미지에서 4번 코일에 전류를 흘리면 S극의 성질을 띄게 되어(전자석의 원리) , 중심 회전축인 로터(그림상의 가운데 자석)의 N극이 당겨지게 된다.  (자석에서 N극과 S극은 서로 당기고, 같은 극끼리는 밀어내는 성질은 잘 알고 있을 것이다.)  

 이제 4코일에 흘리던 전류를 멈추고 3번 코일에 전류를 흘리면 다시 중심 로터축의 N극이 3번 쪽으로 회전을 하게 된다. 다시 연속해서 3번 쪽 전류를 멈추고 2번 코일에 전류를 흘리면 로터는 다시 2번 코일의 위치로 회전 할 것이다. 

이런 식으로해서  4 → 3 → → 1 회전을 하면 시계방향으로 회전하게 되고,   → 2 → 3 → 4 로 전류가 흐러면 반시계방향으로 회전하게 된다. 



 아래 차트는 각 코일의 신호(전류) 상태를 시간을(타이밍) 기준으로 나타낸 것이다.   4번에 신호(전류 흘림)가 있을 때는 3번, 2번, 1번 코일에는 신호(전류)를 보내지 않는다.  그리고 그 다음 타이밍에 4번에 신호(전류)를 빼고 3번에만 신호를 넣는다. 이런식으로 1번까지 신호를 넣고 나면 그 다음 타이밍에 다시 4번 코일에 신호를 넣는 식이다. 아래는 이것을 나타낸 표이며, 타이밍 차트라하고 표현한다.   또한 한번에 코일 하나에만 전류를 공급하기 때문에 싱글 코일 여자방식 이라고 말한다 (Single-coil Excitation)  



1. 풀스텝 구동 ( full step drive) 

  스텝모터 구동은 아래처럼 풀스텝 구동이 기본이다. 4-3번 코일에 전류를 인가하고(통상적으로 여자 또는 여기된다는 말로 사용됨) 다음 스텝에서는 3-2번이 여자되고, 다음스텝에서는 2-1번이 여자,  그리고 1-4번이 여자 되면서 한 바퀴 회전이 되는 구동방식이다.    



2. 하프 스텝 구동 ( half step drive)

 아래 이미지는 하프 스텝 구동 방식으로, 첫 스텝에 4번 코일이 여자 되고, 그 다음 스텝에는 4-3번 코일이 동시에 여자되면서 로터 회전축이 두 개의 코일 사이에 위치시킬 수 있게 되며, 다음 스텝에서 3번 코일에만 여자 상태를 유지시키면서 회전축을 완전히 3번 코일 쪽으로 회전을 시키게 된다.  

이런 방식으로 풀스텝을 반으로 나뉘어 회전각을 더 작게 (정밀하게) 회전시킬 수 있다.  이를 하프스텝 구동이라 한다.  


3. 마이크로 스텝 구동 ( Micro step drive)

 마이크로 스텝 구동은 기존 하프 스텝에서 더 나아가 두 개 코일의 힘(전류)의 균형을 조절하여 중심 회전축의 위치를 더 세밀하게 스텝을 줄 수 있는 방식이다. 

예, 4번 코일과 3번 코일의 힘(전류)을 50%씩 동일하게 줄 때는 중심회전축이 4번과 3번 코일 정중앙에 위치하게 되고, 4번 코일에 40% , 3번 코일에 60%를 유지하면 3번 코일쪽으로 약간 회전한 상태로 중심축(로터)을 위치시킬 수 있게 된다. 이런식으로 모터마다 정해진 각(예, 1.8도)을 극복하고 더 세밀하게 스텝각을 나뉘어 컨트롤 할 수 있게 되고 이를 마이크로 스텝 제어라 한다. 마이크로 스텝제어가 되면 진동 및 소음을 크게 줄일 수 있다.  

 아래 이미지에서 처럼 물리적인 1스텝 각이 1.8도 인 스텝모터가 있다고 할 때 통상적으로 2등분, 4등분, 8등분, 16등분 하여 더 잘게 스텝각을 등분 할 수 있다. 

 아래 표는 마이크로 스텝 제어 등분에 따라, 360도 1회전을 하기위해 필요한 스텝수를 표시 하였다. 


 아래 이미지나 스텝 모터의 실사 내부 이미지를 보면 코일이 여러개의 다발 형태로 구성되어 있다. 이런 형태이기 때문에 스텝 각이 1.8도로 매우 작은 스텝모터를 볼 수 있는 것이다.  





▶ 실습 목표 :  

 스텝모터를 정확히 1회전 반복 제어를 시켜보자. 360도 회전 구분을 위해 중간에 1초 정도 딜레이 타임을 주도록 한다. ( L293 모터 제어용 IC를 이용한다)


▶ 실습 회로도면 :

  (이미지 클릭하면 확대 가능)



 대부분의 6핀(케이블) 스텝 모터는 아래와 같은 코일의 구조와 케이블 순서를 가진다. 간혹 과거 오래전 제품의 케이블 색은 아래와 다를 수 있으나, 순서는 아래와 같다고 보면 된다.  스텝모터의 모델 넘버를 구글링하여 제품스팩자료를 찾아 확인 할 수도 있다.

L293D 모터드라이버 IC의 연결을 위해 아래 이미지를 참고 하라.


▶ 부대품 목록 : 아두이노 보드, 브레드 보드 


▶ 부품 목록    : 스텝 모터(NK243-01AT, 모터뱅크, 1.8˚) , L293D


▶ 실습 절차  : 

 1. 회로도를 참고하여 모터 와 부품들을 연결한다.
 
 2. 대부분의 스텝모터를 사용할 때는 아두이노 출력전원과 같은 단일전원 만으로는 스텝모터가 구동 되지 않는다. 따라서 추가 전원을 스텝모터에 따로 공급 해주어야 하는데, L293과 같은 모터 드라이버 IC를 사용하게 될 경우 추가 전원을 IC 8번 핀으로 공급해주면 된다.  (스텝 모터 마다 허용 공급 전원이 상이 함으로 허용 가능 전압을 확인 할 것, 본 실험에서는 5V를 입력함)

 3. 회로의 모든 GND(그라운드, '-' 단자)는 하나로 연결 한다. 



▶ 프로그램 (코드& 설명) : 


#include <Stepper.h>     // 스테핑 모터 라이브러리를 정의 한다

 int in1Pin = 12;            // [A] 상을 정의 한다

 int in2Pin = 11;            // [B] 상을 정의 한다

 int in3Pin = 10;            // [/A] 상을 정의 한다

 int in4Pin = 9;             // [/B] 상을 정의 한다

Stepper motor(200, in1Pin, in2Pin, in3Pin, in4Pin);

void setup() {

  pinMode(in1Pin, OUTPUT);  // [A] 상을 출력으로 지정한다

  pinMode(in2Pin, OUTPUT);  // [B] 상을 출력으로 지정한다

  pinMode(in3Pin, OUTPUT);  // [/A] 상을 출력으로 지정한다

  pinMode(in4Pin, OUTPUT);  // [/B] 상을 출력으로 지정한다

  motor.setSpeed(30);  // 스텝모터의 스피드 설정 함수 (RPM)

}

void loop() {

  int steps = 200;                // 스텝 수 지정(200X1.8=360)

  motor.step(steps);             // 지정된 스텝만큼 모터를 구동한다

  delay(1000);

}


※ 보충 설명

- 스텝핑 모터는 DC전압이나 전류를 모터의 각 상의

 단자에 펄스 형태로 입력 시켜 줌으로서 일정한 각도를 회전하게 하는 모터이다.

-  setSpeed 값을 변화 시켜보라
- 정방향 / 역방향을 번갈아 회전시켜보라  (역방향은 스텝수 앞에 '-' 기호를 붙여 넣으면 역방향으로 회전하게 된다)
- 아래 코드를 참고하여 시리얼 통신창으로 스텝 값을 직접 입력해서 제어해보라

void loop() {

  if (Serial.available())   {

    int steps = Serial.parseInt();

    motor.step(steps);

 

}

 

▶ 실행 영상 : 






▶ 아두이노 소스 코드 다운로드 : 



반응형