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.
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¶
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