Steuerung eines Servos mit Raspberry Pi Pico W und PWM

Ein Servo ist eine der grundlegendsten Möglichkeiten, um die Verwendung der Pulsweitenmodulation (PWM) mit dem Raspberry Pi zu lernen. In diesem Artikel zeige ich Ihnen, wie Sie dies mit einem Raspberry Pi Pico W tun können.

Ziele des PWM-Tutorials

Ein Servo mit einem Pico W und PWM
  • Lernen Sie, wie man mit PWM den Winkel des Servos steuert
  • Einrichten eines Servers mit dem Pico W
  • Server liefert Webseite mit einem Schieberegler zur Steuerung des Servos

Benötigte Teile

  • Raspberry Pi Pico W mit Headern
  • Schaltdraht
  • Servo (wir verwenden das Micro-Servo Tower Pro SG90)

Was ist Pulsweitenmodulation?

Kinder finden es amüsant, das Licht wiederholt ein- und auszuschalten.

Für sie ist es einfach amüsant zu sehen, wie das Licht flackert, wenn sie den Lichtschalter umlegen. Die Eltern finden das vielleicht nicht so lustig, aber wir alle können dabei etwas lernen.

Wenn Sie oder Ihre Kinder das getan haben, dann haben Sie eine primitive Form der Pulsweitenmodulation erlebt.

Mit einem Raspberry Pi können Sie dies ganz einfach automatisieren. Im Wesentlichen teilt man dem Raspberry Pi mit, wie oft er in einem bestimmten Zeitraum eingeschaltet werden soll.

Damit können Sie die LEDs dimmen:

picockpit gpio pwm fernsteuerung
Umschalten der LED-Helligkeit mit der PWM-Funktion von PiCockpit

Außerdem können Sie damit den Winkel des Servoarms steuern.

Ein wichtiges PWM-Konzept: das Tastverhältnis

Die Einschaltdauer ist im Grunde die Zeit, in der der Stromkreis "high" bleibt, d. h. er ist eingeschaltet.

Nehmen wir also an, Ihr Schaltkreis ist die Hälfte der Zeit eingeschaltet. Wir können also sagen, dass das Tastverhältnis bei 50% liegt.

Wenn das Gerät die ganze Zeit eingeschaltet ist, liegt die Einschaltdauer bei 100%, und umgekehrt, wenn es die ganze Zeit ausgeschaltet ist, liegt sie bei 0

Abbildung der Einschaltdauer von Sparkfun (CC BY-SA 4.0)

Um auf das Beispiel eines Kindes zurückzukommen, das die Lichter regelmäßig ein- und ausschaltet: Der Grund, warum die Lichter nicht vollständig aufleuchten oder gedimmt werden, liegt darin, dass wir nur für einen bestimmten Zeitraum eine Ausgangsspannung liefern.

Bei einer LED bedeutet dies, dass die LED eine Zeit lang leuchtet, dann wird der Strom abgezogen, dann wird wieder Strom geliefert und so weiter.

Die LED wird also nie hell genug, um ihre volle Helligkeit zu erreichen, und sie hat auch nicht genug Zeit, um ganz dunkel zu werden.

SG90-Servosteuerung mit PWM

Wir müssen hier vorsichtig sein, da nicht alle Servos auf die gleiche Weise funktionieren. Diese Anleitung bezieht sich speziell auf das Micro-Servo Tower Pro SG90.

Das SG90 hat eine 180-Grad-Drehung, aber einige Servos sind 120-Grad-Servos. Bei Funksteuerungs-Hobbyservos handelt es sich höchstwahrscheinlich um 120-Grad-Servos. Prüfen Sie also unbedingt das Datenblatt des Servos, das Sie manipulieren möchten, da es möglich ist, Servos zu beschädigen, wenn Sie ihm ein Signal außerhalb des Bereichs geben.

Dies ist das Datenblatt für den SG90 von Luxor Parts:

Im Datenblatt finden Sie zwei wichtige Angaben: welche Farbe dem Plus, der Masse und dem Signal entspricht und die Impulsfrequenz/Tastverhältnis.

  • Braun = negativ
  • Rot = positiv
  • Orange = Signal

