아두이노 - L298N 드라이버를 이용한 스테퍼 모터 제어 | Arduino - Control Stepper Motor using L298N Driver
이 튜토리얼에서, 우리는 다음을 배울 것입니다:
- L298N 드라이버를 사용하여 양극성 스테퍼 모터를 제어하는 방법
- 스테퍼 모터의 위치를 제어하는 방법
- 스테퍼 모터의 속도를 제어하는 방법
- 스테퍼 모터의 방향을 제어하는 방법
이 튜토리얼은 모든 종류의 바이폴라 스텝 모터(4선)에 적용할 수 있습니다. 튜토리얼에서는 예시로 NEMA 17 스텝 모터를 다룰 것입니다.
준비물
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 |
Or you can buy the following sensor kits:
1 | × | DIYables Sensor Kit (30 sensors/displays) | Amazon | |
1 | × | DIYables Sensor Kit (18 sensors/displays) | 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 |
핀의 순서, 전선의 이름 지정, 그리고 전선의 색상은 제조업체마다 다를 수 있습니다. 전선의 색상과 핀 이름 사이의 매핑을 보려면 데이터시트 또는 사용 설명서를 읽어야 합니다. 위의 이미지는 또한 이름 지정과 전선 색상이 다른 두 가지 다른 모터의 사양을 보여줍니다.
혁명 단계
모터의 사양은 단계당 도를 명시합니다 (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 점퍼: 5V-EN 점퍼를 그대로 두면 L298N 모듈에 대한 전원은 VCC에서 얻어지며, 5V 핀에 아무 것도 연결할 필요가 없습니다. 5V-EN 점퍼를 제거하면 L298N 모듈에 전원을 5V 핀을 통해 공급해야 합니다.
위에서 설명한 것처럼, L298N 드라이버는 두 개의 입력 전력을 가지고 있습니다:
- 스테퍼 모터용(VCC 및 GND 핀): 5V부터 35V까지.
- L298N 모듈의 내부 동작용(5V 및 GND 핀): 5V부터 7V까지. 만약 5V-EN 점퍼를 그대로 두면, 이 핀을 어떤 것에도 연결할 필요가 없습니다.
선연결
This image is created using Fritzing. Click to enlarge image
※ 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 |
스텝 모터를 구매하기 전에, 스텝 모터의 데이터시트, 사양 또는 사용자 매뉴얼을 확인하시길 권장합니다. 핀의 색깔과 이름 사이의 매핑 정보를 제공하는지 확인하세요. 예를 들어, 이 스텝 모터는 아래 이미지처럼 매핑 정보를 제공합니다:
그 매핑을 바탕으로 하여, 배선 테이블은 다음과 같이 됩니다:
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 드라이버를 통해 스테퍼 모터의 위치를 제어하는 방법
우리는 다음을 사용하여 스테퍼 모터를 원하는 위치로 이동시킬 수 있습니다:
※ NOTE THAT:
stepper.moveTo() 함수는 논블로킹(non-blocking)입니다. 이것은 그 라이브러리의 큰 장점 중 하나입니다. 그러나 이 함수를 사용할 때 주의해야 할 사항들이 있습니다:
- '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 버튼을 클릭하세요.
- 위의 코드를 복사하여 Arduino IDE로 열기
- Arduino IDE에서 Upload 버튼을 클릭하여 코드를 Arduino에 업로드
- 다음을 확인할 수 있습니다:
- 스테퍼 모터가 시계 방향으로 한 바퀴 회전합니다
- 스테퍼 모터가 5초 동안 정지합니다
- 스테퍼 모터가 반시계 방향으로 한 바퀴 다시 회전합니다
- 스테퍼 모터가 5초 동안 정지합니다
- 위의 과정이 반복됩니다.
- 시리얼 모니터에서 결과를 확인하세요
코드 설명
소스 코드의 주석 줄에 있는 줄별 설명을 읽으세요!
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.