Motor Shield

Motor Shield, bir TB6612FNG çift H-köprüsü kullanarak OpenMV Cam’den iki DC motor sürer ve hem kamerayı hem de motorları tek bir 6.5–18 V pil girişinden besleyen bir NCP1117 5 V doğrusal regülatör içerir.

Motor Shield

Tam veri sayfası, fotoğraflar ve sipariş bilgileri için Motor Shield ürün sayfasına bakın.

Öne Çıkanlar

  • PWM hız kontrolü bulunan iki bağımsız motor kanalı

  • Kanal başına 2 A’ya kadar sürüş akımı

  • İki kutuplu bir adım motorunu da sürebilir

  • Servo Shield ile istiflenir

Pin Düzeni

Motor Shield Pin Düzeni

Pin referansı

Pin

İşlev

P0

DIR B1 (motor B yönü)

P1

DIR B0 (motor B yönü)

P2

DIR A1 (motor A yönü)

P3

DIR A0 (motor A yönü)

P6

TB6612FNG STANDBY — varsayılan olarak açık; düşük güç moduna girmek için düşüğe çekin

P7

Motor A için PWM hız girişi

P8

Motor B için PWM hız girişi

VBAT girişi

Vidalı terminal üzerinde 6.5–18 V pil girişi (NCP1117 sınırları)

VIN çıkışı

Kart üzerindeki NCP1117 regülatöründen 5 V (kamerayı besler)

3.3V hattı

TB6612FNG lojiğini besler

GND hattı

Ortak toprak

Not

P6 varsayılan olarak TB6612 STANDBY girişini sürer. Pini başka bir şey için kullanmayı tercih ederseniz P6’yı ayırmak için kalkanın arkasındaki lehim izini kesin (sürücü o zaman etkin kalır).

Not

TB6612FNG, her motoru iki girişli bir doğruluk tablosu ile bir PWM etkinleştirme aracılığıyla sürer. Motor A için (STBY yüksek ve PWMA sıfır olmayan herhangi bir görev döngüsündeyken):

  • (P3, P2) = (H, L) → ileri

  • (P3, P2) = (L, H) → geri

  • (P3, P2) = (L, L) → boşa alma (çıkışlar Hi-Z)

  • (P3, P2) = (H, H) → fren (her iki çıkış da düşük)

PWMA’yı düşüğe sürmek, yön girişlerinden bağımsız olarak kısa bir fren uygular — %0’lık bir görev döngüsü motoru frenler. Motor B, P8 üzerindeki PWM ile (P1, P0) üzerinde aynı tabloyu izler.

Kullanım

Sabit bir PWM görev döngüsünde motor A’yı ileri → fren → geri → boşa alma sırasıyla döndürün:

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)

Değişken hız kontrolü için yön girişlerini sabit tutun ve PWMA’yı yükseltin. Aşağıdaki döngü, motor A’yı boşa almadan tam ileriye yükseltip tekrar düşürür:

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)

TB6612’nin iki H-köprüsü ayrıca iki kutuplu bir adım motorunu dalga sürüşüyle de sürebilir — aynı anda bir bobini enerjilendirerek dört faz boyunca yürüyün. Her iki PWM kanalını da istenen sürüş akımında tutun ve her iki yönde bir tam sırayı ilerletmek için step() çağrısını yapın:

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)

Kart üzerindeki STANDBY hattı varsayılan olarak yüksektir (sürücü etkin). TB6612’yi uyku moduna almak için P6’yı düşüğe çekin:

from machine import Pin
Pin("P6", Pin.OUT).value(0)  # standby