Veröffentlicht 2026-04-29
Erst wenn die Hardware-Voraussetzungen erfüllt sind, kann der Antrieb realisiert werden. Der 51-Mikrocontroller gibt ein Standard-PWM aus, ein Pulsweitenmodulationssignal, und kann den Lenkwinkel steuern. Der Kerneinstellungsschritt besteht darin, ein PWM-Signal mit einer Periode von 20 ms und einer High-Level-Zeit im Bereich von 0,5 ms bis 2,5 ms zu erzeugen. Das Tastverhältnis entspricht einer Drehung von 0° bis 180°. Dieser Artikel enthält das vollständige Schaltkreisverbindungs- und Codekonfigurationsschema.
Die Drehung des Lenkgetriebes wird durch die Impulsbreite des Steuersignals bestimmt. Für Standardservos wie SG90 und MG995R gelten folgende Anforderungen:
Signalperiode:20 ms (50 Hz)
Die Beziehung zwischen hoher Zeit und Winkel:
0,5ms → 0°
1,0 ms → 45°
1,5ms → 90°
2,0 ms → 135°
2,5 ms → 180°
In Bezug auf die Ausgangsanforderungen des 51-Mikrocontrollers besteht zum einen darin, dass jeder I/O-Port ein PWM-Signal erzeugen kann, und zum anderen darin, dass dieser Erzeugungsprozess seine Pegeldauer genau steuern muss.. Bezüglich der Quarzoszillatorfrequenz wird empfohlen, dass sie entweder 11,0592 MHz oder 12 MHz beträgt. Der Zweck besteht darin, dem Timer die genaue Zeitmessung zu erleichtern.
Wenn das Servo arbeitet, ist sein Strom relativ groß. Im Leerlauf liegt der Strom im Bereich von 100mA bis 200mA. Sobald ein Stillstand auftritt, kann der Strom mehr als 500 mA erreichen. Es ist absolut verboten, Strom direkt über den I/O-Port des 51-Mikrocontrollers oder über den 5-V-Pin der Lehrplatine zu beziehen. Andernfalls erfolgt ein Reset oder der Chip wird verbrannt.
Standardverbindungsmethode:
1. Signalleitung: An einen beliebigen I/O-Port des Mikrocontrollers anschließen (z. B. P1.0)
2. Der Pluspol, der VCC ist, sollte an eine externe 5-V-Stromversorgung angeschlossen werden, z. B. das Spannungsstabilisierungsmodul LM2596, und einen 4,8-V-6-V-Akku.

3. Die negative Elektrode, also GND, muss im gleichen Grundzustand sein wie der GND des Mikrocontrollers, d. h. die negative Elektrode des Netzteils muss mit dem GND der Entwicklungsplatine verbunden sein.
Der Referenzfall zu YPMFG ist, dass ein Elektronik-Enthusiast STC89C52RC zum Antrieb des MG995R-Servos verwendete. Zunächst wurde der Strom direkt von der Entwicklungsplatine bezogen, was zu einem Flackern des Bildschirms führte. Später wurde zur Stromversorgung auf zwei in Reihe geschaltete 18650-Batterien umgestellt und diese dann auf 5,5 V reduziert. Danach arbeitete das Servo reibungslos und ohne Störungen.
Die Kernlogik besteht darin, einen Timer zu verwenden, um einen 100-μs-Interrupt zu erzeugen, und die High-Level-Zeit durch die Akkumulation der Anzahl der Interrupts zu steuern.
Codeschritte(Nehmen Sie als Beispiel einen 12-MHz-Quarzoszillator):
#enthaltenspuckenServo= P1^0; // Signalpin unsigned char count = 0; // Interrupt count unsigned char high_time = 15; // 1,5ms entspricht 90° (15×100μs) void Timer0_Init() { TMOD = 0x01; // Modus 1, 16-Bit-Timer TH0 = 0xFE; // 100μs Anfangswert (12MHz: 65536-100=65436→0xFF9C) TL0 = 0x0C; EA = 1; // Gesamtinterrupt einschalten ET0 = 1; // Aktivieren Sie den Timer 0 Interrupt TR0 = 1; // Timer starten } void Timer0_ISR() interrupt 1 { TH0 = 0xFE; // Den Anfangswert neu laden TL0 = 0x0C; count++; if(count++; servo = 1; // High-Pegel hält high_time×100μs an } else if(count servo = 0; } else { count = 0; // Ende des Zyklus, Reset count } } void main() { Timer0_Init(); high_time = 10; // Winkel einstellen: 10→45°, 15→90°, 20→135° while(1); }
Impulse werden mit _nop_() oder Verzögerungsschleifen erzeugt, aber die CPU-Auslastung ist hoch und der Winkel ist nicht genau. Beispiel:
Servo = 1; Verzögerung_us(1500); // 1,5 ms High-Level-Servo = 0; Verzögerung_ms(18.5); // Verbleibende Zykluszeit
Nachteile: Da andere Aufgaben nicht gleichzeitig erledigt werden können, hat der Quarzoszillatorfehler große Auswirkungen.
F1: Was soll ich tun, wenn der 51-Mikrocontroller direkt mit dem Servo verbunden ist und keine Reaktion erfolgt?
A: Überprüfen Sie, ob sie eine gemeinsame Basis haben. Der Minuspol der Servostromversorgung und der GND des Mikrocontrollers müssen verbunden sein, sonst entsteht keine Signalschleife.
F2: Wie kann das Problem gelöst werden, dass der Servo zittert und der Winkel nicht korrigiert werden kann?
Verbessern Sie die Genauigkeit des Timers, verwenden Sie einen 12-MHz-Quarzoszillator und stellen Sie den Anfangswert alle 100 μs neu ein, damit die Interrupt-Frequenz stabil bleiben sollte.
F3: Kann ein I/O-Port zur gleichzeitigen Steuerung mehrerer Servos verwendet werden?

