Driver Shield

Driver Shield ขับมอเตอร์ขนาด 3 A จำนวนสองตัว หรือตัวขับสาย 1.5 A อิสระจำนวนสี่ตัวจากแหล่งจ่ายแรงดัน 6-36 V ที่กว้าง ทำให้ OpenMV Cam มีส่วนหน้าควบคุมมอเตอร์ที่แข็งแกร่งพร้อมการป้องกันแรงดันย้อนกลับและการพุ่งชั่วคราว

Driver Shield

ดูข้อมูลทางเทคนิคฉบับเต็ม รูปภาพ และการสั่งซื้อได้ที่ หน้าผลิตภัณฑ์ Driver Shield

คุณสมบัติเด่น

  • ตัวขับมอเตอร์คู่ 3 A หรือตัวขับสาย 1.5 A แบบสี่ช่อง 6-36 V

  • การป้องกันแรงดันย้อนกลับและการกระชากชั่วคราวที่อินพุต

  • อินพุต ADC 0-5 V พร้อมการป้องกันแรงดันเกิน ±36 V

  • I/O ดิจิทัล 0-5 V สำหรับทริกเกอร์ซิงค์กล้อง มีการป้องกันวงจรสั้น

การจัดเรียงพิน

Driver Shield Pinout

ข้อมูลอ้างอิงพิน

พิน

ฟังก์ชัน

P0

DIR สำหรับคู่เอาต์พุต O1/O2

P1

DIR สำหรับคู่เอาต์พุต O3/O4 (ทางเลือก)

P2

DIR สำหรับคู่เอาต์พุต O3/O4 (ค่าเริ่มต้น)

P6

การอ่านค่า AIN ที่ปรับระดับแล้ว (0–3.3 V บน P6)

P7

PWM สำหรับคู่เอาต์พุต O1/O2

P8

PWM สำหรับคู่เอาต์พุต O3/O4

P10

SYN — I/O ดิจิทัล open-drain บนบล็อกขั้วต่อ

PWR in

อินพุตแรงดัน 6–36 V บนบล็อกขั้วต่อ (ทนต่อแรงดันย้อนกลับ)

AIN in

อินพุตอนาล็อกบนบล็อกขั้วต่อ

VIN out

5.4 V ที่กระแสสูงสุด 600 mA จากตัวควบคุมแรงดันบนบอร์ด

3.3V rail

จ่ายไฟให้กับอิเล็กทรอนิกส์บนบอร์ดของชีลด์

GND rail

กราวด์ร่วม

Note

AIN ได้รับการป้องกันแรงดันเกินถึง ±36 V และค่าเริ่มต้นเป็นอินพุตแรงดัน 0–5 V ลดขนาดลงเป็น 0–3.3 V บน P6 เชื่อม shunt โหมด 4–20 mA ที่ด้านหน้าของชีลด์เพื่อสลับ AIN เป็นอินพุตลูปกระแส 4–20 mA

Note

SYN เป็นสายดิจิทัล open-drain ดึงขึ้นไปที่ 3.3 V ฝั่งกล้องและ 5 V ฝั่งขั้วต่อ SYN โดยค่าเริ่มต้นเป็นอินพุต — ชีลด์ปรับระดับ 0–5 V บน SYN ลงเป็น 0–3.3 V บน P10 เปลี่ยนจัมเปอร์บัดกรีบนบอร์ดเพื่อสลับ P10 เป็นเอาต์พุต โดยปรับระดับ 0–3.3 V บน P10 ขึ้นเป็น 0–5 V บน SYN

Note

แต่ละพินในกลุ่ม P0, P1, P2, P6, P7, P8 และ P10 สามารถนำกลับมาใช้งานอื่นได้ P0, P2, P6, P7, P8 และ P10 เชื่อมต่อโดยค่าเริ่มต้นผ่านจัมเปอร์บัดกรีด้านหลัง — เปิดจัมเปอร์บนพินใดก็ตามที่ต้องการใช้งานอิสระ P1 ค่าเริ่มต้นไม่ได้เชื่อมต่อ: เชื่อมจัมเปอร์ด้านหน้าเพื่อเส้นทาง DIR ของ O3/O4 ไปยัง P1 แทน (และเปิดจัมเปอร์ด้านหลังของ P2 เพื่อปล่อย P2)

Note

