Raspberry Pi DC Motor

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

Phần cứng cần chuẩn bị

1×Raspberry Pi 5
1×L298N Motor Driver Module
1×5V DC Motor
1×(Tùy chọn) 12V DC Motor
1×Bộ nguồn 5V cho động cơ DC 5V
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ề DC Motor

DC Motor Pinout

DC Motor có hai dây, dây dương thường có màu đỏ và dây âm thường có màu đen.

dc động cơ sơ đồ chân

Cách Hoạt Động

Khi mua một động cơ DC, điều quan trọng là phải hiểu điện áp mà nó hoạt động. Ví dụ, hãy xem xét một động cơ DC 12V.

Khi bạn cấp nguồn cho động cơ DC 12V bằng nguồn điện 12V:

  • Kết nối 12V và GND lần lượt với dây dương và dây âm: động cơ DC sẽ quay với tốc độ tối đa theo chiều kim đồng hồ
  • Kết nối 12V và GND lần lượt với dây âm và dây dương: động cơ DC sẽ quay với tốc độ tối đa ngược chiều kim đồng hồ

Như đã nói trước đó, việc hoán đổi cực nguồn giữa hai dây của động cơ DC sẽ đảo chiều quay của nó. Đây là cách để điều khiển hướng quay của động cơ DC, nhưng không phải bằng cách thay đổi thủ công mà thông qua lập trình.

Nếu điện áp của nguồn cấp cho động cơ DC nhỏ hơn 12V, nó vẫn sẽ quay nhưng không đạt tốc độ tối đa. Điều này có nghĩa là bằng cách thay đổi điện áp, chúng ta có thể thay đổi tốc độ của động cơ DC. Tuy nhiên, phương pháp này thường không được sử dụng do khó khăn trong việc điều khiển điện áp của nguồn cấp. Do đó, điện áp của nguồn cấp được giữ ổn định và tốc độ của động cơ DC được điều chỉnh bằng tín hiệu PWM. Chu kỳ nhiệm vụ của PWM càng lớn, động cơ DC sẽ quay càng nhanh.

how to control dc động cơ

Cách điều khiển động cơ DC bằng Raspberry Pi

Điều khiển động cơ DC bao gồm hai yếu tố: tốc độ và hướng quay. Raspberry Pi có thể tạo ra tín hiệu PWM, nhưng tín hiệu này có điện áp và dòng điện thấp nên không thể dùng để điều khiển động cơ trực tiếp. Chúng ta cần sử dụng một driver phần cứng giữa Raspberry Pi và động cơ DC. Driver thực hiện hai nhiệm vụ:

  • Khuếch đại tín hiệu PWM từ Raspberry Pi (về dòng điện và điện áp) để điều khiển tốc độ
  • Nhận tín hiệu điều khiển từ Raspberry Pi để chuyển đổi cực tính của nguồn cấp để điều khiển hướng quay.
Raspberry Pi control dc động cơ

※ Lưu ý:

  • Hướng dẫn này có thể được sử dụng cho bất kỳ động cơ DC nào. Chúng ta sẽ sử dụng động cơ DC 12V làm ví dụ.
  • Khi điều khiển động cơ DC 5V, mặc dù chân Raspberry Pi xuất ra 5V (giống với điện áp động cơ DC), driver vẫn cần thiết giữa Raspberry Pi và động cơ DC vì chân Raspberry Pi không thể cung cấp đủ dòng điện cho động cơ DC.

Có nhiều loại chip và module có thể được sử dụng làm driver để điều khiển động cơ DC. Trong hướng dẫn này, chúng ta sẽ sử dụng module có tên là L298N.

Về L298N Driver

L298N Driver có thể được sử dụng để điều khiển động cơ DC và stepper motor. Hướng dẫn này chỉ bạn cách sử dụng nó để quản lý động cơ DC.

L298N Driver Pinout

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

L298N Driver có khả năng điều khiển hai động cơ DC độc lập đồng thời, được gọi là motor A và motor B. Driver này có tổng cộng 13 chân.

Các chân chung cho cả hai động cơ:

  • Chân VCC: Chân này cung cấp điện cho động cơ và có thể từ 5V đến 35V.
  • Chân GND: Chân này được kết nối với mass (0V) và phục vụ như một mass chung.
  • Chân 5V: Chân này cung cấp điện cho module L298N và có thể được lấy từ đầu ra 5V của Raspberry Pi.

