이전 글에서 다른 칩을 이용하여 스테핑 모터를 제어 했습니다.

(참고 : [Arduino] L293D칩을 이용한 스테핑 모터(stepping motor) 제어)

 

오늘은 아두이노사이트에서도 샘플로 제공하고 있는 'ULN2003'칩을 이용해 보겠습니다.

저 같은 경우 그냥 'ULN2003'대신 'ULN2004'를 사용 하였습니다.

이 칩은 유니폴라 방식의 모터를 구동할 수 있습니다.

(무슨 차이가 있는지 모르겠네요 ㅡ,.ㅡ;)

 

 

 

가격은 400원 정도 합니다.
(참고 : 동신전자 - ULN2004A )

 

사용한 모터는 SE-SM243, FL42STH33-0956A 입니다.

 

 

1.보드구성

배선은'L293D'칩보다 쉽습니다.

보드구성은 아두이노 샘플과 똑같이 하겠습니다.

(참고 : Arduino Web - Stepper Motor Knob )

 

 

 

 

SteppingMotor_ULN2003_001.fzz

 

 

 

 

 

2.펨웨어 작성

예제는 이전글에서 썼던 예제를 그대로 쓰겠습니다.

 

 

#include <Stepper.h>


int in1Pin = 12;
int in2Pin = 11;
int in3Pin = 10;
int in4Pin = 9;

int steps = 0;
 
Stepper motor(200, in1Pin, in2Pin, in3Pin, in4Pin);  
 
void setup()
{
  Serial.begin(9600);
  
  pinMode(in1Pin, OUTPUT);
  pinMode(in2Pin, OUTPUT);
  pinMode(in3Pin, OUTPUT);
  pinMode(in4Pin, OUTPUT);
   
  motor.setSpeed(30);
}
 
void loop()
{
  if (Serial.available())
  {
    steps = Serial.parseInt();
    motor.step(steps);
  }
}

 

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

로 모터가 사용할 핀을 지정합니다.

맨앞에 값은 1회전에 몇스텝인지를 지정합니다.

테스트에 사용한 'FL42STH33-0956A'는 'Step Angle'이 1.8도 이므로

200 = 360 / 1.8

입니다.

1회전에 200스탭이 필요하다는 의미 입니다.

그래서 'Stepper motor(200, in1Pin, in2Pin, in3Pin, in4Pin);'이렇게 세팅합니다.

(참고 : arduino Reference - Stepper )

3.테스트

이번에는 모터2개를 한번에 연결 해 보았습니다.

하나는 반대로 꼽아서 다른방향으로 돌고 있습니다 ㅎㅎㅎ

(데이터시트가 뭔가 이상한걸지도-_-a)

 

 

 

4. 외부 전원 사용하기

 

저는 테스트하기 편하기위해 아두이노의 전원을 끌어다 썼습니다.

그런데 많은 분들이 외부전원 사용방법을 알려달라고 하셔서 추가합니다.

 

 

SteppingMotor_ULN2003_002.fzz

 

