라즈베리 파이 스테퍼 모터

이 튜토리얼은 L298N 드라이버를 사용하여 라즈베리 파이로 스텝 모터를 제어하는 방법을 안내합니다. 자세히는 다음을 배웁니다:

이 튜토리얼은 4개의 와이어가 있는 모든 유형의 바이폴라 스테퍼 모터에 적용됩니다. NEMA 17 스테퍼 모터를 예로 사용할 것입니다.

라즈베리 파이 스테퍼 모터 L298N 드라이버

다른 유형의 스테퍼 모터를 제어하려면, 이 Raspberry Pi - 28BYJ-48 스테퍼 모터 튜토리얼을 확인하세요.

Hardware Preparation

1×Raspberry Pi 4 Model 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×(추천) Screw Terminal Block Shield for Raspberry Pi 쿠팡 | Amazon
1×(추천) USB-C Power Cable with On/Off Switch for Raspberry Pi 4B Amazon
1×(추천) Plastic Case and Cooling Fan for Raspberry Pi 4B Amazon
1×(추천) HDMI Touch Screen Monitor for Raspberry Pi Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

스테퍼 모터에 대하여

두 가지 일반적인 유형의 스테퍼 모터가 존재합니다:

  • bipolar: 이 모터는 4개의 전선이 있습니다
  • unipolar: 이 모터는 5개 또는 6개의 전선이 있습니다

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

5선 유니폴라 스테퍼 모터에 대해서는 Raspberry Pi - 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)°

Raspberry Pi로 스테퍼 모터 제어하는 방법

Raspberry Pi는 스텝 모터를 제어하기 위해 신호를 생성할 수 있지만, 이러한 신호는 스텝 모터의 요구 사항을 충족하기에 충분한 전압 및/또는 전류를 제공하지 않습니다. 따라서 Raspberry Pi와 스텝 모터 사이에 하드웨어 드라이버가 필요합니다. 이 드라이버는 두 가지 목적을 수행합니다:

  • 라즈베리 파이의 제어 신호를 전류와 전압 측면에서 증폭하기 위해
  • 스테퍼 모터에 전원을 공급하는 데 사용되는 높은 전류와 전압으로부터 라즈베리 파이를 보호하기 위해

스테핑 모터를 관리하기 위해 사용할 수 있는 수많은 하드웨어 드라이버가 있습니다. 스테핑 모터 제어를 위한 가장 일반적으로 사용되는 하드웨어 드라이버 중 하나는 L298N 드라이버입니다.

L298N 드라이버에 대하여

L298N 드라이버는 두 개의 DC 모터 또는 스테퍼 모터를 제어하는 데 사용될 수 있습니다. 이 가이드에서는 스테퍼 모터를 조절하는 방법을 알아보겠습니다.

L298N 드라이버 핀아웃

L298N 드라이버 핀아웃

L298N 드라이버는 11개의 핀과 3개의 점퍼를 가지고 있습니다.

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

L298N 드라이버는 두 개의 입력 전원을 가지고 있습니다:

  • 스테퍼 모터용 (VCCGND 핀): 5V에서 35V까지.
  • 모듈의 내부 작동용 (5V 및 GND 핀): 5V에서 7V까지. 5V-EN 점퍼가 제자리에 있을 경우, 이 핀은 연결할 필요가 없습니다.

Wiring Diagram

라즈베리 파이 스테퍼 모터 L298N 드라이버 배선도

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

배선 구성을 간단하고 체계적으로 만들기 위해, Raspberry Pi용 스크루 터미널 블록 실드 사용을 권장합니다. 이 실드는 아래와 같이 더욱 안정적이고 관리하기 쉬운 연결을 제공합니다:

Raspberry Pi Screw Terminal Block Shield

※ NOTE THAT:

  • 모터 전원이 12V 이하인 경우 L298N 모듈에서 세 개의 점퍼를 그대로 유지하십시오.
  • 스테퍼 모터의 핀은 제조업체에 따라 다를 수 있습니다. 올바른 배선을 위해 아래 표를 참조하십시오.

라즈베리 파이와 L298N 드라이버 간의 배선표

Raspberry Pi pins L298N pins
12 IN1
16 IN2
20 IN3
21 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와 교체할 수 있습니다. 그러나 이렇게 하면 모터의 회전 방향이 (시계 방향에서 반시계 방향으로, 또는 그 반대로) 바뀔 수 있습니다.

라즈베리 파이 코드 - 스테퍼 모터 코드

