51 Single-Chip-Servosteuerungsprogramm zur vollständigen Servodrehung in drei Schritten_Custom Drive_Industry Insights_Kpower
Heim > Brancheneinblicke >Benutzerdefiniertes Laufwerk
TECHNISCHE UNTERSTÜTZUNG

Produktunterstützung

51 Single-Chip-Servosteuerungsprogramm zur Steuerung der Servodrehung in drei Schritten

Veröffentlicht 2026-05-06

Ist Ihnen diese Situation schon einmal begegnet?

Nachdem das Servo an die Stromversorgung angeschlossen wurde, erfolgt keine Reaktion. Nach dem Schreiben des Programms traten zufällige Jitter auf. Ich habe mich natürlich an die Anweisungen gehalten, aber ich konnte es einfach nicht drehen.

Keine Panik. Sie sind nicht allein.

In diesem Artikel erklären wir heute anhand des 51-Mikrocontrollers ausführlich die Steuerung des Servos. Es gibt keine komplizierten mathematischen Inhalte, keine unverständlichen Registertabellen, nur die direktesten Ideen und das praktischste Code-Framework.

Denken Sie an diesen wichtigen Punkt: Wenn das Servo stationär bleibt, liegt das größtenteils an einem Timing-Problem. Wenn sich das Servo unregelmäßig bewegt, liegt die Ursache wahrscheinlich an einer unzureichenden Stromversorgung.

Sind Sie bereit?

01 Was genau ist ein Lenkgetriebe?

Viele Leute bekommen zum ersten Mal ein Servo und denken, es sei ein Motor. Es kann eingeschaltet werden, wenn der Strom eingeschaltet ist.

Falsch.

Das Lenkgetriebe ist kein gewöhnlicher Motor. Es ist eher wie ein kleiner Roboter mit einem „Gehirn“.

Sie geben ihm einen Befehl und er dreht sich in den angegebenen Winkel. Dann hör auf. Bleiben Sie stehen.

Wie wird das mit dem kleinen Potentiometer und der Steuerplatine im Inneren erreicht? Wenn Sie einen Impuls aussenden, führt das Gerät einige Gesten aus und verriegelt sich, sobald es die Position erreicht.

Daher ist es zur Steuerung des Lenkgetriebes nicht erforderlich, PID zu schreiben oder Berechnungen im geschlossenen Regelkreis durchzuführen. Sie müssen nur eines lernen: einen Impuls senden.

02 Grundprinzip: Eine Zahl kann den Winkel ändern

Öffnen Sie Ihr Datenblatt. Finden Sie diesen Satz: Die Breite des Hochpegelimpulses entspricht dem Winkel.

In einfachen Worten: Ein hoher Pegel von 0,5 Millisekunden wird zu 0 Grad, wenn er 1,5 Millisekunden dauert, wird er um 90 Grad gedreht, und wenn er 2,5 Millisekunden dauert, wird er um 180 Grad gedreht.

Der Zeitraum ist auf 20 Millisekunden festgelegt.

Ist es klar? Das Steuern des Servos bedeutet eigentlich, einen IO-Port zu steuern, ihn hochzuziehen, eine Zeit lang zu warten, ihn dann herunterzuziehen und dann die verbleibende Zeit abzuwarten.

So einfach ist das.

Zum Beispiel der Puls, der sich um 90 Grad dreht:

Führen Sie zunächst eine Aufwärts-Pull-Up-Operation durch, führen Sie dann eine Verzögerung von 1,5 Millisekunden durch, und führen Sie dann eine Abwärts-Pull-Down-Operation durch. Führen Sie dann eine Verzögerung von 18,5 Millisekunden durch und wiederholen Sie dann die obigen Schritte in einer Endlosschleife.

Es handelt sich hierbei um einen vollständigen Regelkreis.

03 Bevor Sie ein Programm schreiben, richten Sie zunächst die Umgebung ein

Sie brauchen keine ausgefallene Ausrüstung.

