درع المحرك (Motor Shield)

يشغّل درع المحرك (Motor Shield) محركَي تيار مستمر من OpenMV Cam باستخدام جسر H مزدوج من نوع TB6612FNG، مع منظّم خطي 5 فولت من نوع NCP1117 يغذّي كلاً من الكاميرا والمحركات من دخل بطارية واحد بجهد 6.5–18 فولت.

Motor Shield

للاطلاع على ورقة البيانات الكاملة والصور ومعلومات الطلب، راجع صفحة منتج درع المحرك.

أبرز الميزات

  • قناتا محرك مستقلتان مع التحكم في السرعة عبر PWM

  • تيار تشغيل حتى 2 أمبير لكل قناة

  • يمكنه أيضاً تشغيل محرك خطوي ثنائي القطبية

  • يتكدّس مع درع المؤازر (Servo Shield)

مخطط الدبابيس

Motor Shield Pinout

مرجع الدبابيس

الدبوس

الوظيفة

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