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.
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¶
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)