[아두이노] [강좌] 37. 스텝 모터 (1) - 스텝 모터 동작 방식

스텝 모터는 스테핑 모터, 또는 스테퍼 모터라고도 한다. 강좌에서는 스텝 모터라고 하겠음.



스텝 모터는 DC모터와 달리 정교한 회전각 제어에 사용된다. 스텝 모터는 한 스텝에 몇 도를 회전하는지 정해져 있는데, 그 각은 스텝 모터마다 다르다. 내가 가진 모터는 아래 사진과 같이 한 스텝 당 1.8° 회전한다고 표시되어 있다.

 

 604f1a4550d11c9683abc8fbf46e946a.png 



스텝 모터는 종류에 따라 2선식과 4선식으로 나뉘는데, 아두이노의 라이브러리 'Stepper'는 두 방식 모두 지원한다. 내가 가진 스텝 모터는 선이 6개이고, 4선식에서 공통 단자 핀이 2개 추가된 것. 동작 방식은 4선식과 같다. 각 선의 기능은 위 스텝 모터의 데이터 시트에 표시되어 있다.


71da55c70c2892076332b29864b70a38.png


선이 4개일 경우 Yellow(황) 선과 White(백) 선이 없는 경우이므로 제외하면 된다. Yellow 선과 White 선은 “COM(공통단자)” 핀이라고 하는데, 두 핀에 모두 HIGH 신호를 주면 된다고 나와있다. 근데 LOW 줘도 동작 되던데? HIGH 주라니까 HIGH를 주면 되지, 뭐.

 


스텝 모터는 한 스텝에 하나의 핀으로 전류를 보내는 방법과 두 개의 핀으로 신호를 주는 방법이 있는데, 여기서는 하나의 핀으로 신호를 주는 방법을 보자. 신호는 A→B→/A→/B 순서로 주면 된다. 한 핀에 한 번의 신호를 주는 것이 한 스텝이며, 4개의 핀에 차례로 한 번씩 신호를 주면 4 스텝을 진행하게 되는 것. 표로 나타내면 다음과 같다.

 

 

 

1

2

3

4

5

6

7

8

9

A

HIGH

LOW

LOW

LOW

HIGH

LOW

LOW

LOW

HIGH

B

LOW

HIGH

LOW

LOW

LOW

HIGH

LOW

LOW

LOW

/A

LOW

LOW

HIGH

LOW

LOW

LOW

HIGH

LOW

LOW

/B

LOW

LOW

LOW

HIGH

LOW

LOW

LOW

HIGH

LOW

 

 

말로 설명하는 것보다 예제로 살펴보는 것이 빠를 듯. 이 순서대로 신호를 주는 소스를 구현해보자.

 

 

핀 연결은 다음 표와 같다. 모터마다 순서가 다를 수 있어 핀 연결 그림은 넣지 않았다. 만일 모터에 핀이 4개라면 A, /A, B, /B 핀만 연결하면 된다.

 


선 색상

핀 이름

아두이노 핀 번호

Black (흑)

A

8

Yellow (황)

COM(공통단자)

6

Green (녹)

/A

10

Red (적)

B

9

White (백)

COM(공통단자)

7

Blue (청)

/B

11

 

  

노란 색 선과 흰색 선은 순서가 바뀌어도 상관 없지만 A, B, /A, /B 선은 순서가 틀리지 않도록 주의해서 연결한다. 선의 색상은 모터에 따라 다를 수 있으므로 핀 이름으로 확인해야 한다. 그리고 다음 소스를 업로드 한 후 모터를 살펴보자 .단, 스텝 모터는 전류를 많이 소모하는 특성이 있으므로 아두이노 보드에(스텝 모터에는 따로 전원을 넣는 핀이 없으니까) 외부 전원을 따로 연결해주는 것이 좋다. USB 포트로 전류 땡기다가 PC 다운된 적 있음. ㄷㄷㄷ;;;


