Loading [MathJax]/extensions/tex2jax.js
創るたのしみを応援

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

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

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

SM方式

接続例

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

プログラム例

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#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);
}
}
#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); } }
#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を接続します。

プログラム例

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#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);
}
}
#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); } }
#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);
  }
}