Driver Shield

ה-Driver Shield מפעיל שני מנועי 3 A או ארבעה מנהלי קו (line drivers) עצמאיים של 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

  • כניסה/יציאה דיגיטלית של 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 — כניסה/יציאה דיגיטלית open-drain על מסוף ההדקים

PWR in

כניסה רחבה של 6–36 V על מסוף ההדקים (סובלנית להיפוך מתח)

AIN in

כניסה אנלוגית על מסוף ההדקים

VIN out

5.4 V עד 600 mA ממסדיר המתח שעל הלוח

פס 3.3V

מספק מתח לאלקטרוניקה שעל לוח ה-shield

פס GND

הארקה משותפת

הערה

AIN מוגן מפני מתח־יתר עד ±36 V וכברירת מחדל הוא כניסת מתח של 0–5 V, המוקטנת ל-0–3.3 V ב-P6. גשרו את שאנט מצב 4–20 mA בחזית ה-shield כדי להחליף את AIN לכניסת לולאת זרם של 4–20 mA.

הערה

SYN הוא קו דיגיטלי open-drain, מורם ל-3.3 V בצד המצלמה ול-5 V בצד מסוף SYN. כברירת מחדל הוא כניסה — ה-shield מסיט את ה-0–5 V שעל SYN מטה ל-0–3.3 V ב-P10. שנו את גשר ההלחמה שעל הלוח כדי להפוך את P10 ליציאה, תוך הסטת ה-0–3.3 V שעל P10 מעלה ל-0–5 V על SYN.

הערה

כל אחד מהפינים P0, P1, P2, P6, P7, P8 ו-P10 ניתן להחזרה לשימוש שאינו קשור. P0, P2, P6, P7, P8 ו-P10 מחוברים כברירת מחדל דרך גשרי הלחמה בצד האחורי — פתחו את הגשר של כל פין שברצונכם לשחרר. P1 מנותק כברירת מחדל: גשרו את הגשר שבחזיתו כדי לנתב את DIR של O3/O4 ל-P1 במקום (ופתחו את הגשר האחורי של P2 כדי לשחרר את P2).

הערה

שני גשרי מצב בגב ה-shield — אחד לכל H-bridge — מגדירים באופן עצמאי כל זוג יציאות לאחד משלושה מצבים. לכל גשר סימוני L ו-H המראים איזה צד בוחר איזה מצב:

  • Low (ברירת מחדל) — מצב DIR/PWM: פין DIR אחד + פין PWM אחד לכל גשר.

  • High — מצב H-bridge: שני הפינים מפעילים את הגשר ישירות דרך טבלת האמת דו־הכניסות של השבב.

  • Float (ללא חיבור) — מצב עצמאי: כל פין הופך למנהל קו עצמאי המנותב ליציאה אחת.

כל 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-bridges יכולים גם להפעיל מנוע צעד דו־קוטבי — החזיקו את שני ערוצי ה-PWM בהפעלה מלאה וצעדו את פיני ה-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) → ניתוק חופשי (יציאות במצב Hi-Z)

  • (P0, P7) = (L, H) → קדימה (O1 = H, O2 = L)

  • (P0, P7) = (H, L) → אחורה (O1 = L, O2 = H)

  • (P0, P7) = (H, H) → בלימה (שתי היציאות נמוכות)

(O3/O4 פועל לפי אותה טבלה עם P1/P2 ו-P8.) הלולאה שלהלן מסובבת מנוע בין קדימה → בלימה → אחורה → ניתוק חופשי על זוג היציאות 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 להנעה יחסית — לדוגמה, (P0=0, P7=PWM) נותן קדימה/ניתוק חופשי במחזור העבודה של ה-PWM, (P0=1, P7=PWM) נותן אחורה/בלימה ב-(100 % duty). הלולאה שלהלן מעלה את מחזור העבודה וחזרה מטה כש-P0 מוחזק ב-0 (קדימה/ניתוק חופשי):

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)

מצב עצמאי

כשגשר המצב צף, כל פין הופך למנהל קו עצמאי המנותב ליציאה אחת — שימושי לסולנואידים, ממסרים, או כל עומס הדלקה/כיבוי שאינו זקוק ל-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 להנעה יחסית — למשל, להעלות ולהוריד את עוצמת כל יציאה בתורה:

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)

כניסה/יציאה אחרת

קראו את כניסת מסוף ההדקים של 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)

הגיבו לקצה יורד על קו ה-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)