Veröffentlicht 2026-05-08
spät in der Nacht. Die Laborbeleuchtung brennt noch.
Ich starrte aufmerksam auf das regungslose Servo und hielt das STM32-Entwicklungsboard fest in meiner Hand. Die Codekompilierung war erfolgreich und der Download war erfolgreich, aber warum blieb er bewegungslos?
Der Debugger flackerte auf dem Bildschirm, als würde er mich auslachen.
Ist es Ihnen schon einmal so ergangen, dass Sie wiederholt das Datenblatt durchgesehen haben, aber die Konfigurationszeile, die eine Schlüsselrolle spielt, nicht finden können?
In dieser Nacht vor vier Jahren habe ich zum ersten Mal STM32 zur Steuerung des Servos verwendet. Ich denke, PWM ist genauso einfach wie das Ändern des Arbeitszyklus. Dadurch zitterte das Servo und verstummte dann völlig.
Später wurde mir klar, dass ich den wichtigsten Schritt vergessen hatte: das Aktivieren der Uhr.
Schreibtipps: Treiber von Grund auf schreiben
Der Servo ist ein gehorsames Kind. Es erfordert nur eine Sprache: PWM.
Die Periode beträgt 20 Millisekunden und die High-Level-Zeit liegt zwischen 0,5 Millisekunden und 2,5 Millisekunden, bezogen auf das Standardservo.
Es gibt eine große Anzahl von STM32-Timer-Modi, die ausgewählt werden können. Was ist der Unterschied zwischen PWM1 und PWM2? Kümmert sich das Servo beim Aufwärts- und Abwärtszählen wirklich um diese Situationen?
Es gibt drei Servos in unterschiedlichen Preisklassen, die ich an einem Projekt getestet habe. Eines der Einstiegsservos hat ein gutes Ansprechverhalten von 0,5ms. Bei einem anderen Servo in Industriequalität muss die Totzeit jedoch auf 1 µs genau sein.
Es gibt einen Fall wie diesen: Im vergangenen Jahr habe ich einem Freund beim Debuggen eines fünfachsigen Roboterarms geholfen. Es wird das übliche Servo mit mittlerem Drehmoment verwendet.Der Code scheint in einwandfreiem Zustand zu sein. Wenn das Tastverhältnis von 5 % auf 10 % angepasst wird, springt das Servo nur in zwei Extrempositionen.。
Berechnung der Prescaler- und Auto-Reload-Werte.
Wenn Sie für STM32 im 72-MHz-Zustand eine PWM-Frequenz von 50 Hz erhalten möchten, wird der Frequenzteilungskoeffizient nicht willkürlich bestimmt. Jedes Servo hat eine unterschiedliche Empfindlichkeit, unterschiedliche Totzonen und sogar unterschiedliche Versorgungsspannungen, was dazu führt, dass sich sein „Gehör“ ändert.
Ich habe zu viele Leute gesehen, die das Servo direkt an den 3,3-V-PWM-Pin angeschlossen haben.
Dann beschwerte er sich: „STM32-Treiberfähigkeit ist zu schwach.“
Nein, Sie haben die Quarantäne vergessen.
Eingabeaufforderungen: Verstehen Sie die tiefere Bedeutung des Datenblatts
Das Debuggen dauerte bis zu drei Stunden. Ich habe ein Oszilloskop verwendet, um Kabel für Kabel zu untersuchen. Bei der Untersuchung stellte ich fest, dass der Strom beim Drehen des Servos auf 1,2 A anstieg. Dann wurde mir klar, dass der 3,3-V-Spannungsregler des Entwicklungsboards einem solchen Strom nicht standhalten konnte.
Die Lösung ist einfach: externe Stromversorgung, gemeinsame Masse.
![]()
Seitdem folgt jedes meiner Lenkgetriebeprojekte drei eisernen Regeln:
Separate Stromversorgung für Servo (4,8V-6V)
Steuersignalkette 1 kΩ Widerstand
Das Stromerdungskabel ist zuverlässig mit dem STM32-Erdungskabel verbunden.
Diese drei Punkte sind die ganze Debugging-Zeit wert.
Doch die Stromversorgung allein reicht nicht aus. Präzision ist die Seele der Servosteuerung.
Was ist mit regulären verzögerungsähnlichen Funktionen? Vergiss es, gib es entschlossen auf. Was ist mit Unterbrechungen, die durch Timer verursacht werden? Es ist okay und brauchbar.Die wirklich professionelle Betriebsmethode besteht darin, den erweiterten Timer von STM32 zu verwenden, um komplementäres PWM auszugeben und die Bremsfunktion einzuschalten.。
Warum? Denn wenn das Servo stecken bleibt, soll es ja nicht durchbrennen.
Öffnen Sie das STM32-Referenzhandbuch. Kapitel 14 gehört zu Timern, Kapitel 15 gehört zu Timern, Kapitel 16 gehört zu Timern und Kapitel 17 gehört zu Timern.
Anfängern wird beim Betrachten von Registerlisten schwindelig. Ich auch.
Aber es gibt eine Seite, die die wichtigste Eigenschaft hat: die Konfigurationstabelle des Ausgabevergleichsmodus. Es kann Ihnen sagen, welches Register das Tastverhältnis steuert, welches Register die Polarität steuert und welches Register die Totzone steuert.
Schreibaufforderung: Die Bedeutung der Totzeit
Mein nächstes Projekt erfordert eine Servowinkelgenauigkeit von 0,5 Grad. Die meisten Servos auf dem Markt unterstützen im Allgemeinen nur eine Auflösung von 1us.; In einem Zeitraum von 20 ms entspricht 1us genau 0,18 Grad. Aus einer theoretischen Analyse ist diese Genauigkeit ausreichend.
Tatsächliche Tests ergaben jedoch, dass der Renditeunterschied bei billigen Servos nur 2us beträgt.
was zu tun?
Software-Vergütung.
Im Code habe ich eine Zuordnungstabelle erstellt, um den theoretischen Arbeitszyklus mit dem tatsächlichen Winkel gemäß der entsprechenden Beziehung zu verknüpfen. Ich habe zur Korrektur eine lineare Interpolation verwendet und die endgültige Genauigkeit erreichte 0,3 Grad.
Dieser Fall zeigt uns: Hardware hat ihre Grenzen, aber Algorithmen können Abhilfe schaffen.
Fragen/Antworten
F: Das Servo bewegt sich überhaupt nicht. Was soll ich tun?
A: Überprüfen Sie zunächst die Versorgungsspannung und die gemeinsame Masse. Überprüfen Sie mit einem Oszilloskop, ob das PWM-Signal vorhanden ist.
F: Das Servo vibriert stark. Was ist der Grund?

