Driver Shield

Driver Shield điều khiển hai động cơ 3 A hoặc bốn bộ kéo đường 1,5 A độc lập từ nguồn cung cấp rộng 6-36 V, cung cấp cho OpenMV Cam giao diện điều khiển động cơ bền bỉ với bảo vệ ngược điện áp và quá áp thoáng qua.

Driver Shield

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

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

  • Driver động cơ kép 3 A HOẶC driver đường đơn 1,5 A×4, 6-36 V

  • Bảo vệ ngược điện áp và quá áp thoáng qua ở đầu vào

  • Đầu vào ADC 0-5 V với bảo vệ quá điện áp ±36 V

  • I/O số 0-5 V cho tín hiệu đồng bộ camera, bảo vệ ngắn mạch

Sơ đồ chân

Driver Shield Pinout

Tham chiếu chân (pin)

Chân (pin)

Chức năng

P0

DIR cho cặp đầu ra O1/O2

P1

DIR cho cặp đầu ra O3/O4 (thay thế)

P2

DIR cho cặp đầu ra O3/O4 (mặc định)

P6

Đọc lại AIN đã dịch mức (0–3,3 V trên P6)

P7

PWM cho cặp đầu ra O1/O2

P8

PWM cho cặp đầu ra O3/O4

P10

SYN — I/O số cực mở trên khối đầu cuối

PWR in

Đầu vào rộng 6–36 V trên khối đầu cuối (chịu ngược điện áp)

AIN in

Đầu vào tương tự trên khối đầu cuối

VIN out

5,4 V ở tối đa 600 mA từ bộ điều áp tích hợp

3.3V rail

Cấp nguồn cho điện tử tích hợp của shield

GND rail

Đất chung

Ghi chú

AIN được bảo vệ quá điện áp đến ±36 V và mặc định là đầu vào điện áp 0–5 V, được chia xuống 0–3,3 V trên P6. Cầu shunt chế độ 4–20 mA ở mặt trước của shield để chuyển AIN sang đầu vào vòng dòng 4–20 mA.

Ghi chú

SYN là đường số cực mở, được kéo lên 3,3 V ở phía camera và 5 V ở phía đầu cuối SYN. Mặc định nó là đầu vào — shield dịch mức 0–5 V trên SYN xuống 0–3,3 V trên P10. Thay đổi jumper hàn trên board để lật P10 thành đầu ra, dịch mức 0–3,3 V trên P10 lên 0–5 V trên SYN.

Ghi chú

Mỗi chân P0, P1, P2, P6, P7, P8 và P10 có thể được sử dụng lại cho mục đích khác. P0, P2, P6, P7, P8 và P10 được kết nối theo mặc định thông qua jumper hàn ở mặt sau — mở jumper của bất kỳ chân nào bạn muốn giải phóng. P1 mặc định bị ngắt kết nối: cầu jumper ở mặt trước của nó để điều hướng DIR cho O3/O4 đến P1 (và mở jumper mặt sau của P2 để giải phóng P2).

Ghi chú

Hai jumper chế độ ở mặt sau của shield — một cho mỗi H-bridge — độc lập đặt mỗi cặp đầu ra vào một trong ba chế độ. Mỗi jumper có ký hiệu L và H để cho biết bên nào chọn trạng thái nào:

  • Thấp (mặc định) — chế độ DIR/PWM: một chân DIR + một chân PWM cho mỗi bridge.

  • Cao — chế độ H-bridge: cả hai chân điều khiển trực tiếp bridge thông qua bảng sự thật hai đầu vào của chip.

  • Float (không kết nối) — chế độ độc lập: mỗi chân trở thành driver đường độc lập được điều hướng đến một đầu ra.

Mỗi DRV8876 được giới hạn dòng ở mức 3 A tổng mỗi chip — đó là 3 A qua một bridge (chế độ DIR/PWM hoặc H-bridge) hoặc 1,5 A mỗi đầu ra chia đều cho hai đầu ra (chế độ độc lập).

Sử dụng

Chế độ DIR/PWM (mặc định)

Điều khiển động cơ DC có chổi than trên cặp đầu ra O1/O2 — đặt hướng trên P0 và áp tín hiệu tốc độ PWM trên P7. Vòng lặp bên dưới tăng dần chu kỳ nhiệm vụ lên tốc độ tối đa và trở lại, sau đó đảo hướng và lặp lại:

from machine import Pin, PWM
import time

direction = Pin("P0", Pin.OUT)
speed = PWM(Pin("P7"), freq=20_000, duty_u16=0)