Các chân Motor A (Channel A):

  • Chân ENA: Những chân này được sử dụng để điều chỉnh tốc độ của Motor A. Bằng cách tháo jumper và kết nối chân này với đầu vào PWM, chúng ta có thể điều khiển tốc độ của Motor A.
  • Chân IN1 & IN2: Những chân này chịu trách nhiệm điều khiển hướng quay của Motor A. Khi một trong số chúng được đặt ở HIGH và cái kia ở LOW, Motor A sẽ quay. Nếu cả hai đầu vào đều ở HIGH hoặc LOW, Motor A sẽ ngừng chuyển động.
  • Chân OUT1 & OUT2: Những chân này được kết nối với Motor A.

Các chân Motor B (Channel B):

  • Khi các đầu vào IN3 & IN4 ở HIGH hoặc LOW, Motor B sẽ quay và các chân OUT3 & OUT4 sẽ cung cấp dòng điện cho động cơ.
  • Chân ENB: có thể được sử dụng để quản lý tốc độ của Motor B. Bằng cách tháo jumper và kết nối chân này với đầu vào PWM, chúng ta có thể điều khiển tốc độ của Motor B.
  • Chân IN3 & IN4: chịu trách nhiệm điều khiển hướng quay của Motor B. Khi một trong số chúng ở HIGH và cái kia ở LOW, Motor B sẽ quay. Nếu cả hai đầu vào đều ở HIGH hoặc LOW, Motor B sẽ ngừng chuyển động.
  • Chân OUT3 & OUT4: được liên kết với Motor B. Khi các đầu vào IN3 & IN4 ở HIGH hoặc LOW, Motor B sẽ quay và các chân OUT3 & OUT4 sẽ cung cấp dòng điện cho động cơ.

L298N driver có hai nguồn cấp điện đầu vào:

  • Một cho động cơ DC (chân VCCGND) từ 5 đến 35V.
  • Một cho hoạt động nội bộ của module L298N (chân 5V và GND) với dải điện áp từ 5 đến 7V.

Tháo tất cả jumpers khỏi L298N driver để đơn giản hóa. Điều này cần thiết vì jumpers được sử dụng cho các mục đích nâng cao hoặc khác.

Chúng ta có thể quản lý hai động cơ DC độc lập đồng thời bằng cách sử dụng Raspberry Pi và L298N Driver. Để quản lý mỗi động cơ, chúng ta chỉ cần ba chân từ Raspberry Pi.

※ Lưu ý:

Phần còn lại của hướng dẫn này sẽ tập trung vào việc điều khiển một động cơ DC bằng channel A. Các bước tương tự có thể được thực hiện để điều khiển động cơ DC khác.

Cách Điều Khiển Tốc Độ Động Cơ DC qua L298N Driver

Việc điều chỉnh tốc độ của động cơ DC rất dễ dàng bằng cách tạo ra tín hiệu PWM đến chân ENA của L298N. Điều này có thể được thực hiện bằng:

  • Kết nối một chân Raspberry Pi với ENA của L298N
  • Tạo ra tín hiệu PWM đến chân ENA bằng cách sử dụng hàm pwm.ChangeDutyCycle(). L298N Driver sẽ khuếch đại tín hiệu PWM đến động cơ DC.
pwm.ChangeDutyCycle(speed) # speed là giá trị từ 0 đến 100

Tốc độ là một dải từ 0 đến 100. Khi tốc độ là 0, động cơ sẽ không chuyển động. Khi tốc độ là 100, động cơ sẽ quay ở tốc độ cao nhất.

Cách Điều Khiển Hướng Quay Động Cơ DC qua L298N Driver

Hướng quay của động cơ có thể được quản lý bằng cách cấp logic HIGH/LOW cho các chân IN1 và IN2. Bảng dưới đây cho thấy cách điều khiển hướng quay trong cả hai channel.

Chân IN1 Chân IN2 Hướng Quay
LOW LOW Motor A dừng
HIGH HIGH Motor A dừng
HIGH LOW Motor A quay theo chiều kim đồng hồ
LOW HIGH Motor A quay ngược chiều kim đồng hồ

Tương ứng:

  • Raspberry Pi để điều khiển motor A theo chiều kim đồng hồ.
GPIO.output(IN1_PIN, GPIO.HIGH) GPIO.output(IN2_PIN, GPIO.LOW)
  • Raspberry Pi để điều khiển motor A theo chiều ngược kim đồng hồ.
GPIO.output(IN1_PIN, GPIO.LOW) GPIO.output(IN2_PIN, GPIO.HIGH)

