1

複数の PWM 出力がどのように機能するのかわかりません。写真を見てください。 ここに画像の説明を入力

最初の (1) のケースでは、モーターの静止に近い短い信号幅を使用しています。この場合、ご覧のとおり、短いパルスが相互に続き、コードも同様です。

motor1.writeMicroseconds(shortWidth);
motor2.writeMicroseconds(shortWidth);
motor3.writeMicroseconds(shortWidth);
motor4.writeMicroseconds(shortWidth);

motor4 が出力を終了すると、motor1 が再びパルスを開始し、問題のない結果のパルスが発生します。

2 番目のケース (2) では、パルスがより広く、これはモーター速度を最大に近い設定に対応します。motor1 が wi​​dth の生成を終了したら、motor2 が幅を生成します。しかし、そうすると、motor1 の期間が終了し、再び幅の生成を開始する必要がありますが、arduino は motor2 のパルスを生成するのに忙しいです。

この場合、PWM はどのように機能しますか?

4

1 に答える 1

1

Servo.hとのコードを直接見たいと思うかもしれませんServo.cpp。ただし、理解を助けるために次の 2 つの点があります。

  1. サーボは、PWM (パルス幅変調 - パルス持続時間対サイクル持続時間) には反応しませんが、PDM (パルス持続時間変調 - 絶対時間値) には反応しません。これは、パルスの持続時間が 0 の場合、サーボが 0 にならないことを意味し、中間範囲になります。 (90°) パルスが 1.5 ms のとき、パルスが 1 ms のとき最小位置 (0°) に向かって移動し、パルスの持続時間が 2 ms になると最大位置 (180°) に移動します. 合計周期は常に約 20 ms です.より正確に言うと、一般的に 0° と 180° に完全に到達することはなく、最小時間は 0.5 ms、最大時間は約 2.5 ms ですが、これはほとんどのサーボの仕様を超えています。
  2. いくつかのサーボは、単一のタイマー (通常は Arduino の timer_1) によって制御されます。Servo.write(value) を実行するとタイマーがプログラムされ、ハードウェアが適切なタイミングでピンの変更を生成します。

次のコードを試すことができます。

#include <Servo.h>

Servo myServo1;
Servo myServo2;
const int servo1Pin = 9;
const int servo2Pin = 10;

void setup(){
    // attach servo to pin 
    myServo1.attach(servo1Pin);
    myServo2.attach(servo2Pin);
}

void loop(){
    myServo1.write(15); //set servo to 15°
    myServo2.write(45); //set servo to 45°
    delay(1000); //wait 1 second
    myServo1.write(90); //set servo to 90°
    myServo2.write(90); //set servo to 90°
    delay(1000); //wait 1 second
    myServo1.write(165); //set servo to 165°
    myServo2.write(135); //set servo to 135°
    delay(1000); //wait 1 second
}
于 2015-01-10T22:27:52.387 に答える