def ramp(target):
    for duty in range(0, target, 1024):
        speed.duty_u16(duty)
        time.sleep_ms(10)
    for duty in range(target, -1, -1024):
        speed.duty_u16(duty)
        time.sleep_ms(10)


while True:
    direction.value(1)  # forward
    ramp(65_535)
    direction.value(0)  # reverse
    ramp(65_535)

Hai H-bridge cũng có thể điều khiển stepper lưỡng cực — giữ cả hai kênh PWM ở mức dẫn đầy đủ và bước các chân DIR qua trình tự bốn pha:

from machine import Pin, PWM
import time

dir12 = Pin("P0", Pin.OUT)
dir34 = Pin("P2", Pin.OUT)
PWM(Pin("P7"), freq=20_000, duty_u16=65_535)  # full drive on O1/O2
PWM(Pin("P8"), freq=20_000, duty_u16=65_535)  # full drive on O3/O4

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


def step(forward=True):
    for a, b in SEQUENCE if forward else reversed(SEQUENCE):
        dir12.value(a)
        dir34.value(b)
        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)

Chế độ H-bridge

Khi jumper chế độ được đặt ở mức cao, cả hai chân bridge điều khiển H-bridge trực tiếp. Với O1/O2, bảng sự thật là:

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

  • (P0, P7) = (L, H) → tiến (O1 = H, O2 = L)

  • (P0, P7) = (H, L) → lùi (O1 = L, O2 = H)

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

(O3/O4 theo cùng bảng với P1/P2 và P8.) Vòng lặp bên dưới chu kỳ hóa một động cơ qua tiến → hãm → lùi → trôi tự do trên cặp đầu ra O1/O2:

from machine import Pin
import time

p0 = Pin("P0", Pin.OUT)
p7 = Pin("P7", Pin.OUT)


def drive(a, b):
    p0.value(a)
    p7.value(b)


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

Cả hai chân đều có thể được thay bằng kênh machine.PWM để điều khiển tỷ lệ — ví dụ: (P0=0, P7=PWM) cho tiến/trôi tự do theo chu kỳ nhiệm vụ PWM, (P0=1, P7=PWM) cho lùi/hãm ở (100 % duty). Vòng lặp bên dưới tăng và giảm chu kỳ nhiệm vụ với P0 giữ ở 0 (tiến/trôi tự do):

from machine import Pin, PWM
import time

p0 = Pin("P0", Pin.OUT, value=0)
p7 = PWM(Pin("P7"), freq=20_000, duty_u16=0)

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

Chế độ độc lập

Khi jumper chế độ float, mỗi chân trở thành driver đường độc lập được điều hướng đến một đầu ra — hữu ích cho solenoid, relay hoặc bất kỳ tải bật/tắt nào không cần H-bridge. Ánh xạ là P7 → O1, P0 → O2, P8 → O3 và P1 (hoặc P2) → O4:

from machine import Pin
import time

outputs = [
    Pin("P7", Pin.OUT),  # O1
    Pin("P0", Pin.OUT),  # O2
    Pin("P8", Pin.OUT),  # O3
    Pin("P2", Pin.OUT),  # O4
]

while True:
    for o in outputs:    # walk a single high pulse across O1–O4
        o.value(1)
        time.sleep_ms(200)
        o.value(0)

Bất kỳ chân nào trong bốn chân cũng có thể được PWM thông qua machine.PWM để điều khiển tỷ lệ — ví dụ: tăng và giảm từng đầu ra theo lượt:

from machine import Pin, PWM
import time

outputs = [
    PWM(Pin("P7"), freq=1_000, duty_u16=0),  # O1
    PWM(Pin("P0"), freq=1_000, duty_u16=0),  # O2
    PWM(Pin("P8"), freq=1_000, duty_u16=0),  # O3
    PWM(Pin("P2"), freq=1_000, duty_u16=0),  # O4
]

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

I/O khác

Đọc đầu vào khối đầu cuối AIN qua chân P6 đã được dịch mức:

from machine import ADC
import time

ain = ADC("P6")

while True:
    v = ain.read_u16() * 3.3 / 65535
    print("AIN:", v * (5.0 / 3.3), "V")
    time.sleep_ms(100)

Phản ứng với cạnh xuống trên đường SYN — ví dụ: để đồng bộ camera với thiết bị khác kéo SYN xuống thấp:

from machine import Pin

def on_sync(pin):
    print("SYN falling edge")

syn = Pin("P10", Pin.IN)
syn.irq(on_sync, Pin.IRQ_FALLING)