Ich möchte ein kleines RC-Servo (5 V, 500 mA) von den GPIO-Pins über Python steuern .
Hardware
- Was sind die erforderlichen elektrischen Anschlüsse?
- Kann ich mehrere Servos an den Raspberry Pi anschließen?
- Gibt es derzeit Einschränkungen? Muss ich den Ausgangspin mit einem Transistor puffern?
- Kann ich das Servo direkt vom Raspberry Pi aus mit Strom versorgen oder sollte ich ein externes Netzteil verwenden? Benötige ich einen Kondensator, um die ruckartige Leistungsaufnahme des Servos zu glätten?
Software
- Welche Software / Python-Code benötige ich? Ich weiß, dass ich 20-ms-Impulse benötige. Wie kann ich das erreichen?
- Welche Art von CPU-Auslastung kann ich von der Verwendung des Raspberry Pi auf diese Weise erwarten?
Antworten:
Die erforderlichen elektrischen Anschlüsse hängen von Ihrem Servo ab. Der GPIO liefert 3,3 V und bis zu 16 mA , was für Ihr Servo nicht ausreicht. Sie müssen ihn daher mit einem Transistor puffern.
Es gibt 8 GPIO-Pins auf dem Erweiterungs-Header , obwohl andere Pins neu konfiguriert werden können, um insgesamt bis zu 17 GPIO-Pins zu erhalten. Wenn Sie mehr benötigen, müssen Sie eine Art Multiplexer hinzufügen.
Auf dem Raspberry Pi oder auf jedem Nicht-Echtzeit-Betriebssystem ist es schwierig, genau zeitgesteuerte Signale zu erhalten, da Interrupts und Taskwechsel jederzeit auftreten können. Wahrscheinlich benötigen Sie eine externe Elektronik, um zeitgenaue Signale zu liefern.
Andrew hat Sie auf eine Software hingewiesen. Die CPU-Auslastung hängt davon ab, was Sie tun, aber das GPIO selbst fügt keine Auslastung hinzu.
quelle
Wenn Sie auf Ihrem Raspberry Pi ein Echtzeit-Betriebssystem ausführen, ist dies in der Tat möglich. Wie andere bereits gesagt haben, benötigen Sie eine externe Stromquelle für die Servos, außer dass Sie keine andere zusätzliche Hardware benötigen.
Wenn Sie Xenomai (Echtzeit-Patch für Linux) ausführen, können Sie ein vollständig vertrautes Linux-System mit zusätzlichen Echtzeitfunktionen ausführen.
Ich habe eine winzige C-Bibliothek geschrieben, um Servos vom Raspberry Pi aus zu steuern. Ich habe versucht, 3 Servos gleichzeitig damit zu steuern, aber es gibt wirklich keinen Grund, warum es nicht mit mehr funktionieren sollte.
Sie finden meine winzige Bibliothek hier: https://github.com/simonfi/pi-servo Das Hinzufügen eines Python-Wrappers sollte trivial sein. Xenomai für Raspberry Pi finden Sie hier: http://powet.eu/2012/07/25/raspberry-pi-xenomai/
Das Erzeugen der benötigten Signale für drei Servos verbraucht im Grunde genommen eine vernachlässigbare Menge an CPU. Ich habe noch nicht mit mehr als drei getestet.
quelle
Wenn es Ihnen nichts ausmacht, einen Linux-Kerneltreiber zu verwenden, gibt es einen Servoblaster, der die Servos als Char-Gerät ausstellt.
https://github.com/richardghirst/PiBits
Ich habe eine neue Version herausgegeben, die nicht alle GPIO-Pins für Servos verbraucht. Ich verwende derzeit einen solchen kleinen Roboter mit Servoantrieb, den ich für unseren Roboterklub mit IPGamePad gebaut und erprobt habe, um ihn zu steuern.
https://github.com/jronald/PiBits
Außerdem möchten Sie die Servos nicht über das RPI mit Strom versorgen, sondern stattdessen ein separates Netzteil verwenden. Natürlich müssen Sie diese Gründe zusammenbinden. Da die RPI-Ausgänge an den Servo angeschlossen sind, ist keine Spannungsverschiebung erforderlich. Sie sollten jedoch sehr vorsichtig sein, um die Dinge nicht falsch zu verdrahten.
quelle
Servos werden im Allgemeinen mit PWM-Signalen gesteuert; Sie sollten GPIO als PWM-Ausgang bezeichnen .
Es gibt PWM-Unterstützung auf dem Chip, so dass wir diese in Zukunft nutzen können sollten. Grundsätzlich sagt die Software der Hardware lediglich, dass sie Impulse mit einer bestimmten Frequenz erzeugen soll. Einige Leute hatten Erfolg mit externen PWM-Controllern über I2C.
quelle
Für den Himbeer-Pi ist eine Erweiterungskarte erhältlich, die als Gertboard bezeichnet wird und zur Steuerung von Servos und anderen Lasten dient, die der Pi nicht alleine antreiben kann.
quelle
Das Wissen darüber, wie man Dinge auf dem Pi macht, hat sich in den Jahren, seitdem diese Frage gestellt wurde, erheblich verbessert.
Es gibt mindestens vier Möglichkeiten, Hardware-zeitgesteuerte PWM / Servo-Impulse auf den Pi-Gpios zu erzeugen, ohne externe Hardware zu verwenden.
Die Verwendung von Kernel-Modulen zu diesem Zweck ist ziemlich veraltet. Die folgenden Userland-Lösungen sind verfügbar.
quelle
Es würde mich überraschen, wenn Sie die Ausgaben unter Linux so gut zeitlich steuern können, dass ein Servo genau gesteuert wird.
Der Puls muss über einen Bereich von 2 Millisekunden gesteuert werden. Selbst wenn das Scheduler-Häkchen eine Auflösung von 100us hat (was sehr drückend ist - normalerweise sind es 10 ms), sind das nur 20 Schritte, die Sie auflösen können. Und das, ohne den Jitter zu berücksichtigen, der durch das Task-Switching entsteht.
Wenn ein anderer Zeitgeber verfügbar ist, können Sie möglicherweise einen Treiber auf sehr niedriger Ebene schreiben, der sogar das Betriebssystem vorbelegen kann, um ein genaues Timing zu erzielen. Hört sich nach Spaß an!
quelle
Ich denke, dass der Versuch, ein Servo direkt vom GPIO-Port aus zu betreiben, schwierig ist und viel CPU-Overhead verursacht, wenn es überhaupt möglich ist. Ich verwende einen USB-Servocontroller, der hervorragend funktioniert und fast keine CPU benötigt, obwohl die Einrichtung etwas schwierig ist. Der eine, den ich habe, ist 24 Kanäle, aber sie machen eine 6-Kanal-Version. Ich habe auch 2- und 4-Kanal-Controller von anderen Anbietern gesehen, die seriell arbeiten. Dies wäre einfacher und billiger als USB, wenn Sie nicht so viele Servos steuern müssen.
quelle
Es gibt einen voll funktionsfähigen GPIO-Webdienst, für den Sie Ihre eigenen Plugins schreiben können. Es scheint bereits Unterstützung für die Steuerung einer beliebigen Anzahl von Servos zu geben. Im Inhaltsverzeichnis finden Sie eine Reihe von Bildern sowie Informationen zum Layout der Karte.
https://bitbucket.org/PaulTechGuy/raspberrypi.dotnet.gpioweb
Scheint in C # zu sein, das Mono auf dem Pi ausführt.
quelle