Wie erhalte ich die PWM-Frequenz und -Dauer jedes Impulses?

7

Ich habe einen ATmega8 und habe angefangen, am Servomotor HS-645MG zu arbeiten. Welche Frequenz funktioniert mit dem HS-645MG? Wie erhalte ich die Frequenz der PWM und die Dauer / Länge jedes Impulses? Gibt es eine Berechnung?

Dana Sorani
quelle

Antworten:

20

Servos des Modells Radio Control (RC) verwenden ein PPM mit Pulspositionsmodulation.

Es gibt einige Verwirrung über die Terminologie. Einige Leute nennen es Pulsweitenmodulation (PWM). Es ist sehr verständlich, weil die Breite des Impulses Informationen codiert. Auch die Timer-Hardware, die zum Erzeugen eines PWM-Signals verwendet wird, kann auch zum Erzeugen eines PPM-Signals verwendet werden.

Die Basis-PPM-Frequenz für ein RC-Servo beträgt 50 Hz, dh alle 20 ms ein Signal an das Servo. Modellservos sind in dieser Zeit sehr fehlertolerant, und 15 bis 25 ms können funktionieren, selbst wenn bei einigen nur 5 ms funktionieren.

Wenn der Impuls in der Breite variiert, schwenkt das Servo zwischen 0 und 180 Grad. Die empfohlene Länge des PPM-Impulses variiert geringfügig. Versuchen Sie es zwischen 1 ms und 2 ms. Wenn dies keine 180 Grad ergibt, versuchen Sie es mit 0,5 ms bis 2,5 ms. Möglicherweise müssen Sie einige Experimente durchführen, um es richtig zu machen.

Ein 1,5 ms langer Impuls befiehlt dem Servo, sich in der 90-Grad-Position "Mitte" zu befinden.

Sie können eine einfache Version davon erhalten, indem Sie Verzögerungen verwenden. Wenn die Länge der Impulsposition in Mikrosekunden gemessen und in gespeichert wird pos, würde dieser Arduino-Code das Servo antreiben

int servoPin = 9;   // pin attached to servo
int pos = 1500;     // initial servo position 

void setup() {                
  pinMode(servoPin, OUTPUT);     
}

void loop() {
  digitalWrite(servoPin, HIGH);   // start PPM pulse
  delayMicroseconds(pos);         // wait pulse diration
  digitalWrite(servoPin, LOW);    // complete the pulse
    // Note: delayMicroseconds() is limited to 16383µs
    // see http://arduino.cc/en/Reference/DelayMicroseconds
    // Hence delayMicroseconds(20000L-pos); has been replaced by:
  delayMicroseconds(5000-pos);   // adjust to 5ms period
  delay(15);                      // pad out 5ms to 20ms PPM period
}

WARNUNG: Dieser Code wurde kompiliert, aber nicht getestet.

Hinweis: delayMicroseconds()ist auf 16383µs begrenzt .
Daher delayMicroseconds (20000L-pos); wird fehlschlagen und wurde durch zwei Verzögerungen ersetzt: delayMicroseconds(5000L-pos);um eine geeignete Dauer zu verzögern, gefolgt von einer festen
delay(15);.
Einige Servos sind mit einem kürzeren Zyklus zufrieden, sodass sie möglicherweise einwandfrei funktionieren, wenn der delay(15);gelöscht wird

Dieses Diagramm könnte helfen: Geben Sie hier die Bildbeschreibung ein

PPM vs PWM
Der Unterschied zwischen PPM und PMW scheint ziemlich subtil zu sein. Die Breite des PPM-Impulses codiert jedoch direkt Positionsinformationen . Wenn die Impulsbreite geändert wird, bedeutet dies eine andere Position. PWM-Hardware kann zum Erzeugen eines PPM-Signals verwendet werden. Dies bedeutet jedoch nicht, dass PPM mit PWM identisch ist.

Bearbeiten: @ Adam.at.Epsilon schrieb eine klare, markige Erklärung in den Kommentaren unten:

