Motor Shield

Motor Shield pokreće dva DC motora s OpenMV Cam koristeći TB6612FNG dvostruki H-most, s NCP1117 5 V linearnim regulatorom koji napaja i kameru i motore iz jednog baterijskog ulaza od 6.5–18 V.

Motor Shield

Za potpunu tehničku dokumentaciju, fotografije i naručivanje pogledajte stranicu proizvoda Motor Shield.

Istaknute značajke

  • Dva neovisna kanala za motore s PWM upravljanjem brzinom

  • Do 2 A pogonske struje po kanalu

  • Može također pokretati bipolarni koračni motor

  • Slaže se sa Servo Shield-om

Raspored pinova

Raspored pinova Motor Shield-a

Referenca pinova

Pin

Funkcija

P0

DIR B1 (smjer motora B)

P1

DIR B0 (smjer motora B)

P2

DIR A1 (smjer motora A)

P3

DIR A0 (smjer motora A)

P6

TB6612FNG STANDBY — zadano uključeno; spustite na nisko za ulazak u način niske potrošnje

P7

PWM ulaz brzine za motor A

P8

PWM ulaz brzine za motor B

VBAT ulaz

Baterijski ulaz 6.5–18 V na vijčanom priključku (ograničenja NCP1117)

VIN izlaz

5 V iz ugrađenog NCP1117 regulatora (napaja kameru)

Vod 3.3V

Napaja logiku TB6612FNG

Vod GND

Zajednička masa

Napomena

P6 zadano pokreće TB6612 STANDBY ulaz. Prerežite lemljeni trag na stražnjoj strani shielda kako biste odspojili P6 ako pin radije želite koristiti za nešto drugo (upravljač tada ostaje omogućen).

Napomena

TB6612FNG pokreće svaki motor preko dvoulazne istinosne tablice plus PWM omogućavanja. Za motor A (sa STBY na visoko i PWMA pri bilo kojem radnom ciklusu različitom od nule):

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

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

  • (P3, P2) = (L, L) → slobodni hod (izlazi Hi-Z)

  • (P3, P2) = (H, H) → kočenje (oba izlaza niska)

Spuštanje PWMA na nisko prisilno uzrokuje kratko kočenje bez obzira na ulaze smjera — radni ciklus od 0 % koči motor. Motor B slijedi istu tablicu na (P1, P0) s PWM-om na P8.

Uporaba

Prolazite motor A kroz naprijed → kočenje → unatrag → slobodni hod pri fiksnom PWM radnom ciklusu:

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)

Za upravljanje promjenjivom brzinom, držite ulaze smjera konstantnima i povećavajte PWMA. Petlja u nastavku povećava motor A iz slobodnog hoda do punog naprijed i ponovno ga smanjuje:

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)

Dva H-mosta TB6612 mogu također valno pokretati bipolarni koračni motor — pobudite jednu zavojnicu odjednom, prolazeći kroz četiri faze. Držite oba PWM kanala na željenoj pogonskoj struji i pozovite step() za napredovanje jedne pune sekvence u bilo kojem smjeru:

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)

Ugrađeni STANDBY vod zadano je na visoko (upravljač omogućen). Spustite P6 na nisko kako biste TB6612 stavili u stanje mirovanja:

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