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.
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ń¶
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