PPM codiert Informationen nur in der positiven Impulsbreite, während PWM Informationen im gesamten Arbeitszyklus codiert

Anders ausgedrückt, ein PWM-Signal codiert ein Verhältnis . Das Verhältnis von auf zu off benötigt wird , um alle Informationen zu erhalten; auf allein ist nicht genug.

PPM ist nicht codierend ein Verhältnis. Die aktive Dauer des Signals (es könnte sein , positiv oder negativ) wird codiert , das eine ‚absolute‘ Position, und die tote Dauer des Signals (gegensinnig auf den aktiven Teil) gerade ‚in Füllzeit‘. Die Tote Dauer erheblich variiert werden , ohne in dem Signal , das die Bedeutung der Informationen zu ändern. Beispielsweise können einige "digitale Hobby-Servos" zuverlässig mit einer Totzeit des Signals von etwa 5 ms bis über 20 ms arbeiten, was einem Faktor von 400% entspricht. Wird sich jedoch mit einer Änderung der aktiven Signaldauer von 1% bewegen .

Ein PWM-Signal ist normalerweise eine "Codierungsleistung". Stellen Sie sich das PWM-Signal als Bruchteil der vollen Leistung vor. Je mehr ein Zyklus eingeschaltet ist (und je weniger ausgeschaltet ist), desto größer ist der Anteil der vollen Leistung. Während des gesamten Zyklus beträgt 100%, bei 60% (und damit bei 40%) 60% Leistung, bei 0% und bei 100% 0% Leistung usw.

Als konkretes Beispiel könnte PWM mit einer Frequenz von 200 Hz oder einer Periode von 5 ms laufen. Ein Signal mit einer maximalen Leistung von 50% oder 0,5% wird für 2,5 ms eingeschaltet und für 2,5 ms ausgeschaltet.

Dieser 2,5-ms-Impuls könnte von einem RC-Servo decodiert werden, der beispielsweise ein PPM-Signal von 180 Grad erwartet.

Ändern Sie die Frequenz auf 1000 Hz, und daher wird die Periode 1 ms. Das 50% -Signal wäre jetzt 0,5 ms ein und 0,5 ms aus. Dieses PWM-Signal codiert immer noch die gleichen 50% -Leistungsinformationen.

Das RC-Servo, das einen PPM-Impuls erwartet, decodiert diese Impulsbreite jedoch als eine andere Position und ändert entweder seine Position oder "gibt auf" und kann das Signal nicht verfolgen.

gbulmer
quelle
Ich war sehr überrascht, dass ich dies auf ee.se nicht finden konnte, aber ich suchte und fand nichts Passendes. Vermisse ich etwas
Gbulmer
Ich denke, du hast recht; Es scheint keine vorherige Antwort zu diesem Thema zu geben. Das nächstgelegene, das ich finden konnte, war electronic.stackexchange.com/a/92381/2028 .
JYelton
1
@gbulmer zuerst einmal Ihre Erklärung ist fantastisch. Würde eine alternative Möglichkeit, dasselbe auszudrücken, sagen, dass PPM Informationen nur in der positiven Impulsbreite codiert, während PWM Informationen im gesamten Arbeitszyklus codiert? Ein freundlicher Vorschlag in allen wohlmeinenden Fällen: Es kann einen Tippfehler oben im PPM gegen PWM geben , der besagt, PMWwo PWMgemeint war.
Adam.at.Epsilon
1
@ Adam.at.Epsilon - Vielen Dank, das ist genial! Ich habe mich bemüht, den Unterschied zu erklären, und Sie haben den Nagel auf den Kopf getroffen. Ich muss JETZT in die Läden gehen, aber ich werde später Ihren schönen, klaren, markigen Kommentar hinzufügen. Vielen Dank auch für das Erkennen des Tippfehlers.
Gbulmer
1
@ Adam.at.Epsilon - Aktualisiert. Ich hoffe es ist klar. Danke nochmal für deine Hilfe.
Gbulmer
4

Der HS-645MG ist ein "analoges" Servo, daher sollten Sie die Pulsfrequenz (Wiederholungsrate) zwischen 30 Hz und 60 Hz halten.

