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