Motor Shield¶
Motor Shield acționează două motoare de curent continuu de la OpenMV Cam folosind o punte H dublă TB6612FNG, cu un regulator liniar NCP1117 de 5 V care alimentează atât camera, cât și motoarele de la o singură intrare de baterie de 6,5–18 V.
Pentru fișa tehnică completă, fotografii și comenzi, consultați pagina produsului Motor Shield.
Caracteristici principale¶
Două canale de motor independente cu control al vitezei prin PWM
Până la 2 A curent de acționare per canal
Poate acționa și un motor pas cu pas bipolar
Se stivuiește cu Servo Shield
Pinout¶
Referință pini¶
Pin |
Funcție |
|---|---|
P0 |
DIR B1 (direcția motorului B) |
P1 |
DIR B0 (direcția motorului B) |
P2 |
DIR A1 (direcția motorului A) |
P3 |
DIR A0 (direcția motorului A) |
P6 |
TB6612FNG STANDBY — implicit activat; trageți la nivel jos pentru a intra în modul de consum redus |
P7 |
Intrare de viteză PWM pentru motorul A |
P8 |
Intrare de viteză PWM pentru motorul B |
VBAT in |
Intrare de baterie de 6,5–18 V pe borna cu șurub (limitele NCP1117) |
VIN out |
5 V de la regulatorul NCP1117 de pe placă (alimentează camera) |
Linia de 3,3 V |
Alimentează logica TB6612FNG |
Linia GND |
Masă comună |
Notă
P6 acționează implicit intrarea STANDBY a TB6612. Tăiați traseul de lipitură de pe partea posterioară a shield-ului pentru a deconecta P6 dacă preferați să folosiți pinul pentru altceva (driverul rămâne apoi activat).
Notă
TB6612FNG acționează fiecare motor printr-o tabelă de adevăr cu două intrări plus o activare PWM. Pentru motorul A (cu STBY la nivel înalt și PWMA la orice factor de umplere diferit de zero):
(P3, P2) = (H, L)→ înainte(P3, P2) = (L, H)→ înapoi(P3, P2) = (L, L)→ ralanti (ieșiri Hi-Z)(P3, P2) = (H, H)→ frânare (ambele ieșiri la nivel jos)
Aducerea PWMA la nivel jos forțează o frânare scurtă indiferent de intrările de direcție — un factor de umplere de 0 % frânează motorul. Motorul B urmează aceeași tabelă pe (P1, P0) cu PWM pe P8.
Utilizare¶
Rotiți motorul A prin înainte → frânare → înapoi → ralanti la un factor de umplere PWM fix:
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)
Pentru controlul vitezei variabile, mențineți constante intrările de direcție și creșteți gradual PWMA. Bucla de mai jos crește gradual motorul A de la ralanti până la înainte la viteză maximă și apoi îl scade:
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)
Cele două punți H ale TB6612 pot acționa și un motor pas cu pas bipolar în mod undă — energizați câte o bobină pe rând, parcurgând patru faze. Mențineți ambele canale PWM la curentul de acționare dorit și apelați step() pentru a avansa o secvență completă în oricare direcție:
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 de pe placă este implicit la nivel înalt (driver activat). Trageți P6 la nivel jos pentru a pune TB6612 în repaus:
from machine import Pin
Pin("P6", Pin.OUT).value(0) # standby