Pololu MC33926モータードライバモジュール

https://www.pololu.com/product/1213
pololuのモータードライバモジュールの動かし方を毎度毎度忘れてしまうのでメモ

仕様

フルHブリッジのMC33926が2つ載ったドライバ。定格3A程度で、5~28Vの電圧をVINに供給可能。

必要最低限動かすのに必要なピンは以下の表。ジャンパーしがちなホールだけ2列になっている。
真ん中3列はジャンパーしちゃって良さそうかな。バッテリー駆動とかならENピンは活かすと良い。

PIN 状態 仕様
VIN HIGH 駆動電圧用の電源ピン。
GND LOW グラウンド
VDD HIGH ロジック電圧。電源とは別に3~5Vの範囲でかける
IN1 OUT1ピンを制御する。M1/M2でそれぞれ2個ある
IN2 IN1とほぼ同義。
PWM/D2 LOW HIGHにするとOUT1とOUT2がハイインピーダンスになる。ここにPWMを入れてあげれば、方向とは別に出力をコントロールできる。
PWM/D1 HIGH D2の逆。逆だがD2とはANDという事なのか…?片方だけハイインピーダンスを指定したらどうなるんだろう
INV HIGH HIGHでINに対する正転逆転が逆になる。
SLEW HIGH HIGHにするとスルーレートが速くなる。10kHzを超えるような高速のPWMで制御する時に使う
EN HIGH イネーブル。LOWにすると低電流スリープ状態に入る。

シールドではEN以外をジャンパー。

Arduinoでとりあえず動かす

//2列部分はすべてジャンパーした場合の動作
#define PIN_M1IN1 3
#define PIN_M1IN2 4
#define PIN_M2IN1 5
#define PIN_M2IN2 6

void setup()
{
    pinMode(PIN_M1IN1, OUTPUT);
    pinMode(PIN_M1IN2, OUTPUT);
    pinMode(PIN_M2IN1, OUTPUT);
    pinMode(PIN_M2IN2, OUTPUT);
}

void loop()
{
    delay(1000);
    drive(true, true);

    delay(1000);
    stop(true);

    delay(1000);
    drive(false, true);

    delay(1000);
    stop(true);
}

void stop(bool isM1)
{
    digitalWrite(isM1 ? PIN_M1IN1 : PIN_M2IN1, LOW);
    digitalWrite(isM1 ? PIN_M1IN2 : PIN_M2IN2, LOW);
}

void drive(bool isM1, bool isCW)
{
    digitalWrite(isM1 ? PIN_M1IN1 : PIN_M2IN1, isCW);
    digitalWrite(isM1 ? PIN_M1IN2 : PIN_M2IN2, !isCW);
}

メモ

研究用に基板起こして使っているので基板がいっぱい余ってる…
ESPでサーバー立ててwebSocketでコントロールしてたリポジトリ

https://github.com/loveandsheep/microcosm_type2