Motor Shield

Motor Shield driver två DC-motorer från OpenMV Cam med en TB6612FNG dubbel H-brygga, med en NCP1117 5 V linjär regulator som försörjer både kameran och motorerna från en enda 6,5–18 V batteriingång.

Motor Shield

För fullständigt datablad, foton och beställning, se produktsidan för Motor Shield.

Höjdpunkter

  • Två oberoende motorkanaler med PWM-hastighetsstyrning

  • Upp till 2 A drivström per kanal

  • Kan även driva en bipolär stegmotor

  • Staplas med Servo Shield

Stiftutgång

Stiftutgång för Motor Shield

Stiftreferens

Stift

Funktion

P0

DIR B1 (motor B-riktning)

P1

DIR B0 (motor B-riktning)

P2

DIR A1 (motor A-riktning)

P3

DIR A0 (motor A-riktning)

P6

TB6612FNG STANDBY — på som standard; dra lågt för att gå in i lågeffektläge

P7

PWM-hastighetsingång för motor A

P8

PWM-hastighetsingång för motor B

VBAT in

6,5–18 V batteriingång på skruvplinten (NCP1117-gränser)

VIN ut

5 V från den inbyggda NCP1117-regulatorn (försörjer kameran)

3,3 V-skena

Försörjer TB6612FNG-logiken

GND-skena

Gemensam jord

Anteckning

P6 driver TB6612 STANDBY-ingången som standard. Skär av lödbanan på shieldets baksida för att koppla bort P6 om du hellre vill använda stiftet till något annat (drivaren förblir då aktiverad).

Anteckning

TB6612FNG driver varje motor via en sanningstabell med två ingångar plus en PWM-aktivering. För motor A (med STBY hög och PWMA vid valfri arbetscykel som inte är noll):

  • (P3, P2) = (H, L) → framåt

  • (P3, P2) = (L, H) → bakåt

  • (P3, P2) = (L, L) → friløb (utgångar Hi-Z)

  • (P3, P2) = (H, H) → broms (båda utgångarna låga)

Att driva PWMA lågt tvingar fram en kort bromsning oavsett riktningsingångarna — en arbetscykel på 0 % bromsar motorn. Motor B följer samma tabell på (P1, P0) med PWM på P8.

Användning

Cykla motor A genom framåt → broms → bakåt → friløb vid en fast PWM-arbetscykel:

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)

För hastighetsstyrning, håll riktningsingångarna konstanta och öka PWMA gradvis. Slingan nedan ökar motor A från friløb upp till full framåt och ned igen:

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)

TB6612:s två H-bryggor kan även våg-driva en bipolär stegmotor — energisera en spole åt gången och gå igenom fyra faser. Håll båda PWM-kanalerna på önskad drivström och anropa step() för att gå fram en hel sekvens i endera riktningen:

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)

Den inbyggda STANDBY-linjen är som standard hög (drivare aktiverad). Dra P6 lågt för att försätta TB6612 i viloläge:

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