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