Driver Shield¶
Driver Shield menjalankan dua motor 3 A atau empat line driver 1.5 A independen dari catu daya 6-36 V yang lebar, memberikan OpenMV Cam front-end kontrol motor yang tangguh dengan proteksi tegangan terbalik dan lonjakan.
Untuk datasheet lengkap, foto, dan pemesanan lihat halaman produk Driver Shield.
Sorotan¶
Driver motor dual 3 A ATAU line driver quad 1.5 A, 6-36 V
Proteksi tegangan terbalik dan lonjakan transien pada input
Input ADC 0-5 V dengan proteksi tegangan lebih ±36 V
I/O digital 0-5 V untuk pemicu sinkronisasi kamera, terlindungi dari hubung singkat
Pinout¶
Referensi pin¶
Pin |
Fungsi |
|---|---|
P0 |
DIR untuk pasangan output O1/O2 |
P1 |
DIR untuk pasangan output O3/O4 (alternatif) |
P2 |
DIR untuk pasangan output O3/O4 (default) |
P6 |
Readback AIN yang digeser level (0–3.3 V pada P6) |
P7 |
PWM untuk pasangan output O1/O2 |
P8 |
PWM untuk pasangan output O3/O4 |
P10 |
SYN — I/O digital open-drain pada blok terminal |
PWR in |
Input lebar 6–36 V pada blok terminal (toleran tegangan terbalik) |
AIN in |
Input analog pada blok terminal |
VIN out |
5.4 V hingga 600 mA dari regulator on-board |
Rail 3.3V |
Memberi daya pada elektronik on-board shield |
Rail GND |
Ground bersama |
Catatan
AIN dilindungi dari tegangan lebih hingga ±36 V dan secara default menjadi input tegangan 0–5 V, diskalakan ke 0–3.3 V pada P6. Hubungkan shunt mode 4–20 mA di bagian depan shield untuk mengalihkan AIN ke input current-loop 4–20 mA.
Catatan
SYN adalah jalur digital open-drain, ditarik ke 3.3 V di sisi kamera dan 5 V di sisi terminal SYN. Secara default berfungsi sebagai input — shield menggeser level 0–5 V pada SYN ke 0–3.3 V pada P10. Ubah jumper solder on-board untuk membalik P10 menjadi output, menggeser level 0–3.3 V pada P10 ke 0–5 V pada SYN.
Catatan
Setiap P0, P1, P2, P6, P7, P8, dan P10 dapat diambil kembali untuk penggunaan lain. P0, P2, P6, P7, P8, dan P10 terhubung secara default melalui jumper solder sisi belakang — buka jumper pada pin yang ingin Anda bebaskan. P1 defaultnya tidak terhubung: hubungkan jumper sisi depannya untuk merutekan DIR untuk O3/O4 ke P1 (dan buka jumper sisi belakang P2 untuk membebaskan P2).
Catatan
Dua jumper mode pada bagian belakang shield — satu per H-bridge — secara independen mengatur setiap pasangan output ke salah satu dari tiga mode. Setiap jumper memiliki tanda L dan H untuk menunjukkan sisi mana yang memilih kondisi mana:
Rendah (default) — mode DIR/PWM: satu pin DIR + satu pin PWM per bridge.
Tinggi — mode H-bridge: kedua pin menggerakkan bridge secara langsung melalui tabel kebenaran dua-input chip.
Float (tidak terhubung) — mode independen: setiap pin menjadi line driver mandiri yang diarahkan ke satu output.
Setiap DRV8876 dibatasi arusnya hingga 3 A total per chip — yaitu 3 A melalui satu bridge (mode DIR/PWM atau H-bridge) atau 1.5 A per output dibagi antara dua output (mode independen).
Penggunaan¶
Mode DIR/PWM (default)¶
Gerakkan motor DC sikat pada pasangan output O1/O2 — atur arah pada P0 dan terapkan sinyal kecepatan PWM pada P7. Loop di bawah meningkatkan siklus kerja hingga kecepatan penuh dan kembali turun, kemudian membalik arah dan mengulangi:
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)
Dua H-bridge juga dapat menggerakkan stepper bipolar — pertahankan kedua saluran PWM pada drive penuh dan langkahkan pin DIR melalui urutan empat fase:
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)
Mode H-bridge¶
Dengan jumper mode diatur tinggi, kedua pin bridge menggerakkan H-bridge secara langsung. Untuk O1/O2, tabel kebenarannya adalah:
(P0, P7) = (L, L)→ coast (output Hi-Z)(P0, P7) = (L, H)→ maju (O1 = H, O2 = L)(P0, P7) = (H, L)→ mundur (O1 = L, O2 = H)(P0, P7) = (H, H)→ rem (output keduanya rendah)
(O3/O4 mengikuti tabel yang sama dengan P1/P2 dan P8.) Loop di bawah memutar motor melalui maju → rem → mundur → coast pada pasangan output O1/O2:
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)
Setiap pin dapat ditukar dengan saluran machine.PWM untuk drive proporsional — misalnya (P0=0, P7=PWM) memberikan maju/coast pada siklus kerja PWM, (P0=1, P7=PWM) memberikan mundur/rem pada (100 % − duty). Loop di bawah meningkatkan siklus kerja naik dan turun dengan P0 dipegang di 0 (maju/coast):
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)
Mode independen¶
Dengan jumper mode floating, setiap pin menjadi line driver mandiri yang diarahkan ke satu output — berguna untuk solenoid, relai, atau beban on/off apa pun yang tidak memerlukan H-bridge. Pemetaannya adalah P7 → O1, P0 → O2, P8 → O3, dan P1 (atau P2) → O4:
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)
Keempat pin juga dapat di-PWM melalui machine.PWM untuk drive proporsional — misalnya, pudarkan setiap output naik dan turun secara bergantian:
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)
I/O Lainnya¶
Baca input blok terminal AIN melalui pin P6 yang digeser levelnya:
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)
Respons terhadap tepi turun pada jalur SYN — misalnya, untuk menyinkronkan kamera dengan perangkat lain yang menarik SYN ke rendah:
from machine import Pin
def on_sync(pin):
print("SYN falling edge")
syn = Pin("P10", Pin.IN)
syn.irq(on_sync, Pin.IRQ_FALLING)