Die Schaltung in einem analogen Servo enthält einen internen Impulsgenerator, dessen Breite durch den Rückkopplungstopf (der mit der Ausgangswelle verbunden ist) gesteuert wird. Es vergleicht diesen Referenzimpuls mit dem eingehenden Befehlsimpuls und erzeugt einen "Fehler" -Puls, dessen Breite proportional zur Differenz zwischen der befohlenen Position und der aktuellen Position des Servos ist. Dieser Differenzimpuls wird dann "gedehnt", um einen längeren Impuls zu erzeugen, der den Motor in die erforderliche Richtung antreibt. Der Motor dreht dann die Ausgangswelle und den Rückkopplungstopf, bis der interne Referenzimpuls mit dem eingehenden Befehlsimpuls übereinstimmt.

Der Differenzimpuls wird gedehnt, um die Zeitspanne zu verlängern, in der der Motor zwischen den Befehlsimpulsen eingeschaltet wird. Wenn die Befehlsimpulsfrequenz zu hoch ist, wird der Motor überlastet und überschreitet seine Zielposition. Dies führt dazu, dass das Servo zittert und möglicherweise ausbrennt!

Niedrigere Frequenzen sind sicher, aber das Servo reagiert langsamer. Sie können sogar die Frequenz auf Null senken (keine Impulse) und das Servo treibt seinen Motor überhaupt nicht an (dies ist nützlich, um den Stromverbrauch beim Halten einer Position zu reduzieren).

Der HS-645MG ist für einen Ausgangsweg von 90 ° spezifiziert, wenn er durch eine Impulsbreite von 1,05 ms bis 1,95 ms gesteuert wird. Die analoge Schaltung akzeptiert jedoch einen größeren Bereich, und die tatsächliche Grenze wird durch mechanische Stopps bei ~ 180 ° mit einer Impulsbreite von etwa 0,6 ms bis 2,4 ms eingestellt.

PPM vs PWM

Servopulse sind eine Form von PWM, aber die Informationen werden nur in der Breite des Impulses codiert (nominal von 1 ms bis 2 ms, mit '50% 'bei 1,5 ms). Dies entspricht einer "normalen" PWM mit einem Verhältnis von 5% ~ 10% bei 50 Hz.

PPM (Pulse POSITION Modulation) wird zwischen Sender und Empfänger verwendet, um Befehle für mehrere Servos über eine einzige Leitung zu senden. Der erste Impuls markiert den Beginn eines Rahmens, der nächste Impuls ist das Ende von Servokanal 1 und der Beginn von Kanal 2 usw. Dies wird fortgesetzt, bis alle Kanäle gesendet wurden. Dann ist eine Lücke von mindestens 2,5 ms erforderlich, um das Ende zu markieren des Rahmens. Die Impulse sind typischerweise etwa 0,4 ms breit. Wenn die Bildrate 50 Hz beträgt und jeder Kanal bis zu 2 ms lang sein kann, können maximal 8 Kanäle während des 20 ms-Rahmens zuverlässig gesendet werden. Bevor dieser Impulsstrom an die Servos gesendet wird, muss er in einzelne 1 ~ 2 ms PWM-Impulse decodiert werden, wobei die Wiederholungsrate mit der Bildrate des PPM-Signals übereinstimmt.

Die meisten aktuellen Funksteuerungssysteme verwenden PCM on Air und haben möglicherweise kein internes PPM-Signal. Alle Empfänger reproduzieren jedoch das 1 ~ 2 ms PWM-Signal, das zum Ansteuern eines Standardservos erforderlich ist. Einige können die Servopulse mit einer höheren Bildrate (z. B. 11 ms) senden, und dann müssen Sie "digitale" Servos verwenden, die die höhere Frequenz korrekt verarbeiten können.

Bruce Abbott
quelle
1
Beste Erklärung der Vor- und Nachteile der Servo-PWM-Frequenz, die ich bisher gefunden habe
Blake Regalia