아두이노 - L298N 드라이버를 이용한 스테퍼 모터 제어 | Arduino - Stepper Motor

이 튜토리얼에서, 우리는 다음을 배울 것입니다:

이 튜토리얼은 모든 종류의 바이폴라 스텝 모터(4선)에 적용할 수 있습니다. 튜토리얼에서는 예시로 NEMA 17 스텝 모터를 다룰 것입니다.

Arduino Stepper motor L298N Driver

준비물

1×Arduino Uno Amazon
1×USB 2.0 cable type A/B 쿠팡 | Amazon
1×Stepper Motor Nema 17 Amazon
1×L298N Motor Driver Module Amazon
1×12V Power Adapter Amazon
1×DC Power Jack 쿠팡 | Amazon
1×Jumper Wires Amazon
1×(Optional) 9V Power Adapter for Arduino Amazon
1×(Recommended) Screw Terminal Block Shield for Arduino Uno 쿠팡 | Amazon
1×(Optional) Transparent Acrylic Enclosure For Arduino Uno Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

스테퍼 모터에 대하여

스테퍼 모터에는 두 가지 인기 있는 유형이 있습니다:

  • 양극성: 이 유형의 모터는 4개의 전선이 있습니다.
  • 단극성: 이 유형의 모터는 5개 또는 6개의 전선이 있습니다.

6선식 유니폴라 스테퍼 모터의 경우, 6개의 전선 중 4개를 사용하여 바이폴라 스테퍼 모터로 제어할 수 있습니다.

5선식 유니폴라 스테퍼 모터의 경우, Arduino - ULN2003 드라이버를 사용한 28BYJ-48 스테퍼 모터 제어를 참조하십시오.

이 튜토리얼은 오직 양극성 스테퍼 모터에만 초점을 맞춥니다.

쌍극성 스테퍼 모터 핀배열

양극성 스테퍼 모터 핀 배치에는 4개의 핀이 있습니다. 제조업체에 따라 모터 핀의 이름은 여러 가지입니다. 아래 표는 널리 사용되는 핀 명명을 보여줍니다:

PIN NO Naming 1 Naming 2 Naming 3
1 A+ A A
2 A- A C
3 B+ B B
4 B- B D
Bipolar Stepper Motor pinout

핀의 순서, 전선의 이름 지정, 그리고 전선의 색상은 제조업체마다 다를 수 있습니다. 전선의 색상과 핀 이름 사이의 매핑을 보려면 데이터시트 또는 사용 설명서를 읽어야 합니다. 위의 이미지는 또한 이름 지정과 전선 색상이 다른 두 가지 다른 모터의 사양을 보여줍니다.

혁명 단계

모터의 사양은 단계당 도를 명시합니다 (DEG_PER_STEP이라고 합시다). 제어 방법에 따라, 한 혁명당 단계수 (STEP_PER_REVOLUTION이라고 합시다)는 다음 표와 같이 계산됩니다:

Control method Steps per Revolution Real degree per step
Full-step STEP_PER_REVOLUTION = 360 / DEG_PER_STEP DEG_PER_STEP
Half-step STEP_PER_REVOLUTION = (360 / DEG_PER_STEP) * 2 DEG_PER_STEP / 2
Micro-step (1/n) STEP_PER_REVOLUTION = (360 / DEG_PER_STEP) * n DEG_PER_STEP / n

예를 들어, 모터의 데이터시트에 1.8도/스텝으로 명시되어 있다면:

Control method Steps per Revolution Real degree per step
Full-step 200 steps/revolution 1.8°
Half-step 400 steps/revolution 0.9°
Micro-step (1/n) (200 * n) steps/revolution (1.8 / n)°

아두이노를 이용하여 스테퍼 모터를 제어하는 방법

