Kann ich den GPIO als Pulsweitenmodulationsausgang verwenden?
Wenn ja, wie würde ich vorgehen und wie viele gleichzeitige, unterschiedliche PWM-Ausgänge kann ich haben?
Kommentare
- Sie Möglicherweise müssen Sie angeben, welches Modell Sie ‚ verwenden. Sie unterscheiden sich alle geringfügig.
- @ user1147688 Diese Frage wurde gestellt, als es nur ein Modell gab!
Antwort
Wie von Alex Chamberlain vorgeschlagen, wird die Bibliothek WiringPi angezeigt Unterstützung der Hardware-PWM-Ausgabe an einem oder zwei GPIO-Pins je nach Modell und der Software-PWM an einem der anderen GPIO-Pins. Währenddessen führt die RPIO.PWM-Bibliothek PWM durch DMA an einem beliebigen GPIO-Pin aus. Tatsächlich ist dies ein Zwischenstopp zwischen Hardware- und Software-PWM und bietet eine Zeitauflösung von 1 µs im Vergleich zu 100 µs mit WiringPi “ Software-PWM [1] .
Welche davon für Ihre Anwendungen geeignet ist, hängt davon ab, wie viele PWM-Ausgänge Sie benötigen und welche Leistung Sie von diesen Ausgängen erwarten.
Wenn Ihre Anwendung eine niedrige Timing-Auflösung und einen hohen Jitter toleriert, können Sie eine Software oder eine DMA-unterstützte Timing-Schleife verwenden. PWM mit niedrigerem Jitter, dann benötigen Sie möglicherweise Hardware-Unterstützung.
Wann ist Software-PWM möglicherweise geeignet?
Wenn Sie eine Reihe von LEDs mit unterschiedlichen sichtbaren Kadenzen (10 Zoll) blinken lassen möchten Hertz) mit weichen Echtzeit-Antwortanforderungen kann die Softwareschleife so viele PWMs verarbeiten, wie Sie über GPIO-Pins verfügen.
Wann Ist möglicherweise Hardware-PWM geeignet?
Wenn Sie einen Serv steuern möchten o Motor mit harten Echtzeit-Antwortanforderungen , dann müssen Sie Hardware-PWM verwenden. Selbst dann können Probleme auftreten, eine Echtzeitantwort für die Servoschleife sicherzustellen, die den Encodereingang mit dem PWM-Ausgang verbindet.
Eine stabile Servoschleife Sie müssen Encoder mit einer regulären Rate lesen (geringer Jitter), überarbeitete PWM-Ausgangswerte mit einer regulären Rate ausschreiben und die Latenz zwischen diesen sollte fest sein (insgesamt niedriger Jitter). Wenn Sie dies nicht tun können, müssen Sie Ihren Motor abstimmen (sanft einstellen), um zu verhindern, dass er unter Last instabil wird. Dies ist mit einem Multitasking-Betriebssystem ohne Low-Level-Unterstützung nur schwer möglich.
Was ist, wenn ich mehr Hardware-PWM-Ausgänge benötige?
Wenn Sie mehr Servo-Loops ausführen müssen als Hardware-PWM-Ausgänge, müssen Sie diese wahrscheinlich auf ein anderes Gerät auslagern, um eine hohe Auslastung zu gewährleisten Echtzeitleistung, die Ihren Raspberry Pi zu einem weichen Echtzeit- Supervisor macht.
Eine Option wäre etwa die Adafruit 16-Kanal-12-Bit-PWM / Servotreiber – I²C-Schnittstelle – PCA9685 , mit dem Sie 16 PWM-Ausgänge mit nur wenigen GPIO-Pins für den I²C-Bus steuern können. Ein Beispiel für seine Verwendung: Schauen Sie sich den Beitrag I²C 16-Kanal-PWM / Servo-Breakout – Working in den Raspberry Pi-Foren an.
1. Vielen Dank an dm76 für den Vorschlag, jedoch heather sagt, dass RPIO.PWM für neuere pi-Modelle möglicherweise nicht mehr funktioniert.
Kommentare
- Kann ich den Software-PWM-Ansatz zum Betreiben von Gleichstrommotoren verwenden?
- @gideon – Ja, die von mir verwendeten Motorleistungsverstärker haben alle PWM als Eingang verwendet.
- Zu Ihrer Information, die RPI-Bibliothek ( pythonhosted.org/RPIO/pwm_py.html ) scheint im Vergleich zu WiringPi mit eine viel bessere Auflösung (1us) zu haben 100us Auflösung
- @MarkBooth – Keine Probleme. Die Bibliothek ist wirklich gut geschrieben und kann als Drop-In-Ersatz für RPi.GPIO verwendet werden. Dies ist sehr praktisch, wenn Sie ein Projekt mit letzterem gestartet haben und später realisierte PWM-Signale benötigt wurden …
- RPIO. PWM funktioniert möglicherweise nicht mehr für neuere Pi-Modelle.
Antwort
Hardware-PWM
Ja, am Raspberry Pi befindet sich ein Hardware-PWM-Ausgang, der an P1-12 (GPIO18) angeschlossen ist. Ferner könnten PWM-Ausgänge unter Verwendung einer I²C – oder SPI -Schnittstelle hinzugefügt werden; Einige Leute hatten Erfolg damit ( Forumsbeitrag ).
Beispielcode
Sie können den WiringPi-Bibliothek zur Steuerung des PWM-Pins; Sie können sich den Code ansehen, um zu vermeiden, dass die gesamte Bibliothek eingeschlossen wird.
Software-PWM
Der Raspberry Pi ist nicht für ernsthafte Software-PWM geeignet, da Linux kein Echtzeitbetriebssystem ist .
Kommentare
- Frage, wie lautet die Definition oder ein Beispiel für seriöses Software-PWM? Und was sind “ Echtzeitbetriebssysteme “ und gibt es jemals eine Chance, eines auf einem Pi
- zu bekommen @AnthonyBlake Nun, Sie können wahrscheinlich die Helligkeit eines Lichts mithilfe der Software PWM steuern, aber ich vermute, dass ein Motor blockiert. ‚ Es ist jedoch keine Software-PWM erforderlich. Die Hardware ist einfacher und effektiver. Echtzeitbetriebssysteme werden von Google besser erklärt. Sie garantieren bestimmte Dinge darüber, wie lange und oft Software ausgeführt wird.
- @AnthonyBlake A “ Echtzeit-Betriebssystem “ (RTOS) ist ein Betriebssystem, das Ihnen eine Garantie für die obere Ausführungszeit gibt. Wie zum Beispiel zu dem Programm “ Ja, Sie haben eine Ausführungszeit in 33 ms (geben oder nehmen Sie 2 ms Toleranz), um dieses GPIO-Pin-Bit umzudrehen und Ihrem Schrittmotor ein genaues Signal zu geben Zeitfenster, wenn er es braucht. Darauf können Sie sich verlassen! “ ‚ gibt es ein RT Linux. ‚ weiß nicht, ob ‚ (noch) auf das RPi portiert wurde.
- Sorry Alex, I. ‚ hat nicht absichtlich einen anderen Teil Ihrer Antwort gestohlen, aber ‚ hat gerade bemerkt, dass wir über verschiedene Routen zum selben Forumsbeitrag gekommen sind
- Neuere Modelle mit 40 Pins verfügen über eine zweite Hardware-PWM, die an GPIO19 (Pin 35) angeschlossen ist.
Antwort
Aktuelle Pis haben zwei Hardware-PWM-Kanäle. Zusätzlich können Hardware-zeitgesteuerte PWM-Impulse unabhängig auf allen GPIOs erzeugt werden, die an den 40-Pin-Erweiterungsheader angeschlossen sind.
In der Praxis bedeutet dies, dass zwei hochgenaue PWM-Kanäle vorhanden sind und alle anderen GPIOs möglicherweise PWM im Arduino-Stil haben (800 Hz, 0 aus – 255 vollständig eingeschaltet).
ZB Servoblaster und mein pigpio usw.
Kommentare
- Schöne Antwort! Wie kann ich diese beiden HW-PWMs verwenden? Ich muss 2 Servos steuern, ich weiß, dass Sie sagen, Servoblaster und Pigpio sind dafür in Ordnung, aber ich wundere mich nur über die HW-PWM, weil ich nichts über sie finden kann … gibt es da draußen einige Dokumente dafür? Ich habe ein RPi 2 V1.1 für Tests.
- C , Python , Schweinebefehlszeile .
- Eine hohe CPU-Auslastung sollte ‚ nicht dazu führen, dass a Unterschied. Eine hohe Netzwerklast kann für gpioServo einen Unterschied bedeuten, insbesondere wenn die Abtastung mit 1 MHz statt mit den Standard-200 kHz erfolgt. Die Frequenz beträgt 50 (Hz), der Bereich der Arbeitszyklen liegt zwischen 0 und 1000000 (abgebildet auf den tatsächlichen zugrunde liegenden Wert von 0 bis 5000000). 1 ms ist 1 ms in 20 ms, also ein Tastverhältnis von 5%, also 50000, 1,5 ms – > 7,5% – > 75000, 2 ms – > 10% – > 100000.
- Seite 102 von BCM2835 ARM-Peripheriegeräte zeigt die verschiedenen Modi, denen der GPIO zugewiesen werden kann. Suchen Sie online, welche GPIOs zu den verschiedenen Erweiterungsheadern des Pi-Modells geleitet werden.
- @ user1147688 PLLD (500 MHz) wird als PWM-Kerntakt verwendet. Aufgrund der Funktionsweise von “ “ beträgt die PWM-Kernfrequenz 250 MHz. Zum Ein- und Ausschalten (für PWM ziemlich wichtig) beträgt das Maximum 125 MHz. Sie können die Zahlen mit PLLC (1000 MHz) verdoppeln, aber diese PLL variiert mit der Kerntaktrate.
Antwort
Nicht ganz ein Echtzeitbetriebssystem, aber RISC OS für Raspberry Pi ist kooperatives Multitasking, sodass Sie problemlos eine Anwendung mit 100% CPU ausführen können Sie können Ihre Timings viel besser verwalten. Erwarten Sie nur nicht, etwas anderes als Ihren eigenen Code zu tun.
Kommentare
- Ich habe irgendwo gelesen, dass es ein Hardware-Limit für das Umschalten gibt Ich glaube, es war ungefähr 20 MHz. ‚ erwarten Sie nicht, dass Sie 300 MHz PWM oder ähnliches ziehen können, selbst mit 100 % CPU-Auslastung.
- @Wallacoloo: Welche Anwendungen erfordern 300-MHz-PWM?
- @PeterMortensen: Nun, ich weiß nicht, wie Funk funktioniert ‚ Sender und dergleichen erzeugen ihre Signale, aber einige tun dies möglicherweise mit PWM. PiFM macht das bei 100 MHz. Das scheint jedoch meinem Kommentar zu widersprechen, also frage ich mich, ob der Pin vielleicht noch bei dieser Frequenz befohlen werden kann, aber es ist ‚ ist nur so, dass die Pin-Kapazität solche Signale abschwächt, so dass eine 100-MHz-Rechteckwelle tatsächlich von z. B. (1,0 V, 2,3 V) anstelle der vollen (0 V, 3,3 V) schwingen kann. Reichweite.
Antwort
Ich habe diese Bibliothek gefunden ( pi -blaster ), der behauptet, „extrem effizient zu sein: verwendet die CPU nicht und gibt sehr stabile Impulse“.
Ich habe es noch nicht getestet, werde es aber aktualisieren, sobald ich es tue (wahrscheinlich heute)
Kommentare
- Ich ‚ habe dies versucht, aber bisher kein Glück. Soweit ich das beurteilen kann, wechselt ‚ die Hardware nicht wirklich?
- Ich möchte dies nur anstoßen. Pi-blaster hat bei mir funktioniert, wo diese anderen Antworten nicht.