Die Periode beträgt 20 ms und es liegt kein Störimpuls im Signal vor, aber die PWM-Frequenz stimmt nicht überein oder der Arbeitszyklus ist nicht stabil und muss bestätigt werden.
F: Was soll ich tun, wenn die PWM-Auflösung von STM32 nicht ausreicht?
A: Reduzieren Sie den Timer-Takt oder verwenden Sie den 16-Bit-Modus. Sie können auch ein externes PCA9685-Modul anschließen.
F: Wie kann man mehrere Servos so steuern, dass sie sich gleichzeitig bewegen?
A: Verwenden Sie mehrere Kanäle desselben Timers zur Ausgabe von PWM, um Interrupt-Konflikte zu vermeiden.
Viele Leute schreiben den Code fertig und machen Feierabend.
Aber ein Lenkgetriebe ist ein mechanisches Gerät. Es hat sein eigenes Temperament.
Schreibaufforderungen: Physikalische Grenzen und Sicherheitsschutz
In der Vergangenheit habe ich ein automatisches Türschloss entworfen, bei dem sich ein Servo um neunzig Grad drehte, um den Riegel zu drücken. Damals wurde das Programm bis zu hundert Mal getestet und die Ergebnisse jedes Tests waren normal. Am dritten Tag nach der Installation blieb das Schloss jedoch hängen.
Bei weiterhin blockiertem Servo steigt die Temperatur des internen Treiberchips auf 120 Grad.
Was ist die Lektion?
Bei jedem Lenkgetriebeprojekt sollten ein Timeout-Schutz und eine Stromerkennung hinzugefügt werden. Der STM32 ADC kann den Lenkgetriebestrom in Echtzeit überwachen. Wenn der Strom den Schwellenwert überschreitet und 0,5 Sekunden lang anhält, wird der PWM-Ausgang sofort abgeschaltet.
Das ist kein Over-Engineering. Dies ist der Wendepunkt zwischen Profis und Amateuren.
Es gibt auch einen toten Winkel: die Ausgangsposition des Servos.
Wenn sich Ihr Roboterarm bei ausgeschaltetem Strom in einer gefährlichen Position befindet, gibt der STM32 beim Einschalten den Standardpegel aus. Wenn dieser Wert zufällig der maximale Arbeitszyklus ist, stößt das Servo an die Grenze.
Die Lösung besteht zunächst darin, den Timer-Ausgangspin auf einen hochohmigen Zustand zu konfigurieren, bevor der GPIO initialisiert wird.Zweitens besteht die Lösung darin, ein Hardware-Aktivierungssignal hinzuzufügen und zu warten, bis das System stabil ist, bevor Sie den Servo einschalten.。
Das Datenblatt verrät Ihnen diese Details nicht.
Das STM32-Entwicklungsboard in Ihrer Hand kann mehr als nur LEDs zum Leuchten bringen.
Damit kann der Servo Kreise zeichnen, schreiben, Objekte greifen und Ventile einstellen.
Voraussetzung ist jedoch, dass Sie bereit sind, sich die Zeit zu nehmen, den Ursprung jedes Parameters zu verstehen.
Eingabeaufforderung: Closed-Loop-Feedback ist die ultimative Lösung
Wenn Sie wirklich eine hohe Genauigkeit anstreben, geben Sie die Steuerung mit offenem Regelkreis auf.
Ich widmete mich einem bionischen Roboterprojekt und fügte jedem Gelenk Potentiometer-Feedback hinzu. STM32 war dafür verantwortlich, den ADC-Wert zu lesen, ihn mit dem Zielwinkel zu vergleichen und dann den PID-Algorithmus zur Anpassung der PWM zu verwenden. Auf diese Weise ist die Position immer genau, egal wie sich die Last ändert.
Die Steuerung im offenen Regelkreis ist wie ein Spaziergang mit verbundenen Augen. Die Regelung ist wie ein Gehen mit offenen Augen.
Welches wählst du?
Schauen Sie in diesem Moment mitten in der Nacht zurück auf das Labor. Das Lenkgetriebe drehte sich nicht, nicht weil der Code fehlerhaft war, sondern weil es in meinem Wissen einen toten Winkel gab, den ich noch nicht ganz beherrschte.
Jeder Misserfolg ist eine Lernerfahrung.
Wenn Sie STM32 zur tatsächlichen Steuerung des Servos verwenden möchten, beachten Sie diese Schritte:
Lesen Sie das Servodatenblatt sorgfältig durch, um die Pulsweitenmodulationsperiode und den Pulsweitenbereich zu bestätigen.
Verwenden Sie ein Oszilloskop, um die vom STM32 ausgegebene Wellenform zu überprüfen. Vertrauen Sie der Berechnung nicht.
Unabhängige Stromversorgung, gemeinsame Masse und Schutzwiderstand.
Der Software wurden Winkelzuordnung und Timeout-Schutz hinzugefügt.
Testen Sie extreme Bedingungen: Stromausfall und Neustart, blockierter Rotor, Signalstörungen.
Schreibaufforderungen: Wiederholen Sie wichtige Ideen und handeln Sie danach
Es gibt nur einen Kern: Genauigkeit liegt in Dokumenten verborgen, und Stabilität entsteht durch Tests.
Überprüfen Sie noch heute Ihren Code, um zu sehen, ob der Prescaler-Wert korrekt berechnet wurde, ob er geerdet ist und ob der Pin-Zustand zum Zeitpunkt des Einschaltens sicher ist.
Neu programmieren.
Hören Sie, wie sich das Lenkgetriebe dreht.
Es zittert nicht mehr.
Es funktioniert für Sie.
Spätnachts brennt im Labor noch das Licht.
Aber dieses Mal lächelst du.
Aktualisierungszeit: 08.05.2026
Wenden Sie sich an den Produktspezialisten von Kpower, um einen geeigneten Motor oder ein geeignetes Getriebe für Ihr Produkt zu empfehlen.