Motor Shield

Motor Shieldは、TB6612FNGデュアルHブリッジを使用してOpenMV Camから2個のDCモーターを駆動します。NCP1117 5 Vリニアレギュレータを搭載し、単一の6.5~18 Vバッテリー入力からカメラとモーターの両方に電源を供給します。

Motor Shield

完全なデータシート、写真、注文方法については、Motor Shield製品ページ を参照してください。

主な特長

  • PWM速度制御付きの独立した2つのモーターチャンネル

  • チャンネルあたり最大2 Aの駆動電流

  • バイポーラステッパーモーターも駆動可能

  • Servo Shieldと積み重ね可能

ピン配置

Motor Shieldのピン配置

ピンリファレンス

ピン

機能

P0

DIR B1(モーターBの方向)

P1

DIR B0(モーターBの方向)

P2

DIR A1(モーターAの方向)

P3

DIR A0(モーターAの方向)

P6

TB6612FNG STANDBY — デフォルトでオン。Lowに引っ張ると低電力モードに入ります

P7

モーターAのPWM速度入力

P8

モーターBのPWM速度入力

VBAT入力

ネジ端子上の6.5~18 Vバッテリー入力(NCP1117の制限)

VIN出力

オンボードNCP1117レギュレータから5 V(カメラに電源を供給)

3.3Vレール

TB6612FNGのロジックに電源を供給

GNDレール

共通グラウンド

注釈

P6はデフォルトでTB6612のSTANDBY入力を駆動します。ピンを別の用途に使いたい場合は、シールド裏面のはんだトレースをカットしてP6を切り離してください(その場合、ドライバーは有効なままになります)。

注釈

TB6612FNGは、2入力真理値表とPWMイネーブルを通じて各モーターを駆動します。モーターAの場合(STBYがHigh、PWMAが任意の非ゼロデューティのとき):

  • (P3, P2) = (H, L) → 正転

  • (P3, P2) = (L, H) → 逆転

  • (P3, P2) = (L, L) → コースト(出力Hi-Z)

  • (P3, P2) = (H, H) → ブレーキ(両出力ともLow)

PWMAをLowにすると、方向入力に関係なく短絡ブレーキがかかります。デューティサイクル0 %でモーターがブレーキします。モーターBはPWMをP8に使用して (P1, P0) で同じ表に従います。

使い方

固定PWMデューティでモーターAを正転 → ブレーキ → 逆転 → コーストと循環させます:

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をコーストから全速正転まで上げてから下げます:

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の2つのHブリッジは、バイポーラステッパーをウェーブ駆動することもできます。一度に1つのコイルを励磁し、4相を進めます。両方のPWMチャンネルを希望の駆動電流に保ち、step() を呼び出していずれかの方向に1完全シーケンスを進めます:

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をLowに引っ張ると、TB6612をスリープさせます:

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