아두이노는 스테퍼 모터를 제어하기 위한 신호를 생성할 수 있습니다. 그러나 아두이노로부터의 신호는 스테퍼 모터가 요구하는 충분한 전압과/또는 전류를 가지고 있지 않습니다. 따라서, 아두이노와 스테퍼 모터 사이에 하드웨어 드라이버가 필요합니다. 드라이버는 두 가지 작업을 합니다:

  • 아두이노(전류 및 전압)의 제어 신호를 증폭하세요.
  • 고전류 및 고전압으로 스테퍼 모터를 구동하는 데 사용되는 것으로부터 아두이노를 보호하세요.

스텝 모터를 제어하기 위해 사용할 수 있는 하드웨어 드라이버의 종류가 많습니다. L298N 드라이버는 스텝 모터를 제어하기 위해 가장 널리 사용되는 하드웨어 드라이버 중 하나입니다.

L298N 드라이버에 대하여

단일 L298N 드라이버는 두 개의 DC 모터 또는 스테퍼 모터를 제어하는 데 사용할 수 있습니다. 이 튜토리얼에서는 스테퍼 모터를 제어하는 방법을 배웁니다.

L298N 드라이버 핀배열

L298N Driver Pinout

L298N 드라이버는 11개의 핀과 세 개의 점퍼가 있습니다.

  • VCC 핀: 모터에 전원을 공급합니다. 5V에서 35V 사이가 될 수 있습니다.
  • GND 핀: 공통 접지핀이며, GND(0V)에 연결해야 합니다.
  • 5V 핀: L298N 모듈에 전원을 공급합니다. 아두이노로부터 5V를 받아 사용할 수 있습니다.
  • IN1, IN2, IN3, IN4 핀들: 아두이노의 핀에 연결되어 스텝 모터를 제어하기 위한 제어 신호를 받습니다.
  • OUT1, OUT2, OUT3, OUT4 핀들: 스텝 모터에 연결됩니다.
  • ENA, ENB 점퍼들: 스텝 모터를 활성화하는데 사용됩니다. ENA & ENB 점퍼를 모두 그대로 유지해야 합니다.
  • 5V-EN 점퍼: 5V-EN 점퍼를 그대로 두면 L298N 모듈에 대한 전원은 VCC에서 얻어지며, 5V 핀에 아무 것도 연결할 필요가 없습니다. 5V-EN 점퍼를 제거하면 L298N 모듈에 전원을 5V 핀을 통해 공급해야 합니다.

위에서 설명한 것처럼, L298N 드라이버는 두 개의 입력 전력을 가지고 있습니다:

  • 스테퍼 모터용(VCCGND 핀): 5V부터 35V까지.
  • L298N 모듈의 내부 동작용(5V 및 GND 핀): 5V부터 7V까지. 만약 5V-EN 점퍼를 그대로 두면, 이 핀을 어떤 것에도 연결할 필요가 없습니다.

선연결

Arduino Stepper Motor L298N Driver Wiring Diagram

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

※ NOTE THAT:

  • 모터의 전원 공급이 12V 이하인 경우 L298N 모듈의 모든 점퍼를 제자리에 두십시오.
  • 스테퍼 모터의 핀 순서는 제조업체마다 다를 수 있습니다. 올바른 배선을 위해 아래 표를 확인하십시오.

아두이노와 L298N 드라이버 간의 연결 표

Arduino pins L298N pins
7 IN1
6 IN2
5 IN3
4 IN4

L298N 드라이버와 스테퍼 모터 간의 배선 표

중요!: 위의 배선 다이어그램 이미지에서 스텝 모터의 전선 순서를 신경 쓰지 마십시오. 이것은 단지 예시일 뿐입니다. 스텝 모터의 핀 순서는 제조사별로 다를 수 있습니다. 아래 표에 따라 배선이 이루어졌는지 확인하십시오.

L298N pins Stepper motor pins Or Or
OUT1 A+ A A
OUT2 A- A C
OUT3 B+ B B
OUT4 B- B D

스텝 모터를 구매하기 전에, 스텝 모터의 데이터시트, 사양 또는 사용자 매뉴얼을 확인하시길 권장합니다. 핀의 색깔과 이름 사이의 매핑 정보를 제공하는지 확인하세요. 예를 들어, 이 스텝 모터는 아래 이미지처럼 매핑 정보를 제공합니다:

