Driver Shield

Driver Shield pokreće dva motora od 3 A ili četiri neovisna linijska upravljača od 1.5 A iz širokog napajanja od 6-36 V, dajući OpenMV Cam robustno čelo za upravljanje motorima sa zaštitom od obrnutog napona i naponskih udara.

Driver Shield

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

Istaknute značajke

  • Dva upravljača motora od 3 A ILI četiri linijska upravljača od 1.5 A, 6-36 V

  • Zaštita od obrnutog napona i prijelaznih naponskih udara na ulazu

  • ADC ulaz 0-5 V sa zaštitom od prenapona od ±36 V

  • Digitalni I/O od 0-5 V za okidače sinkronizacije kamere, zaštićen od kratkog spoja

Raspored pinova

Raspored pinova Driver Shield-a

Referenca pinova

Pin

Funkcija

P0

DIR za izlazni par O1/O2

P1

DIR za izlazni par O3/O4 (alternativno)

P2

DIR za izlazni par O3/O4 (zadano)

P6

Naponski prilagođeno očitanje AIN-a (0–3.3 V na P6)

P7

PWM za izlazni par O1/O2

P8

PWM za izlazni par O3/O4

P10

SYN — digitalni I/O otvorenog odvoda na priključnoj letvici

PWR ulaz

Široki ulaz 6–36 V na priključnoj letvici (otporan na obrnuti napon)

AIN ulaz

Analogni ulaz na priključnoj letvici

VIN izlaz

5.4 V do 600 mA iz ugrađenog regulatora

Vod 3.3V

Napaja ugrađenu elektroniku shielda

Vod GND

Zajednička masa

Napomena

AIN je zaštićen od prenapona do ±36 V i zadano je naponski ulaz 0–5 V, smanjen na 0–3.3 V na P6. Premostite shunt za način rada 4–20 mA na prednjoj strani shielda kako biste prebacili AIN na strujni ulaz 4–20 mA.

Napomena

SYN je digitalni vod otvorenog odvoda, podignut na 3.3 V na strani kamere i 5 V na strani SYN priključka. Zadano je ulaz — shield naponski prilagođava 0–5 V na SYN na 0–3.3 V na P10. Promijenite ugrađeni lemljeni premosnik kako biste P10 prebacili u izlaz, naponski prilagođavajući 0–3.3 V na P10 na 0–5 V na SYN.

Napomena

Svaki od pinova P0, P1, P2, P6, P7, P8 i P10 može se preuzeti za nepovezanu uporabu. P0, P2, P6, P7, P8 i P10 su zadano spojeni preko lemljenih premosnika na stražnjoj strani — otvorite premosnik na bilo kojem pinu koji želite osloboditi. P1 je zadano odspojen: premostite njegov premosnik na prednjoj strani kako biste DIR za O3/O4 umjesto toga preusmjerili na P1 (i otvorite stražnji premosnik P2 kako biste oslobodili P2).

Napomena

Dva premosnika načina rada na stražnjoj strani shielda — po jedan za svaki H-most — neovisno postavljaju svaki izlazni par u jedan od tri načina rada. Svaki premosnik ima oznake L i H koje pokazuju koja strana odabire koje stanje:

  • Low (zadano) — DIR/PWM način rada: jedan DIR pin + jedan PWM pin po mostu.

  • High — H-most način rada: oba pina izravno pokreću most preko dvoulazne istinosne tablice čipa.

  • Float (bez spoja) — neovisni način rada: svaki pin postaje samostalni linijski upravljač usmjeren na jedan izlaz.

Svaki DRV8876 je strujno ograničen na ukupno 3 A po čipu — to je 3 A kroz jedan most (DIR/PWM ili H-most način rada) ili 1.5 A po izlazu raspodijeljeno na dva izlaza (neovisni način rada).

Uporaba

DIR/PWM način rada (zadano)

Pokrenite četkasti DC motor na izlaznom paru O1/O2 — postavite smjer na P0 i primijenite PWM signal brzine na P7. Petlja u nastavku povećava radni ciklus do pune brzine i ponovno ga smanjuje, zatim mijenja smjer i ponavlja:

from machine import Pin, PWM
import time

direction = Pin("P0", Pin.OUT)
speed = PWM(Pin("P7"), freq=20_000, duty_u16=0)


def ramp(target):
    for duty in range(0, target, 1024):
        speed.duty_u16(duty)
        time.sleep_ms(10)
    for duty in range(target, -1, -1024):
        speed.duty_u16(duty)
        time.sleep_ms(10)


while True:
    direction.value(1)  # forward
    ramp(65_535)
    direction.value(0)  # reverse
    ramp(65_535)

Dva H-mosta mogu također pokretati bipolarni koračni motor — držite oba PWM kanala na punom pogonu i koračajte DIR pinovima kroz četverofaznu sekvencu:

