Raspberry Pi Stepper Motor

Hướng dẫn này sẽ chỉ bạn cách sử dụng Raspberry Pi để điều khiển Stepper Motor bằng Driver L298N. Cụ thể, chúng ta sẽ học:

Hướng dẫn này áp dụng cho tất cả các loại stepper motor lưỡng cực có bốn dây. Chúng ta sẽ sử dụng stepper motor NEMA 17 làm ví dụ.

Raspberry Pi động cơ bước l298n trình điều khiển

Nếu bạn muốn điều khiển loại stepper motor khác, hãy tham khảo hướng dẫn Raspberry Pi - Stepper Motor 28BYJ-48 và Driver ULN2003.

Phần Cứng Cần Thiết

1×Raspberry Pi 5
1×Stepper Motor Nema 17
1×L298N Motor Driver Module
1×12V Power Adapter
1×DC Power Jack
1×dây jumper
1×(Khuyến nghị) Screw Terminal Block Shield for Raspberry Pi
1×(Khuyến nghị) Raspberry Pi Prototyping Base Plate & Breadboard Kit
1×(Khuyến nghị) HDMI Touch Screen Monitor for Raspberry Pi

Or you can buy the following kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về Stepper Motor

Có hai loại stepper motor phổ biến:

  • bipolar (lưỡng cực): loại động cơ này có bốn dây
  • unipolar (đơn cực): loại động cơ này có năm hoặc sáu dây

Đối với stepper motor unipolar 6 dây, chúng ta có thể sử dụng bốn trong số sáu dây của nó và điều khiển như thể nó là stepper motor bipolar.

Đối với stepper motor unipolar 5 dây, hãy tham khảo Raspberry Pi - Stepper Motor 28BYJ-48 và Driver ULN2003.

Hướng dẫn này chỉ tập trung vào stepper motor bipolar.

Sơ đồ chân Bipolar Stepper Motor

Bipolar Stepper Motor có bốn chân và tên của các chân này khác nhau tùy thuộc vào nhà sản xuất. Bảng dưới đây hiển thị một số tên phổ biến hơn cho các chân:

SỐ CHÂN Cách đặt tên 1 Cách đặt tên 2 Cách đặt tên 3
1 A+ A A
2 A- A C
3 B+ B B
4 B- B D
bipolar động cơ bước sơ đồ chân

Cách sắp xếp các chân, cách ghi nhãn dây và màu sắc của chúng có thể khác nhau giữa các nhà sản xuất. Để xác định kết nối giữa màu dây và tên của nó, bạn phải tham khảo datasheet hoặc manual. Hình ảnh trên cũng hiển thị chi tiết của hai động cơ khác nhau với cách ghi nhãn dây và màu sắc khác nhau.

Số Bước Mỗi Vòng Quay

Thông số kỹ thuật của động cơ nêu rõ DEG_PER_STEP. Tùy thuộc vào kỹ thuật điều khiển, STEP_PER_REVOLUTION có thể được xác định bằng bảng sau:

Phương pháp điều khiển Số bước mỗi vòng quay Độ thực tế mỗi bước
Full-step (bước đầy đủ) STEP_PER_REVOLUTION = 360 / DEG_PER_STEP DEG_PER_STEP
Half-step (nửa bước) 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

Ví dụ, nếu datasheet của động cơ nêu 1.8 độ/bước:

Phương pháp điều khiển Số bước mỗi vòng quay Độ thực tế mỗi bước
Full-step 200 bước/vòng quay 1.8°
Half-step 400 bước/vòng quay 0.9°
Micro-step (1/n) (200 * n) bước/vòng quay (1.8 / n)°

Cách điều khiển stepper motor bằng Raspberry Pi

Raspberry Pi có thể tạo ra tín hiệu để điều khiển stepper motor, tuy nhiên, những tín hiệu này không đủ điện áp và/hoặc dòng điện để đáp ứng yêu cầu của stepper motor. Do đó, cần có driver phần cứng giữa Raspberry Pi và stepper motor. Driver này có hai mục đích:

  • Khuếch đại tín hiệu điều khiển từ Raspberry Pi về mặt dòng điện và điện áp
  • Bảo vệ Raspberry Pi khỏi dòng điện và điện áp cao được sử dụng để cấp nguồn cho stepper motor.

Có rất nhiều driver phần cứng có thể được sử dụng để quản lý stepper motor. Một trong những driver phần cứng được sử dụng phổ biến nhất để điều khiển stepper motor là L298N Driver.

Về L298N Driver

L298N Driver có thể được sử dụng để điều khiển hai DC motor hoặc một stepper motor. Trong hướng dẫn này, chúng ta sẽ khám phá cách sử dụng nó để điều khiển stepper motor.

Sơ đồ chân L298N Driver

l298n trình điều khiển sơ đồ chân

L298N Driver có 11 chân và ba jumper:

  • Chân VCC: Cung cấp nguồn cho động cơ và có thể từ 5 đến 35V.
  • Chân GND: Đây là chân mass chung, cần được kết nối với GND (0V).
  • Chân 5V: Cung cấp nguồn cho module L298N và có thể được cấp nguồn 5V từ Raspberry Pi.
  • Chân IN1, IN2, IN3, IN4: Những chân này được kết nối với các chân của Raspberry Pi để nhận tín hiệu điều khiển stepper motor.
  • Chân OUT1, OUT2, OUT3, OUT4: Những chân này được kết nối với stepper motor.
  • Jumper ENA, ENB: Được sử dụng để kích hoạt stepper motor và cả hai jumper ENA & ENB đều cần được đặt vào vị trí.
  • Jumper 5V-EN: Nếu jumper này được giữ ở vị trí, nguồn cho module L298N sẽ được lấy từ VCC và không cần kết nối gì với chân 5V. Nếu jumper 5V-EN được tháo ra, phải cấp nguồn cho module L298N qua chân 5V.

