Motor Shield

Motor Shield ขับมอเตอร์ DC สองตัวจาก OpenMV Cam โดยใช้ TB6612FNG dual H-bridge พร้อม NCP1117 ตัวควบคุมแรงดันเชิงเส้น 5 V ที่จ่ายไฟให้ทั้งกล้องและมอเตอร์จากแบตเตอรี่ขนาด 6.5–18 V เส้นเดียว

Motor Shield

ดูข้อมูลทางเทคนิคฉบับเต็ม รูปภาพ และการสั่งซื้อได้ที่ หน้าผลิตภัณฑ์ Motor Shield

คุณสมบัติเด่น

  • ช่องมอเตอร์อิสระสองช่องพร้อมการควบคุมความเร็ว PWM

  • กระแสขับสูงสุด 2 A ต่อช่อง

  • สามารถขับมอเตอร์สเต็ปเปอร์แบบไบโพลาร์ได้

  • เชื่อมกับ Servo Shield ได้

การจัดเรียงพิน

Motor Shield Pinout

ข้อมูลอ้างอิงพิน

พิน

ฟังก์ชัน

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