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)