ESP32 - 스텝 모터 | ESP32 - Stepper Motor
이 튜토리얼에서는 ESP32를 사용하여 스테퍼 모터를 제어하는 방법을 배워볼 것입니다.
- 양극성 스테퍼 모터를 제어하기 위해 L298N 드라이버를 사용하는 방법
- 스테퍼 모터의 위치를 제어하는 방법
- 스테퍼 모터의 속도를 제어하는 방법
- 스테퍼 모터의 방향을 제어하는 방법
이 튜토리얼은 어떤 종류의 양극성 스테퍼 모터(4개의 전선)에도 적용할 수 있습니다. 이 튜토리얼에서는 NEMA 17 스테퍼 모터를 예로 들 것입니다.
준비물
1 | × | ESP-WROOM-32 Dev Module | 쿠팡 | Amazon | |
1 | × | USB Cable Type-C | 쿠팡 | 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 | × | (Recommended) Screw Terminal Expansion Board for ESP32 | 쿠팡 | Amazon |
스테퍼 모터에 대하여
스테퍼 모터에는 두 가지 일반적인 유형이 있습니다:
- **양극성**: 이 모터는 4개의 전선이 있습니다.
- **단극성**: 단극성 모터는 5개나 6개의 전선을 가질 수 있습니다. 6개 전선의 단극성 스테퍼 모터의 경우, 마치 양극성 스테퍼 모터처럼 제어하기 위해 여섯 개 중 네 개의 전선을 효과적으로 사용할 수 있습니다.
특히 5선식 단극형 스테퍼 모터에 관심이 있다면, [ESP32 - ULN2003 드라이버를 사용한 28BYJ-48 스테퍼 모터 제어]라는 제목의 튜토리얼을 참조하실 수 있습니다(BASE_URL/tutorials/esp32/esp32-28byj-48-stepper-motor-uln2003-driver).
그러나 이 튜토리얼은 오직 양극성 스텝 모터에만 전념되어 있습니다.
양극성 스테퍼 모터 핀배열
양극성 스테퍼 모터는 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)° |
ESP32를 사용하여 스테퍼 모터를 제어하는 방법
ESP32는 스텝 모터를 제어하기 위한 신호를 생성할 수 있지만, 이러한 신호는 스텝 모터가 요구하는 필요한 전압 및 전류 수준을 충족시키지 못할 수 있습니다. 따라서, ESP32와 스텝 모터 사이의 간격을 메우기 위한 중간 하드웨어 드라이버가 필요합니다. 이 드라이버는 두 가지 주요 기능을 제공합니다:
제어 신호 증폭: ESP32에서 오는 제어 신호의 전류와 전압을 증폭하여 스텝 모터의 요구 사항을 충족시킵니다.
ESP32 보호: 동시에, 스텝 모터를 구동하는데 사용되는 높은 전류와 전압 수준으로부터 ESP32를 보호하여 잠재적인 손상을 방지합니다.
다양한 하드웨어 드라이버가 스테퍼 모터를 제어하기 위해 사용 가능하며, 흔히 사용되는 옵션 중 하나는 L298N 드라이버입니다.
L298N 드라이버에 관하여
단일 L298N 드라이버는 두 개의 DC 모터 또는 스테퍼 모터를 제어하는 데 사용할 수 있습니다. 이 튜토리얼에서는 스테퍼 모터를 제어하는 방법을 배웁니다.
L298N 드라이버 핀배열
L298N 드라이버는 11개의 핀과 3개의 점퍼가 있습니다.
VCC 핀: 모터에 전력을 공급합니다. 5V에서 35V 사이 어디든 될 수 있습니다.
GND 핀: 공통 접지 핀이며, GND(0V)에 연결해야 합니다.
5V 핀: L298N 모듈에 전력을 공급합니다. ESP32에서 5V를 통해 공급될 수 있습니다.
IN1, IN2, IN3, IN4 핀들: 스텝 모터를 제어하기 위한 제어 신호를 받기 위해 ESP32의 핀에 연결됩니다.
OUT1, OUT2, OUT3, OUT4 핀들: 스텝 모터에 연결됩니다.
ENA, ENB 점퍼들: 스텝 모터를 활성화하는데 사용됩니다. ENA 및 ENB 점퍼를 모두 제자리에 두어야 합니다.
5V-EN 점퍼: 5V-EN 점퍼를 제자리에 두면, L298N 모듈에 대한 전력이 VCC에서 얻어지며, 5V 핀에 무엇인가를 연결할 필요가 없습니다. 5V-EN 점퍼를 제거하면, 5V 핀을 통해 L298N 모듈에 전력을 공급해야 합니다.
위에서 설명한 바와 같이, L298N 드라이버는 두 가지 입력 전력을 가지고 있습니다:
- 스테퍼 모터용(VCC 및 GND 핀): 5V에서 35V까지.
- L298N 모듈의 내부 동작용(5V 및 GND 핀): 5V에서 7V까지. 5V-EN 점퍼를 그대로 두면 이 핀을 다른 것에 연결할 필요가 없습니다.
선연결
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
ESP32 및 다른 구성 요소에 전원을 공급하는 방법에 대해 잘 알지 못하는 경우, 다음 튜토리얼에서 안내를 찾을 수 있습니다: ESP32 전원 공급 방법.
※ NOTE THAT:
- 모터의 전원 공급이 12V 이하인 경우 L298N 모듈에 있는 세 개의 점퍼를 그대로 두세요.
- 스테퍼 모터의 핀 순서는 제조사마다 다를 수 있습니다. 올바른 배선을 위해 아래 표를 확인하세요.
ESP32와 L298N 드라이버 간의 연결 테이블
ESP32 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는 또한 내장된 스텝 모터 라이브러리를 가지고 있습니다. 하지만, 다음의 이유로 이 라이브러리 사용을 추천하지 않습니다:
- 이 라이브러리는 차단 기능을 제공합니다. 즉, 스텝 모터를 제어하는 동안에는 ESP32가 다른 작업을 수행하지 못하도록 차단합니다.
- 충분한 기능이 없습니다.
대신, 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() 함수를 사용하여 언제든지 스테퍼 모터를 즉시 정지시킬 수 있습니다.
ESP32 코드 - 스텝 모터 코드
아래 코드는 다음과 같은 작업을 수행합니다:
- 시계 방향으로 모터를 한 바퀴 돌리세요
- 모터를 5초 동안 멈추세요
- 반시계 방향으로 모터를 한 바퀴 돌려주세요
- 모터를 5초 동안 멈추세요
- 그 과정을 계속 반복하세요
사용 방법
- ESP32를 처음 사용하는 경우, Arduino IDE에서 ESP32 환경 설정하는 방법을 참조하세요.
- 위 이미지와 같이 배선하세요.
- 마이크로 USB 케이블을 이용해 ESP32 보드를 PC에 연결하세요.
- PC에서 Arduino IDE를 엽니다.
- 올바른 ESP32 보드(예: ESP32 Dev Module)와 COM 포트를 선택하세요.
- Arduino IDE의 왼쪽 바에 있는 Libraries 아이콘을 클릭하세요.
- “AccelStepper”을 검색한 다음, Mike McCauley의 AccelStepper 라이브러리를 찾으세요.
- AccelStepper 라이브러리를 설치하려면 Install 버튼을 클릭하세요.
- 위의 코드를 복사하고 Arduino IDE로 열기
- Arduino IDE에서 Upload 버튼을 클릭하여 코드를 ESP32에 업로드
- 다음과 같은 결과가 나타납니다:
- 스테퍼 모터가 시계 방향으로 한 바퀴 회전합니다
- 스테퍼 모터가 5초 동안 정지합니다
- 스테퍼 모터가 반시계 방향으로 한 바퀴 다시 회전합니다
- 스테퍼 모터가 5초 동안 정지합니다
- 위의 과정이 반복적으로 실행됩니다.
- 시리얼 모니터에서 결과를 확인하세요
코드 설명
소스 코드의 주석 라인에 있는 줄별 설명을 읽으세요!
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.