Driver Shield

Driver Shield, geniş bir 6-36 V besleme aralığında iki adet 3 A motoru veya dört adet bağımsız 1.5 A hat sürücüsünü çalıştırır ve OpenMV Cam’e ters gerilim ve ani akım koruması bulunan sağlam bir motor kontrol ön ucu kazandırır.

Driver Shield

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

Öne Çıkanlar

  • Çift 3 A motor sürücüsü VEYA dört adet 1.5 A hat sürücüsü, 6-36 V

  • Girişte ters gerilim ve geçici ani akım koruması

  • ±36 V aşırı gerilim korumalı 0-5 V ADC girişi

  • Kamera senkronizasyon tetikleyicileri için kısa devre korumalı 0-5 V dijital G/Ç

Pin Düzeni

Driver Shield Pin Düzeni

Pin referansı

Pin

İşlev

P0

O1/O2 çıkış çifti için DIR

P1

O3/O4 çıkış çifti için DIR (alternatif)

P2

O3/O4 çıkış çifti için DIR (varsayılan)

P6

Seviye dönüştürülmüş AIN geri okuması (P6 üzerinde 0–3.3 V)

P7

O1/O2 çıkış çifti için PWM

P8

O3/O4 çıkış çifti için PWM

P10

SYN — terminal bloğu üzerinde açık drenajlı dijital G/Ç

PWR girişi

Terminal bloğu üzerinde 6–36 V geniş giriş (ters gerilime dayanıklı)

AIN girişi

Terminal bloğu üzerinde analog giriş

VIN çıkışı

Kart üzerindeki regülatörden 600 mA’ya kadar 5.4 V

3.3V hattı

Kalkanın kart üzerindeki elektroniğini besler

GND hattı

Ortak toprak

Not

AIN, ±36 V’a kadar aşırı gerilim korumalıdır ve varsayılan olarak 0–5 V gerilim girişi olup P6 üzerinde 0–3.3 V’a ölçeklenir. AIN’i 4–20 mA akım döngüsü girişine geçirmek için kalkanın ön yüzündeki 4–20 mA mod şönt köprüsünü bağlayın.

Not

SYN açık drenajlı bir dijital hattır; kamera tarafında 3.3 V’a, SYN terminal tarafında ise 5 V’a çekilir. Varsayılan olarak bir giriştir — kalkan, SYN üzerindeki 0–5 V’u P10 üzerinde 0–3.3 V’a seviye dönüştürür. P10’u bir çıkışa çevirmek için kart üzerindeki lehim atlatıcısını değiştirin; bu, P10 üzerindeki 0–3.3 V’u SYN üzerinde 0–5 V’a seviye yükseltir.

Not

P0, P1, P2, P6, P7, P8 ve P10’un her biri ilgisiz kullanımlar için geri alınabilir. P0, P2, P6, P7, P8 ve P10 varsayılan olarak arka yüzdeki lehim atlatıcıları aracılığıyla bağlıdır — serbest bırakmak istediğiniz herhangi bir pindeki atlatıcıyı açın. P1 varsayılan olarak bağlı değildir: O3/O4 için DIR’i bunun yerine P1’e yönlendirmek için ön yüzdeki atlatıcısını köprüleyin (ve P2’yi serbest bırakmak için P2’nin arka yüzdeki atlatıcısını açın).

Not

Kalkanın arkasındaki iki mod atlatıcısı — H-köprüsü başına bir tane — her çıkış çiftini üç moddan birine bağımsız olarak ayarlar. Her atlatıcıda hangi tarafın hangi durumu seçtiğini gösteren L ve H işaretleri bulunur:

  • Düşük (varsayılan) — DIR/PWM modu: köprü başına bir DIR pini + bir PWM pini.

  • Yüksek — H-köprüsü modu: her iki pin de yongaya ait iki girişli doğruluk tablosu aracılığıyla köprüyü doğrudan sürer.

  • Yüzer (bağlantı yok) — bağımsız mod: her pin, bir çıkışa yönlendirilen bağımsız bir hat sürücüsü haline gelir.

Her DRV8876, yonga başına toplam 3 A ile akım sınırlıdır — bu, bir köprü üzerinden (DIR/PWM veya H-köprüsü modunda) 3 A veya iki çıkış arasında bölünmüş çıkış başına 1.5 A (bağımsız mod) anlamına gelir.

Kullanım

DIR/PWM modu (varsayılan)

O1/O2 çıkış çifti üzerinde fırçalı bir DC motoru sürün — P0 üzerinde yönü ayarlayın ve P7 üzerinde bir PWM hız sinyali uygulayın. Aşağıdaki döngü, görev döngüsünü tam hıza yükseltip tekrar düşürür, ardından yönü değiştirip tekrarlar:

from machine import Pin, PWM
import time

direction = Pin("P0", Pin.OUT)
speed = PWM(Pin("P7"), freq=20_000, duty_u16=0)


def ramp(target):
    for duty in range(0, target, 1024):
        speed.duty_u16(duty)
        time.sleep_ms(10)
    for duty in range(target, -1, -1024):
        speed.duty_u16(duty)
        time.sleep_ms(10)


