Veröffentlicht 2026-03-29
Bei Produktinnovationen besteht die größte Angst darin, dass bei einem Austausch des Hauptsteuerchips der ursprünglich gut angepasste Chip verloren gehtServohört auf, sich zu drehen. Viele Freunde bekamen ein neues STM32-Entwicklungsboard und wollten es umziehenServoProgramm, das ursprünglich auf anderen Boards verwendet wurde, stellte jedoch fest, dass es entweder nicht reagierte oder heftig wackelte. Tatsächlich ist es überhaupt nicht kompliziert, solange Sie einige wichtige Punkte der Transplantation klären. Heute werden wir darüber sprechen, wie man das reibungslos „bewegt“.ServoProgramm zwischen verschiedenen STM32-Modellen.
Der Kern der Servosteuerung besteht darin, eine PWM-Welle mit einer Periode von etwa 20 ms und einer High-Level-Zeit im Bereich von 0,5 ms bis 2,5 ms auszugeben. Daher besteht der erste Schritt bei der Codemigration darin, die Timer und Kanäle auf der neuen Platine zu finden, die PWM erzeugen können. Ihr ursprüngliches Programm verwendete CH1 von TIM2, aber jetzt müssen Sie es möglicherweise auf CH2 von TIM3 ändern. Diese Übereinstimmung muss im Datenblatt des Chips eindeutig bestätigt werden. Die Änderung ist eigentlich nur eine Frage einiger weniger Parameter. Sobald die Timer-Nummer und die Kanalnummer geändert wurden, kann der größte Teil des Codes verwendet werden.
Vergessen Sie nicht, nach dem Ändern der Timer-Konfiguration die Taktfrequenz zu überprüfen. Verschiedene STM32-Modelle verfügen möglicherweise über unterschiedliche Taktquellen für die Systemuhr und den Timer. Beispielsweise kann die ursprünglich in der F1-Serie verwendete Hauptfrequenz von 72 MHz bei der Umstellung auf die F0-Serie auf 48 MHz umgestellt werden. Zu diesem Zeitpunkt müssen Sie den PWM-Frequenzteilungskoeffizienten und den Neuladewert neu berechnen, um sicherzustellen, dass die endgültige Ausgangs-PWM-Periode immer noch 20 ms beträgt. Vereinfacht ausgedrückt werden die beiden Parameter ARR und PSC anhand des Takts des neuen Chips neu berechnet, um sicherzustellen, dass das Servo die von ihm erkannten Signale empfangen kann.
Suchen Sie bei der Auswahl der Pins nicht nur nach einem GPIO und verbinden Sie ihn. Sie sollten zunächst nach den Pins mit der Funktion „“ suchen, bei denen es sich um Hardware-PWM-Ausgangspins handelt. Der Vorteil der Verwendung von Hardware-PWM besteht darin, dass keine CPU-Ressourcen beansprucht werden, die Impulsausgabe sehr stabil ist und das Servo reibungslos rotiert. Wenn Sie zur Simulation über die Verzögerungsfunktion normales GPIO verwenden müssen, ist die CPU erschöpft, und wenn das Programm etwas komplizierter wird, kann das Timing leicht durcheinander geraten und der Servo wird definitiv wackeln.
Nachdem Sie den Pin ausgewählt haben, müssen Sie im Programminitialisierungsteil den GPIO-Arbeitsmodus auf Multiplex-Push-Pull-Ausgabe einstellen. Das ist so, als würden Sie diesem Pin Aufgabenzuständigkeiten zuweisen und ihm sagen: „Sie sind für die Ausgabe des PWM-Signals verantwortlich.“ Wenn die ursprüngliche Platine außerdem über einen Pull-up-Widerstand verfügt, die neue jedoch nicht, müssen Sie darüber nachdenken, ob der interne Pull-up im Code aktiviert werden soll, um sicherzustellen, dass der Pin im Leerlauf einen bestimmten Pegelzustand hat, um Signalstörungen zu vermeiden.
Viele Menschen haben Kopfschmerzen bei der Berechnung der Häufigkeit. Tatsächlich gibt es einen einfachen Weg. Der vom Servo benötigte PWM-Zyklus beträgt 50 Hz, was einem Zyklus von 20 ms entspricht. Egal welchen Timer Sie verwenden, das Ziel besteht darin, die Frequenz auf 50 Hz zu bringen. Die Berechnungsformel ist einfach: Timer-Ausgangsfrequenz = Systemtakt / (PSC+1) / (ARR+1). Sie stellen den PSC zunächst auf eine geeignete Zahl ein, beispielsweise 7200-1, und kehren dann den ARR-Wert um, sodass das Endergebnis nahe bei 50 Hz liegt.
Wenn der Systemtakt beispielsweise 72 MHz beträgt und Sie PSC auf 7200-1 einstellen, beträgt die Zählfrequenz des Timers 10 kHz. Damit die Ausgangsfrequenz 50 Hz erreicht, muss ARR auf 200-1 eingestellt werden, sodass alle 200 Zahlen gezählt werden, was 20 ms entspricht. Verschiedene Chips haben unterschiedliche Hauptfrequenzen, sodass Sie nach dieser Idee berechnen können, um sicherzustellen, dass der endgültig berechnete ARR und der PSC beide Ganzzahlen sind und der ARR den maximalen Zählwert des Timers nicht überschreiten sollte, damit das Programm problemlos ausgeführt werden kann.
Wenn Sie möchten, dass eine Platine mehrere Servos gleichzeitig steuert, kommt es darauf an, wie viele Kanäle der Timer hat. Ein Timer verfügt normalerweise über 4 Kanäle, jeder Kanal kann unabhängig eine PWM ausgeben und die Frequenz wird gemeinsam genutzt. Solange Ihre Servos alle mit 50 Hz arbeiten, können Sie daher einen Timer zum Antreiben von 4 Servos verwenden, was viele Timer-Ressourcen einsparen kann. Sie müssen bei der Initialisierung lediglich mehrere Kanäle konfigurieren und jeweils deren Vergleichswerte einstellen.
Sollen mehr als 4 Servos angesteuert werden, muss ein zweiter Timer aktiviert werden. Beim Transplantieren können Sie den Initialisierungscode zur Steuerung eines einzelnen Servos als Funktion schreiben, ihn so oft aufrufen, wie Sie zur Steuerung benötigen, und die Timer-Nummer und die Kanalnummer als Parameter übergeben. Auf diese Weise ist der Code in hohem Maße wiederverwendbar und leicht zu warten, unabhängig davon, wie viele Servos in Zukunft hinzugefügt werden. Denken Sie daran, dass das Vergleichsregister jedes Kanals unabhängig ist und Sie es beim Einstellen des Arbeitszyklus separat bedienen können.
Das Programm ist eingebrannt, aber der Servo reagiert nicht? Keine Sorge, beginnen Sie mit der einfachsten Hardware. Überprüfen Sie mit einem Multimeter, ob die Stromversorgung und die Masse des Servos korrekt angeschlossen sind. Da das Servo einen hohen Strombedarf hat, müssen Sie eine externe Stromversorgung verwenden. Erwarten Sie nicht, dass die 3,3 V auf der Entwicklungsplatine hochgefahren werden können. Wenn kein Problem mit der Stromversorgung vorliegt, überprüfen Sie mit einem Oszilloskop oder Logikanalysator, ob an den Chip-Pins eine Ausgangswellenform vorhanden ist und ob Periode und Impulsbreite korrekt sind.
Wenn die Wellenform korrekt ist, sich das Servo aber immer noch nicht dreht, liegt möglicherweise ein Problem mit der Codelogik vor. Sie können zunächst das einfachste Testprogramm schreiben und einen festen High-Pegel von 1,5 ms ausgeben, um das Servo in die Mittelposition zurückzubringen. Wenn dies aktiviert werden kann, bedeutet dies, dass kein Problem mit dem zugrunde liegenden Treiber vorliegt und das Problem in Ihrer Steuerlogik liegt. Fügen Sie nach und nach Funktionen hinzu, ändern Sie sie nach und nach und verwenden Sie die Eliminierungsmethode, um das Problem schnell zu lokalisieren, was viel schneller ist, als wenn Sie es selbst erraten.
Nachdem die grundlegende Transplantation nun abgeschlossen ist, können wir einige Tricks anwenden. Wenn Sie beispielsweise möchten, dass sich das Servo in einem bestimmten Winkel dreht, können Sie eine Winkelkonvertierungsfunktion schreiben, um 0 bis 180 Grad einem Impulsbreitenwert von 0,5 ms bis 2,5 ms zuzuordnen. Auf diese Weise müssen Sie sich diese komplizierten Zeitwerte nicht merken. Sie können die Funktion direkt aufrufen und den Winkel übergeben. Die Lesbarkeit und Portabilität des Codes wird erheblich verbessert, und andere werden ihn auf einen Blick verstehen.
Als weiteres Beispiel können Sie auch eine Softwarefilterung hinzufügen, um zu verhindern, dass plötzliche Änderungen im Steuersignal dazu führen, dass der Servo „zittert“. In tatsächlichen Projekten weisen die vom Sensor zurückgesendeten Daten zwangsläufig Jitter auf. Wenn Sie dem Programm einen einfachen Filter für den gleitenden Durchschnitt hinzufügen und ihn dann an den Servo senden, wird die Bewegung viel gleichmäßiger. Kapseln Sie diese erweiterten Funktionen in unabhängige Module. Bei der nächsten Übertragung auf andere Projekte können diese „Ansammlungen“ direkt verwendet werden und die Entwicklungseffizienz wird verdoppelt.
Wo steckt Ihr Servotransplantationsprojekt fest? Liegt es daran, dass die Pin-Konfiguration nicht klar ist, oder ist die Frequenzberechnung immer falsch? Hinterlassen Sie gerne eine Nachricht im Kommentarbereich, um über Ihre Erfahrungen zu sprechen. Wenn Sie der Meinung sind, dass dieser Artikel für Sie hilfreich ist, denken Sie daran, ihn zu liken und zu speichern. Gerne können Sie auch auf der offiziellen Website unseres Unternehmens nach weiteren praktischen Fällen und Codevorlagen suchen!
Aktualisierungszeit: 29.03.2026
Wenden Sie sich an den Produktspezialisten von Kpower, um einen geeigneten Motor oder ein geeignetes Getriebe für Ihr Produkt zu empfehlen.