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