L298N driver có hai nguồn đầu vào:

  • Một cho stepper motor (chân VCCGND): từ 5 đến 35V.
  • Một cho hoạt động nội bộ của module (chân 5V và GND): từ 5 đến 7V. Nếu jumper 5V-EN được giữ ở vị trí, chân này không cần được kết nối.

Sơ Đồ Kết Nối

Raspberry Pi động cơ bước l298n trình điều khiển sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

※ Lưu ý:

  • Giữ ba jumper trên module L298N ở vị trí nếu nguồn cấp của động cơ là 12V hoặc thấp hơn.
  • Các chân trên stepper motor có thể khác nhau giữa các nhà sản xuất. Tham khảo bảng dưới đây để kết nối đúng cách.

Bảng kết nối giữa Raspberry Pi và L298N Driver

Chân Raspberry Pi Chân L298N
12 IN1
16 IN2
20 IN3
21 IN4

Bảng kết nối giữa L298N Driver và Stepper motor

Quan trọng!: Không chú ý đến thứ tự của các dây trong stepper motor trên sơ đồ kết nối được hiển thị ở trên. Đó chỉ là hình minh họa. Cách sắp xếp chân trên stepper motor có thể khác nhau tùy thuộc vào nhà sản xuất. Đảm bảo rằng kết nối của bạn tuân theo bảng dưới đây.

Chân L298N Chân Stepper motor Hoặc Hoặc
OUT1 A+ A A
OUT2 A- A C
OUT3 B+ B B
OUT4 B- B D

Trước khi mua stepper motor, chúng tôi khuyên bạn nên xem lại datasheet, thông số kỹ thuật hoặc manual của stepper motor. Đảm bảo rằng nó bao gồm sự tương quan giữa màu chân và tên. Ví dụ, stepper motor này có sơ đồ như được hiển thị trong hình dưới đây:

động cơ bước coil color mapping

Dựa trên sơ đồ trên, bảng kết nối như sau:

Chân L298N Chân stepper motor Màu dây
OUT1 A dây đen
OUT2 C dây xanh lá
OUT3 B dây đỏ
OUT4 D dây xanh dương

※ Lưu ý:

Trong bảng kết nối giữa stepper motor và L298N Driver, có nhiều cách khác nhau để kết nối. Chúng ta có thể hoán đổi OUT1 với OUT2, OUT3 với OUT4. Tuy nhiên, nếu chúng ta làm điều này, hướng quay của động cơ có thể bị thay đổi (từ chiều kim đồng hồ sang ngược chiều kim đồng hồ và ngược lại).

Code Raspberry Pi - Code Stepper Motor

Code sau đây:

  • Làm cho động cơ quay một vòng theo chiều kim đồng hồ
  • Tạm dừng động cơ trong 5 giây
  • Làm cho động cơ quay một vòng theo chiều ngược kim đồng hồ
  • Dừng động cơ trong 5 giây
  • Lặp lại quá trình vô thời hạn

Các Bước Nhanh

  • Đảm bảo bạn đã cài đặt Raspbian hoặc bất kỳ hệ điều hành tương thích Raspberry Pi nào khác trên Pi của bạn.
  • Đảm bảo Raspberry Pi của bạn được kết nối với cùng mạng cục bộ với PC của bạn.
  • Đảm bảo Raspberry Pi của bạn được kết nối internet nếu bạn cần cài đặt một số thư viện.
  • Nếu đây là lần đầu tiên bạn sử dụng Raspberry Pi, hãy xem Raspberry Pi - Cài Đặt Phần Mềm
  • Kết nối PC của bạn với Raspberry Pi qua SSH sử dụng SSH client tích hợp trên Linux và macOS hoặc PuTTY trên Windows. Xem cách kết nối PC với Raspberry Pi qua SSH.
  • Đảm bảo bạn đã cài đặt thư viện RPi.GPIO. Nếu chưa, hãy cài đặt bằng lệnh sau:
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Tạo file script Python stepper.py và thêm code sau:
# Mã Raspberry Pi này được phát triển bởi newbiely.vn # Mã Raspberry Pi này được cung cấp để sử dụng công khai, không có ràng buộc. # Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: # https://newbiely.vn/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()
  • Lưu file và chạy script Python bằng cách thực thi lệnh sau trong terminal:
python3 stepper.py

Script chạy trong vòng lặp vô thời hạn liên tục cho đến khi bạn nhấn Ctrl + C trong terminal.

Bằng cách thay đổi giá trị của biến delay trong code, bạn có thể thay đổi tốc độ của stepper motor.

Bạn sẽ quan sát những điều sau:

  • Stepper motor sẽ quay một vòng theo chiều kim đồng hồ.
  • Stepper motor sẽ tạm dừng trong 5 giây.
  • Stepper motor sau đó sẽ quay một vòng theo chiều ngược kim đồng hồ.
  • Stepper motor sẽ tạm dừng thêm 5 giây nữa.
  • Quá trình này sẽ được lặp lại.

Giải Thích Code

Hãy xem giải thích từng dòng có trong phần comment của source code!

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.