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.

Motor Shield

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

Motor 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