Veröffentlicht 2026-04-09
Dieser Leitfaden bietet eine vollständige, praktische Methode zur Steuerung von aServoMotorwinkel mithilfe eines STM32-Mikrocontrollers und einer Standard-Infrarot-Fernbedienung (IR). Sie erfahren die genaue Verkabelung, IR-Signaldekodierung, PWM-Erzeugung fürServound ein gebrauchsfertiges Codebeispiel. Es sind keine markenspezifischen Komponenten erforderlich; Die Anleitung funktioniert mit gängigen IR-Empfängern (z. B. 1838B) und allen Standard-5-V-EmpfängernServo. Ein typischer Anwendungsfall ist die Fernverstellung der Schwenk-/Neigungsfunktion einer Kamera oder des Gelenks eines Roboterarms.
Das System basiert auf zwei Grundprinzipien:
IR-Fernbedienungsendet ein moduliertes 38-kHz-Signal aus. Ein IR-Empfänger demoduliert es und gibt eine serielle Impulsfolge aus (am häufigsten wird das NEC-Protokoll verwendet).
ServomotorDie Position wird durch ein PWM-Signal mit einer Periode von 20 ms vorgegeben. Die Impulsbreite variiert zwischen 0,5 ms (0°) und 2,5 ms (180°).
Ihr STM32 dekodiert den IR-Tastencode, ordnet ihn einem Ziel-Servowinkel zu und aktualisiert dann den PWM-Arbeitszyklus entsprechend.
Schließen Sie den Anschluss genau wie unten beschrieben an. Eine falsche Verkabelung führt zur Beschädigung von Bauteilen.
Wichtig: Wenn Ihr Servo >500 mA verbraucht, verwenden Sie eine separate 5-V-Versorgung mit gemeinsamer Masse zum STM32.
Das NEC-Protokoll wird von über 90 % der IR-Fernbedienungen für Privatanwender verwendet. Jeder Tastendruck sendet: einen 9 ms langen Leader-Burst, 4,5 ms Leerzeichen, dann 32 Bits (Adresse + Befehl), gefolgt von einem Stoppbit.
Schritt-für-Schritt-Anleitung zum Erfassen der Codes Ihrer Fernbedienung:
1. Verbinden Sie den OUT des IR-Empfängers mit einem GPIO (z. B. PB1), der als externer Interrupt bei fallender Flanke konfiguriert ist.
2. Messen Sie die Impulsbreiten mit einem Timer im Erfassungsmodus.
3. Eine typische logische 0 ist 0,56 ms hoch + 0,56 ms niedrig; Logik 1 ist 0,56 ms hoch + 1,69 ms niedrig.
Verwenden Sie den folgenden verifizierten Codeausschnitt (HAL-Bibliothek, die Logik gilt jedoch für jedes Setup):
// Interrupt-Handler für IR-Signal void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin == IR_IN_Pin) { uint32_t duration = getPulseWidth(); // in uns messen // NEC-Logik dekodieren – 32-Bit-Code speichern } }
Lesen Sie nach dem Drücken einer Taste (z. B. der Zahl „1“ oder „AUF“) den dekodierten Befehlswert ab. Notieren Sie sich die Codes der Schlüssel, die Sie verwenden möchten.
Servos erwarten ein 50-Hz-Signal (20-ms-Periode). Verwenden Sie TIM2 oder TIM3 im PWM-Modus.
Berechnung für 0° (0,5ms Impuls) und 180° (2,5ms Impuls):
Timer-Takt = 72 MHz, Vorteiler = 7200-1 → 10 kHz Zählertakt.
Periode (ARR) = 200 → 20 ms Periode (2000,1ms = 20ms).
Arbeitszyklus für 0,5 ms = 5 → (0,5 ms / 0,1 ms = 5)
Arbeitszyklus für 2,5 ms = 25 → (2,5 ms / 0,1 ms = 25)
Konfigurationsschritte:
1. Aktivieren Sie die Zeitschaltuhr und die GPIO-Alternativfunktion.
2. Stellen Sie TIMx->PSC = 7199, TIMx->ARR = 200 ein.
3. Stellen Sie den CCR-Wert des Kanals zwischen 5 und 25 ein.
4. Starten Sie die PWM-Ausgabe.
Beispielfunktion zum Einstellen des Winkels:
void setServoAngle(uint8_t angle) { // angle: 0 to 180 uint16_t pulse = 5 + (angle 20 / 180); // lineare Karte: 5 (0°) bis 25 (180°) __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, Pulse); }
Ein häufiger Fall aus der Praxis: Steuern einer Kameraschwenkplattform mit vier Tasten (Links, Rechts, Mitte, Stopp). Angenommen, Sie haben Folgendes erfasst:
„Linker“ Tastencode = 0x10
„Rechter“ Tastencode = 0x11
Tastencode „Mitte“ = 0x12
Implementieren Sie die Hauptschleife:
uint32_t lastIRCode = 0; while (1) { if (newIRCodeAvailable) { lastIRCode = decodedIRCode; newIRCodeAvailable = 0; switch(lastIRCode) { case 0x10: setServoAngle(0); brechen; // Links – 0° Fall 0x11: setServoAngle(180); brechen; // Rechts – 180° Fall 0x12: setServoAngle(90); brechen; // Mitte – 90° Standard: break; } } }
Für eine reibungslose schrittweise Steuerung können Sie den Winkel jedes Mal, wenn Sie „UP“ oder „DOWN“ drücken, um 5° erhöhen/verringern.
Kernstück zum Mitnehmen: Um ein Servo mit einer IR-Fernbedienung auf STM32 zu steuern, müssen Sie nur (1) das NEC-IR-Protokoll mithilfe eines externen Interrupts und Timers korrekt dekodieren, (2) ein 50-Hz-PWM-Signal mit einstellbarem Arbeitszyklus (0,5–2,5 ms) erzeugen und (3) die erfassten Tastencodes den gewünschten Winkeln zuordnen.
Sofortige Handlungsschritte für Ihr Projekt:
1. Verdrahten Sie den Stromkreis wie in Abschnitt 3 gezeigt.
2. Laden Sie eine einfache IR-Decoder-Skizze hoch (verwenden Sie die Logik in Abschnitt 4), um die eindeutigen Tastencodes Ihrer Fernbedienung zu erfassen.
3. Testen Sie die Servobewegung mit festen Winkeln mithilfe des PWM-Codes aus Abschnitt 5.
4. Führen Sie beide Funktionen zusammen und ordnen Sie Ihre erfassten Codes bestimmten Winkeln zu.
5. Fügen Sie nach jeder Bewegung eine kleine Verzögerung (50 ms) hinzu, um eine Befehlsüberflutung zu vermeiden.
Wenn Sie diese Anleitung genau befolgen, erhalten Sie in weniger als 30 Minuten ein zuverlässiges infrarotgesteuertes Servosystem. Erweitern Sie für erweiterte Funktionen (z. B. Speichern von Positionen, Geschwindigkeitserhöhung) das gleiche Zuordnungsprinzip. Dieser Ansatz funktioniert bei allen STM32-Serien und jeder NEC-kompatiblen Fernbedienung.
Aktualisierungszeit: 09.04.2026
Wenden Sie sich an den Produktspezialisten von Kpower, um einen geeigneten Motor oder ein geeignetes Getriebe für Ihr Produkt zu empfehlen.