درع المحرك (Motor Shield)¶
يشغّل درع المحرك (Motor Shield) محركَي تيار مستمر من OpenMV Cam باستخدام جسر H مزدوج من نوع TB6612FNG، مع منظّم خطي 5 فولت من نوع NCP1117 يغذّي كلاً من الكاميرا والمحركات من دخل بطارية واحد بجهد 6.5–18 فولت.
للاطلاع على ورقة البيانات الكاملة والصور ومعلومات الطلب، راجع صفحة منتج درع المحرك.
أبرز الميزات¶
قناتا محرك مستقلتان مع التحكم في السرعة عبر PWM
تيار تشغيل حتى 2 أمبير لكل قناة
يمكنه أيضاً تشغيل محرك خطوي ثنائي القطبية
يتكدّس مع درع المؤازر (Servo Shield)
مخطط الدبابيس¶
مرجع الدبابيس¶
الدبوس |
الوظيفة |
|---|---|
P0 |
DIR B1 (اتجاه المحرك B) |
P1 |
DIR B0 (اتجاه المحرك B) |
P2 |
DIR A1 (اتجاه المحرك A) |
P3 |
DIR A0 (اتجاه المحرك A) |
P6 |
STANDBY في TB6612FNG — مفعّل افتراضياً؛ اسحبه إلى المنخفض للدخول في وضع الطاقة المنخفضة |
P7 |
دخل سرعة PWM للمحرك A |
P8 |
دخل سرعة PWM للمحرك B |
دخل VBAT |
دخل بطارية 6.5–18 فولت على الطرف اللولبي (حدود NCP1117) |
خرج VIN |
5 فولت من منظّم NCP1117 المدمج (يغذّي الكاميرا) |
خط 3.3 فولت |
يغذّي منطق TB6612FNG |
خط GND |
أرضي مشترك |
ملاحظة
يشغّل P6 دخل STANDBY في TB6612 افتراضياً. اقطع أثر اللحام على ظهر الدرع لفصل 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 في 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