Ein 51-Mikrocontroller (STC89C52 reicht)

单片机控制舵机来回摆动_舵机控制程序51单片机_单片机程序控制舵机原理

Ein Servo (normales SG90 oder MG995 reicht aus)

Ein paar Dupont-Drähte

Es gibt eine 5-V-Stromversorgung. Erwarten Sie also nicht, dass sie von einem Mikrocontroller mit Strom versorgt wird. Lassen Sie mich dreimal wichtige Dinge sagen. Erwarten Sie nicht, dass es von einem Mikrocontroller angetrieben wird.

Die Servos vieler Leute zittern und drehen sich nicht richtig. Es handelt sich nicht um einen Programmfehler, sondern um unzureichende Leistung.

Wenn sich das Servo im Moment des Startvorgangs befindet, kann der Strom mehr als 1 A erreichen, und die geringe Strommenge, die über den USB-Anschluss aufgenommen wird, kann ihn nicht vollständig speisen.

was zu tun? Externe Stromversorgung. Gemeinsamkeit. Gemeinsamkeit. Gemeinsamkeit.

Der Pluspol des Netzteils sollte VCC sein und der Minuspol des Netzteils sollte GND sein. Der GND des Mikrocontrollers muss auch mit dem GND der Stromversorgung verbunden werden, und dann muss die Signalleitung mit dem IO-Port des Mikrocontrollers verbunden werden.

Ist der Stromkreis angeschlossen? Glückwunsch. Die schwierigste Hälfte ist geschafft.

04 Praktisches Codieren: Beginnen Sie mit dem Einfachsten

Wir spielen nicht falsch. Geben Sie direkt den Code an, der ausgeführt werden kann.

Wichtige Punkte: Verwenden Sie einen Timer, um einen Interrupt mit einer Periode von 20 ms zu generieren, und steuern Sie die Dauer des hohen Pegels während des Interrupts flexibel.

Idee:

Definieren Sie eine Variable zum Speichern der aktuell erforderlichen High-Level-Zeit, einfach 15, und diese 15 repräsentiert 1500 Mikrosekunden, also 1,5 ms

Ziehen Sie zu Beginn jeder 20-ms-Periode zunächst den E/A-Port auf High.

Hochpegelzeit verzögern.

Ziehen Sie den IO-Port nach unten.

Verzögern Sie die verbleibende Zeit.

Als Pseudocode geschrieben:

