Veröffentlicht 2026-02-24
Spielen mit demServo: Von den ersten Schritten bis zum tatsächlichen Kampf mit der 51 MCU wird Ihnen dieser Artikel helfen!
Denken Sie darüber nach, Ihrem innovativen Produkt ein „Gelenk“ hinzuzufügen, das präzise schwingen kann? Lenkgetriebe klingt sehr professionell, ist aber eigentlich gar nicht so schwierig, wie man denkt. Insbesondere die Verbindung mit dem klassischen 51-Mikrocontroller ist eine hervorragende Möglichkeit für Einsteiger. Als viele Freunde zum ersten Mal damit in Berührung kamen, bereitete es ihnen am meisten Kopfzerbrechen, dass sie nicht herausfinden konnten, wie es sich bewegte und wie ich es mithilfe von Code steuern konnte. Machen Sie sich keine Sorgen, wir werden heute ausführlich darüber sprechen und ich werde dafür sorgen, dass Sie sich nach der Lektüre sicher fühlen.
Um es ganz klar auszudrücken: dieServoist wie ein besonders gehorsamer „kleiner rotierender Wächter“. Es integriert einen Motor, ein Untersetzungsgetriebe und einen Steuerkreis. Sie sagen ihm, in welchen Winkel er sich drehen soll, und er wird hart arbeiten, um diese Position zu erreichen und gleichmäßig anzuhalten.
Dieser Befehl wird über ein Signal namens PWM (Pulsweitenmodulation) übermittelt. Man kann es sich als einen sich wiederholenden Hoch- und Tiefpegelimpuls vorstellen, und die Breite des Impulses, also die Dauer des Hochpegels, ist das „Aktionssignal“ für das Lenkgetriebe.
GemeinsamServoB. kleine Servos wie das SG90, erkennen Impulse mit einer Periode von 20 Millisekunden. Unter ihnen entspricht die Hochpegelzeit von etwa 1,5 Millisekunden der mittleren Position (90 Grad). Wenn sich die Impulsbreite zwischen 0,5 Millisekunden und 2,5 Millisekunden ändert, dreht sich die Servoachse im Bereich von 0 bis 180 Grad. Je genauer Sie die Impulsbreite angeben, desto genauer wird die Drehung erfolgen.
Der 51-Mikrocontroller selbst gibt ein so präzises Impulsbreitensignal nicht direkt aus, aber wir können es durch Programmierung „simulieren“. Dies erfordert die Verwendung des Timers im Mikrocontroller, bei dem es sich um einen sehr genauen „Timer“ handelt.
Wir können den Timer so einstellen, dass er alle 10 Mikrosekunden oder 100 Mikrosekunden einen Interrupt generiert. In the interrupt service program, we use a variable to count, and according to the value of this counter, we change the level of the IO port (such as P1.0) connected to the servo.
Um beispielsweise 1,5 Millisekunden lang einen hohen Pegel auszugeben, muss der hohe Pegel 15 Interrupts lang aufrechterhalten werden, wenn der Timer alle 100 Mikrosekunden einmal unterbricht. Auf diese Weise können wir die PWM-Welle „zusammensetzen“, die das Servo erkennen kann. Es mag etwas verwirrend sein, wenn Sie zum ersten Mal mit dem Schreiben von Code beginnen, aber wenn Sie ihn erst einmal erfolgreich selbst debuggt haben, ist das Erfolgserlebnis beispiellos.
Es gibt viele Arten von Servos auf dem Markt. Die Wahl eines „Partners“ für den 51-Mikrocontroller hängt hauptsächlich von zwei Punkten ab: Arbeitsspannung und Signalanforderungen. Die am häufigsten verwendeten sind analoge Servos wie SG90. Ihre Signalanforderungen entsprechen dem oben erwähnten Standard-PWM, was sehr freundlich ist.
Diese Servos arbeiten normalerweise mit einer Spannung von 5 V, was genau der Standardbetriebsspannung des 51-Mikrocontrollers entspricht. Kann ich den IO-Port-Treiber des Mikrocontrollers direkt verwenden? Es ist besser, dies nicht zu tun, da der Strom beim Betrieb des Servos relativ groß ist, wodurch die Mikrocontroller-Pins beschädigt werden.
Ein sichererer Ansatz ist die Verwendung einer Triode oder eines speziellen Pegelumwandlungschips zur Isolierung. Der IO-Port des Mikrocontrollers gibt ein Steuersignal an die Antriebsschaltung aus, und die Antriebsschaltung „befehlt“ dann dem Lenkgetriebe, sich zu drehen. Auf diese Weise ist der Mikrocontroller nur für die Ausgabe von „Gehirn“-Anweisungen verantwortlich und überlässt die harte Arbeit dem Treiberteil, wodurch das System stabiler und zuverlässiger wird.
Wenn viele Freunde das Servo zum ersten Mal drehen, stellen sie möglicherweise fest, dass es heftig zittert oder einen halben Takt langsamer reagiert. Dies ist höchstwahrscheinlich ein Problem mit der Stromversorgung. Der aktuelle Einfluss beim Starten und Blockieren des Servos ist nicht zu unterschätzen. Wenn die Stromversorgung nicht ausreicht, wird die Spannung gesenkt, was dazu führt, dass der Mikrocontroller zurückgesetzt wird oder der Servo nicht ordnungsgemäß funktioniert.
Die Lösung ist einfach: Servo separat versorgen! Verwenden Sie ein hochwertigeres 5-V-Netzteil und verbinden Sie die Strommasse (GND) und die Masse des Mikrocontrollers miteinander, um sicherzustellen, dass sie über ein gemeinsames Bezugspotential verfügen. Dann können die Stromversorgung des Mikrocontrollers und die Stromversorgung des Servos getrennt werden, um Störungen wirksam zu vermeiden.
Überprüfen Sie außerdem, dass Ihre PWM-Periode absolut stabil bei 20 Millisekunden liegt. Wenn das Programm aufgrund anderer Aufgaben blockiert ist und die Impulsperiode ungenau ist, vibriert das Servo ebenfalls. Um ein stabiles Signal zu erzeugen, muss sichergestellt werden, dass die Timer-Interrupt-Priorität hoch genug ist.
Ich möchte, dass sich das Servo langsam von 0 Grad auf 180 Grad und wieder zurück dreht. Wie soll ich den Code schreiben? Wir können eine Winkel-zu-Pulsbreite-Zuordnungsfunktion definieren. Beispielsweise entspricht 0 Grad einem hohen Pegel von 0,5 ms und 180 Grad entsprechen 2,5 ms. Dann sind 90 Grad 1,5 ms.
In der Hauptschleife können wir eine for-Schleife verwenden, um die Winkelvariable von 0 auf 180 zu erhöhen und den PWM-Vergleichswert jedes Mal zurückzusetzen, wenn er sich um ein Grad ändert. Beachten Sie, dass zwischen den einzelnen Winkeln etwas Zeit vergehen sollte, damit sich das Servo physisch drehen kann, z. B. eine Verzögerung von 15 bis 20 Millisekunden. Auf diese Weise wirkt die Aktion stimmig und flüssig.
Um flexibler zu sein, können Sie die Steuerung des Servos in eine Funktion kapseln, zvoid (char angle), übergeben Sie den Winkelwert und die PWM-Parameter werden automatisch innerhalb der Funktion berechnet und aktualisiert. Wenn Sie auf diese Weise steuern möchten, welche Aktion später ausgeführt wird, z. B. das Heben eines Arms oder das Drehen der Kamera, müssen Sie nur diese Funktion aufrufen, und das Hauptprogramm wird sehr erfrischend.
Wenn Ihr Projekt die gleichzeitige Steuerung mehrerer Servos erfordert, beispielsweise bei der Herstellung eines Roboterarms mit mehreren Freiheitsgraden, sind die Dinge etwas komplizierter. Da der 51-Mikrocontroller über begrenzte Ressourcen verfügt, ist es unmöglich, jedes Servo mit einer unabhängigen Hardware-PWM auszustatten.
Aber keine Sorge, wir können weiterhin Softwaresimulationen verwenden. Die Kernidee besteht weiterhin darin, das Konzept der „Zeitscheibe“ im Timer-Interrupt zu verwenden. Wir stellen beispielsweise eine Periode von 10 Millisekunden ein und innerhalb dieser Periode gibt jedes Servo nacheinander die erforderliche Impulsbreite aus. Nach Verarbeitung des Impulses des ersten Servos sofort auf die Impulsausgabe des zweiten Servos umschalten.
Dies erfordert, dass Ihre Timer-Interrupt-Verarbeitungsfunktion sehr effizient ist und keine Verzögerungen oder komplexen Berechnungen durchführen kann. Der übliche Ansatz besteht darin, ein Array zu erstellen, um die aktuelle Zielimpulsbreite jedes Servos zu speichern. Überprüfen Sie im Interrupt die Tabelle, um den E/A-Port entsprechend der Seriennummer des aktuell in Betrieb befindlichen Servos einzustellen und die genaue Zeit festzulegen. Auf diese Weise kann ein Timer mehrere Servos „getrennt“ verwalten. Obwohl sie nicht gleichzeitig vollständig bewegt werden können, kann das menschliche Auge diesen winzigen Zeitunterschied nicht erkennen.
Haben Sie angesichts dessen bereits eine klare Vorstellung davon, wie Sie den 51-Mikrocontroller zur Steuerung des Servos verwenden können? Vom Prinzip über die Auswahl bis zur Code-Implementierung ist eigentlich jeder Schritt sehr interessant. Wenn Sie gerade eine Idee haben, können Sie genauso gut Ihren Computer einschalten, Ihr Mikrocontroller-Entwicklungsboard herausnehmen und versuchen, es selbst anzuschließen. Das wunderbare Gefühl, wenn sich das Servo zum ersten Mal präzise unter der Steuerung Ihres Codes dreht, ist die Freude am Schaffen.
Ich möchte Sie fragen, welche Art von Gerät würden Sie am liebsten mit einem Servo und einem Mikrocontroller zusammenbauen? Ist es ein Gerät, das automatisch das Sonnenlicht verfolgt, oder ein kleiner Roboter, der zeichnen kann? Hinterlassen Sie gerne eine Nachricht im Kommentarbereich, um Ihre Gedanken mitzuteilen. Lassen Sie uns gemeinsam kommunizieren und vielleicht können wir bessere Funken erzeugen! Wenn dieser Artikel für Sie hilfreich ist, denken Sie daran, ihn zu liken und mit weiteren Freunden zu teilen, die ihn benötigen.
Aktualisierungszeit: 24.02.2026
Wenden Sie sich an den Produktspezialisten von Kpower, um einen geeigneten Motor oder ein geeignetes Getriebe für Ihr Produkt zu empfehlen.