Driver Shield#
ה-Driver Shield מפעיל שני מנועי 3 A או ארבעה מנהלי קו (line drivers) עצמאיים של 1.5 A ממקור מתח רחב של 6-36 V, ומעניק ל-OpenMV Cam קצה־קדמי קשיח לבקרת מנועים עם הגנה מפני היפוך מתח וקפיצות מתח.
לקבלת גיליון נתונים מלא, תמונות ופרטי הזמנה ראו את דף המוצר של Driver Shield.
עיקרים#
שני מנהלי מנוע כפולים של 3 A או ארבעה מנהלי קו של 1.5 A, 6-36 V
הגנה מפני היפוך מתח וקפיצות מתח חולפות בכניסה
כניסת ADC של 0-5 V עם הגנת מתח־יתר של ±36 V
כניסה/יציאה דיגיטלית של 0-5 V להדקי סנכרון מצלמה, מוגנת מפני קצר
מערך פינים#
סימוכין פינים#
פין | תפקיד |
|---|---|
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)