Motor Shield¶
Motor Shield управляет двумя двигателями постоянного тока от OpenMV Cam с помощью сдвоенного H-моста TB6612FNG и линейного стабилизатора 5 В NCP1117, который питает и камеру, и моторы от единственного батарейного входа 6,5–18 В.
Полный datasheet, фотографии и информацию для заказа смотрите на странице продукта Motor Shield.
Основные характеристики¶
Два независимых канала моторов с управлением скоростью через PWM
Ток управления до 2 А на канал
Также может управлять биполярным шаговым двигателем
Стыкуется с Servo 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