A sagte nein. Jedes Servo benötigt eine separate Signalleitung. Mehrere Servos können sich die Plus- und Erdungskabel teilen, das Netzteil muss jedoch über ausreichend Strom verfügen.
F4: Was ist der Grund, warum es sich tatsächlich auf 30° dreht, wenn es auf 45° eingestellt ist?
A: Es liegt ein Fehler in der Quarzoszillatorfrequenz vor oder die High-Level-Zeit ist nicht genau. Messen Sie mit einem Oszilloskop die Breite des PWM-Impulses und passen Sie dann den Wert „high_time“ an.
F5: Tipps zum Schreiben von Artikeln: Wie kann die Lebensdauer des Lenkgetriebes verlängert werden?
A: Um ein Abwürgen zu verhindern, fügen Sie einen Kondensator hinzu. Schließen Sie einen 100μF-Elektrolytkondensator parallel zwischen den positiven und negativen Anschlüssen der Servostromversorgung an, um Welligkeiten herauszufiltern.
Datenquelle: Offizielles Datenhandbuch jedes Lenkgetriebes (Ausgabe 2023–2025)
1. Erhalten Sie die gemessene Wellenform und prüfen Sie mit einem Oszilloskop oder Logikanalysator, ob der PWM-Zyklus im Bereich von 20 ms plus oder minus 0,5 ms liegt.
2. Überprüfungswinkel: 1,5 ms High-Pegel schreiben, das Servo sollte sich noch in der 90°-Position befinden
3. Belastungstest: Drehen Sie den Servoarm vorsichtig von Hand, die Spannungsschwankung sollte 0,3 V nicht überschreiten
4. Wechseln Sie aus mehreren Winkeln, geben Sie ihm nacheinander einen Wert von 1,0 ms, dann einen Wert von 1,5 ms und dann einen Wert von 2,0 ms und beobachten Sie dann sorgfältig seine Drehung, um festzustellen, ob er gleichmäßige Eigenschaften aufweist.
Typische Fehlerbehebungstabelle:
Das Servo dreht sich nicht → Überprüfen Sie die gemeinsame Masse und die Versorgungsspannung (4,8 V–6 V).
Zittern und Zittern → Unzureichende Stromversorgung oder Interrupt-Konflikte (irrelevante Interrupts ausschalten)
Es kann nur um 0° und 180° gedreht werden, was dazu führt, dass sich die High-Level-Zeit nicht linear ändert. In diesem Fall muss die Zählvariable im Code überprüft werden.
Mithilfe eines 51-Mikrocontrollers und mithilfe von zwei Timern und einem Array können bis zu 8 Servos angesteuert werden. Die wichtigsten Methoden sind:
Timer 0 löst einen 2,5-Millisekunden-Interrupt aus und steuert die High-Level-Startmomente der 8 I/O-Ports nacheinander.
Jedes Servo ist unabhängig gelagerthigh_timeArray
Für die Stromversorgung muss ein externes Schaltnetzteil mit 5 V/10 A oder mehr verwendet werden
Code-Framework:
unsigned char servo_high[8] = {15,10,20,5,15,12,18,8}; //Impulswert jedes Servos unsigned char current_servo = 0; //Im Interrupt wird das vorherige Servo nach unten gezogen und das aktuelle Servo nach oben gezogen.
Die CPU-Auslastung dieser Lösung liegt bei etwa 40 % und sie kann dennoch einfache Aufgaben wie das Scannen von Schlüsseln bewältigen.
Mit einem 51-Mikrocontroller ist er vollständig in der Lage, das Servo anzusteuern. Die wichtigsten Erfolgsfaktoren sind eine unabhängige Stromversorgung, ein präzises Timing, d. h. eine Unterbrechung von 100 μs, und eine gemeinsame Masseverbindung. Als Anfänger sollten Sie mit einem einzelnen Servo, einem 12-MHz-Quarzoszillator und einer Timer-Interrupt-Lösung beginnen und die direkte Verwendung der Verzögerungsfunktion vermeiden.
Jetzt Checkliste ausführen:
1. Bereiten Sie eine geregelte Stromversorgung mit 5 V/1 A oder mehr oder einen 4,8 V-Akku vor
2. Schreiben Sie den Timer-Initialisierungscode (100 μs Interrupt).
3. Messen Sie mit einem Multimeter die positiven und negativen Spannungen des Servos (keine Last darf nicht weniger als 4,5 V betragen).
4. Testen Sie zuerst die 90°-Position (1,5-ms-Impuls) und erweitern Sie dann auf andere Winkel
Tipps zum Schreiben von Artikeln: Wenn der Mikrocontroller während des Betriebs des Servos zurückgesetzt wird, schließen Sie sofort einen 470-μF-Kondensator parallel an das Stromversorgungsende des Servos an und verkürzen Sie die Länge des Netzkabels (weniger als 20 cm). Befolgen Sie diese Anleitung und Sie werden innerhalb von 30 Minuten eine präzise Winkelsteuerung erreichen können.
Aktualisierungszeit: 29.04.2026
Wenden Sie sich an den Produktspezialisten von Kpower, um einen geeigneten Motor oder ein geeignetes Getriebe für Ihr Produkt zu empfehlen.