創るたのしみを応援

モータドライバのPWM制御 SM方式とLAP方式の特徴と実装

Pololu G2ハイパワーモータドライバ24v21の実装例

ここでは、Pololu G2ハイパワーモータドライバ24v21を使ってSM方式とLAP方式を実装する方法を説明します。

入力ピン

モータドライバの使用する入力ピンはSLP、DIR、PWMの3種類です。

SM方式のピン対応

SM方式では、つぎのように、PWMピンにPWM信号を入力し、DIRピンのHIGH/LOWで回転方向を制御します。

SLPDIRPWMMxAMxBモータの状態
11PWM出力PWM (High/Low)LowPWM 正転/ブレーキ
10PWM出力LowPWM (High/Low)PWM 逆転/ブレーキ
1X0LowLowブレーキ
0XXオフ

LAP方式のピン対応

LAP方式では、つぎのように、PWMピンの入力をHIGHに固定し、DIRピンにPWM信号を入力します。

SLPDIRPWMMxAMxBモータの状態
1PWM出力1PWM (High/Low)PWM (Low/High)PWM 正転/逆転
1PWMデューティ比0.51High/LowLow/High強ブレーキ
1X0LowLowブレーキ
0XXオフ

SM方式

接続例

つぎのように、モータ、モータドライバ、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);
  }
}

LAP方式

接続例

つぎのように、モータ、モータドライバ、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);
  }
}