while True:
    direction.value(1)  # forward
    ramp(65_535)
    direction.value(0)  # reverse
    ramp(65_535)

İki H-köprüsü ayrıca iki kutuplu bir adım motorunu da sürebilir — her iki PWM kanalını da tam sürüşte tutun ve DIR pinlerini dört fazlı sıra boyunca adımlayın:

from machine import Pin, PWM
import time

dir12 = Pin("P0", Pin.OUT)
dir34 = Pin("P2", Pin.OUT)
PWM(Pin("P7"), freq=20_000, duty_u16=65_535)  # full drive on O1/O2
PWM(Pin("P8"), freq=20_000, duty_u16=65_535)  # full drive on O3/O4

SEQUENCE = [(1, 1), (0, 1), (0, 0), (1, 0)]


def step(forward=True):
    for a, b in SEQUENCE if forward else reversed(SEQUENCE):
        dir12.value(a)
        dir34.value(b)
        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)

H-köprüsü modu

Mod atlatıcısı yükseğe ayarlandığında, her iki köprü pini de H-köprüsünü doğrudan sürer. O1/O2 için doğruluk tablosu şöyledir:

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

  • (P0, P7) = (L, H) → ileri (O1 = H, O2 = L)

  • (P0, P7) = (H, L) → geri (O1 = L, O2 = H)

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

(O3/O4, P1/P2 ve P8 ile aynı tabloyu izler.) Aşağıdaki döngü, O1/O2 çıkış çifti üzerinde bir motoru ileri → fren → geri → boşa alma sırasıyla döndürür:

from machine import Pin
import time

p0 = Pin("P0", Pin.OUT)
p7 = Pin("P7", Pin.OUT)


def drive(a, b):
    p0.value(a)
    p7.value(b)


while True:
    drive(0, 1)         # forward
    time.sleep(1)
    drive(1, 1)         # brake
    time.sleep_ms(500)
    drive(1, 0)         # reverse
    time.sleep(1)
    drive(0, 0)         # coast
    time.sleep_ms(500)

Her iki pin de orantılı sürüş için bir machine.PWM kanalıyla değiştirilebilir — örneğin (P0=0, P7=PWM) PWM görev döngüsünde ileri/boşa alma sağlar, (P0=1, P7=PWM) ise (100 % duty) değerinde geri/fren sağlar. Aşağıdaki döngü, P0 0’da tutulurken (ileri/boşa alma) görev döngüsünü yükseltip tekrar düşürür:

from machine import Pin, PWM
import time

p0 = Pin("P0", Pin.OUT, value=0)
p7 = PWM(Pin("P7"), freq=20_000, duty_u16=0)

while True:
    for duty in range(0, 65_536, 1024):
        p7.duty_u16(duty)
        time.sleep_ms(10)
    for duty in range(65_535, -1, -1024):
        p7.duty_u16(duty)
        time.sleep_ms(10)

Bağımsız mod

Mod atlatıcısı yüzer durumdayken, her pin bir çıkışa yönlendirilen bağımsız bir hat sürücüsü haline gelir — solenoidler, röleler veya H-köprüsü gerektirmeyen herhangi bir aç/kapa yükü için kullanışlıdır. Eşleme P7 → O1, P0 → O2, P8 → O3 ve P1 (veya P2) → O4 şeklindedir:

from machine import Pin
import time

outputs = [
    Pin("P7", Pin.OUT),  # O1
    Pin("P0", Pin.OUT),  # O2
    Pin("P8", Pin.OUT),  # O3
    Pin("P2", Pin.OUT),  # O4
]

while True:
    for o in outputs:    # walk a single high pulse across O1–O4
        o.value(1)
        time.sleep_ms(200)
        o.value(0)

Dört pinden herhangi biri orantılı sürüş için machine.PWM aracılığıyla PWM ile de sürülebilir — örneğin, her çıkışı sırayla yükselip düşürerek soldurun:

from machine import Pin, PWM
import time

outputs = [
    PWM(Pin("P7"), freq=1_000, duty_u16=0),  # O1
    PWM(Pin("P0"), freq=1_000, duty_u16=0),  # O2
    PWM(Pin("P8"), freq=1_000, duty_u16=0),  # O3
    PWM(Pin("P2"), freq=1_000, duty_u16=0),  # O4
]

while True:
    for o in outputs:
        for duty in range(0, 65_536, 1024):
            o.duty_u16(duty)
            time.sleep_ms(5)
        for duty in range(65_535, -1, -1024):
            o.duty_u16(duty)
            time.sleep_ms(5)

Diğer G/Ç

AIN terminal bloğu girişini seviye dönüştürülmüş P6 pini aracılığıyla okuyun:

from machine import ADC
import time

ain = ADC("P6")

while True:
    v = ain.read_u16() * 3.3 / 65535
    print("AIN:", v * (5.0 / 3.3), "V")
    time.sleep_ms(100)

SYN hattındaki düşen kenara tepki verin — örneğin, SYN’i düşüğe çeken başka bir cihazla kamerayı senkronize etmek için:

from machine import Pin

def on_sync(pin):
    print("SYN falling edge")

syn = Pin("P10", Pin.IN)
syn.irq(on_sync, Pin.IRQ_FALLING)