創るたのしみを応援

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

Pololu デュアルG2ハイパワーモータドライバ18v22

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

SM方式

接続例

つぎのように、モータ、モータドライバ、Arduinoを接続します。

プログラム例

#define M1PWM     9
#define M2PWM     10
#define M1nSLEEP  2
#define M2nSLEEP  4
#define M1DIR     7
#define M2DIR     8

void setup() {
  // pin9,10 PWM周波数を変える -> 31372.55 Hz
  TCCR1B = (TCCR1B & 0b11111000) | 0x01;
  pinMode(M1nSLEEP, OUTPUT);
  pinMode(M1DIR, OUTPUT);
  analogWrite(M1PWM, 0);
  digitalWrite(M1nSLEEP, 1);
}

void loop() {
  // 停止->正転
  digitalWrite(M1DIR, 1);
  for(int i = 0; i < 255; i++)
  {
    analogWrite(M1PWM, i);
    delay(5);
  }
  // 正転->停止
  for(int i = 255; i > 0; i--)
  {
    analogWrite(M1PWM, i);
    delay(5);
  }

  // 停止->逆転
  digitalWrite(M1DIR, 0);
  for(int i = 0; i < 255; i++)
  {
    analogWrite(M1PWM, i);
    delay(5);
  }
  // 逆転->停止
  for(int i = 255; i > 0; i--)
  {
    analogWrite(M1PWM, 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);
  }
}