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