모터는 일반적으로 그냥 전압의 크기에 따라 돌아가는 dc 모터,

그리고 각도가 제어가능한 rc서보모터는 아마도 그냥 쉽게 사용할 수 있을 겁니다.

스테핑모터를 제어하면 이제 또 다시 제어의 수준이 한단계 더 올라간다는 것을

알게 될 겁니다.

스텝모터는 특이하게 펄스를 주어 신호에 따라 모터의 회전이 가능 합니다.

어렵게 생각하면 제어하기 힘들어지니 그냥 이렇게 생각하면 좋을 것 같습니다.

한번의 신호(10 , 한번 주게 되는 짧은 신호)를 흘리면 모터는 1.8도 돌아간다.

모든 스테핑모터가 그렇게 되어 있는 건 아니지만 일반적으로 한번의 신호를 주면1.8도가

회전하고 한번이 아니라 100번의 신호를 (10) 반복해서 100번 주게 되면

모터는 당연히 1.8도가 100, 180(반바퀴) 회전할 수 있다.

이렇게 정의 할 수 있겠죠.

 

180도가 아니라 360도를 회전시킬려면 그럼 모터에 신호를 몇 번 주면

될까요.

 

계산을 해보면 360/1.8 = 200

 

200번의 신호를 주면 모터는 360도 회전시킬 수 있습니다.

 

한마디로 스테핑 모터는 한번의 특정신호를 만들어 두면

신호에 따라 특정 각도까지만 회전하는 모터라고 이해하면 됩니다.

 

원하는 회전 각도를 정확히 계산할 수 있도록 만들어진 모터라고 생각하면

이해하기 편하죠.

 

그런데 이런 점도 있습니다. 신호를 보낼 때 주게 되는 신호의 시간

이것을 주기와 연관을 짓게 됩니다. 1,0으로 신호를 만들어서 보낼 때

 

이때의 신호의 길고 짧음에 따라 모터의 회전속도도 정해지게 된다는 점

우리는 이것을 흔히 PWM이라고 부릅니다. 어려운 용어가 하나 나왔는데..

 

이것은 실제 서보모터에서 개념적인 것은 이해했기 때문에 다시 설명을 드립니다.

PWMPulse Width Modulation의 약자로 높은 전압 값(5V)와 낮은 전압 값(0V)

비율로 설정해 전압의 비율에 따라 제어를 하게 되는 방식을 이야기 합니다.

 

보다 자세한 내용은 다음의 사이트에 내용이 잘 나와 있어 PWM을 이해하시면 되겠습니다.

https://opentutorials.org/module/2106/12246

 

스테핑 모터의 실제 구조를 한번 이해해 볼까요?

 

 

 

 

스테핑모터의 주축은 다음과 같이 생겨서 톱니 형태로 이루어져 있습니다.

톱니형태로 생겼기 때문에 모터가 1.8도라는 각도를 만들어 낼 수 있다고

보면 되겠습니다.

 

외부에는 8개의 코일로 감겨져 있어 코일의 전기가 흐르는 순서에 따라서

스테핑모터를 회전 시키게 된다고 이해하면됩니다.

 

각 코일마다 실제로 감겨 있는 상태는 A,/A,B,/B

다음과 같은 형태로 선이 순차적으로 감기게 됩니다.

 

 

 

 

스테핑 모터의 전류는 순차적으로 흘려야 된다고 했죠.

 

다음과 같은 순서로 A, B , /A, /B 순으로 전류를 구동하게 됩니다.

물론 이렇게 전류를 흘리는 방식 외에 다르게 전류를 줄 수도 있지만

보편적인 방법을 이용해서 전류를 구동하게 됩니다.

 

일반적으로 다음과 같이 전류를 순차적으로 발생시키는 드라이버가

존재를 하는데요. 그런 장치로 스테핑 모터 콘트롤러를 사용하기도합니다.

그리고 순차적으로 모터신호를 아두이노 또는 제어기를 이용해 신호를

발생시키기도 합니다. 발생시킨 신호는 전류 증폭기를 통해 모터를