brown_and_cony-57

 


 

 

 StepMotorTest.ino 

  

 int stepCnt = 360 / 1.8;

 int stepDelay = 5;

 

 void setup() {

   pinMode(6, OUTPUT);

   pinMode(7, OUTPUT);

   pinMode(8, OUTPUT);

   pinMode(9, OUTPUT);

   pinMode(10, OUTPUT);

   pinMode(11, OUTPUT);

 

   digitalWrite(6, HIGH);

   digitalWrite(7, HIGH);

 }

 

 void loop() {

   for(int i=0; i<stepCnt/4; i++) {

     digitalWrite(8, HIGH);

     digitalWrite(9, LOW);

     digitalWrite(10, LOW);

     digitalWrite(11, LOW);

     delay(stepDelay);

   

     digitalWrite(8, LOW);

     digitalWrite(9, HIGH);

     digitalWrite(10, LOW);

     digitalWrite(11, LOW);

     delay(stepDelay);

   

     digitalWrite(8, LOW);

     digitalWrite(9, LOW);

     digitalWrite(10, HIGH);

     digitalWrite(11, LOW);

     delay(stepDelay);

   

     digitalWrite(8, LOW);

     digitalWrite(9, LOW);

     digitalWrite(10, LOW);

     digitalWrite(11, HIGH);

     delay(stepDelay);

   }

 

   delay(3000);

 

 }



 


모터가 정확히 한 바퀴 회전한 후 멈추는 것이 보이는가?


 

  

소스를 살펴보면, 우선 6개의 핀을 모두 출력 모드로 설정한 후 6, 7번 핀을 HIGH로 출력한다. 이건 선이 4개일 경우에는 필요 없는 부분.

 

그리고 ‘stepCnt’라는 변수가 있는데, 이 변수는 360°를 회전하기 위해 필요한 스텝 수를 저장한다. 내가 가진 스텝 모터는 스텝 당 1.8°를 회전하는 모터이므로 “360 / 1.8”을 계산해서 저장한다. 값은 “200”이 되겠지. 만일 자신의 모터가 스텝 당 3.6°를 회전한다면 “360 / 3.6” 또는 “100”을 넣어주면 된다.

 

loop() 함수에서는 for() 반복문을 실행한다. for() 반복문의 반복 횟수는 “stepCnt/4” 번. 반복문 안에서 4 스텝이 진행되기 때문. A→B→/A→/B 순서대로 신호를 주며, 신호를 준 후 ‘stepDelay’ 값만큼 딜레이를 준다. 이 값은 한 스텝을 유지하는 시간이므로, 이 시간이 작을수록 모터 회전 속도가 빠르고 클수록 느리다. 단, 너무 빠르거나 너무 느리면 모터가 제대로 돌지 않는데, 이것을 “탈조 현상”이라고 한다.


그래서 이 4 스텝을 “stepCnt/4(=50)”번 반복하게 되고, 정확히 360°를 회전하게 되는 것.



소스에서는 한 스텝 당 딜레이를 5 밀리초만큼 줬으니까, 한 바퀴인 200 스텝을 동작하는 데 걸리는 시간이 딱 1초. 1초에 한 바퀴 돌고, 1분에 60 바퀴를 도는 60 RPM의 속도를 가지게 된다.


 


참고로 for() 반복문 안의 스텝 순서를 반대로 하면 모터는 반대 방향으로 회전한다. 즉 “/B→/A→B→A” 순서대로 신호를 주면 시계 반대 방향으로 회전한다는 뜻.



이게 스텝 모터.

 


스텝 모터는 정확한 회전 각으로 제어하고 싶은 경우, 속도가 빠르지 않아도 되는 경우, 충분한 전류가 공급될 수 있는 경우에 사용된다.

 

위에서 설명한 예제는 “1상 여자방식”으로 한 스텝 당 하나의 핀에만 신호를 주는 방식이다. 이 외에 “2상 여자방식”, “1-2상 여자방식”이 있는데 여기에 관한 자세한 내용은 “*참고”을 참조하도록.

 

