Motor Shield¶
Le Motor Shield commande deux moteurs à courant continu depuis l’OpenMV Cam à l’aide d’un double pont en H TB6612FNG, avec un régulateur linéaire NCP1117 5 V qui alimente à la fois la caméra et les moteurs depuis une seule entrée batterie de 6,5 à 18 V.
Pour la fiche technique complète, les photos et la commande, consultez la page produit du Motor Shield.
Points forts¶
Deux canaux moteur indépendants avec contrôle de vitesse par PWM
Jusqu’à 2 A de courant de commande par canal
Peut aussi commander un moteur pas à pas bipolaire
Empilable avec le Servo Shield
Brochage¶
Référence des broches¶
Broche |
Fonction |
|---|---|
P0 |
DIR B1 (sens du moteur B) |
P1 |
DIR B0 (sens du moteur B) |
P2 |
DIR A1 (sens du moteur A) |
P3 |
DIR A0 (sens du moteur A) |
P6 |
STANDBY du TB6612FNG — actif par défaut ; tirez à l’état bas pour entrer en mode basse consommation |
P7 |
Entrée de vitesse PWM pour le moteur A |
P8 |
Entrée de vitesse PWM pour le moteur B |
VBAT in |
Entrée batterie de 6,5 à 18 V sur le bornier à vis (limites du NCP1117) |
VIN out |
5 V depuis le régulateur NCP1117 intégré (alimente la caméra) |
Rail 3,3 V |
Alimente la logique du TB6612FNG |
Rail GND |
Masse commune |
Note
P6 commande l’entrée STANDBY du TB6612 par défaut. Coupez la piste à souder au dos du shield pour déconnecter P6 si vous préférez utiliser la broche à autre chose (le pilote reste alors activé).
Note
Le TB6612FNG commande chaque moteur via une table de vérité à deux entrées plus une validation PWM. Pour le moteur A (avec STBY haut et PWMA à n’importe quel rapport cyclique non nul) :
(P3, P2) = (H, L)→ avant(P3, P2) = (L, H)→ arrière(P3, P2) = (L, L)→ roue libre (sorties Hi-Z)(P3, P2) = (H, H)→ frein (les deux sorties basses)
Mettre PWMA à l’état bas force un court freinage quelles que soient les entrées de sens — un rapport cyclique de 0 % freine le moteur. Le moteur B suit la même table sur (P1, P0) avec le PWM sur P8.
Utilisation¶
Faites passer le moteur A par avant → frein → arrière → roue libre à un rapport cyclique PWM fixe
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)
Pour un contrôle à vitesse variable, maintenez les entrées de sens constantes et faites varier PWMA. La boucle ci-dessous fait passer le moteur A de la roue libre à la pleine marche avant, puis le ramène
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)
Les deux ponts en H du TB6612 peuvent aussi commander un moteur pas à pas bipolaire en mode wave — alimentez une bobine à la fois, en parcourant quatre phases. Maintenez les deux canaux PWM au courant de commande souhaité et appelez step() pour avancer d’une séquence complète dans l’un ou l’autre sens
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)
La ligne STANDBY intégrée est à l’état haut par défaut (pilote activé). Tirez P6 à l’état bas pour mettre le TB6612 en veille
from machine import Pin
Pin("P6", Pin.OUT).value(0) # standby