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.
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¶
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