Und für Pulsfrequenz/Tastverhältnis

  • Sie benötigen ein Tastverhältnis von 20ms oder 50Hz.
  • Ein Signal von 1ms = Null Grad
  • Ein Signal von 2ms = 180 Grad gedreht
Bei einem 1ms-Signal wird das Servo um null Grad gedreht.

Das bedeutet, dass das Servo alle ms nach einer Aktualisierung sucht. Wenn Sie ihm weiterhin ein 2ms-Signal senden, bleibt es bei voller Drehung (180 Grad). Wenn Sie es auf 1,5 ms ändern, wird es sich um 90 Grad drehen, und bei 1 ms wird es sich um null Grad drehen.

Bei einem Signal von 2ms wird das Servo um 180 Grad gedreht.

Anschließen des Servos an den Pico W

Um unseren Code zu verwenden, müssen Sie die Signalleitung zu GPIO 0. Das Signalkabel ist das orangefarbene Kabel am SG90.

Schließen Sie dann das rote Kabel an VBUS (was Ihnen 5V liefert). Wie Sie aus dem Datenblatt sehen können, ist die Betriebsspannung für die SG50 4.8V bis 6V, so dass die 3.3V Pin auf der Pico W wird nicht funktionieren.

Codierung der Pico W-Servosteuerung

Sie können Hier finden Sie den Code auf unserem GitHub.

Schauen wir uns den Code an.

Unter main.pydie eine Namenskonvention für die Datei ist, die wir beim Booten ausführen wollen, erstellen wir eine Klasse für den Servo und instanziieren sie:


class Servo:
    def __init__(self, MIN_DUTY=300000, MAX_DUTY=2300000, pin=0, freq=50):
        self.pwm = machine.PWM(machine.Pin(pin))
        self.pwm.freq(freq)
        self.MIN_DUTY = MIN_DUTY
        self.MAX_DUTY = MAX_DUTY
        
    def rotateDeg(self, deg):
        if deg < 0:
            deg = 0
        elif deg > 180:
            deg = 180
        duty_ns = int(self.MAX_DUTY - deg * (self.MAX_DUTY-self.MIN_DUTY)/180)
        self.pwm.duty_ns(duty_ns)

servo = Servo()

Die Servoklasse verwendet die in MicroPython verfügbare Klasse machine.PWM. Siehe Dokumentation hier.

In diesem Beispiel verwenden wir den Pico W als Zugangspunkt. Hier ist der Code, um das zu ermöglichen:

ssid = 'Servo-Control'
password = 'PicoW-Servo'

ap = network.WLAN(network.AP_IF)
ap.config(essid=ssid, password=password)
ap.active(True)

while ap.active() == False:
  pass

print('Connection successful')
print(ap.ifconfig())

Wie Sie in den ersten beiden Zeilen sehen können, lautet die gesuchte SSID Servo-Steuerung und das Passwort lautet PicoW-Servo.

Sobald Sie sich im WiFi-Netzwerk angemeldet haben, können Sie die IP-Adresse des Pico W aufrufen, die standardmäßig 192.168.4.1 lautet. Alternativ können Sie auch im Protokoll von Thonny nachsehen, wie die IP-Adresse Ihres Pico lautet.

Wie kommuniziert die Webseite mit dem Servo?

Servo-Schieberegler

Wenn Sie sich an der IP-Adresse des Pico W anmelden, erhalten Sie die Datei index.html, die Sie im Github-Repositorium finden können.

Die Datei index.html enthält diese wichtigen Zeilen:

 <form id="form">
            <input type="range" class="slider" min="0" max="180" value="slider_value" name="servo" id="servo">
            <output></output>
        </form>

Wie Sie sehen können, gibt es ein -Objekt, das der Schieberegler ist.

Es gibt auch eine , die den Grad der Drehung anzeigt.

Der JavaScript-Teil aktualisiert die sowie die URL, damit der Pico W die Daten erfassen und den Servo drehen kann.

Die Elemente und haben ein übergeordnetes .

Hier ist das Skript auf der Vorderseite,