Motor Shield

Motor Shield điều khiển hai động cơ DC từ OpenMV Cam sử dụng H-bridge kép TB6612FNG, với bộ điều áp tuyến tính NCP1117 5 V cấp nguồn cho cả camera và động cơ từ một đầu vào pin 6,5–18 V duy nhất.

Motor Shield

Để xem datasheet đầy đủ, hình ảnh và đặt hàng, hãy truy cập trang sản phẩm Motor Shield.

Tính năng nổi bật

  • Hai kênh động cơ độc lập với điều khiển tốc độ PWM

  • Dòng điều khiển tối đa 2 A mỗi kênh

  • Có thể điều khiển động cơ bước lưỡng cực

  • Ghép được với Servo Shield

Sơ đồ chân

Motor Shield Pinout

Tham chiếu chân (pin)

Chân (pin)

Chức năng

P0

DIR B1 (hướng động cơ B)

P1

DIR B0 (hướng động cơ B)

P2

DIR A1 (hướng động cơ A)

P3

DIR A0 (hướng động cơ A)

P6

TB6612FNG STANDBY — mặc định bật; kéo thấp để vào chế độ tiết kiệm điện

P7

Đầu vào tốc độ PWM cho động cơ A

P8

Đầu vào tốc độ PWM cho động cơ B

VBAT in

Đầu vào pin 6,5–18 V trên đầu vít (giới hạn NCP1117)

VIN out

5 V từ bộ điều áp NCP1117 tích hợp (cấp nguồn cho camera)

3.3V rail

Cấp nguồn cho logic TB6612FNG

GND rail

Đất chung

Ghi chú

P6 điều khiển đầu vào STANDBY của TB6612 theo mặc định. Cắt dây hàn ở mặt sau của shield để ngắt kết nối P6 nếu bạn muốn dùng chân này cho mục đích khác (khi đó driver luôn được kích hoạt).

Ghi chú

TB6612FNG điều khiển mỗi động cơ thông qua bảng sự thật hai đầu vào cùng với một bộ kích hoạt PWM. Đối với động cơ A (với STBY cao và PWMA ở bất kỳ chu kỳ nhiệm vụ khác không nào):

  • (P3, P2) = (H, L) → tiến

  • (P3, P2) = (L, H) → lùi

  • (P3, P2) = (L, L) → trôi tự do (đầu ra Hi-Z)

  • (P3, P2) = (H, H) → hãm (cả hai đầu ra ở mức thấp)

Đặt PWMA thấp buộc hãm ngắn bất kể đầu vào hướng — chu kỳ nhiệm vụ 0% hãm động cơ. Động cơ B theo cùng bảng trên (P1, P0) với PWM trên P8.

Sử dụng

Chu kỳ hóa động cơ A qua tiến → hãm → lùi → trôi tự do ở chu kỳ nhiệm vụ PWM cố định:

from machine import Pin, PWM
import time

a0 = Pin("P3", Pin.OUT)  # AIN1
a1 = Pin("P2", Pin.OUT)  # AIN2
pwma = PWM(Pin("P7"), freq=1_000, duty_u16=40_000)  # ~60%


def drive(in1, in2):
    a0.value(in1)
    a1.value(in2)


while True:
    drive(1, 0)         # forward
    time.sleep(2)
    drive(1, 1)         # brake
    time.sleep_ms(500)
    drive(0, 1)         # reverse
    time.sleep(2)
    drive(0, 0)         # coast
    time.sleep_ms(500)

Để điều khiển tốc độ biến đổi, giữ các đầu vào hướng không đổi và tăng dần PWMA. Vòng lặp bên dưới tăng dần động cơ A từ trôi tự do lên tốc độ tiến tối đa và trở lại:

from machine import Pin, PWM
import time

Pin("P3", Pin.OUT, value=1)  # AIN1=H
Pin("P2", Pin.OUT, value=0)  # AIN2=L → forward direction
pwma = PWM(Pin("P7"), freq=1_000, duty_u16=0)

while True:
    for duty in range(0, 65_536, 1024):
        pwma.duty_u16(duty)
        time.sleep_ms(10)
    for duty in range(65_535, -1, -1024):
        pwma.duty_u16(duty)
        time.sleep_ms(10)

Hai H-bridge của TB6612 cũng có thể điều khiển stepper lưỡng cực theo kiểu kích sóng — kích từng cuộn một, đi qua bốn pha. Giữ cả hai kênh PWM ở dòng điều khiển mong muốn và gọi step() để tiến một chuỗi đầy đủ theo một trong hai hướng:

from machine import Pin, PWM
import time

a0 = Pin("P3", Pin.OUT)
a1 = Pin("P2", Pin.OUT)
b0 = Pin("P1", Pin.OUT)
b1 = Pin("P0", Pin.OUT)
PWM(Pin("P7"), freq=1_000, duty_u16=32_768)  # 50% drive on A
PWM(Pin("P8"), freq=1_000, duty_u16=32_768)  # 50% drive on B

SEQUENCE = [(1, 0, 0, 0), (0, 0, 1, 0), (0, 1, 0, 0), (0, 0, 0, 1)]


def step(forward=True):
    for s in SEQUENCE if forward else reversed(SEQUENCE):
        a0.value(s[0])
        a1.value(s[1])
        b0.value(s[2])
        b1.value(s[3])
        time.sleep_ms(5)


while True:
    for _ in range(50):  # ~1 revolution forward (200 phases)
        step()
    for _ in range(50):  # ~1 revolution backward
        step(forward=False)

Đường STANDBY tích hợp mặc định ở mức cao (driver được kích hoạt). Kéo P6 thấp để đưa TB6612 vào chế độ ngủ:

from machine import Pin
Pin("P6", Pin.OUT).value(0)  # standby