Motor Shield¶
Motor Shield ขับมอเตอร์ DC สองตัวจาก OpenMV Cam โดยใช้ TB6612FNG dual H-bridge พร้อม NCP1117 ตัวควบคุมแรงดันเชิงเส้น 5 V ที่จ่ายไฟให้ทั้งกล้องและมอเตอร์จากแบตเตอรี่ขนาด 6.5–18 V เส้นเดียว
ดูข้อมูลทางเทคนิคฉบับเต็ม รูปภาพ และการสั่งซื้อได้ที่ หน้าผลิตภัณฑ์ Motor Shield
คุณสมบัติเด่น¶
ช่องมอเตอร์อิสระสองช่องพร้อมการควบคุมความเร็ว PWM
กระแสขับสูงสุด 2 A ต่อช่อง
สามารถขับมอเตอร์สเต็ปเปอร์แบบไบโพลาร์ได้
เชื่อมกับ 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 V บนขั้วต่อแบบสกรู (ขีดจำกัด NCP1117) |
VIN out |
5 V จากตัวควบคุม NCP1117 บนบอร์ด (จ่ายไฟให้กล้อง) |
3.3V rail |
จ่ายไฟให้กับลอจิก TB6612FNG |
GND rail |
กราวด์ร่วม |
Note
P6 ขับอินพุต TB6612 STANDBY โดยค่าเริ่มต้น ตัดรอยบัดกรีที่ด้านหลังของชีลด์เพื่อตัดการเชื่อมต่อ P6 หากต้องการใช้พินนี้สำหรับอย่างอื่น (ไดรเวอร์จะยังคงเปิดใช้งาน)
Note
TB6612FNG ขับมอเตอร์แต่ละตัวผ่านตารางความจริงสองอินพุตบวก PWM enable สำหรับมอเตอร์ A (โดย STBY สูงและ PWMA ที่ดิวตี้ใดๆ ที่ไม่ใช่ศูนย์):
(P3, P2) = (H, L)→ ไปข้างหน้า(P3, P2) = (L, H)→ ถอยหลัง(P3, P2) = (L, L)→ coast (เอาต์พุต Hi-Z)(P3, P2) = (H, H)→ เบรก (เอาต์พุตทั้งคู่ low)
การขับ PWMA ต่ำบังคับให้เบรกทันทีโดยไม่คำนึงถึงอินพุตทิศทาง — ดิวตี้ไซเคิล 0% จะเบรกมอเตอร์ มอเตอร์ B ใช้ตารางเดียวกันบน (P1, P0) โดยมี PWM บน P8
การใช้งาน¶
หมุนมอเตอร์ A ผ่าน ไปข้างหน้า → เบรก → ถอยหลัง → coast ที่ดิวตี้ 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 จาก coast ไปจนถึงความเร็วสูงสุดไปข้างหน้าและกลับ:
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-bridge ทั้งสองของ TB6612 ยังสามารถ wave-drive มอเตอร์สเต็ปเปอร์แบบไบโพลาร์ได้ด้วย — จ่ายไฟขดลวดหนึ่งเส้นในแต่ละครั้ง เดินผ่านสี่เฟส คง 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 บนบอร์ดค่าเริ่มต้นเป็น high (ไดรเวอร์เปิดใช้งาน) ดึง P6 ต่ำเพื่อให้ TB6612 เข้าสู่โหมดสลีป:
from machine import Pin
Pin("P6", Pin.OUT).value(0) # standby