Veröffentlicht 2026-03-10
Das sehe ich während derServoBekommen Sie während des Debugging-Prozesses häufig Probleme mit dem PWM-Wert, der diesem Winkel entspricht? Der Winkel wurde genau berechnet, aber der Motor kann sich nicht in die angegebene Position drehen oder er zittert ständig. Tatsächlich steckt dahinter eine einfache mathematische Formel. Sobald Sie es verstanden haben, können Sie jeden Grad genau steuernServo.
Um es ganz klar auszudrücken: Die Funktion desServoDie PWM-Berechnungsformel soll Ihnen dabei helfen, eine Eins-zu-eins-Entsprechung zwischen „Winkel“ und „Impulsbreite“ herzustellen.
Das häufig verwendete Servosteuersignal ist 50 Hz PWM mit einer Periode von 20 ms. Innerhalb dieses Periodenbereichs liegt die Breite des Hochpegels im Allgemeinen zwischen 0,5 ms und 2,5 ms, und der diesem Breitenintervall entsprechende Winkelbereich beträgt 0° bis 180°.
Die Berechnungsformel kann wie folgt geschrieben werden:Zielimpulsbreite = minimale Impulsbreite + (Winkel/180°) × (maximale Impulsbreite – minimale Impulsbreite). Diese Formel zeigt deutlich, wie die Zielimpulsbreite anhand bestimmter Parameter berechnet wird. Wenn beispielsweise im Zusammenhang mit der Servosteuerung 0° Ihres Servos 0,5 ms und 180° 2,5 ms entspricht, berechnen Sie die 90°-Position mit dieser Formel und das Ergebnis beträgt 1,5 ms. Dieser Berechnungsprozess ist für den Zusammenhang zwischen Lenkgetriebewinkel und Impulsbreite von großer Bedeutung und kann den vom Lenkgetriebe bei verschiedenen Winkeln benötigten Impulsbreitenwert genau bestimmen.
Die Kenntnis der Pulsbreite reicht nicht aus, da das Duty-Cycle-Register normalerweise im Mikrocontroller konfiguriert werden muss. Arbeitszyklus = Zielimpulsbreite/20 ms. Wenn Sie beispielsweise eine Impulsbreite von 1,5 ms benötigen, beträgt das Tastverhältnis 1,5 / 20 = 0,075, also 7,5 %.
Speziell im Code implementiert. Wenn Sie beispielsweise STM32 wählen und den Wert für das automatische Neuladen auf 2000 festlegen möchten (dieser Wert stellt 20 ms dar), muss der Vergleichswert auf 150 eingestellt werden (dieser Wert stellt 1,5 ms dar). Dieser Prozess wandelt das Zeitverhältnis tatsächlich in einen Registerwert um, um sicherzustellen, dass die Hardware eine genaue Wellenform ausgeben kann.
Wenn Sie im tatsächlichen Codebetrieb am Beispiel von STM32 den Wert für das automatische Neuladen auf 2000 (was 20 ms entspricht) festlegen, muss der Vergleichswert auf 150 (was 1,5 ms entspricht) eingestellt werden. Dieser Prozess der Umwandlung von Zeitanteilen in Registerwerte spielt eine Schlüsselrolle dabei, sicherzustellen, dass die Hardware genaue Wellenformen ausgibt.
Dies ist höchstwahrscheinlich die einfachste Falle, in die man tappen kann. Verschiedene Marken und Modelle von Servos oder sogar Servos desselben Modells, aber unterschiedlicher Chargen, haben unterschiedliche PWM-Bereiche. Der entsprechende PWM-Wert einiger Servos beträgt im 0°-Zustand 0,5 ms, bei anderen 0,6 ms; Im 180°-Zustand kann der entsprechende PWM-Wert einiger Servos 2,5 ms betragen, während andere 2,4 ms betragen.
Stellen Sie daher bei der Verwendung des Servos sicher, dass Sie dessen spezifischen PWM-Bereich im Voraus kennen, da es sonst leicht zu verschiedenen Problemen aufgrund von Parameterfehlanpassungen kommen kann, die die normale Verwendung des Servos und den Betrieb der zugehörigen Geräte beeinträchtigen.
Am sichersten ist es, das offizielle Datenblatt des Servos zu prüfen. Wenn Sie das Handbuch nicht finden können, empfiehlt es sich, selbst zu messen: Erhöhen Sie zunächst langsam die Impulsbreite, um den Mindestwert zu ermitteln, bei dem das Servo zu rotieren beginnt, und ermitteln Sie dann den Maximalwert, bei dem das Servo aufhört zu rotieren. Ersetzen Sie diese beiden durch tatsächliche Messungen ermittelten Werte in der Formel, damit der Servo genau auf die Zielposition zeigen kann und verhindert wird, dass der Motor durch übermäßige Belastung beschädigt wird.
Die direkteste Folge ungenauer Berechnungen ist „Nichtlinearität“. Wenn Sie beispielsweise erwarten, dass sich das Servo um 45° dreht, ist die tatsächliche Situation so, dass es sich nur um 40° dreht. Was noch schlimmer ist: Sobald die Impulsbreite den zulässigen Bereich des Servos überschreitet, beispielsweise wenn eine Impulsbreite von 2,6 ms gegeben wird, bleibt der Begrenzer im Inneren des Servos festsitzen, was dazu führt, dass das Servo überlastet wird, Hitze erzeugt und sogar den Treiberchip verbrennt.
Wenn andererseits der Impulsbreitenbereich zu eng ist, beispielsweise nur 1 ms bis 2 ms verwendet werden, beträgt der tatsächliche Drehbereich Ihres Servos möglicherweise nur 120°, wodurch seine mechanische Leistung verloren geht. Daher müssen die beiden Endpunktwerte in der Formel genau den physikalischen Grenzen des Lenkgetriebes entsprechen.
Beim Schreiben von Code kapseln wir die Formel normalerweise in eine Funktion. Die Eingabe ist der gewünschte Winkel und die Ausgabe ist der Vergleichswert des Timers. Die Schritte sind einfach:
1. Definieren Sie zunächst zwei Konstanten:Und, entsprechend den gemessenen 0°- und 180°-Pulsbreiten.
2. Dann verwenden Sie die Formel:= + (Winkel / 180,0) * ( - ) .
3. Vergessen Sie nicht, das Gleitkommaergebnis in eine Ganzzahl umzuwandeln und es direkt dem Capture-Vergleichsregister des Timers zuzuweisen.
Auf diese Weise kann sich das Servo bei jedem Aufruf der Funktion sanft in jeden gewünschten Winkel drehen.
Wenn Sie an einem Roboterarm- oder visuellen Tracking-Projekt arbeiten, das eine hohe Genauigkeit erfordert, können Sie die Einführung einer Regelung mit geschlossenem Regelkreis in Betracht ziehen. Die obige Open-Loop-Formel kann nur garantieren, „wie viel Impulsbreite gegeben wird, wie viel Drehwinkel“, aber wenn das Servo aufgrund von Gewalt blockiert wird, geht die Position verloren.
Zu diesem Zeitpunkt können Sie der Servoausgangswelle ein Potentiometer oder einen Encoder hinzufügen, um den tatsächlichen Winkel in Echtzeit abzulesen, und dann den PID-Algorithmus verwenden, um den PWM-Wert dynamisch anzupassen. Auf diese Weise kann das System das Lenkgetriebe auch bei externen Eingriffen automatisch in die Zielposition zurückziehen und so eine wirklich präzise Steuerung erreichen.
Ich frage mich, ob Sie jemals auf eine Situation gestoßen sind, in der der Schwenkbereich beider Seiten des gesamten Mechanismus aufgrund des ungenauen Servomittelwerts (90°) in tatsächlichen Projekten asymmetrisch ist? Willkommen im Kommentarbereich, um über Ihre Debugging-Erfahrung zu chatten. Wenn Sie es nützlich finden, vergessen Sie nicht, ihm ein „Gefällt mir“ zu geben und es mit weiteren Freunden zu teilen.
Aktualisierungszeit: 10.03.2026
Wenden Sie sich an den Produktspezialisten von Kpower, um einen geeigneten Motor oder ein geeignetes Getriebe für Ihr Produkt zu empfehlen.