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.
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¶
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)