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