Motor Shield

Motor Shield управляет двумя двигателями постоянного тока от OpenMV Cam с помощью сдвоенного H-моста TB6612FNG и линейного стабилизатора 5 В NCP1117, который питает и камеру, и моторы от единственного батарейного входа 6,5–18 В.

Motor Shield

Полный datasheet, фотографии и информацию для заказа смотрите на странице продукта Motor Shield.

Основные характеристики

  • Два независимых канала моторов с управлением скоростью через PWM

  • Ток управления до 2 А на канал

  • Также может управлять биполярным шаговым двигателем

  • Стыкуется с Servo Shield

Распиновка

Распиновка Motor Shield

Описание выводов

Вывод

Функция

P0

DIR B1 (направление мотора B)

P1

DIR B0 (направление мотора B)

P2

DIR A1 (направление мотора A)

P3

DIR A0 (направление мотора A)

P6

TB6612FNG STANDBY — по умолчанию включён; притяните к низкому уровню для перехода в режим низкого энергопотребления

P7

Вход скорости PWM для мотора A

P8

Вход скорости PWM для мотора B

VBAT in

Батарейный вход 6,5–18 В на винтовой клемме (ограничения NCP1117)

VIN out

5 В от встроенного стабилизатора NCP1117 (питает камеру)

Шина 3,3 В

Питает логику TB6612FNG

Шина GND

Общая земля

Примечание

P6 по умолчанию управляет входом STANDBY микросхемы TB6612. Перережьте паяную дорожку на обратной стороне шилда, чтобы отключить P6, если хотите использовать вывод для чего-то другого (драйвер тогда остаётся постоянно включённым).

Примечание

TB6612FNG управляет каждым мотором через таблицу истинности двух входов плюс разрешение PWM. Для мотора A (при STBY в высоком уровне и PWMA с любой ненулевой скважностью):

  • (P3, P2) = (H, L) → вперёд

  • (P3, P2) = (L, H) → назад

  • (P3, P2) = (L, L) → свободный ход (выходы Hi-Z)

  • (P3, P2) = (H, H) → торможение (оба выхода в низком уровне)

Установка PWMA в низкий уровень принудительно вызывает кратковременное торможение независимо от входов направления — скважность 0 % тормозит мотор. Мотор B следует той же таблице на (P1, P0) с PWM на P8.

Использование

Прогоняйте мотор A через вперёд → торможение → назад → свободный ход на фиксированной скважности PWM:

from machine import Pin, PWM
import time

a0 = Pin("P3", Pin.OUT)  # AIN1
a1 = Pin("P2", Pin.OUT)  # AIN2
pwma = PWM(Pin("P7"), freq=1_000, duty_u16=40_000)  # ~60%


def drive(in1, in2):
    a0.value(in1)
    a1.value(in2)


while True:
    drive(1, 0)         # forward
    time.sleep(2)
    drive(1, 1)         # brake
    time.sleep_ms(500)
    drive(0, 1)         # reverse
    time.sleep(2)
    drive(0, 0)         # coast
    time.sleep_ms(500)

Для регулировки скорости удерживайте входы направления постоянными и изменяйте PWMA. Цикл ниже плавно разгоняет мотор A от свободного хода до полного хода вперёд и обратно:

from machine import Pin, PWM
import time

Pin("P3", Pin.OUT, value=1)  # AIN1=H
Pin("P2", Pin.OUT, value=0)  # AIN2=L → forward direction
pwma = PWM(Pin("P7"), freq=1_000, duty_u16=0)

while True:
    for duty in range(0, 65_536, 1024):
        pwma.duty_u16(duty)
        time.sleep_ms(10)
    for duty in range(65_535, -1, -1024):
        pwma.duty_u16(duty)
        time.sleep_ms(10)

Два H-моста TB6612 также могут управлять биполярным шаговым двигателем волновым методом — запитывая по одной обмотке за раз и проходя четыре фазы. Удерживайте оба канала PWM на нужном токе управления и вызывайте step() для продвижения на одну полную последовательность в любом направлении:

from machine import Pin, PWM
import time

a0 = Pin("P3", Pin.OUT)
a1 = Pin("P2", Pin.OUT)
b0 = Pin("P1", Pin.OUT)
b1 = Pin("P0", Pin.OUT)
PWM(Pin("P7"), freq=1_000, duty_u16=32_768)  # 50% drive on A
PWM(Pin("P8"), freq=1_000, duty_u16=32_768)  # 50% drive on B

SEQUENCE = [(1, 0, 0, 0), (0, 0, 1, 0), (0, 1, 0, 0), (0, 0, 0, 1)]


def step(forward=True):
    for s in SEQUENCE if forward else reversed(SEQUENCE):
        a0.value(s[0])
        a1.value(s[1])
        b0.value(s[2])
        b1.value(s[3])
        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)

Встроенная линия STANDBY по умолчанию в высоком уровне (драйвер включён). Притяните P6 к низкому уровню, чтобы перевести TB6612 в спящий режим:

from machine import Pin
Pin("P6", Pin.OUT).value(0)  # standby