아두이노 나노 - 스텝 모터 | Arduino Nano - Stepper Motor
이 튜토리얼에서는 L298N 드라이버를 사용하여 스텝 모터를 제어하는 방법에 대해 Arduino Nano를 사용하는 방법을 지시합니다. 자세히, 우리는 배울 것입니다:
- 아두이노 나노와 L298N 드라이버를 사용하여 바이폴라 스테퍼 모터를 제어하는 방법
- 스테퍼 모터의 위치를 제어하기 위해 아두이노 나노를 프로그래밍하는 방법
- 스테퍼 모터의 속도를 제어하기 위해 아두이노 나노를 프로그래밍하는 방법
- 스테퍼 모터의 방향을 제어하기 위해 아두이노 나노를 프로그래밍하는 방법
이 튜토리얼은 네 개의 전선이 있는 모든 종류의 양극성 스테퍼 모터에 적용 가능합니다. 예시로 NEMA 17 스테퍼 모터를 사용할 것입니다.
다른 종류의 스텝 모터를 제어하고 싶으시다면, 이 아두이노 나노 - 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 |
핀의 배치, 배선에 할당된 라벨, 그리고 전선의 색상은 제조사마다 다를 수 있습니다. 전선 색상이 핀 이름에 어떻게 해당하는지 알아보려면 데이터시트나 매뉴얼을 확인해야 합니다. 위의 이미지는 또한 서로 다른 배선 라벨링 및 색칠을 가진 두 개의 구별되는 모터의 사양을 보여줍니다.
혁명 단계
모터의 사양은 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 드라이버는 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 드라이버에는 두 가지 입력 전력이 있습니다:
- 스테퍼 모터용(VCC 및 GND 핀): 5에서 35V 사이.
- L298N 모듈의 내부 작동용(5V 및 GND 핀): 5에서 7V 사이. 5V-EN 점퍼를 그대로 유지하면 이 핀에 연결할 필요가 없습니다.
선연결
이 이미지는 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 |
스테퍼 모터를 구매하기 전에, 스테퍼 모터의 데이터시트, 사양 또는 매뉴얼을 검토하는 것이 좋습니다. 핀의 색상과 이름 사이의 매핑 정보가 포함되어 있는지 확인하세요. 예를 들어, 이 스테퍼 모터는 다음 이미지에서 볼 수 있는 매핑을 제공합니다:
매핑을 사용하여, 배선 테이블은 다음과 같습니다:
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 드라이버를 통해 제어하는 방법
우리는 다음을 활용하여 스테퍼 모터를 원하는 위치로 이동시키는 목표를 달성할 수 있습니다:
※ NOTE THAT:
stepper.moveTo() 함수는 비블로킹이며, 이것이 라이브러리의 큰 장점 중 하나입니다. 그러나 이 함수를 사용할 때 주의해야 할 몇 가지 사항이 있습니다:
- 가능한 한 자주 'stepper.run()'을 호출하십시오. void loop() 함수에서 호출하는 것이 좋습니다.
- 모터가 움직이는 동안 delay() 함수를 사용하지 마십시오.
- 모터가 동작 중일 때 Serial.print() 및 Serial.println() 함수를 사용하지 마십시오. 이들은 스테퍼 모터를 느리게 할 것입니다.
스테퍼 모터의 속도를 L298N 드라이버로 제어하는 방법
우리는 몇 가지 기본 함수의 사용을 통해 속도뿐만 아니라 가속 및 감속도 조절할 수 있습니다.
스텝 모터 방향 제어 방법: L298N 드라이버를 통해
모터를 지시한 대로 연결하면 다음 방향으로 회전할 것입니다:
- 시계 방향: 모터를 낮은 위치에서 높은 위치로 제어할 때 (위치 증가)
- 반시계 방향: 모터를 높은 위치에서 낮은 위치로 제어할 때 (위치 감소)
예시들을 위해:
- 현재 위치가 100이고 모터가 200으로 지시되면 시계 방향으로 회전합니다.
- 현재 위치가 -200이고 모터가 -100으로 제어되면 시계 방향으로 회전합니다.
- 현재 위치가 200이고 모터가 100으로 조정되면 반시계 방향으로 회전합니다.
- 현재 위치가 -100이고 모터가 -200으로 관리되면 반시계 방향으로 회전합니다.
※ NOTE THAT:
앞서 언급한 바와 같이, OUT1을 OUT2와 교환하거나 OUT3를 OUT4와 교환하면, 위치의 증가는 반시계 방향이 될 수 있고 위치의 감소는 시계 방향이 될 수 있습니다.
스테퍼 모터를 멈추는 방법
- 스테퍼 모터는 원하는 위치에 도달하면 정지할 것입니다.
- stepper.stop() 함수를 사용하여 즉시 정지시키는 것도 가능합니다.
아두이노 나노 코드 - 스테퍼 모터 코드
다음 코드:
- 모터가 시계 방향으로 한 바퀴 회전하게 합니다.
- 모터를 5초 동안 멈춥니다.
- 모터가 반시계 방향으로 한 바퀴 회전하게 합니다.
- 모터를 5초 동안 정지합니다.
- 이 과정을 계속해서 반복합니다.
사용 방법
- Arduino IDE의 왼쪽 바에 있는 Libraries 아이콘을 클릭하세요.
- “AccelStepper”을 검색하고 Mike McCauley가 만든 AccelStepper 라이브러리를 찾으세요.
- AccelStepper 라이브러리 설치를 완료하려면 Install 버튼을 누르세요.
- 코드를 복사해서 아두이노 IDE에서 열어주세요.
- Upload 버튼을 클릭하여 코드를 아두이노 나노에 업로드하세요.
- 스테퍼 모터는 시계 방향으로 한 바퀴 돌고, 5초 동안 멈춘 후, 반시계 방향으로 한 바퀴 돌고, 5초 동안 멈춘 후, 이 과정을 반복합니다.
- 시리얼 모니터에서 결과를 확인해 보세요.
코드 설명
소스 코드의 주석에 포함된 줄별 설명을 확인하세요!
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.