Motor Shield

A Motor Shield két DC motort hajt az OpenMV Cam-ről egy TB6612FNG kettős H-híd segítségével, egy NCP1117 5 V-os lineáris szabályozóval, amely egyetlen 6,5–18 V-os akkumulátor-bemenetről táplálja mind a kamerát, mind a motorokat.

Motor Shield

A teljes adatlapért, fényképekért és rendelési információkért lásd a Motor Shield termékoldalt.

Kiemelt jellemzők

  • Két független motorcsatorna PWM sebességszabályozással

  • Akár 2 A meghajtóáram csatornánként

  • Bipoláris léptetőmotort is képes hajtani

  • Rakásolható a Servo Shielddel

Lábkiosztás

Motor Shield lábkiosztás

Lábkiosztás-referencia

Láb

Funkció

P0

DIR B1 (B motor iránya)

P1

DIR B0 (B motor iránya)

P2

DIR A1 (A motor iránya)

P3

DIR A0 (A motor iránya)

P6

TB6612FNG STANDBY — alapértelmezetten bekapcsolva; húzd alacsonyra az alacsony fogyasztású módba lépéshez

P7

PWM sebességbemenet az A motorhoz

P8

PWM sebességbemenet a B motorhoz

VBAT be

6,5–18 V akkumulátor-bemenet a csavaros sorkapcson (NCP1117 korlátok)

VIN ki

5 V a fedélzeti NCP1117 szabályozóból (a kamerát táplálja)

3,3 V-os sín

A TB6612FNG logikáját táplálja

GND-sín

Közös föld

Megjegyzés

A P6 alapértelmezetten a TB6612 STANDBY bemenetét hajtja. Vágd el a forrasztási nyomvonalat a shield hátoldalán a P6 leválasztásához, ha inkább más célra szeretnéd használni a lábat (a meghajtó ekkor engedélyezve marad).

Megjegyzés

A TB6612FNG mindegyik motort egy kétbemenetes igazságtábla plusz egy PWM engedélyezés alapján hajtja. Az A motor esetében (STBY magasra állítva és PWMA bármilyen nullától eltérő kitöltési tényezőn):

  • (P3, P2) = (H, L) → előre

  • (P3, P2) = (L, H) → hátra

  • (P3, P2) = (L, L) → szabadonfutás (kimenetek Hi-Z)

  • (P3, P2) = (H, H) → fékezés (mindkét kimenet alacsony)

A PWMA alacsonyra hajtása rövid fékezést kényszerít az irányjelektől függetlenül — a 0 %-os kitöltési tényező fékezi a motort. A B motor ugyanezt a táblát követi a (P1, P0) lábakon, PWM-mel a P8-on.

Használat

Vezesd végig az A motort az előre → fékezés → hátra → szabadonfutás állapotokon rögzített PWM kitöltési tényező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)

A változó sebességű vezérléshez tartsd állandóan az irányjeleket, és futtasd fel a PWMA-t. Az alábbi ciklus felfuttatja az A motort a szabadonfutásból teljes előremenetre, majd vissza:

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)

A TB6612 két H-hídja bipoláris léptetőmotort is hullámmeghajtással hajthat — egyszerre egy tekercset gerjesztve, négy fázison végighaladva. Tartsd mindkét PWM-csatornát a kívánt meghajtóáramon, és hívd a step() függvényt egy teljes sorrend bármelyik irányba történő léptetéséhez:

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)

A fedélzeti STANDBY vonal alapértelmezetten magas (meghajtó engedélyezve). Húzd a P6-ot alacsonyra a TB6612 alvó állapotba helyezéséhez:

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