※ Lưu ý:

Hướng quay của động cơ có thể được đảo ngược bằng cách kết nối các chân OUT1 và OUT2 với hai chân của động cơ DC theo cách ngược lại. Để làm điều này, cần thiết phải hoán đổi các chân OUT1 và OUT2 hoặc thay đổi tín hiệu điều khiển trên các chân IN1 và IN2 trong code.

Cách Dừng Động Cơ DC

Có hai phương pháp để dừng động cơ DC:

  • Giảm tốc độ xuống 0
pwm.ChangeDutyCycle(0)
  • Đặt cả hai chân IN1 và IN2 ở cùng giá trị, HIGH hoặc LOW.
GPIO.output(IN1_PIN, GPIO.LOW) GPIO.output(IN2_PIN, GPIO.LOW)
  • Hoặc
GPIO.output(IN1_PIN, GPIO.HIGH) GPIO.output(IN2_PIN, GPIO.HIGH)

Cách điều khiển động cơ DC bằng L298N driver.

Sơ đồ đấu dây

Tháo tất cả ba jumpers khỏi module L298N trước khi kết nối.

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

This image is created using Fritzing. Click to enlarge image

Raspberry Pi Code

Chúng ta sẽ viết code Python chạy trên Raspberry Pi để thực hiện những việc sau:

  • Tăng tốc độ của động cơ DC
  • Thay đổi hướng quay
  • Giảm tốc độ của động cơ DC
  • Dừng động cơ

Hướng dẫn từng bước

  • Tháo tất cả ba jumpers khỏi module L298N.
  • Đảm bảo bạn đã cài đặt Raspbian hoặc hệ điều hành tương thích khác với Raspberry Pi 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 sẵn 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 một file script Python dc_motor.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-dc-motor import RPi.GPIO as GPIO import time # Constants ENA_PIN = 25 # GPIO pin connected to the EN1 pin L298N IN1_PIN = 8 # GPIO pin connected to the IN1 pin L298N IN2_PIN = 7 # GPIO pin connected to the IN2 pin L298N # Setup GPIO.setmode(GPIO.BCM) GPIO.setup(ENA_PIN, GPIO.OUT) GPIO.setup(IN1_PIN, GPIO.OUT) GPIO.setup(IN2_PIN, GPIO.OUT) # Create PWM object pwm = GPIO.PWM(ENA_PIN, 100) # 100 Hz frequency # Main loop try: while True: # Motor A spins clockwise GPIO.output(IN1_PIN, GPIO.HIGH) GPIO.output(IN2_PIN, GPIO.LOW) # Increase speed gradually for speed in range(0, 101): pwm.ChangeDutyCycle(speed) time.sleep(0.01) time.sleep(1) # Rotate at maximum speed for 1 second in clockwise direction # Change direction to anti-clockwise GPIO.output(IN1_PIN, GPIO.LOW) GPIO.output(IN2_PIN, GPIO.HIGH) time.sleep(1) # Rotate at maximum speed for 1 second in anti-clockwise direction # Decrease speed gradually for speed in range(100, -1, -1): pwm.ChangeDutyCycle(speed) time.sleep(0.01) time.sleep(1) # Stop motor for 1 second except KeyboardInterrupt: pass finally: # Stop PWM and cleanup GPIO on program exit pwm.stop() GPIO.cleanup()
  • Lưu file và chạy Python script bằng cách thực hiện lệnh sau trong terminal:
python3 dc_motor.py

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

Bạn sẽ quan sát thấy:

  • Động cơ DC sẽ tăng tốc, sau đó quay với tốc độ tối đa trong 1 giây.
  • Hướng quay của động cơ DC sẽ được thay đổi.
  • Động cơ DC sẽ quay với tốc độ tối đa theo hướng ngược lại trong 1 giây.
  • Động cơ DC sẽ giảm tốc.
  • Động cơ DC sẽ đứng yên trong 1 giây.
  • Quá trình này sẽ được lặp lại liên tục.

※ Lưu ý:

Hướng dẫn này chỉ bạn cách điều chỉnh tốc độ của động cơ DC so với tốc độ tối đa của nó. Để kiểm soát tốc độ tuyệt đối (vòng quay trên giây), chúng ta cần sử dụng bộ điều khiển PID và encoder. Việc kiểm soát tốc độ tuyệt đối của động cơ DC sẽ được thảo luận trong một hướng dẫn khác.

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.