Driver Shield

A Driver Shield két 3 A-es motort vagy négy független 1,5 A-es vonalmeghajtót képes hajtani 6-36 V közötti széles tápfeszültségről, ezzel robusztus, fordított polaritás és túlfeszültség elleni védelemmel ellátott motorvezérlő előtétet adva az OpenMV Cam számára.

Driver Shield

A teljes adatlapért, fényképekért és rendelési információkért lásd a Driver Shield termékoldalt.

Kiemelt jellemzők

  • Két 3 A-es motormeghajtó VAGY négy 1,5 A-es vonalmeghajtó, 6-36 V

  • Fordított polaritás és tranziens túlfeszültség elleni védelem a bemeneten

  • 0-5 V ADC bemenet ±36 V túlfeszültség-védelemmel

  • 0-5 V digitális I/O kamera-szinkronizációs triggerekhez, rövidzárlat-védelemmel

Lábkiosztás

Driver Shield lábkiosztás

Lábkiosztás-referencia

Láb

Funkció

P0

DIR az O1/O2 kimeneti párhoz

P1

DIR az O3/O4 kimeneti párhoz (alternatív)

P2

DIR az O3/O4 kimeneti párhoz (alapértelmezett)

P6

Szintillesztett AIN visszaolvasás (0–3,3 V a P6-on)

P7

PWM az O1/O2 kimeneti párhoz

P8

PWM az O3/O4 kimeneti párhoz

P10

SYN — open-drain digitális I/O a sorkapcson

PWR be

6–36 V széles bemenet a sorkapcson (fordított polaritást tűr)

AIN be

Analóg bemenet a sorkapcson

VIN ki

5,4 V akár 600 mA-ig a fedélzeti szabályozóból

3,3 V-os sín

A shield fedélzeti elektronikáját táplálja

GND-sín

Közös föld

Megjegyzés

Az AIN ±36 V-ig túlfeszültség-védett, és alapértelmezetten 0–5 V-os feszültségbemenetként működik, amelyet 0–3,3 V-ra skáláz le a P6-on. A shield elülső oldalán lévő 4–20 mA mód söntjének áthidalásával az AIN 4–20 mA-es áramhurok-bemenetre váltható.

Megjegyzés

A SYN egy open-drain digitális vonal, amely a kamera oldalán 3,3 V-ra, a SYN sorkapocs oldalán 5 V-ra van felhúzva. Alapértelmezetten bemenet — a shield a SYN-en lévő 0–5 V-ot leszintilleszti 0–3,3 V-ra a P10-en. A fedélzeti forrasztott áthidaló átállításával a P10 kimenetté tehető, amely a P10-en lévő 0–3,3 V-ot felszintilleszti 0–5 V-ra a SYN-en.

Megjegyzés

A P0, P1, P2, P6, P7, P8 és P10 lábak mindegyike más célra is felhasználható. A P0, P2, P6, P7, P8 és P10 alapértelmezetten a hátoldali forrasztott áthidalókon keresztül van csatlakoztatva — nyisd meg az áthidalót bármelyik felszabadítani kívánt lábon. A P1 alapértelmezetten leválasztott: hidald át az elülső oldali áthidalóját, hogy az O3/O4 DIR jelét a P1-re irányítsd helyette (és nyisd meg a P2 hátoldali áthidalóját a P2 felszabadításához).

Megjegyzés

A shield hátoldalán lévő két mód-áthidaló — H-hídonként egy — egymástól függetlenül állítja be mindegyik kimeneti párt három mód egyikébe. Mindegyik áthidalón L és H jelölés mutatja, melyik oldal melyik állapotot választja:

  • Alacsony (alapértelmezett) — DIR/PWM mód: hídonként egy DIR láb + egy PWM láb.

  • Magas — H-híd mód: mindkét láb közvetlenül hajtja a hidat a chip kétbemenetes igazságtáblája szerint.

  • Lebegő (nincs csatlakozás) — független mód: mindegyik láb önálló vonalmeghajtóvá válik, egy-egy kimenetre irányítva.

Mindegyik DRV8876 chiponként összesen 3 A-re van áramkorlátozva — ez 3 A egy hídon keresztül (DIR/PWM vagy H-híd módban), vagy 1,5 A kimenetenként, a két kimenet között elosztva (független mód).

Használat

DIR/PWM mód (alapértelmezett)

Kefés DC motor hajtása az O1/O2 kimeneti páron — állítsd be az irányt a P0-on, és adj PWM sebességjelet a P7-re. Az alábbi ciklus felfuttatja a kitöltési tényezőt teljes sebességre, majd vissza, ezután irányt vált és megismétli:

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)

A két H-híd bipoláris léptetőmotort is hajthat — tartsd mindkét PWM-csatornát teljes meghajtáson, és léptesd a DIR lábakat a négyfázisú sorrenden keresztül:

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-híd mód

A mód-áthidaló magasra állításával mindkét hídláb közvetlenül hajtja a H-hidat. Az O1/O2 esetében az igazságtábla a következő:

  • (P0, P7) = (L, L) → szabadonfutás (kimenetek Hi-Z)

  • (P0, P7) = (L, H) → előre (O1 = H, O2 = L)

  • (P0, P7) = (H, L) → hátra (O1 = L, O2 = H)

  • (P0, P7) = (H, H) → fékezés (mindkét kimenet alacsony)

(Az O3/O4 ugyanezt a táblát követi a P1/P2 és P8 lábakkal.) Az alábbi ciklus egy motort vezet végig az előre → fékezés → hátra → szabadonfutás állapotokon az O1/O2 kimeneti páron:

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)

Bármelyik láb felcserélhető egy machine.PWM csatornára az arányos meghajtáshoz — pl. a (P0=0, P7=PWM) előre/szabadonfutást ad a PWM kitöltési tényezővel, a (P0=1, P7=PWM) hátra/fékezést ad a (100 % duty) értéken. Az alábbi ciklus fel- és lefuttatja a kitöltési tényezőt, miközben a P0 0-n marad (előre/szabadonfutás):

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)

Független mód

A mód-áthidalót lebegőre állítva mindegyik láb önálló vonalmeghajtóvá válik, egy-egy kimenetre irányítva — ami hasznos szolenoidokhoz, relékhez vagy bármilyen be/ki kapcsolható terheléshez, amely nem igényel H-hidat. A leképezés: P7 → O1, P0 → O2, P8 → O3 és P1 (vagy 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)

A négy láb bármelyike PWM-elhető is a machine.PWM segítségével az arányos meghajtáshoz — például sorban fel- és lehalványítva mindegyik kimenetet:

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)

Egyéb I/O

Olvasd ki az AIN sorkapocs-bemenetet a szintillesztett P6 lábon keresztül:

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)

Reagálj a SYN vonal lefutó élére — például a kamera szinkronizálásához egy másik eszközzel, amely a SYN-t alacsonyra húzza:

from machine import Pin

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

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