Módulo Motor

O Módulo Motor 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âmara como os motores a partir de uma única entrada de bateria de 6,5–18 V.

Motor Shield

Para o datasheet completo, fotografias e informações de compra, consulte a página do produto Módulo Motor.

Destaques

  • Dois canais de motor independentes com controlo de velocidade PWM

  • Corrente de acionamento até 2 A por canal

  • Pode também acionar um motor de passo bipolar

  • Empilha com o Módulo Servo

Pinagem

Motor Shield Pinout

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 — ativo por defeito; coloque a baixo para entrar em modo de baixo consumo

P7

Entrada PWM de velocidade para o motor A

P8

Entrada PWM de velocidade para o motor B

Entrada VBAT

Entrada de bateria de 6,5–18 V no terminal de parafuso (limites do NCP1117)

Saída VIN

5 V a partir do regulador NCP1117 integrado (alimenta a câmara)

Rail 3.3V

Alimenta a lógica do TB6612FNG

Rail GND

Terra comum

Nota

P6 aciona a entrada STANDBY do TB6612 por defeito. Corte a pista de solda na parte traseira do módulo para desligar P6 se preferir usar o pino para outra finalidade (o driver fica então sempre ativo).

Nota

O TB6612FNG aciona cada motor através de uma tabela de verdade de duas entradas mais um sinal de habilitação PWM. Para o motor A (com STBY a alto e PWMA a qualquer ciclo de trabalho não nulo):

  • (P3, P2) = (H, L) → frente

  • (P3, P2) = (L, H) → trás

  • (P3, P2) = (L, L) → deriva (saídas Hi-Z)

  • (P3, P2) = (H, H) → travagem (saídas ambas a baixo)

Colocar PWMA a baixo força uma travagem imediata independentemente das entradas de direção — um ciclo de trabalho de 0 % trava o motor. O motor B segue a mesma tabela em (P1, P0) com PWM em P8.

Utilização

Percorrer o motor A em frente → travagem → trás → deriva 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 controlo de velocidade variável, mantenha as entradas de direção constantes e aumente PWMA gradualmente. O ciclo abaixo aumenta o motor A da deriva até à velocidade máxima em frente e 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 podem também acionar em onda um motor de passo bipolar — energize uma bobine de cada vez, percorrendo quatro fases. Mantenha ambos os canais PWM à corrente de acionamento pretendida 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 está por defeito a alto (driver ativo). Coloque P6 a baixo para colocar o TB6612 em modo de suspensão:

from machine import Pin
Pin("P6", Pin.OUT).value(0)  # standby