Motor Shield

Motor Shield acționează două motoare de curent continuu de la OpenMV Cam folosind o punte H dublă TB6612FNG, cu un regulator liniar NCP1117 de 5 V care alimentează atât camera, cât și motoarele de la o singură intrare de baterie de 6,5–18 V.

Motor Shield

Pentru fișa tehnică completă, fotografii și comenzi, consultați pagina produsului Motor Shield.

Caracteristici principale

  • Două canale de motor independente cu control al vitezei prin PWM

  • Până la 2 A curent de acționare per canal

  • Poate acționa și un motor pas cu pas bipolar

  • Se stivuiește cu Servo Shield

Pinout

Pinout-ul Motor Shield

Referință pini

Pin

Funcție

P0

DIR B1 (direcția motorului B)

P1

DIR B0 (direcția motorului B)

P2

DIR A1 (direcția motorului A)

P3

DIR A0 (direcția motorului A)

P6

TB6612FNG STANDBY — implicit activat; trageți la nivel jos pentru a intra în modul de consum redus

P7

Intrare de viteză PWM pentru motorul A

P8

Intrare de viteză PWM pentru motorul B

VBAT in

Intrare de baterie de 6,5–18 V pe borna cu șurub (limitele NCP1117)

VIN out

5 V de la regulatorul NCP1117 de pe placă (alimentează camera)

Linia de 3,3 V

Alimentează logica TB6612FNG

Linia GND

Masă comună

Notă

P6 acționează implicit intrarea STANDBY a TB6612. Tăiați traseul de lipitură de pe partea posterioară a shield-ului pentru a deconecta P6 dacă preferați să folosiți pinul pentru altceva (driverul rămâne apoi activat).

Notă

TB6612FNG acționează fiecare motor printr-o tabelă de adevăr cu două intrări plus o activare PWM. Pentru motorul A (cu STBY la nivel înalt și PWMA la orice factor de umplere diferit de zero):

  • (P3, P2) = (H, L) → înainte

  • (P3, P2) = (L, H) → înapoi

  • (P3, P2) = (L, L) → ralanti (ieșiri Hi-Z)

  • (P3, P2) = (H, H) → frânare (ambele ieșiri la nivel jos)

Aducerea PWMA la nivel jos forțează o frânare scurtă indiferent de intrările de direcție — un factor de umplere de 0 % frânează motorul. Motorul B urmează aceeași tabelă pe (P1, P0) cu PWM pe P8.

Utilizare

Rotiți motorul A prin înainte → frânare → înapoi → ralanti la un factor de umplere PWM fix:

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)

Pentru controlul vitezei variabile, mențineți constante intrările de direcție și creșteți gradual PWMA. Bucla de mai jos crește gradual motorul A de la ralanti până la înainte la viteză maximă și apoi îl scade:

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)

Cele două punți H ale TB6612 pot acționa și un motor pas cu pas bipolar în mod undă — energizați câte o bobină pe rând, parcurgând patru faze. Mențineți ambele canale PWM la curentul de acționare dorit și apelați step() pentru a avansa o secvență completă în oricare direcție:

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)

Linia STANDBY de pe placă este implicit la nivel înalt (driver activat). Trageți P6 la nivel jos pentru a pune TB6612 în repaus:

from machine import Pin
Pin("P6", Pin.OUT).value(0)  # standby