Motor Shield#
ה-Motor Shield מפעיל שני מנועי DC מ-OpenMV Cam באמצעות H-bridge כפול מסוג TB6612FNG, עם מסדיר מתח ליניארי של 5 V מסוג NCP1117 המפעיל הן את המצלמה והן את המנועים מכניסת סוללה יחידה של 6.5–18 V.
לקבלת גיליון נתונים מלא, תמונות ופרטי הזמנה ראו את דף המוצר של Motor Shield.
עיקרים#
שני ערוצי מנוע עצמאיים עם בקרת מהירות PWM
זרם הנעה של עד 2 A לכל ערוץ
יכול גם להפעיל מנוע צעד דו־קוטבי
ניתן לערום עם Servo Shield
מערך פינים#
סימוכין פינים#
פין | תפקיד |
|---|---|
P0 | DIR B1 (כיוון מנוע B) |
P1 | DIR B0 (כיוון מנוע B) |
P2 | DIR A1 (כיוון מנוע A) |
P3 | DIR A0 (כיוון מנוע A) |
P6 | TB6612FNG STANDBY — דולק כברירת מחדל; משכו לנמוך כדי להיכנס למצב חיסכון בחשמל |
P7 | כניסת מהירות PWM עבור מנוע A |
P8 | כניסת מהירות PWM עבור מנוע B |
VBAT in | כניסת סוללה של 6.5–18 V על מסוף הברגים (מגבלות NCP1117) |
VIN out | 5 V ממסדיר ה-NCP1117 שעל הלוח (מפעיל את המצלמה) |
פס 3.3V | מפעיל את לוגיקת ה-TB6612FNG |
פס GND | הארקה משותפת |
הערה
P6 מפעיל את כניסת ה-STANDBY של ה-TB6612 כברירת מחדל. חתכו את עקבת ההלחמה בגב ה-shield כדי לנתק את P6 אם אתם מעדיפים להשתמש בפין למשהו אחר (המנהל אז נשאר מאופשר).
הערה
ה-TB6612FNG מפעיל כל מנוע דרך טבלת אמת דו־כניסות בתוספת אפשור PWM. עבור מנוע A (כש-STBY גבוה ו-PWMA בכל מחזור עבודה שאינו אפס):
(P3, P2) = (H, L)→ קדימה(P3, P2) = (L, H)→ אחורה(P3, P2) = (L, L)→ ניתוק חופשי (יציאות במצב Hi-Z)(P3, P2) = (H, H)→ בלימה (שתי היציאות נמוכות)
הפעלת PWMA לנמוך כופה בלימה קצרה ללא תלות בכניסות הכיוון — מחזור עבודה של 0 % בולם את המנוע. מנוע B פועל לפי אותה טבלה על (P1, P0) עם PWM על P8.
שימוש#
סובבו את מנוע A בין קדימה → בלימה → אחורה → ניתוק חופשי במחזור עבודה PWM קבוע:
from machine import Pin, PWM
import time
a0 = Pin("P3", Pin.OUT) # AIN1
a1 = Pin("P2", Pin.OUT) # AIN2
pwma = PWM(Pin("P7"), freq=1_000, duty_u16=40_000) # ~60%
def drive(in1, in2):
a0.value(in1)
a1.value(in2)
while True:
drive(1, 0) # forward
time.sleep(2)
drive(1, 1) # brake
time.sleep_ms(500)
drive(0, 1) # reverse
time.sleep(2)
drive(0, 0) # coast
time.sleep_ms(500)
לבקרת מהירות משתנה, החזיקו את כניסות הכיוון קבועות והעלו את PWMA בהדרגה. הלולאה שלהלן מעלה את מנוע A מניתוק חופשי עד לקדימה מלאה וחזרה מטה:
from machine import Pin, PWM
import time
Pin("P3", Pin.OUT, value=1) # AIN1=H
Pin("P2", Pin.OUT, value=0) # AIN2=L → forward direction
pwma = PWM(Pin("P7"), freq=1_000, duty_u16=0)
while True:
for duty in range(0, 65_536, 1024):
pwma.duty_u16(duty)
time.sleep_ms(10)
for duty in range(65_535, -1, -1024):
pwma.duty_u16(duty)
time.sleep_ms(10)
שני ה-H-bridges של ה-TB6612 יכולים גם להפעיל מנוע צעד דו־קוטבי בהנעת גל — הזרימו זרם לסליל אחד בכל פעם, תוך מעבר בין ארבעה שלבים. החזיקו את שני ערוצי ה-PWM בזרם ההנעה הרצוי וקראו ל-step() כדי להתקדם רצף שלם בכל כיוון:
from machine import Pin, PWM
import time
a0 = Pin("P3", Pin.OUT)
a1 = Pin("P2", Pin.OUT)
b0 = Pin("P1", Pin.OUT)
b1 = Pin("P0", Pin.OUT)
PWM(Pin("P7"), freq=1_000, duty_u16=32_768) # 50% drive on A
PWM(Pin("P8"), freq=1_000, duty_u16=32_768) # 50% drive on B
SEQUENCE = [(1, 0, 0, 0), (0, 0, 1, 0), (0, 1, 0, 0), (0, 0, 0, 1)]
def step(forward=True):
for s in SEQUENCE if forward else reversed(SEQUENCE):
a0.value(s[0])
a1.value(s[1])
b0.value(s[2])
b1.value(s[3])
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)
קו ה-STANDBY שעל הלוח דולק כברירת מחדל (המנהל מאופשר). משכו את P6 לנמוך כדי להרדים את ה-TB6612:
from machine import Pin
Pin("P6", Pin.OUT).value(0) # standby