Motor Shield

Motor Shield pohání dva DC motory z OpenMV Cam pomocí dvojitého H-můstku TB6612FNG, s lineárním regulátorem 5 V NCP1117, který napájí jak kameru, tak motory z jediného bateriového vstupu 6,5–18 V.

Motor Shield

Kompletní katalogový list, fotografie a možnost objednání najdete na produktové stránce Motor Shield.

Přehled

  • Dva nezávislé kanály motorů s řízením rychlosti přes PWM

  • Budicí proud až 2 A na kanál

  • Může také pohánět bipolární krokový motor

  • Lze stohovat se Servo Shield

Rozložení pinů

Rozložení pinů Motor Shield

Reference pinů

Pin

Funkce

P0

DIR B1 (směr motoru B)

P1

DIR B0 (směr motoru B)

P2

DIR A1 (směr motoru A)

P3

DIR A0 (směr motoru A)

P6

TB6612FNG STANDBY — ve výchozím nastavení zapnuto; stáhněte na nízkou úroveň pro vstup do úsporného režimu

P7

Vstup rychlosti přes PWM pro motor A

P8

Vstup rychlosti přes PWM pro motor B

VBAT in

Bateriový vstup 6,5–18 V na šroubovací svorce (limity NCP1117)

VIN out

5 V z palubního regulátoru NCP1117 (napájí kameru)

Větev 3,3V

Napájí logiku TB6612FNG

Větev GND

Společná zem

Poznámka

P6 ve výchozím nastavení řídí vstup STANDBY čipu TB6612. Přerušením pájecí cesty na zadní straně shieldu odpojíte P6, pokud byste raději pin použili k něčemu jinému (budič pak zůstane povolen).

Poznámka

TB6612FNG pohání každý motor prostřednictvím pravdivostní tabulky se dvěma vstupy plus povolením přes PWM. Pro motor A (s STBY na high a PWMA s libovolnou nenulovou střídou):

  • (P3, P2) = (H, L) → vpřed

  • (P3, P2) = (L, H) → vzad

  • (P3, P2) = (L, L) → doběh (výstupy Hi-Z)

  • (P3, P2) = (H, H) → brzdění (oba výstupy nízké)

Stažení PWMA na nízkou úroveň vynutí krátké brzdění bez ohledu na směrové vstupy — střída 0 % motor brzdí. Motor B sleduje stejnou tabulku na (P1, P0) s PWM na P8.

Použití

Cyklujte motor A přes vpřed → brzdění → vzad → doběh při pevné střídě PWM:

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)

Pro řízení s proměnnou rychlostí držte směrové vstupy konstantní a měňte PWMA. Smyčka níže zvyšuje motor A z doběhu až na plně vpřed a zpět dolů:

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)

Dva H-můstky TB6612 mohou také vlnově pohánět bipolární krokový motor — napájejte jednu cívku najednou a procházejte čtyřmi fázemi. Držte oba PWM kanály na požadovaném budicím proudu a volejte step() pro postup o jednu celou sekvenci v libovolném směru:

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)

Palubní linka STANDBY je ve výchozím nastavení na high (budič povolen). Stáhněte P6 na nízkou úroveň pro uspání TB6612:

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