[아두이노] [강좌] 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를 주면 되지.

 


스텝 모터는 한 스텝에 하나의 핀으로 전류를 보내는 방법과 두 개의 핀으로 신호를 주는 방법이 있는데여기서는 하나의 핀으로 신호를 주는 방법을 보자신호는 AB/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 스텝이 진행되기 때문. AB/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 12,866
57 아두이노 [강좌] 49. 와이파이 통신 (3) - WebClient 예제 icon 양재동메이커 03-21 16,338
56 아두이노 [강좌] 48. 와이파이 통신 (2) - 커맨드 모드 사용하기 (WiFly 쉴드) icon 양재동메이커 03-20 11,658
55 아두이노 [강좌] 47. 와이파이 통신 (1) - 와이파이란 무엇인가 icon 양재동메이커 03-20 16,087
54 아두이노 [강좌] 46. 블루투스 통신 (5) - 프로토콜 만들기 (2) icon 양재동메이커 03-20 11,879
53 아두이노 [강좌] 45. 블루투스 통신 (4) - 프로토콜 만들기 (1) icon 양재동메이커 03-20 13,510
52 아두이노 [강좌] 44. 블루투스 통신 (3) - RN42 모듈에서 직접 접속하기 icon 양재동메이커 03-20 10,562
51 아두이노 [강좌] 43. 블루투스 통신 (2) - 스마트폰과 통신하기 icon 양재동메이커 03-20 12,725
50 아두이노 [강좌] 42. 블루투스 통신 (1) - RN42 블루투스 모듈 실습하기 icon 양재동메이커 03-20 14,028
49 아두이노 [강좌] 41. 서보 모터 (2) - Servo 함수 알아보기 icon 양재동메이커 03-20 15,779
48 아두이노 [아두이노 강좌] 40. 서보 모터 (1) - 서보 모터 동작 방식 icon 양재동메이커 03-20 16,135
47 아두이노 [강좌] 39. 스텝 모터 (3) - 모터 드라이버 EasyDriver(A3967) 사용하기 icon 양재동메이커 03-20 12,002
46 아두이노 [강좌] 38. 스텝 모터 (2) - Stepper 함수 알아보기 icon 양재동메이커 03-20 15,839
45 아두이노 [강좌] 37. 스텝 모터 (1) - 스텝 모터 동작 방식 icon 양재동메이커 03-20 12,450
44 아두이노 [강좌] 36. DC 모터 (2) - DC 모터 드라이버 실습하기 (TB6612FNG) icon 양재동메이커 03-20 12,051
43 아두이노 [강좌] 35. DC 모터 (1) - DC 모터 동작 방식 icon 양재동메이커 03-20 14,555
42 아두이노 [강좌] 34. SPI 통신 (3) - 기압 센서(MPL115A1) 실습하기 icon 양재동메이커 03-20 11,303
41 아두이노 [강좌] 33. SPI 통신 (2) – SPI 함수 알아보기 icon 양재동메이커 03-20 18,017
40 아두이노 [강좌] 32. SPI 통신 (1) - SPI 통신이란 무엇인가 icon 양재동메이커 03-20 22,922
39 아두이노 [강좌] 31. I2C 통신 (3) - 온도 센서(TMP102) 실습하기 icon 양재동메이커 03-20 18,241