전원만 아두이노에서 외부전원으로 바꾸면 됩니다.

 

 



  1. 안중호 2013.11.16 22:10 신고  Address  Edit/Delete  Reply

    안녕하세요 연세대학교 기계공학과 08학번 안중호입니다.
    저희조가 스테핑 모터를 이용하여 제어를 하려고 하려는데 어려움이 많이 있습니다.
    꼭 도움 주셨으면 합니다.
    010 4900 0805 입니다.
    꼭 연락주세요 ㅜㅜㅜㅜ

  2. 윤성완 2014.05.27 20:49 신고  Address  Edit/Delete  Reply

    DC모터도 uln2003a칩으로 제어가 가능한가요? 가능하다면 회로는 어떻게 구성해야 하나요?

    • Favicon of http://blog.danggun.net BlogIcon 당근천국 2014.05.28 01:26 신고  Address  Edit/Delete

      해보진 않았는데 가능 한걸로 알고 있습니다.
      http://subinsebastien.tumblr.com/post/57717948624/driving-multiple-dc-motors-with-an-arduino

      직접 테스트를 해보지 않아서 잘 모르겠네요.

  3. 윤완식 2014.08.03 14:14 신고  Address  Edit/Delete  Reply

    테스트에는 두개의 모터를 제어하는데 회로는 한개의 모터만있습니다.
    두개의 모터를 제어할려면 회로를 어떻게 구현해야 하나요?
    그리고 소스코드에서 모터 각각을 제어하고 싶은데 어떤 소스가 모터각각을 맡고 있나요?

    • Favicon of http://blog.danggun.net BlogIcon 당근천국 2014.08.03 17:32 신고  Address  Edit/Delete

      똑같은 회로를 2개 구성하시면 됩니다.

    • 윤완식 2014.08.04 20:38 신고  Address  Edit/Delete

      그럼 아두이노도 두개 사용해야되겠네요?

    • 윤완식 2014.08.05 00:06 신고  Address  Edit/Delete

      스테핑모터를 돌릴때 전원은 따로 안줘도 되나요??
      USB만 연결되면 되는건지? 답변 부탁드립니다^^

    • Favicon of http://blog.danggun.net BlogIcon 당근천국 2014.08.05 00:25 신고  Address  Edit/Delete

      흠....아무래도 제가 생각 했던것 보다 기초지식이 너무 없으신거 같군요 ㅎㅎㅎ

      아두이노같은 마이크로프로세스 보드는 컴퓨터의 본체 같은 역활을 합니다.
      우리가 usb제품을 여러개 쓴다고 해서 컴퓨터를 여러대 사지 않죠.
      그냥 usb구멍만 다른곳에 끼우면 됩니다.
      그러니 같은 회로를 2개 만든후 전원핀을 제외한 데이터핀 4개를 각각 아두이노의 다른 곳에 꼽고 코드에서 각핀의 번호를 세팅해 주시면 됩니다.

      위 결선은 테스트하기 쉬우라고 아두이노의 전원을 끌어다 쓰는 것이라 원래대로라면 이렇게 구성하시면 안됩니다.
      특히 모터같이 전류를 많이 먹는 제품은 별도의 전원을 공급해야 합니다.(전압과 전류를 계산해서 모터에 알맞는 전압과 전류가 공급 되어야 합니다.)
      위 구성에서 아두이노의 전원으로 나온부분을 제거한후 그부분에 추가로 구성된 전원의 +를 연결하고 그라운드에 -를 연결하여 구성하시면 됩니다.

  4. 윤완식 2014.08.11 19:00 신고  Address  Edit/Delete  Reply

    모터 하나 돌리는것 까지 성공했습니다. 감사합니다.
    모터 두개를 돌리려고 하는데 한쪽이 돌때 한쪽이 안돌고 있고
    다른쪽이 돌때 다른쪽이 안돌고있습니다.
    약 2초, 1초씩 돌고있는 상태입니다.

    [모터 두개 돌리고 있는 코드입니다.]
    #include <Stepper.h>

    // change this to the number of steps on your motor
    #define STEPS 48

    // create an instance of the stepper class, specifying
    // the number of steps of the motor and the pins it's
    // attached to
    //Serial.begin(9600);
    Stepper stepper(STEPS, 8, 9, 10, 11);
    Stepper stepper2(STEPS, 4, 5, 6, 7);
    void setup()
    {
    Serial.begin(9600);
    // set the speed of the motor to 30 RPMs
    stepper.setSpeed(60);//moter speed
    stepper2.setSpeed(60);//moter speed
    }

    void loop()
    {
    stepper.step(96);//moter +,- control
    stepper2.step(96);//moter +,- control
    }

    =>코드에 문제가 있으면 답변 부탁드립니다.

  5. 윤완식 2014.10.08 15:27 신고  Address  Edit/Delete  Reply

    http://blog.naver.com/yws777n
    회로도와 같은 방법으로 구현해봤습니다. 12V전원을 인가한 상태입니다.
    아두이노 전원을 빼보고도 해보고 스테핑모터 선을 뒤집어 해보기도 했습니다.
    아두이노 소스에서 첫번째 Serial.begin(9600); 부분에서 에러가나서 주석처리를 하여 업로드하였습니다.
    모터에서 아무반응을 하지 않습니다. .
    010)3080-9636
    편하신 공간에 답변 부탁드립니다^^

    • Favicon of http://blog.danggun.net BlogIcon 당근천국 2014.08.10 02:33 신고  Address  Edit/Delete

      답변은 댓글로만 합니다.
      void loop()
      {
      stepper.step(96);
      }
      코드를 이렇게 수정하시고 동작하는지 확인해 주시기 바랍니다.
      사진으로 보기에는 선이 잘 구분이 안가서 모르겠는데 아두이노와 만능기판의 연결이 반대로 되어 있습니다.
      그래도 동작했던거 같은데 잘모르겠네요.
      배선은 http://arduino.cc/en/uploads/Tutorial/UnipolarKnob_bbsm.png
      을 참고하여 다시 해주시기 바랍니다.

  6. dd 2014.11.10 18:01 신고  Address  Edit/Delete  Reply

    스테핑모터 2개를 구동할려면 드라이버가 2개있어야하나요?

    • Favicon of http://blog.danggun.net BlogIcon 당근천국 2014.11.10 18:07 신고  Address  Edit/Delete

      드라이버에 따라 지원하는 갯수가 다릅니다.
      그건 여기서 물어볼께 아니고 해당드라이버의 제조업에 문의 해보셔야 합니다 ㅎㅎㅎ

      ULN2004칩은 핀갯수때문에 한번에 한개만 제어가 가능합니다.

  7. BlogIcon 짐머 2015.08.08 10:50 신고  Address  Edit/Delete  Reply

    12v를 입력하여 작동이 가능한가요? 스텝모터가 12v라서요 ^^

  8. BlogIcon 윤으ㅇ 2015.08.22 18:27 신고  Address  Edit/Delete  Reply

    똑같은 회로 사용해서 구동히는데 10초뒤에 소자가 타버리네요 전류를 줄ㅇㅕ야하는거같은데
    어케줄여야할까요ㅜㅜ

    • Favicon of http://blog.danggun.net BlogIcon 당근천국 2015.08.22 18:31 신고  Address  Edit/Delete

      전압을 줄이셔야죠.
      ULN2004는 15V까지 입력이 가능한데 몇볼트를 넣으신건가요?
      ㅡ.-;;;

    • BlogIcon 윤으ㅇ 2015.08.23 19:15 신고  Address  Edit/Delete

      12v전원인데 전압계측정시 13.2v출력이라 안전한 영역이라생각했는데..;; 과열로 2004는 연기가나고 2003은 퍽 터지네요
      아두이노vin핀으로 전원 인가했더니 열은 나도 타진않고 동작은 되네요

    • Favicon of http://blog.danggun.net BlogIcon 당근천국 2015.08.23 19:25 신고  Address  Edit/Delete

      그정도면 탈정도는 아닌데 이상하네요.
      저도 다양한 전압과 전류로 테스트해봤었지만 문제 없었습니다.

      열은 원래 많이 납니다.
      많은 토크가걸리면 더 나긴 하겠지만 탈정도인지는 모르겠네요.
      (제가 테스트했을때는 탄적이 없어서 ㅡ.-;;)
      토크를 걸지않고 연결만 했는데도 타버리는건가요?
      만약 그렇다면 전압이 튀나 확인해봐야 할듯하네요.

      보통 연결만 해도 열이 많이 나기 때문에 방열대책을 세우긴하는데 바로 탈정도면 방열이 문제가 아닐듯합니다.
      방열은 응급처치고 근본적인 원인을 찾아야 할듯하네요.

    • BlogIcon 윤으ㅇ 2015.08.24 20:38 신고  Address  Edit/Delete

      감사합니다 부하를 걸어 토크를 줄때 많은 전류가 흐르는것이 발열에 원인인듯하네요 정격12v 리니어스텝모터인데 큰토크를 필요로 하는 모터라서 그런듯해요 도움많이 됐네요 감사합니다^-^

    • Favicon of http://blog.danggun.net BlogIcon 당근천국 2015.08.26 12:25 신고  Address  Edit/Delete

      부하를 줄때 칩이 타는 경우는 흔합니다.
      적절한 방열대책 및 같은 역할을 하는 다른 스팩의 칩을 사용을 고려하여 부품을 선택해야 하죠.

  9. 누누 2015.08.30 23:44 신고  Address  Edit/Delete  Reply

    당근천국님 정말 잘보고 많이 배우고 있습니다.
    근데 제가 연결을 잘못 한 것인지 103H546 - 0440 스텝 모터를 구동하려고합니다.
    사용 예는 같다고 생각하는데, 회로도에서 A com B com이 뜻하는게, (+)극을 뜻하는 게 맞는지요.
    똑같이 연결했는데 ULN2003L이라 그런건지..
    모터가 전혀 미동을 하지 않네요 ㅠ

    • Favicon of http://blog.danggun.net BlogIcon 당근천국 2015.08.31 00:56 신고  Address  Edit/Delete

      http://www.robotstorehk.com/micromouse/doc/103H546-0440.pdf

      화이트와 블랙이 com입니다.(com은 전원에 연결, +맞습니다.)
      오랜지 A
      블루 /A
      래드 B
      엘로 /B

      데이터시트만 봐서는 연결이 제대로 되었다면 동작할 것 같습니다.
      전류가 부족할 수 있으니 외부전원에 연결하는걸 추천합니다.
      칩방향과 배선 다시 확인해보시고 다시 연결해보세요~

  10. 슈리타 2015.09.05 21:16 신고  Address  Edit/Delete  Reply

    안녕하세요~ 잘 봤습니다.
    궁금한점이 있는데, 스테핑모터 드라이버 구성할때, 캐패시터나 저항은 연결안해도 되나요?
    필터나 안정성 문제가 있을거 같은데..

    • Favicon of http://blog.danggun.net BlogIcon 당근천국 2015.09.08 18:54 신고  Address  Edit/Delete

      여기서 다루고 있는 내용은 초보적인 내용이라 그런것까지는 염두하지 않습니다.
      그냥그냥 사용하는데는 이 정도면 충분합니다.
      금방 문제로 나타나는건 발열문제정도입니다.
      만약 그런것들이 신경쓰인다면 'L293D'과 같은 추가기능이 있는 대체 부품을 사용하는 것도 방법입니다.
      하지만 그정도 상황까지 염두해서 설계할정도면 제가 도와줄 수 있는 실력이 넘어서신겁니다 ㅎㅎㅎㅎ

  11. Jake 2015.10.05 15:22 신고  Address  Edit/Delete  Reply

    안녕하세요 질문하나 드리고 싶습니다.
    제가 사용중인 모터가 9kg 급 SE-SM9K 모델입니다.
    혹시 이 모델도 위의 보드 구성과 코드로 실행이 가능할 지 궁금합니다. 답변 부탁드리겠습니다!

댓글 작성

이름
패스워드
홈페이지
비밀글

티스토리 툴바