Motor Shield

Motor Shield ohjaa kahta DC-moottoria OpenMV Cam -kamerasta TB6612FNG-kaksois-H-siltaa käyttäen, ja siinä on NCP1117 5 V:n lineaarisäädin, joka syöttää virran sekä kameralle että moottoreille yhdestä 6,5–18 V:n akkutulosta.

Motor Shield

Täydellisen datalehden, valokuvat ja tilaustiedot löydät Motor Shield -tuotesivulta.

Kohokohdat

  • Kaksi itsenäistä moottorikanavaa PWM-nopeudenohjauksella

  • Jopa 2 A:n ohjausvirta per kanava

  • Voi myös ohjata bipolaarista askelmoottoria

  • Pinottavissa Servo Shieldin kanssa

Nastat

Motor Shield -nastat

Nastaviite

Nasta

Toiminto

P0

DIR B1 (moottorin B suunta)

P1

DIR B0 (moottorin B suunta)

P2

DIR A1 (moottorin A suunta)

P3

DIR A0 (moottorin A suunta)

P6

TB6612FNG STANDBY — oletuksena päällä; vedä alas siirtyäksesi virransäästötilaan

P7

PWM-nopeustulo moottorille A

P8

PWM-nopeustulo moottorille B

VBAT in

6,5–18 V:n akkutulo ruuviliittimessä (NCP1117:n rajat)

VIN out

5 V kortin omasta NCP1117-säätimestä (syöttää kameran virran)

3,3 V:n kisko

Syöttää TB6612FNG-logiikan virran

GND-kisko

Yhteinen maa

Muista

P6 ohjaa oletuksena TB6612 STANDBY -tuloa. Katkaise suojuksen takana oleva juotosvana irrottaaksesi P6:n, jos haluat mieluummin käyttää nastaa johonkin muuhun (ohjain pysyy tällöin käytössä).

Muista

TB6612FNG ohjaa kutakin moottoria kaksitulon totuustaulun ja PWM-sallinnan avulla. Moottorille A (kun STBY on korkealla ja PWMA millä tahansa nollasta poikkeavalla pulssisuhteella):

  • (P3, P2) = (H, L) → eteenpäin

  • (P3, P2) = (L, H) → taaksepäin

  • (P3, P2) = (L, L) → vapaakierto (lähdöt Hi-Z)

  • (P3, P2) = (H, H) → jarrutus (molemmat lähdöt matalalla)

PWMA:n vetäminen matalalle pakottaa lyhyen jarrutuksen suuntatuloista riippumatta — 0 %:n pulssisuhde jarruttaa moottoria. Moottori B noudattaa samaa taulua nastoilla (P1, P0) PWM:llä nastassa P8.

Käyttö

Kierrätä moottori A tilojen eteenpäin → jarrutus → taaksepäin → vapaakierto kautta kiinteällä PWM-pulssisuhteella:

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)

Säädettävää nopeudenohjausta varten pidä suuntatulot vakioina ja nosta PWMA:ta. Alla oleva silmukka nostaa moottorin A vapaakierrosta täyteen eteenpäin ja takaisin alas:

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)

TB6612:n kaksi H-siltaa voivat myös aalto-ohjata bipolaarista askelmoottoria — virroita yksi käämi kerrallaan, kulkien neljän vaiheen läpi. Pidä molemmat PWM-kanavat halutulla ohjausvirralla ja kutsu step() edetäksesi yhden täyden sekvenssin kumpaan tahansa suuntaan:

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)

Kortin oma STANDBY-linja on oletuksena korkealla (ohjain käytössä). Vedä P6 alas asettaaksesi TB6612:n lepotilaan:

from machine import Pin
Pin("P6", Pin.OUT).value(0)  # standby