Stepper Motor coil color mapping

그 매핑을 바탕으로 하여, 배선 테이블은 다음과 같이 됩니다:

L298N pins stepper motor pins wire color
OUT1 A black wire
OUT2 C green wire
OUT3 B red wire
OUT4 D blue wire

※ NOTE THAT:

모든 위의 스테퍼 모터와 L298N 드라이버 사이의 배선 테이블에서, OUT1을 OUT2와, OUT3을 OUT4와 교체할 수 있습니다. 따라서 배선을 할 수 있는 방법이 더 많습니다. 그러나, 교체한다면 모터의 회전 방향이 변경될 수 있습니다(시계 방향에서 반시계 방향으로, 그 반대도 마찬가지입니다).

L298N 드라이버를 사용하여 스테퍼 모터를 제어하는 방법.

스텝 모터를 제어하는 것은 비차단 방식으로 제어하고자 할 때 특히 간단한 작업이 아닙니다. 다행히도 AccelStepper 라이브러리 덕분에 스텝 모터를 제어하는 것이 식은 죽 먹기가 됩니다.

Arduino IDE에는 빌트인 Stepper 라이브러리도 있습니다. 하지만, 다음의 이유로 이 라이브러리 사용을 추천하지 않습니다:

  • 이 라이브러리는 차단 기능을 제공합니다. 이는 스텝 모터를 제어하는 동안 아두이노가 다른 작업을 수행하는 것을 차단한다는 의미입니다.
  • 충분한 기능이 없습니다.

대신 AccelStepper 라이브러리를 사용하는 것을 추천합니다. 이 라이브러리는 지원합니다:

  • 가속
  • 감속.
  • 전단계 및 반단계 구동.
  • 독립적으로 동시에 스텝핑할 수 있는 다중 동시 스테퍼.
  • 단점: 마이크로 스텝 구동을 지원하지 않음

L298N 드라이버를 통해 스테퍼 모터의 위치를 제어하는 방법

우리는 다음을 사용하여 스테퍼 모터를 원하는 위치로 이동시킬 수 있습니다:

stepper.moveTo(desiredPosition); // 모터를 한 바퀴 돌립니다.

※ NOTE THAT:

stepper.moveTo() 함수는 논블로킹(non-blocking)입니다. 이것은 그 라이브러리의 큰 장점 중 하나입니다. 그러나 이 함수를 사용할 때 주의해야 할 사항들이 있습니다:

  • 'stepper.run()'을 가능한 한 자주 호출하세요. 이 함수는 void loop() 함수 내에서 호출되어야 합니다.
  • 모터가 움직이는 동안 delay() 함수를 사용하지 마세요.
  • 모터가 움직이는 동안 Serial.print()Serial.println() 함수를 사용하지 않아야 합니다. 이 함수들은 스테퍼 모터의 움직임을 느리게 만듭니다.

스텝 모터의 속도를 L298N 드라이버로 제어하는 방법

우리는 몇 가지 간단한 함수를 사용하여 속도뿐만 아니라 가속도와 감속도도 제어할 수 있습니다.

stepper.setAcceleration(50.0); // 가속도/감속 설정 stepper.setSpeed(200); // 원하는 속도 설정

L298N 드라이버를 통한 스테퍼 모터의 방향 제어 방법

위와 같이 배선을 하면, 모터가 회전할 것입니다:

  • 시계 방향: 모터를 한 위치에서 더 높은 위치로 제어할 경우 (위치 증가)
  • 반시계 방향: 모터를 한 위치에서 더 낮은 위치로 제어할 경우 (위치 감소)

예를 들면:

  • 현재 위치가 100이고 모터를 200으로 제어하면 모터는 시계 방향으로 회전합니다.
  • 현재 위치가 -200이고 모터를 -100으로 제어하면 모터는 시계 방향으로 회전합니다.
  • 현재 위치가 200이고 모터를 100으로 제어하면 모터는 반시계 방향으로 회전합니다.
  • 현재 위치가 -100이고 모터를 -200으로 제어하면 모터는 반시계 방향으로 회전합니다.

