Motor Shield¶
Motor Shield menggerakkan dua motor DC dari OpenMV Cam menggunakan dual H-bridge TB6612FNG, dengan regulator linear NCP1117 5 V yang memberi daya pada kamera dan motor dari satu input baterai 6.5–18 V.
Untuk datasheet lengkap, foto, dan pemesanan lihat halaman produk Motor Shield.
Sorotan¶
Dua saluran motor independen dengan kontrol kecepatan PWM
Arus drive hingga 2 A per saluran
Dapat juga menggerakkan motor stepper bipolar
Dapat ditumpuk dengan Servo Shield
Pinout¶
Referensi pin¶
Pin |
Fungsi |
|---|---|
P0 |
DIR B1 (arah motor B) |
P1 |
DIR B0 (arah motor B) |
P2 |
DIR A1 (arah motor A) |
P3 |
DIR A0 (arah motor A) |
P6 |
TB6612FNG STANDBY — default aktif; tarik rendah untuk masuk mode daya rendah |
P7 |
Input kecepatan PWM untuk motor A |
P8 |
Input kecepatan PWM untuk motor B |
VBAT in |
Input baterai 6.5–18 V pada terminal sekrup (batas NCP1117) |
VIN out |
5 V dari regulator NCP1117 on-board (memberi daya pada kamera) |
Rail 3.3V |
Memberi daya pada logika TB6612FNG |
Rail GND |
Ground bersama |
Catatan
P6 menggerakkan input STANDBY TB6612 secara default. Potong jalur solder pada bagian belakang shield untuk memutuskan P6 jika Anda lebih memilih menggunakan pin tersebut untuk sesuatu yang lain (driver kemudian tetap aktif).
Catatan
TB6612FNG menggerakkan setiap motor melalui tabel kebenaran dua-input ditambah enable PWM. Untuk motor A (dengan STBY tinggi dan PWMA pada siklus kerja bukan nol):
(P3, P2) = (H, L)→ maju(P3, P2) = (L, H)→ mundur(P3, P2) = (L, L)→ coast (output Hi-Z)(P3, P2) = (H, H)→ rem (output keduanya rendah)
Menggerakkan PWMA ke rendah memaksa rem singkat terlepas dari input arah — siklus kerja 0% merem motor. Motor B mengikuti tabel yang sama pada (P1, P0) dengan PWM pada P8.
Penggunaan¶
Putar motor A melalui maju → rem → mundur → coast pada siklus kerja PWM tetap:
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)
Untuk kontrol kecepatan variabel, pertahankan input arah konstan dan tingkatkan PWMA. Loop di bawah meningkatkan motor A dari coast hingga maju penuh dan kembali turun:
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)
Dua H-bridge TB6612 juga dapat menjalankan wave-drive stepper bipolar — energikan satu kumparan pada satu waktu, melewati empat fase. Pertahankan kedua saluran PWM pada arus drive yang diinginkan dan panggil step() untuk maju satu urutan penuh ke kedua arah:
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)
Jalur STANDBY on-board defaultnya tinggi (driver aktif). Tarik P6 ke rendah untuk menidurkan TB6612:
from machine import Pin
Pin("P6", Pin.OUT).value(0) # standby