จัมเปอร์โหมดสองตัวที่ด้านหลังของชีลด์ — หนึ่งตัวต่อ H-bridge — ตั้งค่าคู่เอาต์พุตแต่ละคู่อิสระเป็นหนึ่งในสามโหมด จัมเปอร์แต่ละตัวมีเครื่องหมาย L และ H เพื่อแสดงว่าฝั่งใดเลือกสถานะใด:

  • Low (ค่าเริ่มต้น) — โหมด DIR/PWM: พิน DIR หนึ่งตัว + พิน PWM หนึ่งตัวต่อบริดจ์

  • High — โหมด H-bridge: ทั้งสองพินขับบริดจ์โดยตรงผ่านตารางความจริงสองอินพุตของชิป

  • Float (ไม่เชื่อมต่อ) — โหมดอิสระ: แต่ละพินกลายเป็นตัวขับสายแบบ stand-alone เชื่อมไปยังเอาต์พุตหนึ่ง

DRV8876 แต่ละตัวถูกจำกัดกระแสที่ 3 A รวมต่อชิป — คือ 3 A ผ่านบริดจ์เดียว (โหมด DIR/PWM หรือ H-bridge) หรือ 1.5 A ต่อเอาต์พุตแยกกันระหว่างสองเอาต์พุต (โหมดอิสระ)

การใช้งาน

โหมด DIR/PWM (ค่าเริ่มต้น)

ขับมอเตอร์ DC แบบแปรงถ่านบนคู่เอาต์พุต O1/O2 — ตั้งทิศทางบน P0 และส่งสัญญาณ PWM ความเร็วบน P7 ลูปด้านล่างนี้เพิ่มดิวตี้ไซเคิลไปจนสุดความเร็วแล้วลดลง จากนั้นสลับทิศทางและทำซ้ำ:

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)

H-bridge ทั้งสองตัวยังสามารถขับสเต็ปเปอร์แบบไบโพลาร์ได้ด้วย — คง PWM ทั้งสองช่องที่ drive เต็ม และก้าวพิน DIR ผ่านลำดับสี่เฟส:

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)

โหมด H-bridge

เมื่อตั้งจัมเปอร์โหมดเป็น high ทั้งสองพินบริดจ์จะขับ H-bridge โดยตรง สำหรับ O1/O2 ตารางความจริงคือ:

  • (P0, P7) = (L, L) → coast (เอาต์พุต Hi-Z)

  • (P0, P7) = (L, H) → ไปข้างหน้า (O1 = H, O2 = L)

  • (P0, P7) = (H, L) → ถอยหลัง (O1 = L, O2 = H)

  • (P0, P7) = (H, H) → เบรก (เอาต์พุตทั้งคู่ low)

(O3/O4 ใช้ตารางเดียวกันกับ P1/P2 และ P8) ลูปด้านล่างนี้หมุนมอเตอร์ผ่าน ไปข้างหน้า → เบรก → ถอยหลัง → coast บนคู่เอาต์พุต 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)

พินใดก็ตามสามารถเปลี่ยนเป็นช่อง machine.PWM สำหรับ drive แบบสัดส่วน — เช่น (P0=0, P7=PWM) ให้ไปข้างหน้า/coast ที่ดิวตี้ PWM, (P0=1, P7=PWM) ให้ถอยหลัง/เบรกที่ (100 % duty) ลูปด้านล่างนี้เพิ่มดิวตี้ขึ้นและลงโดย P0 คงที่ที่ 0 (ไปข้างหน้า/coast):

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)

โหมดอิสระ

เมื่อจัมเปอร์โหมดลอยตัว แต่ละพินจะกลายเป็นตัวขับสายแบบ stand-alone เชื่อมไปยังเอาต์พุตหนึ่ง — มีประโยชน์สำหรับโซลินอยด์ รีเลย์ หรือโหลดเปิด/ปิดใดๆ ที่ไม่ต้องการ H-bridge การแมปคือ P7 → O1, P0 → O2, P8 → O3 และ P1 (หรือ 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)

พินใดก็ตามในสี่ตัวสามารถ PWM ผ่าน machine.PWM สำหรับ drive แบบสัดส่วน — ตัวอย่างเช่น ค่อยๆ เพิ่มและลดแต่ละเอาต์พุตตามลำดับ:

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 อื่นๆ

อ่านอินพุตจากบล็อกขั้วต่อ AIN ผ่านพิน P6 ที่ปรับระดับแล้ว:

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)

ตอบสนองต่อ falling edge บนสาย SYN — ตัวอย่างเช่น เพื่อซิงค์กล้องกับอุปกรณ์อื่นที่ดึง SYN ต่ำ:

from machine import Pin

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

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