아두이노 나노 - 스텝 모터 | Arduino Nano - Stepper Motor

이 튜토리얼에서는 L298N 드라이버를 사용하여 스텝 모터를 제어하는 방법에 대해 Arduino Nano를 사용하는 방법을 지시합니다. 자세히, 우리는 배울 것입니다:

이 튜토리얼은 네 개의 전선이 있는 모든 종류의 양극성 스테퍼 모터에 적용 가능합니다. 예시로 NEMA 17 스테퍼 모터를 사용할 것입니다.

Arduino Nano Stepper motor L298N Driver

다른 종류의 스텝 모터를 제어하고 싶으시다면, 이 아두이노 나노 - 28BYJ-48 스텝 모터 튜토리얼을 확인해 보세요.

준비물

1×Arduino Nano Amazon
1×USB A to Mini-B USB cable 쿠팡 | 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 Nano Amazon
1×(Recommended) Screw Terminal Expansion Board for Arduino Nano 쿠팡 | Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

스테퍼 모터에 관하여

두 가지 일반적인 유형의 스테퍼 모터가 있습니다:

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

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

5선식 유니폴라 스텝 모터의 경우, 더 많은 정보를 위해 Arduino Nano - ULN2003 드라이버를 사용하여 28BYJ-48 스텝 모터 제어하기 튜토리얼을 확인하세요.

이 튜토리얼의 강조점은 오로지 양극성 스테퍼 모터에만 있습니다.

양극성 스테퍼 모터 핀배열

바이폴라 스테퍼 모터에는 네 개의 핀이 있으며, 이 핀들의 이름은 제조사에 따라 다릅니다. 다음 표는 가장 일반적으로 사용되는 이름 중 일부를 제공합니다:

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 점퍼: 이것이 제자리에 있으면 L298N 모듈의 전력이 VCC에서 얻어지며 5V 핀에 아무것도 연결할 필요가 없습니다. 제거되면 5V 핀을 통해 L298N 모듈에 전력을 공급해야 합니다.

L298N 드라이버에는 두 가지 입력 전력이 있습니다:

  • 스테퍼 모터용(VCCGND 핀): 5에서 35V 사이.
  • L298N 모듈의 내부 작동용(5V 및 GND 핀): 5에서 7V 사이. 5V-EN 점퍼를 그대로 유지하면 이 핀에 연결할 필요가 없습니다.

선연결

Arduino Nano Stepper Motor L298N Driver wiring diagram

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

※ NOTE THAT:

  • 모터의 전원 공급이 12V 이하인 경우 L298N 모듈의 세 개의 점퍼를 현재 위치에 그대로 유지하십시오.
  • 스테퍼 모터의 핀 배치는 제조사마다 다를 수 있습니다. 올바른 배선을 위해 아래 표를 참조하십시오.

아두이노 나노와 L298N 드라이버 간의 배선 표

Arduino Nano 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 라이브러리 덕분에 이제 아주 쉬워졌습니다.

아두이노 IDE에는 통합된 스테퍼 라이브러리가 들어 있습니다. 그럼에도 불구하고, 다음과 같은 이유로 이 라이브러리 사용을 권장하지 않습니다:

  • 이 라이브러리는 차단 기능을 제공합니다. 이는 Arduino Nano가 스테퍼 모터를 제어하는 동안 다른 작업을 실행하지 못하게 한다는 것을 의미합니다.
  • 충분한 기능을 가지고 있지 않습니다.

대신, AccelStepper 라이브러리 사용을 제안합니다. 이 라이브러리는 다음을 제공합니다:

  • 가속
  • 감속
  • 풀 스텝 및 하프 스텝 구동
  • 각 스텝퍼마다 동시에 개별적으로 스텝을 진행할 수 있는 여러 스텝퍼를 동시에 제어할 수 있는 능력
  • 단점: 마이크로 스텝 구동을 제공하지 않습니다.

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

우리는 다음을 활용하여 스테퍼 모터를 원하는 위치로 이동시키는 목표를 달성할 수 있습니다:

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

※ NOTE THAT:

stepper.moveTo() 함수는 비블로킹이며, 이것이 라이브러리의 큰 장점 중 하나입니다. 그러나 이 함수를 사용할 때 주의해야 할 몇 가지 사항이 있습니다:

  • 가능한 한 자주 '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 Nano 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino Nano 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano/arduino-nano-stepper-motor */ #include <AccelStepper.h> #define DEG_PER_STEP 1.8 #define STEP_PER_REVOLUTION (360 / DEG_PER_STEP) AccelStepper stepper(AccelStepper::FULL4WIRE, A3, A2, A1, A0); 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 Nano AccelStepper library
  • 코드를 복사해서 아두이노 IDE에서 열어주세요.
  • Upload 버튼을 클릭하여 코드를 아두이노 나노에 업로드하세요.
  • 스테퍼 모터는 시계 방향으로 한 바퀴 돌고, 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!