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); } }