회전시키기도 합니다.

 

처음 스테핑모터를 구동하실 때 어려운 점이 많으실 수 있으니

조심해서 제어하시기 바랍니다.

 

 

 

그럼 우리가 보편적인 방법으로 아두이노 예제를 참고해서

스테핑 모터를 돌려보도록 하겠습니다.

 

가지고 있는 스테핑 모터가 선이 4개인지 6개인지 파악하셔야 합니다.

아니면 구매하실 때 어떤 모터를 선택할지 고민 하셔야 됩니다.

보통은 4선을 이용하는 것이 쉬울 수 있습니다.

전원이 따로 입력되지 않아도 되니 4선이 편리할 수 있고,

상황에 따라 6선의 경우 공통 단자가 2개가 더 있으니 참고 하셔야 됩니다.

 

스테핑모터의 4선과 6선에 관한 정보는 게시글에 더 적어 두도록 하겠습니다.

http://www.ntrexgo.com/archives/21591

 

 

이제 스테핑모터를 돌리기 위해 예제파일을 열도록 하겠습니다.

파일 탭 => 예제 => stepper => stepper_oneRevolution을 클릭

 

 

 

 

열게 되면 다음과 같은 프로그램 코드가 열릴 것 입니다.

 

 

#include <Stepper.h>

 

const int stepsPerRevolution = 200;

 

Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

 

void setup() {

myStepper.setSpeed(60);

Serial.begin(9600);

}

 

void loop() {

 

Serial.println("clockwise");

myStepper.step(stepsPerRevolution);

delay(500);

 

Serial.println("counterclockwise");

myStepper.step(-stepsPerRevolution);

delay(500);

}

 

이제 어느 정도 배워와서 개념은 알지만 또 새로운 것에 대해 이해를

해야 겠죠.

 

#include <Stepper.h> <== 이건 스테핑모터를 사용하기위한 프로그램이

설정된 곳이죠. 흔히들 헤더파일이라고 정의 하는데요. 스테핑모터에 대한

해더파일이라고 이해하십시오.

이것을 사용함으로써 myStepper <=이런 명령어를 활용할 수 있게 됩니다.

 

그리고 const int stepsPerRevolution = 200; 변수 stepsPerRevolution여기에

값을 200회 넣는 다는 말은 딱 봤을 때 1.8도의 모터를 360도 까지 회전시길 값을

넣어 놓은 거라고 볼 수 있습니다.

 

Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11); 여기의 뒤편을 유의해야 되는데요.

Stepper myStepper() <== 여기 안에 200회의 회전이 가능한 형태로 정의 학고

그리고 8~11번까지의 아두이노 핀을 A,/A,B,/B 형태로 선이 4개 사용되도록 만든다는 점도

이해가 되죠.

 

 

 

void setup에는 모터의 속도와 시리얼데이터를 출력하기 위해 정의를 했구요.

void loop의 내용을 보면 이전에 없었던 내용인 myStepper.step(stepsPerRevolution);

다음과 같은 명령어가 나옵니다. myStepper.step(200);

다음과 같이 200번의 각도가 입력되니 모터는 1바퀴 회전하게 될 것입니다.

그리고 myStepper.step(-stepsPerRevolution);

다음과 같이 값을 입력 할때는 모터가 반대방향으로 회전되도록 만들어 지내요.

참 편하게 만들어졌네요.

 

저는 모터의 출력을 다음과 같이 L298 드라이버를 이용해 사용했는데요.

L298 드라이버가 아니더라도, 특정 드라이버의 단자에 입력하는

A,/A,B,/B 형태로 아두이노의 입력단자를 8~11번으로 맞추고

 

출력되는 모터를 스테핑모터에 맞추면 어려움 없이 동작 시킬 수 있을 것입니다.

 

 

 

만약 스테핑모터의 결선이 헷갈리시면 질문하시면 답을 드릴 수 있도록 하겠습니다.

 

연결된 스테핑 모터는 다음과 같이 실험 하였습니다.

+ Recent posts