Motor Shield

Motor Shield napędza dwa silniki DC z OpenMV Cam, używając podwójnego mostka H TB6612FNG, ze stabilizatorem liniowym 5 V NCP1117, który zasila zarówno kamerę, jak i silniki z pojedynczego wejścia bateryjnego 6,5–18 V.

Motor Shield

Pełną dokumentację techniczną, zdjęcia i informacje o zamówieniu znajdziesz na stronie produktu Motor Shield.

Najważniejsze cechy

  • Dwa niezależne kanały silników z regulacją prędkości PWM

  • Prąd napędu do 2 A na kanał

  • Może również napędzać silnik krokowy dwubiegunowy

  • Łączy się w stos z Servo Shield

Rozkład wyprowadzeń

Rozkład wyprowadzeń Motor Shield

Opis wyprowadzeń

Pin

Funkcja

P0

DIR B1 (kierunek silnika B)

P1

DIR B0 (kierunek silnika B)

P2

DIR A1 (kierunek silnika A)

P3

DIR A0 (kierunek silnika A)

P6

TB6612FNG STANDBY — domyślnie włączony; ściągnij do stanu niskiego, aby wejść w tryb niskiego poboru mocy

P7

Wejście prędkości PWM dla silnika A

P8

Wejście prędkości PWM dla silnika B

VBAT in

Wejście bateryjne 6,5–18 V na zacisku śrubowym (ograniczenia NCP1117)

VIN out

5 V ze stabilizatora NCP1117 na płytce (zasila kamerę)

Szyna 3,3 V

Zasila logikę TB6612FNG

Szyna GND

Wspólna masa

Informacja

P6 domyślnie steruje wejściem STANDBY układu TB6612. Przetnij ścieżkę lutowniczą na spodzie shielda, aby odłączyć P6, jeśli wolisz użyć pinu do czegoś innego (sterownik pozostaje wtedy włączony).

Informacja

TB6612FNG napędza każdy silnik poprzez dwuwejściową tablicę prawdy oraz włączenie PWM. Dla silnika A (przy STBY w stanie wysokim i PWMA o dowolnym niezerowym wypełnieniu):

  • (P3, P2) = (H, L) → do przodu

  • (P3, P2) = (L, H) → do tyłu

  • (P3, P2) = (L, L) → wybieg (wyjścia w stanie Hi-Z)

  • (P3, P2) = (H, H) → hamowanie (oba wyjścia w stanie niskim)

Ustawienie PWMA w stan niski wymusza krótkie hamowanie niezależnie od wejść kierunku — wypełnienie 0 % hamuje silnik. Silnik B stosuje tę samą tablicę na (P1, P0) z PWM na P8.

Zastosowanie

Przeprowadź silnik A przez cykl do przodu → hamowanie → do tyłu → wybieg przy stałym wypełnieniu 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)

Aby uzyskać sterowanie zmienną prędkością, utrzymuj stałe wejścia kierunku i zmieniaj PWMA. Poniższa pętla zwiększa prędkość silnika A od wybiegu do pełnej prędkości do przodu i z powrotem ją zmniejsza:

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)

Dwa mostki H układu TB6612 mogą również napędzać falowo silnik krokowy dwubiegunowy — zasilaj jedną cewkę na raz, przechodząc przez cztery fazy. Utrzymuj oba kanały PWM na żądanym prądzie napędu i wywołaj step(), aby wykonać jedną pełną sekwencję w dowolnym kierunku:

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 na płytce domyślnie ma stan wysoki (sterownik włączony). Ściągnij P6 do stanu niskiego, aby uśpić TB6612:

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