2019年10月25日
ここでは、Pololu G2ハイパワーモータドライバ24v21を使ってSM方式とLAP方式を実装する方法を説明します。
モータドライバの使用する入力ピンはSLP、DIR、PWMの3種類です。
SM方式では、つぎのように、PWMピンにPWM信号を入力し、DIRピンのHIGH/LOWで回転方向を制御します。
| SLP | DIR | PWM | MxA | MxB | モータの状態 |
|---|---|---|---|---|---|
| 1 | 1 | PWM出力 | PWM (High/Low) | Low | PWM 正転/ブレーキ |
| 1 | 0 | PWM出力 | Low | PWM (High/Low) | PWM 逆転/ブレーキ |
| 1 | X | 0 | Low | Low | ブレーキ |
| 0 | X | X | – | – | オフ |
LAP方式では、つぎのように、PWMピンの入力をHIGHに固定し、DIRピンにPWM信号を入力します。
| SLP | DIR | PWM | MxA | MxB | モータの状態 |
|---|---|---|---|---|---|
| 1 | PWM出力 | 1 | PWM (High/Low) | PWM (Low/High) | PWM 正転/逆転 |
| 1 | PWMデューティ比0.5 | 1 | High/Low | Low/High | 強ブレーキ |
| 1 | X | 0 | Low | Low | ブレーキ |
| 0 | X | X | – | – | オフ |
つぎのように、モータ、モータドライバ、Arduinoを接続します。

#define G2_PWM 9
#define G2_DIR 10
void setup() {
// pin9,10 PWM周波数を変える -> 31372.55 Hz
TCCR1B = (TCCR1B & 0b11111000) | 0x01;
pinMode(G2_DIR, OUTPUT);
analogWrite(G2_PWM, 0);
}
void loop() {
// 停止->正転
digitalWrite(G2_DIR, 1);
for(int i = 0; i < 255; i++)
{
analogWrite(G2_PWM, i);
delay(5);
}
// 正転->停止
for(int i = 255; i > 0; i--)
{
analogWrite(G2_PWM, i);
delay(5);
}
// 停止->逆転
digitalWrite(G2_DIR, 0);
for(int i = 0; i < 255; i++)
{
analogWrite(G2_PWM, i);
delay(5);
}
// 逆転->停止
for(int i = 255; i > 0; i--)
{
analogWrite(G2_PWM, i);
delay(5);
}
}
つぎのように、モータ、モータドライバ、Arduinoを接続します。

#define G2_PWM 9
#define G2_DIR 10
void setup() {
// pin9,10 PWM周波数を変える -> 31372.55 Hz
TCCR1B = (TCCR1B & 0b11111000) | 0x01;
pinMode(G2_PWM, OUTPUT);
analogWrite(G2_DIR, 128);
digitalWrite(G2_PWM, 1);
// 停止->逆転
for(int i = 128; i > 0; i--)
{
analogWrite(G2_DIR, i);
delay(10);
}
}
void loop() {
// 逆転->正転
for(int i = 0; i < 255; i++)
{
analogWrite(G2_DIR, i);
delay(10);
}
// 正転->逆転
for(int i = 255; i > 0; i--)
{
analogWrite(G2_DIR, i);
delay(10);
}
}