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.

Motor Shield

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

Pinagem do Motor Shield

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