Motor Shield¶
O Motor Shield aciona dois motores DC a partir da OpenMV Cam usando uma ponte H dupla TB6612FNG, com um regulador linear NCP1117 de 5 V que alimenta tanto a câmera quanto os motores a partir de uma única entrada de bateria de 6,5–18 V.
Para o datasheet completo, fotos e informações de compra, consulte a página do produto Motor Shield.
Destaques¶
Dois canais de motor independentes com controle de velocidade PWM
Até 2 A de corrente de acionamento por canal
Também pode acionar um motor de passo bipolar
Empilha com o Servo Shield
Pinagem¶
Referência de pinos¶
Pino |
Função |
|---|---|
P0 |
DIR B1 (direção do motor B) |
P1 |
DIR B0 (direção do motor B) |
P2 |
DIR A1 (direção do motor A) |
P3 |
DIR A0 (direção do motor A) |
P6 |
STANDBY do TB6612FNG — ligado por padrão; puxe para baixo para entrar em modo de baixo consumo |
P7 |
Entrada de velocidade PWM para o motor A |
P8 |
Entrada de velocidade PWM para o motor B |
VBAT in |
Entrada de bateria de 6,5–18 V no terminal de parafuso (limites do NCP1117) |
VIN out |
5 V do regulador NCP1117 integrado (alimenta a câmera) |
trilho 3.3V |
Alimenta a lógica do TB6612FNG |
trilho GND |
Terra comum |
Nota
P6 aciona a entrada STANDBY do TB6612 por padrão. Corte a trilha de solda na parte traseira do shield para desconectar P6 se preferir usar o pino para outra coisa (o driver então permanece habilitado).
Nota
O TB6612FNG aciona cada motor através de uma tabela-verdade de duas entradas mais um enable PWM. Para o motor A (com STBY em alto e PWMA em qualquer ciclo de trabalho diferente de zero):
(P3, P2) = (H, L)→ para frente(P3, P2) = (L, H)→ para trás(P3, P2) = (L, L)→ livre (saídas em Hi-Z)(P3, P2) = (H, H)→ freio (ambas as saídas em baixo)
Acionar PWMA em baixo força um freio breve independentemente das entradas de direção — um ciclo de trabalho de 0 % freia o motor. O motor B segue a mesma tabela em (P1, P0) com PWM em P8.
Uso¶
Percorra o motor A por frente → freio → trás → livre com um ciclo de trabalho PWM fixo:
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)
Para controle de velocidade variável, mantenha as entradas de direção constantes e varie PWMA. O loop abaixo aumenta o motor A de livre até a frente total e o reduz de volta:
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)
As duas pontes H do TB6612 também podem acionar por onda um motor de passo bipolar — energize uma bobina de cada vez, percorrendo quatro fases. Mantenha ambos os canais PWM na corrente de acionamento desejada e chame step() para avançar uma sequência completa em qualquer direção:
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)
A linha STANDBY integrada vem em alto por padrão (driver habilitado). Puxe P6 para baixo para colocar o TB6612 em modo de repouso:
from machine import Pin
Pin("P6", Pin.OUT).value(0) # standby