from machine import Pin, PWM
import time

dir12 = Pin("P0", Pin.OUT)
dir34 = Pin("P2", Pin.OUT)
PWM(Pin("P7"), freq=20_000, duty_u16=65_535)  # full drive on O1/O2
PWM(Pin("P8"), freq=20_000, duty_u16=65_535)  # full drive on O3/O4

SEQUENCE = [(1, 1), (0, 1), (0, 0), (1, 0)]


def step(forward=True):
    for a, b in SEQUENCE if forward else reversed(SEQUENCE):
        dir12.value(a)
        dir34.value(b)
        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)

H-most način rada

Kada je premosnik načina rada postavljen na high, oba pina mosta izravno pokreću H-most. Za O1/O2 istinosna tablica je:

  • (P0, P7) = (L, L) → slobodni hod (izlazi Hi-Z)

  • (P0, P7) = (L, H) → naprijed (O1 = H, O2 = L)

  • (P0, P7) = (H, L) → unatrag (O1 = L, O2 = H)

  • (P0, P7) = (H, H) → kočenje (oba izlaza niska)

(O3/O4 slijedi istu tablicu s P1/P2 i P8.) Petlja u nastavku prolazi motor kroz naprijed → kočenje → unatrag → slobodni hod na izlaznom paru O1/O2:

from machine import Pin
import time

p0 = Pin("P0", Pin.OUT)
p7 = Pin("P7", Pin.OUT)


def drive(a, b):
    p0.value(a)
    p7.value(b)


while True:
    drive(0, 1)         # forward
    time.sleep(1)
    drive(1, 1)         # brake
    time.sleep_ms(500)
    drive(1, 0)         # reverse
    time.sleep(1)
    drive(0, 0)         # coast
    time.sleep_ms(500)

Bilo koji pin može se zamijeniti za machine.PWM kanal za proporcionalni pogon — npr. (P0=0, P7=PWM) daje naprijed/slobodni hod pri PWM radnom ciklusu, (P0=1, P7=PWM) daje unatrag/kočenje pri (100 % duty). Petlja u nastavku povećava i smanjuje radni ciklus s P0 zadržanim na 0 (naprijed/slobodni hod):

from machine import Pin, PWM
import time

p0 = Pin("P0", Pin.OUT, value=0)
p7 = PWM(Pin("P7"), freq=20_000, duty_u16=0)

while True:
    for duty in range(0, 65_536, 1024):
        p7.duty_u16(duty)
        time.sleep_ms(10)
    for duty in range(65_535, -1, -1024):
        p7.duty_u16(duty)
        time.sleep_ms(10)

Neovisni način rada

Kada je premosnik načina rada u plutajućem stanju, svaki pin postaje samostalni linijski upravljač usmjeren na jedan izlaz — korisno za solenoide, releje ili bilo koje uključi/isključi opterećenje koje ne treba H-most. Mapiranje je P7 → O1, P0 → O2, P8 → O3 i P1 (ili P2) → O4:

from machine import Pin
import time

outputs = [
    Pin("P7", Pin.OUT),  # O1
    Pin("P0", Pin.OUT),  # O2
    Pin("P8", Pin.OUT),  # O3
    Pin("P2", Pin.OUT),  # O4
]

while True:
    for o in outputs:    # walk a single high pulse across O1–O4
        o.value(1)
        time.sleep_ms(200)
        o.value(0)

Bilo koji od četiri pina također se može PWM-irati preko machine.PWM za proporcionalni pogon — na primjer, redom postupno pojačavajte i smanjujte svaki izlaz:

from machine import Pin, PWM
import time

outputs = [
    PWM(Pin("P7"), freq=1_000, duty_u16=0),  # O1
    PWM(Pin("P0"), freq=1_000, duty_u16=0),  # O2
    PWM(Pin("P8"), freq=1_000, duty_u16=0),  # O3
    PWM(Pin("P2"), freq=1_000, duty_u16=0),  # O4
]

while True:
    for o in outputs:
        for duty in range(0, 65_536, 1024):
            o.duty_u16(duty)
            time.sleep_ms(5)
        for duty in range(65_535, -1, -1024):
            o.duty_u16(duty)
            time.sleep_ms(5)

Ostali I/O

Očitajte ulaz priključne letvice AIN preko naponski prilagođenog pina P6:

from machine import ADC
import time

ain = ADC("P6")

while True:
    v = ain.read_u16() * 3.3 / 65535
    print("AIN:", v * (5.0 / 3.3), "V")
    time.sleep_ms(100)

Reagirajte na silazni brid na SYN vodu — na primjer, za sinkronizaciju kamere s drugim uređajem koji spušta SYN na nisko:

from machine import Pin

def on_sync(pin):
    print("SYN falling edge")

syn = Pin("P10", Pin.IN)
syn.irq(on_sync, Pin.IRQ_FALLING)