아두이노에서는 스텝 모터를 구동하기 위한 라이브러리 'Stepper'를 제공하고 있다. 라이브러리를 이용하면 위에서 본 예제보다 훨씬 쉽게 동작시킬 수 있음. 진짜진짜.

 

다음 강좌에서 Stepper 라이브러리 사용 방법을 알아보자. 그럼 이만. 안녕!

     



+) 참고

"여자방식"이란?


여자(勵磁) 방식은 힘쓸 여, 자석 자를 쓰는 한자어로, 자기장을 이용해서 모터를 구동하는 방식을 말한다. HIGH와 LOW를 각각의 선에 번갈아가면서 주게 되면, 각 선들 사이에 자기장이 발생하게 되고, 이 자기장이 모터를 회전시키는 방식.

0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

임베디드 보드

번호 제목 글쓴이 날짜 조회수
58 아두이노 [강좌] 50. 와이파이 통신 (4) - WebServer 예제 icon 양재동메이커 03-21 22,227
57 아두이노 [강좌] 49. 와이파이 통신 (3) - WebClient 예제 icon 양재동메이커 03-21 25,947
56 아두이노 [강좌] 48. 와이파이 통신 (2) - 커맨드 모드 사용하기 (WiFly 쉴드) icon 양재동메이커 03-20 20,557
55 아두이노 [강좌] 47. 와이파이 통신 (1) - 와이파이란 무엇인가 icon 양재동메이커 03-20 25,611
54 아두이노 [강좌] 46. 블루투스 통신 (5) - 프로토콜 만들기 (2) icon 양재동메이커 03-20 20,578
53 아두이노 [강좌] 45. 블루투스 통신 (4) - 프로토콜 만들기 (1) icon 양재동메이커 03-20 21,633
52 아두이노 [강좌] 44. 블루투스 통신 (3) - RN42 모듈에서 직접 접속하기 icon 양재동메이커 03-20 18,562
51 아두이노 [강좌] 43. 블루투스 통신 (2) - 스마트폰과 통신하기 icon 양재동메이커 03-20 20,737
50 아두이노 [강좌] 42. 블루투스 통신 (1) - RN42 블루투스 모듈 실습하기 icon 양재동메이커 03-20 23,029
49 아두이노 [강좌] 41. 서보 모터 (2) - Servo 함수 알아보기 icon 양재동메이커 03-20 24,312
48 아두이노 [아두이노 강좌] 40. 서보 모터 (1) - 서보 모터 동작 방식 icon 양재동메이커 03-20 25,024
47 아두이노 [강좌] 39. 스텝 모터 (3) - 모터 드라이버 EasyDriver(A3967) 사용하기 icon 양재동메이커 03-20 20,264
46 아두이노 [강좌] 38. 스텝 모터 (2) - Stepper 함수 알아보기 icon 양재동메이커 03-20 24,445
45 아두이노 [강좌] 37. 스텝 모터 (1) - 스텝 모터 동작 방식 icon 양재동메이커 03-20 21,552
44 아두이노 [강좌] 36. DC 모터 (2) - DC 모터 드라이버 실습하기 (TB6612FNG) icon 양재동메이커 03-20 20,629
43 아두이노 [강좌] 35. DC 모터 (1) - DC 모터 동작 방식 icon 양재동메이커 03-20 23,306
42 아두이노 [강좌] 34. SPI 통신 (3) - 기압 센서(MPL115A1) 실습하기 icon 양재동메이커 03-20 19,575
41 아두이노 [강좌] 33. SPI 통신 (2) – SPI 함수 알아보기 icon 양재동메이커 03-20 28,412
40 아두이노 [강좌] 32. SPI 통신 (1) - SPI 통신이란 무엇인가 icon 양재동메이커 03-20 32,684
39 아두이노 [강좌] 31. I2C 통신 (3) - 온도 센서(TMP102) 실습하기 icon 양재동메이커 03-20 27,927