void main() { Timer initialisieren (Interrupt auf 20 ms einstellen); while(1) { // Nichts tun, auf Interrupts vertrauen } } void timer interrupt () interrupt 1 { Pull high; Verzögerung (Hochpegelzeit); tief ziehen; Verzögerung (20 ms – High-Level-Zeit); }

Wichtig: Präzise Verzögerungen im Mikrosekundenbereich erfordern die Verwendung von Verzögerungsfunktionen. Wenn die Hauptfrequenz des 51-Mikrocontrollers 11,0592 MHz beträgt, entspricht ein Nop ungefähr 1,085 Mikrosekunden. Um eine Funktion „delay_us“ zu schreiben, muss die Funktion die Anzahl der Mikrosekunden übergeben und diese durch Subtrahieren durch eine While-Schleife implementieren.

Haben Sie keine Angst vor Ärger. Diese Art des sukzessiven Approximations-Debuggings ist in eingebetteten Systemen die Norm.

05 Lassen Sie das Ruder bewegen: vorwärts, rückwärts, in jedem Winkel

Jetzt müssen Sie Folgendes erreichen: Taste 1 drücken, auf 0 Grad drehen; Knopf 2 drücken, um 90 Grad drehen; Taste 3 drücken, auf 180 Grad drehen.

Schlüsselerkennung im Pseudocode hinzufügen:

wenn (Taste 1 gedrückt wird) Hochpegelzeit = 500; // 0,5 ms -> 0 Grad, wenn (Taste 2 gedrückt wird) High-Level-Zeit = 1500; // 1,5 ms -> 90 Grad, wenn (Taste 3 gedrückt wird) High-Level-Zeit = 2500; // 2,5 ms -> 180 Grad

单片机程序控制舵机原理_单片机控制舵机来回摆动_舵机控制程序51单片机

Wichtig: Die Zeiteinheit auf hoher Ebene ist Mikrosekunden. 500, 1500, 2500.

Schreiben Sie nicht 1, 2, 3. Das sind Millisekunden. 1000 Mal schlimmer.

Was dann? Dann dreht sich das Servo gehorsam in den entsprechenden Winkel.

Glauben Sie es nicht? Du versuchst es.

06 Fallstricke, auf die Sie möglicherweise getreten sind (Fragen/Antworten)

F: Das Servo dreht sich nicht, sondern summt nur?

Erstens, A, der Stromversorgungsstrom reicht nicht aus oder die Impulsbreite ist ungenau. Es ist notwendig, die Stromversorgung auf eine Stromversorgung über 5 V/2 A umzustellen und dann zu prüfen, ob die Hochpegelzeit zwischen 500 und 2500 µs liegt.

F: Das Servo kann sich drehen, aber es wackelt stark?

Fügen Sie an beiden Enden der Servostromversorgung einen großen Kondensator (Wert 470 uF) hinzu, da in der unter A genannten Situation ein übermäßiger Unterschied zwischen zwei benachbarten Steuerzyklen besteht oder die Stromversorgung Welligkeiten aufweist.

F: Beim Einbrennen des Programms erfolgt keine Reaktion, beim Abziehen des Signalkabels wird es jedoch zur Seite gedreht?

A: Der Pegelstatus des E/A-Ports ist zu Beginn unsicher, oder der Zeitraum, in dem er sich auf hohem Pegel befindet, überschreitet den angegebenen Bereich. Beim Einschalten des Geräts müssen Sie zunächst den Pegel des E/A-Ports auf niedrig setzen und ihm dann den Anfangswert zuweisen.

F: Möchten Sie eine kontinuierliche Drehung steuern (z. B. 360-Grad-Servo)?

Wenn dies nicht funktioniert, müssen Sie es durch ein Servo ersetzen, das sich kontinuierlich um 360 Grad drehen kann. Wenn der High-Pegel 1,5 ms beträgt, hört das Servo auf, sich zu drehen. Wenn sie höher als 1,5 ms ist, dreht sich das Servo vorwärts. Wenn sie weniger als 1,5 ms beträgt, dreht sich das Servo rückwärts.

F: Wie kann ich bestätigen, dass die Impulse korrekt sind, wenn ich kein Oszilloskop zur Hand habe?

Programmieren Sie den Servo so, dass er alle 1 Sekunde zwischen 0 Grad und 90 Grad wechselt. Verwenden Sie einen Logikanalysator oder eine einfache LED-Methode, um zu beobachten, ob die Schwankung regelmäßig ist.

07 Upgrade: Lassen Sie das Servo entsprechend der von Ihnen gezeichneten Kurve bewegen

Ein Programm mit fest codierten Winkeln ist zu einfach.

Eine fortgeschrittenere Art zu spielen: Lassen Sie den Servo langsam von 0 Grad auf 180 Grad gehen und dann langsam zurückfahren.

Wie geht das?

Verwenden Sie eine Schleifenvariable namens „Winkel“, um den Wert von 0 auf 180 zu erhöhen. Der Schrittwert sollte nicht zu groß sein. Erhöhen Sie beispielsweise jedes Mal um 1 Grad.

Berechnen Sie für jede Erhöhung um 1 Grad die Hochpegelzeit neu:

Die High-Level-Zeit beträgt 500 plus Winkel multipliziert mit 2000 dividiert durch 180.

Es ist zu beachten, dass 500 0 Grad entspricht, 2500 180 Grad entspricht und der Gesamtbereich 2000 Mikrosekunden beträgt, die in 180 gleiche Teile unterteilt sind.

Dann 20 ms verzögern. Mach es noch einmal.

Der Effekt ist ein sanfter Schwung. Wie ein Roboter, der winkt.

Man kann dies etwas nennen, das man „Servokinematik“ nennt, aber haben Sie keine Angst vor dem Namen. Im Wesentlichen handelt es sich um eine Art lineare Interpolation.

08 Gehen Sie noch einen Schritt weiter: Nutzen Sie die serielle Schnittstelle zur Fernsteuerung des Servos

Fügen Sie serielle Kommunikation hinzu. Der Computer sendet eine Zahl und das Servo dreht sich in den entsprechenden Winkel.

Sprechen Sie zum Beispiel „0“ aus und drehen Sie es um 0 Grad. Sagen Sie „90“ und drehen Sie sich um 90 Grad.

Kernpunkte:

Beim Empfang des Interrupts an der seriellen Schnittstelle des Mikrocontrollers wird die Zeichenfolge analysiert.

Hinweis: Möglicherweise können Sie nicht alles auf einmal sammeln. Um festzustellen, ob ein Zeilenumbruchzeichen empfangen wird.

Nach Erhalt der vollständigen Zahl ist der Bereich auf 0 bis 180 begrenzt.

Konvertieren Sie die Zeit auf hoher Ebene und aktualisieren Sie die Variable.

Auf diese Weise wird Ihr Servo zu einem programmierbaren Aktuator. Nach der Verbindung mit dem Bluetooth-Modul kann es sogar von Ihrem Mobiltelefon gesteuert werden.

09 Zusammenfassung: Drei Elemente zur Steuerung des Lenkgetriebes

Stromversorgung. Sorgen Sie für ausreichend Strom und stabilisieren Sie die Spannung zur gemeinsamen Masse.

Timing. Periode 20 ms, hoher Pegel 500–2500us.

Führen Sie keine blockierenden Vorgänge aus, sondern verwenden Sie Timer-Interrupts anstelle von wartenden Verzögerungen, sonst können Sie nichts tun.

Sobald Sie diese drei Dinge beherrschen, können Sie 99 % der Servos auf dem Markt steuern.

Denken Sie daran: Denken Sie beim Schreiben eines Programms einen weiteren Schritt darüber nach, „was passiert, wenn die Stromversorgung plötzlich zittert“, statt „es reicht aus, damit das Programm reibungslos läuft“.

10 Jetzt sind Sie an der Reihe, Maßnahmen zu ergreifen

Betrachten Sie diesen Artikel nicht nur als Sammlung. Schalten Sie Ihren Keil ein, schließen Sie das Entwicklungsboard richtig an und geben Sie den obigen Code einmal ein.

Es besteht eine hohe Wahrscheinlichkeit, dass sich die ersten drei Male nicht drehen. Beeilen Sie sich nicht. Nehmen Sie ein Multimeter, um die Spannung zu messen, und verwenden Sie einen Logikanalysator, um die Wellenform zu erfassen. Wenn es wirklich nicht anders geht, versuchen Sie es mit einem Servowechsel.

Jedes Mal, wenn Sie ein Problem lösen, vertieft sich Ihr Verständnis der Einbettung.

Wenn Sie ein paar Jahre später zurückblicken, werden Sie feststellen, dass der Tag, an dem Sie das Lenkgetriebe beherrschten, für Sie der Ausgangspunkt war, um wirklich zu verstehen, „die physische Welt durch Code zu steuern“.

Das summende kleine Servo in Ihrer Hand ist der erste Schlüssel zur Welt der Roboter.

Warten Sie nicht länger. Jetzt einschalten.

Probieren Sie es aus.

Aktualisierungszeit: 06.05.2026

Die Zukunft vorantreiben

Wenden Sie sich an den Produktspezialisten von Kpower, um einen geeigneten Motor oder ein geeignetes Getriebe für Ihr Produkt zu empfehlen.

Mail an Kpower
Anfrage senden
WhatsApp-Nachricht
+86 0769 8399 3238
 
kpowerMap