Motor Shield

De Motor Shield stuurt twee DC-motoren aan vanaf de OpenMV Cam met behulp van een TB6612FNG dubbele H-brug, met een NCP1117 5 V lineaire regelaar die zowel de camera als de motoren voedt vanuit één enkele batterij-ingang van 6,5–18 V.

Motor Shield

Voor de volledige datasheet, foto’s en bestelinformatie, zie de productpagina van de Motor Shield.

Hoogtepunten

  • Twee onafhankelijke motorkanalen met PWM-snelheidsregeling

  • Tot 2 A aansturingsstroom per kanaal

  • Kan ook een bipolaire stappenmotor aansturen

  • Stapelt met de Servo Shield

Pinout

Motor Shield Pinout

Pinreferentie

Pin

Functie

P0

DIR B1 (richting motor B)

P1

DIR B0 (richting motor B)

P2

DIR A1 (richting motor A)

P3

DIR A0 (richting motor A)

P6

TB6612FNG STANDBY — standaard aan; trek laag om de energiezuinige modus in te schakelen

P7

PWM-snelheidsingang voor motor A

P8

PWM-snelheidsingang voor motor B

VBAT in

6,5–18 V batterij-ingang op het schroefklemmenblok (NCP1117-limieten)

VIN uit

5 V vanuit de NCP1117-regelaar op de print (voedt de camera)

3.3V-rail

Voedt de TB6612FNG-logica

GND-rail

Gemeenschappelijke aarde

Notitie

P6 stuurt standaard de TB6612 STANDBY-ingang aan. Snijd het soldeerspoor aan de achterkant van de shield door om P6 los te koppelen als je de pin liever voor iets anders gebruikt (de driver blijft dan ingeschakeld).

Notitie

De TB6612FNG stuurt elke motor aan via een tweepuntige waarheidstabel plus een PWM-enable. Voor motor A (met STBY hoog en PWMA op een willekeurige duty ongelijk aan nul):

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

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

  • (P3, P2) = (L, L) → uitrollen (uitgangen Hi-Z)

  • (P3, P2) = (H, H) → remmen (beide uitgangen laag)

Het laag aansturen van PWMA forceert een kort remmen ongeacht de richtingsingangen — een duty cycle van 0 % remt de motor. Motor B volgt dezelfde tabel op (P1, P0) met PWM op P8.

Gebruik

Laat motor A doorlopen van vooruit → remmen → achteruit → uitrollen op een vaste PWM-duty:

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)

Voor regelbare snelheid houd je de richtingsingangen constant en laat je PWMA oplopen. De onderstaande lus laat motor A oplopen van uitrollen tot volle vooruit en weer terug:

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)

De twee H-bruggen van de TB6612 kunnen ook een bipolaire stappenmotor wave-driven — energiseer één spoel tegelijk en doorloop vier fasen. Houd beide PWM-kanalen op de gewenste aansturingsstroom en roep step() aan om één volledige sequentie in beide richtingen te doorlopen:

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)

De STANDBY-lijn op de print is standaard hoog (driver ingeschakeld). Trek P6 laag om de TB6612 in slaapstand te zetten:

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