Motor Shield¶
Motor Shield điều khiển hai động cơ DC từ OpenMV Cam sử dụng H-bridge kép TB6612FNG, với bộ điều áp tuyến tính NCP1117 5 V cấp nguồn cho cả camera và động cơ từ một đầu vào pin 6,5–18 V duy nhất.
Để xem datasheet đầy đủ, hình ảnh và đặt hàng, hãy truy cập trang sản phẩm Motor Shield.
Tính năng nổi bật¶
Hai kênh động cơ độc lập với điều khiển tốc độ PWM
Dòng điều khiển tối đa 2 A mỗi kênh
Có thể điều khiển động cơ bước lưỡng cực
Ghép được với Servo Shield
Sơ đồ chân¶
Tham chiếu chân (pin)¶
Chân (pin) |
Chức năng |
|---|---|
P0 |
DIR B1 (hướng động cơ B) |
P1 |
DIR B0 (hướng động cơ B) |
P2 |
DIR A1 (hướng động cơ A) |
P3 |
DIR A0 (hướng động cơ A) |
P6 |
TB6612FNG STANDBY — mặc định bật; kéo thấp để vào chế độ tiết kiệm điện |
P7 |
Đầu vào tốc độ PWM cho động cơ A |
P8 |
Đầu vào tốc độ PWM cho động cơ B |
VBAT in |
Đầu vào pin 6,5–18 V trên đầu vít (giới hạn NCP1117) |
VIN out |
5 V từ bộ điều áp NCP1117 tích hợp (cấp nguồn cho camera) |
3.3V rail |
Cấp nguồn cho logic TB6612FNG |
GND rail |
Đất chung |
Ghi chú
P6 điều khiển đầu vào STANDBY của TB6612 theo mặc định. Cắt dây hàn ở mặt sau của shield để ngắt kết nối P6 nếu bạn muốn dùng chân này cho mục đích khác (khi đó driver luôn được kích hoạt).
Ghi chú
TB6612FNG điều khiển mỗi động cơ thông qua bảng sự thật hai đầu vào cùng với một bộ kích hoạt PWM. Đối với động cơ A (với STBY cao và PWMA ở bất kỳ chu kỳ nhiệm vụ khác không nào):
(P3, P2) = (H, L)→ tiến(P3, P2) = (L, H)→ lùi(P3, P2) = (L, L)→ trôi tự do (đầu ra Hi-Z)(P3, P2) = (H, H)→ hãm (cả hai đầu ra ở mức thấp)
Đặt PWMA thấp buộc hãm ngắn bất kể đầu vào hướng — chu kỳ nhiệm vụ 0% hãm động cơ. Động cơ B theo cùng bảng trên (P1, P0) với PWM trên P8.
Sử dụng¶
Chu kỳ hóa động cơ A qua tiến → hãm → lùi → trôi tự do ở chu kỳ nhiệm vụ PWM cố định:
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)
Để điều khiển tốc độ biến đổi, giữ các đầu vào hướng không đổi và tăng dần PWMA. Vòng lặp bên dưới tăng dần động cơ A từ trôi tự do lên tốc độ tiến tối đa và trở lại:
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)
Hai H-bridge của TB6612 cũng có thể điều khiển stepper lưỡng cực theo kiểu kích sóng — kích từng cuộn một, đi qua bốn pha. Giữ cả hai kênh PWM ở dòng điều khiển mong muốn và gọi step() để tiến một chuỗi đầy đủ theo một trong hai hướng:
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)
Đường STANDBY tích hợp mặc định ở mức cao (driver được kích hoạt). Kéo P6 thấp để đưa TB6612 vào chế độ ngủ:
from machine import Pin
Pin("P6", Pin.OUT).value(0) # standby