[아두이노 강좌] 16. 스텝퍼 모터 제어하기

스텝퍼 모터는 DC모터와 서보 모터의 중간쯤 되는 성질을 가진 모터입니다. 정교하게 위치를 조절할 수 있고, 앞뒤방향으로 한번에 한 스텝단위로 움직일수 있습니다. 그리고 일반적인 서보가 180도만 회전하는 것과는 달리 끊임없이 회전할 수 있습니다.

본 강좌에서는 아두이노와 L293D 모터 컨트롤 칩을 이용하여 5V 스텝퍼모터를 어떻게 제어하는지 알아 보겠습니다

overview.jpg

브레드보드 레이아웃

스텝퍼 모터는 5개의 리드선을 가지고 있습니다. 이전 강좌에서 DC모터를 제어하기 위해서 L293D칩의 절반만 사용을 하였는데, 이번에는 양쪽 사이드를 다 사용하겠습니다.

스텝퍼 모터의 리드선 끝부분에는 소켓이 하나 있습니다. 소켓에 점퍼를 연결하여 모터를 브레드보드에 연결하기 쉽게 만들어 주십시오.

fritzing.jpg

스텝퍼모터의 빨강색 리드선은 아무것과도 연결하지 않습니다.

아두이노 코드

아래의 스케치코드는 시리얼 모니터를 사용합니다. 그렇기때문에 스케치를 실행시키면 시리얼 모니터를 열고, 스텝퍼모터를 동작시킬 step 수를 입력하여 주어야 합니다. 500정도를 입력하면 모터가 대략 360도정도 회전합니다. -500을 입력하여 보십시오. 모터가 역방향으로 회전하여 원래 자리로 되돌아 옵니다.

stepper library는 최신버전의 아두이노 IDE에 포함되어 있기때문에 최신버전이 아니라면 IDE를 업그레이드 하십시오.
  1. #include <Stepper.h>
  2. int in1Pin = 12;
  3. int in2Pin = 11;
  4. int in3Pin = 10;
  5. int in4Pin = 9;
  6. Stepper motor(768, in1Pin, in2Pin, in3Pin, in4Pin);
  7. void setup()
  8. {
  9. pinMode(in1Pin, OUTPUT);
  10. pinMode(in2Pin, OUTPUT);
  11. pinMode(in3Pin, OUTPUT);
  12. pinMode(in4Pin, OUTPUT);
  13. // this line is for Leonardo's, it delays the serial interface
  14. // until the terminal window is opened
  15. while (!Serial);
  16. Serial.begin(9600);
  17. motor.setSpeed(20);
  18. }
  19. void loop()
  20. {
  21. if (Serial.available())
  22. {
  23. int steps = Serial.parseInt();
  24. motor.step(steps);
  25. }
  26. }

코드를 보면 스텝퍼모터를 지원하는 아두이노 라이브러리가 있습니다. 이 라이브러리 덕분에 모터를 쉽게 사용할 수 있습니다. stepper.h를 include한뒤에 in1부터 in4까지 정의되었습니다.

아두이노 라이브러리에게 어떤 핀이 모터 컨트롤러에 연결되어 있는지 알려주기 위해서 아래의 명령이 사용됩니다.

  1. Stepper motor(768, in1Pin, in2Pin, in3Pin, in4Pin);

첫번째 파라메터는 모터가 움직일 스텝수입니다. 스텝퍼모터는 한번에 한 스텝만 움직여서 정교한 위치제어가 가능합니다.

그 다음에 시리얼 통신이 시작되고, 아두이노는 시리얼 모니터를 통하여 명령을 받을 수 있는 상태가 됩니다.

마지막으로 아래의 명령을 통해 모터가 돌아가는 속도를 정해줍니다.

  1. motor.setSpeed(10);

loop 함수는 매우 간단한데, 시리얼 모니터로부터 들어오는 명령을 기다리다가 들어오는 텍스트를 숫자로 변환하여 모터가 얼마나 돌지 명령하는 내용으로 끝이 납니다.

스텝퍼 모터

스텝퍼 모터는 톱니가 달리 휠과 전자석을 사용하여 한번에 한 스텝씩 움직이게 만듭니다.

steppers.png

코일을 순서에 맞게 전원을 공급하면 모터가 회전하게 됩니다. 모터가 360도를 돌기 위한 스텝은 실제로 톱니의 이빨수와 같습니다.

여기서 사용하는 모터는 48스텝을 가지고 있지만 추가적인 1:16 기어를 가지고 있어서 16 X 48 = 768 스텝이 필요합니다.

여기서는 빨강 리드선을 사용하지 않았습니다. 이 선은 다른 종류의 드라이브 회로를 사용할 때 사용되는데, 역방향으로 돌기 위한 전류를 각 코일에 허용하지 않는 드라이버 회로를 사용할 경우만 사용이 됩니다.

우리가 사용하는 L293D는 전류를 역으로 돌리는데 매우 훌륭하므로, 이 빨강 리드를 연결하지 않습니다. L293D는 각각의 코일에 어떤 방향으로든 전류의 공급이 가능합니다.

  

Comments