Щит Driver

Щит Driver керує двома двигунами по 3 А або чотирма незалежними лінійними драйверами по 1,5 А від широкодіапазонного джерела живлення 6–36 В, надаючи OpenMV Cam потужний блок керування двигунами із захистом від зворотної полярності та перенапруги.

Driver Shield

Повну документацію, фотографії та інформацію про замовлення дивіться на сторінці продукту Driver Shield.

Особливості

  • Подвійні драйвери двигунів 3 А АБО чотири лінійних драйвери 1,5 А, 6–36 В

  • Захист від зворотної полярності та перехідних стрибків напруги на вході

  • Аналоговий вхід 0–5 В з захистом від перенапруги ±36 В

  • Цифровий вхід/вихід 0–5 В для сигналів синхронізації камери, із захистом від короткого замикання

Розпіновка

Driver Shield Pinout

Довідник виводів

Вивід

Функція

P0

DIR для пари виходів O1/O2

P1

DIR для пари виходів O3/O4 (альтернативний варіант)

P2

DIR для пари виходів O3/O4 (за замовчуванням)

P6

Зчитування AIN зі зміщенням рівня (0–3,3 В на P6)

P7

PWM для пари виходів O1/O2

P8

PWM для пари виходів O3/O4

P10

SYN — цифровий вхід/вихід з відкритим стоком на клемній колодці

PWR вхід

Широкодіапазонний вхід 6–36 В на клемній колодці (стійкий до зворотної полярності)

AIN вхід

Аналоговий вхід на клемній колодці

VIN вихід

5,4 В при струмі до 600 мА від вбудованого стабілізатора

Шина 3.3В

Живить вбудовану електроніку щита

Шина GND

Загальна земля

Примітка

Вхід AIN захищений від перенапруги до ±36 В і за замовчуванням налаштований на вхідну напругу 0–5 В, яка масштабується до 0–3,3 В на P6. Замкніть перемичку режиму 4–20 мА на лицьовій стороні щита, щоб перемкнути AIN на вхід струмової петлі 4–20 мА.

Примітка

SYN — цифрова лінія з відкритим стоком, підтягнута до 3,3 В з боку камери та до 5 В з боку клеми SYN. За замовчуванням вона є входом — щит зміщує рівень 0–5 В на SYN до 0–3,3 В на P10. Змініть вбудований перемичковий джампер, щоб перевести P10 у режим виходу із зміщенням рівня 0–3,3 В на P10 до 0–5 В на SYN.

Примітка

Кожен із виводів P0, P1, P2, P6, P7, P8 та P10 можна звільнити для інших цілей. P0, P2, P6, P7, P8 та P10 підключені за замовчуванням через перемичкові джампери на зворотній стороні — відкрийте джампер на будь-якому виводі, який хочете звільнити. P1 за замовчуванням відключений: замкніть його джампер на лицьовій стороні, щоб підключити DIR для O3/O4 до P1 (і відкрийте джампер P2 на зворотній стороні, щоб звільнити P2).

Примітка

Два перемикачі режиму на зворотній стороні щита — по одному на кожен H-міст — незалежно задають для кожної пари виходів один із трьох режимів. Кожен перемикач має мітки L і H, що показують, який стан вибирає кожна сторона:

  • Низький (за замовчуванням) — режим DIR/PWM: один вивід DIR і один вивід PWM на міст.

  • Високий — режим H-моста: обидва виводи безпосередньо керують мостом через таблицю істинності двовходової мікросхеми.

  • Плаваючий (без підключення) — незалежний режим: кожен вивід стає окремим лінійним драйвером, підключеним до одного виходу.

Кожна мікросхема DRV8876 має обмеження по струму 3 А на мікросхему — це 3 А через один міст (режим DIR/PWM або H-міст) або 1,5 А на вихід при розподілі між двома виходами (незалежний режим).

Використання

Режим DIR/PWM (за замовчуванням)

Керуйте колекторним двигуном постійного струму на парі виходів O1/O2 — задайте напрямок на P0 та подайте сигнал PWM для керування швидкістю на P7. Цикл нижче плавно збільшує робочий цикл до повної швидкості і назад, потім змінює напрямок і повторює:

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)

Два H-мости також можуть керувати біполярним кроковим двигуном — утримуйте обидва канали PWM при повному рівні та перемикайте виводи DIR через чотирифазну послідовність:

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-мостом. Для O1/O2 таблиця істинності така:

  • (P0, P7) = (L, L) → ковзання (виходи Hi-Z)

  • (P0, P7) = (L, H) → вперед (O1 = H, O2 = L)

  • (P0, P7) = (H, L) → назад (O1 = L, O2 = H)

  • (P0, P7) = (H, H) → гальмування (обидва виходи низькі)

(O3/O4 використовує ту саму таблицю з P1/P2 та P8.) Цикл нижче переводить двигун через режими: вперед → гальмування → назад → ковзання на парі виходів 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)

Будь-який вивід можна замінити каналом machine.PWM для пропорційного керування — наприклад, (P0=0, P7=PWM) дає вперед/ковзання з відповідним робочим циклом PWM, а (P0=1, P7=PWM) дає назад/гальмування при (100 % duty). Цикл нижче плавно збільшує та зменшує робочий цикл при P0 = 0 (вперед/ковзання):

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)

Незалежний режим

Коли перемикач режиму в плаваючому положенні, кожен вивід стає окремим лінійним драйвером, підключеним до одного виходу — корисно для соленоїдів, реле або будь-якого навантаження типу ввімкнено/вимкнено, яке не потребує H-моста. Відображення: P7 → O1, P0 → O2, P8 → O3 та P1 (або 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)

Будь-який із чотирьох виводів також може керуватися через machine.PWM для пропорційного керування — наприклад, плавно збільшуйте та зменшуйте яскравість кожного виходу по черзі:

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)

Інший вхід/вихід

Зчитуйте вхід клемної колодки AIN через вивід 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)

Реагуйте на спадний фронт на лінії SYN — наприклад, для синхронізації камери з іншим пристроєм, що переводить SYN у низький рівень:

from machine import Pin

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

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