Driver Shield

Driver Shield pohání dva motory o proudu 3 A nebo čtyři nezávislé budiče s proudem 1,5 A z širokého napájecího rozsahu 6-36 V, čímž dává OpenMV Cam robustní vstupní stupeň pro řízení motorů s ochranou proti přepólování a napěťovým rázům.

Driver Shield

Kompletní katalogový list, fotografie a možnost objednání najdete na produktové stránce Driver Shield.

Přehled

  • Dva budiče motorů 3 A NEBO čtyři budiče linek 1,5 A, 6-36 V

  • Ochrana proti přepólování a přechodovým napěťovým rázům na vstupu

  • ADC vstup 0-5 V s ochranou proti přepětí ±36 V

  • Digitální I/O 0-5 V pro spouštěče synchronizace kamery, s ochranou proti zkratu

Rozložení pinů

Rozložení pinů Driver Shield

Reference pinů

Pin

Funkce

P0

DIR pro výstupní dvojici O1/O2

P1

DIR pro výstupní dvojici O3/O4 (alternativní)

P2

DIR pro výstupní dvojici O3/O4 (výchozí)

P6

Úrovňově posunuté zpětné čtení AIN (0–3,3 V na P6)

P7

PWM pro výstupní dvojici O1/O2

P8

PWM pro výstupní dvojici O3/O4

P10

SYN — digitální I/O s otevřeným kolektorem na svorkovnici

PWR in

Široký vstup 6–36 V na svorkovnici (tolerantní k přepólování)

AIN in

Analogový vstup na svorkovnici

VIN out

5,4 V při proudu až 600 mA z palubního regulátoru

Větev 3,3V

Napájí palubní elektroniku shieldu

Větev GND

Společná zem

Poznámka

AIN je chráněn proti přepětí až do ±36 V a ve výchozím nastavení je napěťovým vstupem 0–5 V, zmenšeným na 0–3,3 V na P6. Přemostěním propojky režimu 4–20 mA na přední straně shieldu přepnete AIN na proudový vstup proudové smyčky 4–20 mA.

Poznámka

SYN je digitální linka s otevřeným kolektorem, vytažená na 3,3 V na straně kamery a na 5 V na straně svorky SYN. Ve výchozím nastavení je vstupem — shield úrovňově posouvá 0–5 V na SYN dolů na 0–3,3 V na P10. Změnou palubní pájecí propojky převrátíte P10 na výstup, který úrovňově posouvá 0–3,3 V na P10 nahoru na 0–5 V na SYN.

Poznámka

Každý z pinů P0, P1, P2, P6, P7, P8 a P10 lze znovu využít pro jiný účel. P0, P2, P6, P7, P8 a P10 jsou ve výchozím nastavení propojeny pájecími propojkami na zadní straně — rozpojte propojku libovolného pinu, který chcete uvolnit. P1 je ve výchozím nastavení odpojen: přemostěním jeho propojky na přední straně směřujete DIR pro O3/O4 místo toho na P1 (a rozpojením zadní propojky P2 uvolníte P2).

Poznámka

Dvě propojky režimu na zadní straně shieldu — jedna na každý H-můstek — nezávisle nastavují každou výstupní dvojici do jednoho ze tří režimů. Každá propojka má značky L a H, které ukazují, která strana volí který stav:

  • Low (výchozí) — režim DIR/PWM: jeden pin DIR + jeden pin PWM na můstek.

  • High — režim H-můstku: oba piny řídí můstek přímo prostřednictvím pravdivostní tabulky se dvěma vstupy daného čipu.

  • Float (bez připojení) — nezávislý režim: každý pin se stává samostatným budičem linky vedeným na jeden výstup.

Každý DRV8876 je proudově omezen na 3 A celkem na čip — to je 3 A přes jeden můstek (režim DIR/PWM nebo H-můstku) nebo 1,5 A na výstup rozdělených mezi dva výstupy (nezávislý režim).

Použití

Režim DIR/PWM (výchozí)

Pohánějte kartáčový DC motor na výstupní dvojici O1/O2 — nastavte směr na P0 a přiveďte PWM signál rychlosti na P7. Smyčka níže zvyšuje střídu až na plnou rychlost a zpět dolů, poté převrátí směr a opakuje:

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-můstky mohou také pohánět bipolární krokový motor — držte oba PWM kanály na plném buzení a krokujte piny DIR čtyřfázovou sekvencí:

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)

Režim H-můstku

S propojkou režimu nastavenou na high řídí oba piny můstku H-můstek přímo. Pro O1/O2 je pravdivostní tabulka:

  • (P0, P7) = (L, L) → doběh (výstupy Hi-Z)

  • (P0, P7) = (L, H) → vpřed (O1 = H, O2 = L)

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

  • (P0, P7) = (H, H) → brzdění (oba výstupy nízké)

(O3/O4 sleduje stejnou tabulku s P1/P2 a P8.) Smyčka níže cykluje motor přes vpřed → brzdění → vzad → doběh na výstupní dvojici 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)

Kterýkoli pin lze nahradit kanálem machine.PWM pro proporcionální buzení — např. (P0=0, P7=PWM) dává vpřed/doběh při střídě PWM, (P0=1, P7=PWM) dává vzad/brzdění při (100 % duty). Smyčka níže zvyšuje a snižuje střídu s P0 drženým na 0 (vpřed/doběh):

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)

Nezávislý režim

S plovoucí propojkou režimu se každý pin stává samostatným budičem linky vedeným na jeden výstup — užitečné pro solenoidy, relé nebo jakoukoli zapínací/vypínací zátěž, která nepotřebuje H-můstek. Mapování je P7 → O1, P0 → O2, P8 → O3 a P1 (nebo 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)

Kterýkoli ze čtyř pinů lze také ovládat pomocí PWM přes machine.PWM pro proporcionální buzení — například postupně každý výstup rozsvěcujte a zhasínejte:

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)

Ostatní I/O

Čtěte vstup svorkovnice AIN přes úrovňově posunutý pin 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)

Reagujte na sestupnou hranu na lince SYN — například pro synchronizaci kamery s jiným zařízením, které stahuje SYN na nízkou úroveň:

from machine import Pin

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

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