Driver Shield¶
Driver Shield obsługuje dwa silniki 3 A lub cztery niezależne sterowniki liniowe 1,5 A zasilane z szerokiego zakresu 6-36 V, zapewniając OpenMV Cam wytrzymały moduł sterowania silnikami z zabezpieczeniem przed odwrotną polaryzacją i przepięciami.
Pełną dokumentację techniczną, zdjęcia i informacje o zamówieniu znajdziesz na stronie produktu Driver Shield.
Najważniejsze cechy¶
Dwa sterowniki silników 3 A LUB cztery sterowniki liniowe 1,5 A, 6-36 V
Zabezpieczenie wejścia przed odwrotną polaryzacją i przepięciami przejściowymi
Wejście ADC 0-5 V z zabezpieczeniem nadnapięciowym ±36 V
Cyfrowe I/O 0-5 V do wyzwalaczy synchronizacji kamery, zabezpieczone przed zwarciem
Rozkład wyprowadzeń¶
Opis wyprowadzeń¶
Pin |
Funkcja |
|---|---|
P0 |
DIR dla pary wyjść O1/O2 |
P1 |
DIR dla pary wyjść O3/O4 (alternatywnie) |
P2 |
DIR dla pary wyjść O3/O4 (domyślnie) |
P6 |
Odczyt AIN po konwersji poziomu (0–3,3 V na P6) |
P7 |
PWM dla pary wyjść O1/O2 |
P8 |
PWM dla pary wyjść O3/O4 |
P10 |
SYN — cyfrowe I/O typu open-drain na listwie zaciskowej |
PWR in |
Szerokie wejście 6–36 V na listwie zaciskowej (odporne na odwrotną polaryzację) |
AIN in |
Wejście analogowe na listwie zaciskowej |
VIN out |
5,4 V przy maksymalnie 600 mA ze stabilizatora na płytce |
Szyna 3,3 V |
Zasila układy elektroniczne shielda |
Szyna GND |
Wspólna masa |
Informacja
AIN jest zabezpieczone przed przepięciami do ±36 V i domyślnie działa jako wejście napięciowe 0–5 V, skalowane do 0–3,3 V na P6. Zewrzyj zworkę trybu 4–20 mA z przodu shielda, aby przełączyć AIN na wejście pętli prądowej 4–20 mA.
Informacja
SYN to cyfrowa linia open-drain, podciągnięta do 3,3 V po stronie kamery i do 5 V po stronie zacisku SYN. Domyślnie jest wejściem — shield konwertuje poziom 0–5 V na SYN na 0–3,3 V na P10. Zmień zworkę lutowniczą na płytce, aby przełączyć P10 w wyjście, konwertując poziom 0–3,3 V na P10 na 0–5 V na SYN.
Informacja
Każdy z pinów P0, P1, P2, P6, P7, P8 i P10 można odzyskać do innych zastosowań. P0, P2, P6, P7, P8 i P10 są domyślnie połączone przez zworki lutownicze na spodzie płytki — rozewrzyj zworkę przy dowolnym pinie, który chcesz uwolnić. P1 jest domyślnie rozłączony: zewrzyj jego zworkę z przodu, aby zamiast tego poprowadzić DIR dla O3/O4 do P1 (i rozewrzyj zworkę P2 na spodzie, aby uwolnić P2).
Informacja
Dwie zworki trybu na spodzie shielda — po jednej na mostek H — niezależnie ustawiają każdą parę wyjść w jednym z trzech trybów. Każda zworka ma oznaczenia L i H pokazujące, która strona wybiera dany stan:
Niski (domyślnie) — tryb DIR/PWM: jeden pin DIR + jeden pin PWM na mostek.
Wysoki — tryb mostka H: oba piny sterują mostkiem bezpośrednio poprzez dwuwejściową tablicę prawdy układu.
Pływający (brak połączenia) — tryb niezależny: każdy pin staje się samodzielnym sterownikiem liniowym przypisanym do jednego wyjścia.
Każdy układ DRV8876 ma ograniczenie prądowe do 3 A łącznie na układ — to 3 A przez jeden mostek (tryb DIR/PWM lub mostka H) albo 1,5 A na wyjście rozdzielone na dwa wyjścia (tryb niezależny).
Zastosowanie¶
Tryb DIR/PWM (domyślny)¶
Steruj szczotkowym silnikiem DC na parze wyjść O1/O2 — ustaw kierunek na P0 i podaj sygnał prędkości PWM na P7. Poniższa pętla zwiększa wypełnienie do pełnej prędkości i z powrotem je zmniejsza, następnie odwraca kierunek i powtarza:
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)
Dwa mostki H mogą również napędzać silnik krokowy dwubiegunowy — utrzymuj oba kanały PWM na pełnym napędzie i przełączaj piny DIR przez czterofazową sekwencję:
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)
Tryb mostka H¶
Gdy zworka trybu jest ustawiona w stan wysoki, oba piny mostka sterują mostkiem H bezpośrednio. Dla O1/O2 tablica prawdy wygląda tak:
(P0, P7) = (L, L)→ wybieg (wyjścia w stanie Hi-Z)(P0, P7) = (L, H)→ do przodu (O1 = H, O2 = L)(P0, P7) = (H, L)→ do tyłu (O1 = L, O2 = H)(P0, P7) = (H, H)→ hamowanie (oba wyjścia w stanie niskim)
(O3/O4 stosuje tę samą tablicę z P1/P2 i P8.) Poniższa pętla przeprowadza silnik przez cykl do przodu → hamowanie → do tyłu → wybieg na parze wyjść 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)
Dowolny pin można zastąpić kanałem machine.PWM dla napędu proporcjonalnego — np. (P0=0, P7=PWM) daje do przodu/wybieg przy wypełnieniu PWM, a (P0=1, P7=PWM) daje do tyłu/hamowanie przy (100 % − duty). Poniższa pętla zwiększa i zmniejsza wypełnienie z P0 utrzymywanym na 0 (do przodu/wybieg):
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)
Tryb niezależny¶
Gdy zworka trybu jest pływająca, każdy pin staje się samodzielnym sterownikiem liniowym przypisanym do jednego wyjścia — przydatne dla elektrozaworów, przekaźników lub dowolnego obciążenia typu włącz/wyłącz, które nie wymaga mostka H. Mapowanie to P7 → O1, P0 → O2, P8 → O3 i P1 (lub 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)
Dowolny z czterech pinów można również wysterować PWM poprzez machine.PWM dla napędu proporcjonalnego — na przykład, rozjaśniaj i przyciemniaj kolejno każde wyjście:
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)
Pozostałe I/O¶
Odczytaj wejście listwy zaciskowej AIN przez pin P6 po konwersji poziomu:
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)
Reaguj na zbocze opadające na linii SYN — na przykład, aby zsynchronizować kamerę z innym urządzeniem ściągającym SYN do stanu niskiego:
from machine import Pin
def on_sync(pin):
print("SYN falling edge")
syn = Pin("P10", Pin.IN)
syn.irq(on_sync, Pin.IRQ_FALLING)