※ NOTE THAT:

앞서 언급한 바와 같이, OUT1을 OUT2와 바꾸거나 OUT3을 OUT4와 바꾸면, 위치의 증가는 반시계 방향이 될 수 있고 위치의 감소는 시계 방향이 될 수 있습니다.

스테퍼 모터를 멈추는 방법

  • 스테퍼 모터는 원하는 위치에 도달한 후 자동으로 멈춥니다.
  • stepper.stop() 함수를 사용하여 언제든지 스테퍼 모터를 즉시 정지시킬 수 있습니다.

아두이노 코드 - 스테퍼 모터 코드

아래 코드는 다음을 수행합니다:

  • 시계 방향으로 모터를 한 바퀴 회전시키세요.
  • 모터를 5초 동안 멈추세요.
  • 반시계 방향으로 모터를 한 바퀴 다시 회전시키세요.
  • 모터를 5초 동안 멈추세요.
  • 그 과정을 계속 반복하세요.
/* * 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-stepper-motor */ #include <AccelStepper.h> #define DEG_PER_STEP 1.8 #define STEP_PER_REVOLUTION (360 / DEG_PER_STEP) AccelStepper stepper(AccelStepper::FULL4WIRE, 7, 6, 5, 4); long moveToPosition = STEP_PER_REVOLUTION; void setup() { Serial.begin(9600); stepper.setAcceleration(200.0); // 가속도 설정 stepper.setSpeed(200); // 초기 속도 설정 stepper.setCurrentPosition(0); // 위치를 0으로 설정 stepper.moveTo(STEP_PER_REVOLUTION); // 모터를 한 바퀴 돌리세요, 시계 방향으로 Serial.println("Motor moving in clockwise direction"); } void loop() { if (stepper.distanceToGo() == 0) { Serial.println("Motor is stopped"); delay(5000); // 5초 동안 정지 stepper.setCurrentPosition(0); // 위치를 0으로 재설정 moveToPosition = -1 * moveToPosition; // 방향 반전 stepper.moveTo(moveToPosition); // 모터를 한 바퀴 돌리세요 if (stepper.distanceToGo() > 0) Serial.println("Motor moving in clockwise direction"); else if (stepper.distanceToGo() < 0) Serial.println("Motor moving in anticlockwise direction"); } // Serial.print(F("position: ")); // Serial.println(stepper.currentPosition()); stepper.run(); // 가능한 빈번하게 호출해야 함 }

사용 방법

  • Arduino IDE의 왼쪽 바에 있는 Libraries 아이콘으로 이동하세요.
  • "AccelStepper"을 검색한 다음, Mike McCauley의 AccelStepper 라이브러리를 찾으세요.
  • AccelStepper 라이브러리를 설치하려면 Install 버튼을 클릭하세요.
Arduino AccelStepper library
  • 위의 코드를 복사하여 Arduino IDE로 열기
  • Arduino IDE에서 Upload 버튼을 클릭하여 코드를 Arduino에 업로드
  • 다음을 확인할 수 있습니다:
    • 스테퍼 모터가 시계 방향으로 한 바퀴 회전합니다
    • 스테퍼 모터가 5초 동안 정지합니다
    • 스테퍼 모터가 반시계 방향으로 한 바퀴 다시 회전합니다
    • 스테퍼 모터가 5초 동안 정지합니다
    • 위의 과정이 반복됩니다.
  • 시리얼 모니터에서 결과를 확인하세요
COM6
Send
Motor moving in clockwise direction Motor is stopped Motor moving in anticlockwise direction Motor is stopped Motor moving in clockwise direction Motor is stopped Motor moving in anticlockwise direction Motor is stopped Motor moving in clockwise direction Motor is stopped Motor moving in anticlockwise direction Motor is stopped
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

코드 설명

소스 코드의 주석 줄에 있는 줄별 설명을 읽으세요!

동영상

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.

댓글

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!