다음 코드:

  • 모터를 시계 방향으로 한 바퀴 회전시킵니다.
  • 모터를 5초 동안 멈춥니다.
  • 모터를 반시계 방향으로 한 바퀴 회전시킵니다.
  • 모터를 5초 동안 정지합니다.
  • 이 과정을 무한히 반복합니다.

Detailed Instructions

  • Raspberry Pi에 Raspbian 또는 기타 Raspberry Pi 호환 운영 체제가 설치되어 있는지 확인하세요.
  • Raspberry Pi가 PC와 동일한 로컬 네트워크에 연결되어 있는지 확인하세요.
  • 라이브러리를 설치해야 하는 경우 Raspberry Pi가 인터넷에 연결되어 있는지 확인하세요.
  • Raspberry Pi를 처음 사용하는 경우, Raspberry Pi 설정 방법을 참조하세요.
  • Linux와 macOS에서는 내장된 SSH 클라이언트를 사용하거나 Windows에서는 PuTTY를 사용하여 SSH를 통해 PC를 Raspberry Pi에 연결하세요. SSH를 통해 PC를 Raspberry Pi에 연결하는 방법은 여기를 참조하세요.
  • RPi.GPIO 라이브러리가 설치되어 있는지 확인하세요. 설치되어 있지 않다면, 다음 명령어를 사용하여 설치하세요:
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • 파이썬 스크립트 파일 stepper.py을(를) 만들고 다음 코드를 추가하세요.
# 이 Raspberry Pi 코드는 newbiely.kr 에서 개발되었습니다 # 이 Raspberry Pi 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. # 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: # https://newbiely.kr/tutorials/raspberry-pi/raspberry-pi-stepper-motor import RPi.GPIO as GPIO import time # Define GPIO pins for L298N driver IN1 = 12 IN2 = 16 IN3 = 20 IN4 = 21 # Set GPIO mode and configure pins GPIO.setmode(GPIO.BCM) GPIO.setup(IN1, GPIO.OUT) GPIO.setup(IN2, GPIO.OUT) GPIO.setup(IN3, GPIO.OUT) GPIO.setup(IN4, GPIO.OUT) # Constants for stepper motor control DEG_PER_STEP = 1.8 STEP_PER_REVOLUTION = int(360 / DEG_PER_STEP) # Function to move the stepper motor one step forward def step_forward(delay, steps): for _ in range(steps): GPIO.output(IN1, GPIO.HIGH) GPIO.output(IN2, GPIO.HIGH) GPIO.output(IN3, GPIO.LOW) GPIO.output(IN4, GPIO.LOW) time.sleep(delay) GPIO.output(IN1, GPIO.LOW) GPIO.output(IN2, GPIO.HIGH) GPIO.output(IN3, GPIO.HIGH) GPIO.output(IN4, GPIO.LOW) time.sleep(delay) # Function to move the stepper motor one step backward def step_backward(delay, steps): for _ in range(steps): GPIO.output(IN1, GPIO.LOW) GPIO.output(IN2, GPIO.LOW) GPIO.output(IN3, GPIO.HIGH) GPIO.output(IN4, GPIO.HIGH) time.sleep(delay) GPIO.output(IN1, GPIO.HIGH) GPIO.output(IN2, GPIO.LOW) GPIO.output(IN3, GPIO.LOW) GPIO.output(IN4, GPIO.HIGH) time.sleep(delay) try: # Set the delay between steps delay = 0.001 while True: # Move the stepper motor one revolution in a clockwise direction step_forward(delay, STEP_PER_REVOLUTION) # Pause for 5 seconds time.sleep(5) # Move the stepper motor one revolution in an anticlockwise direction step_backward(delay, STEP_PER_REVOLUTION) # Halt for 5 seconds time.sleep(5) except KeyboardInterrupt: print("\nExiting the script.") finally: # Clean up GPIO settings GPIO.cleanup()
  • 파일을 저장하고 터미널에서 다음 명령을 실행하여 Python 스크립트를 실행하십시오:
python3 stepper.py

스크립트는 터미널에서 Ctrl + C를 누를 때까지 무한 루프 안에서 계속 실행됩니다.

코드에서 delay 변수의 값을 변경하여 스테퍼 모터의 속도를 변경할 수 있습니다.

다음을 관찰하게 될 것입니다:

  • 스테퍼 모터가 시계 방향으로 한 바퀴 회전합니다.
  • 스테퍼 모터가 5초 동안 멈춥니다.
  • 스테퍼 모터가 반시계 방향으로 한 바퀴 회전합니다.
  • 스테퍼 모터가 다시 5초 동안 멈춥니다.
  • 이 과정이 반복됩니다.

코드 설명

소스 코드의 주석에 포함된 줄별 설명을 확인하세요!

Video Tutorial

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