GPIO: Lesen von PWM

ts7622

Ensign
Registriert
Aug. 2012
Beiträge
237
guten Abend zusammen,

mein Ziel ist es RGB-LEDs passend zu einem PWM Signal leuchten zu lassen. Das Signal kommt durch ein analoges Audiosignal vom Computer zustande und wird als PWM übermittelt. Die LEDs direkt an mit diesem PWM Signal steuern ist kein Problem, nur möchte ich gerne bisschen damit herumspielen. Zum Beispiel möchte ich ein gewisses Grundleuchten und verschiedene Leuchtmodis per Skript definieren. Jetzt suche ich einen kleveren Weg, wie ich ein PWM Signal möglichst in Echtzeit durch ein Skript auf dem Pi 3 laufen lasse. Hat jemand eine Idee? (Btw.: Ich bin kein Elektroniker, nur ein kleiner Anwendungsentwickler ;) )
 
Moin,

also erst musst du das Signal ja an einem Port einlesen und anschließend auf einem anderen Port wieder ausgeben. Ich bin mir nicht sicher wie das ganze funktioniert (ist schon ne weile her dass ich an meinem PI rumgebastelt hab), aber ich würde immer im 10 MS (o.ä.) Takt einen teil des Signals einlesen, verarbeiten und ausgeben. Dass du das Signal direkt durchreichen und modifizieren kannst halte ich eher für problematisch. Außerdem würde ich auf jeden Fall mit einem Interrupt Timer arbeiten, da sonst dein Signal evtl. nicht konstant geschrieben/gelesen wird.
Wie gesagt ich bin leider selber nicht mehr 100% in der Materie drin, aber evtl. ist das ein Ansatz mit dem du weiter kommst :))
Ein anderer Ansatz wäre, dass du einfach weiterhin das Signal durchreichst, aber dann in einem bestimmten Zyklus immer wieder das Signal durch dein Skript ersetzt also sozusagen beide Signale parallel laufen lässt. Wenn das Menschliche Auge nimmt das "flimmern" sowieso nicht wahr, da dieses viel zu schnell ist und dann "kombiniert" sich das Licht, musst aber mal en bisschen rumprobieren. Etwas ähnliches hatte ich mal auf nem Atmega programmiert, aber nur in Rot :P wenn ich heute abend heim komme, schaue ich mal ob ich da noch den Code finde ;)

Grüße,
Nico
 
Es geht mir ja im Prinzip erstmal darum, wie ich ein verwertbares Signal bekomme. Das Ausgeben ist dan kein Problem mehr.

Belastet den Pi eine Schleife mit 10ms nicht etwas? Ich wollte mal gerne (allerdings auf einem Pi der ersten Generation), dass die Leichtkraft einer LED von (angenommen) 100% auf 50% langsam absinkt. Nur leider war der Pi durch diese Schleife so ausgelastet, dass nur jede Sekunde eine Ausgabe über den entsprechenden PIN geschah. "Fragt man sich immer worans gelegen hat"
 
Polling mit 10ms lastet den Pi 3 überhaupt nicht aus. Selbst wenn du ohne delay polling betreibst wird der Pi nicht voll ausgelastet, weil multi-core CPU.
Aber, was du bei signal sampling immer beachten musst ist Nyquist–Shannon sampling theorem, also dass deine sampling Frequenz mindestens zweimal die höchste Frequenz deines Signals ist, auch wenn du Square Wave Signale samplen willst.

Besser wäre in Hardware dein PWM Signal in eine konstante Spannung umzuwandeln (low pass filter) und dann mit einem ADC Chip (Analog Inputs for Raspberry Pi Using the MCP3008) auszulesen.

Gruß
BlackMark
 
BlackMark schrieb:
Polling mit 10ms lastet den Pi 3 überhaupt nicht aus. Selbst wenn du ohne delay polling betreibst wird der Pi nicht voll ausgelastet, weil multi-core CPU.
Gut zu wissen!

BlackMark schrieb:
Besser wäre in Hardware dein PWM Signal in eine konstante Spannung umzuwandeln (low pass filter) und dann mit einem ADC Chip (Analog Inputs for Raspberry Pi Using the MCP3008) auszulesen.
Okay, die Anleitung für den ADC Chip scheint verständlich zu sein, nur habe ich Probleme die Anleitung des Low-Pass-Filters zu verstehen. Wie gesagt, ich bin ein Elektronikidiot und bräuchte ein paar Anhaltspunkte um weiterzukommen. So wie ich es verstanden habe spielt die gegebene Frequenz eine Rolle, um den passenden Kondensator und Widerstand zu wählen. Den Text verstehe ich natürlich, aber die beschriebene Vorgehensweise an sich nicht :/
 
Ganz unten im Artikel vom low pass filter gibt es einen Link zu einem online calculator mit dem du alle Parameter ändern kannst und das Resultat geplottet bekommst. Die Parameter deines PWM Signals solltest du ja kennen, dann kannst du durch etwas probieren passende Werte für den Widerstand und den Kondensator finden. Zum ausprobieren einer Schaltung ist auch Falstad's Circuit Simulator sehr zu empfehlen. Gibt dort auch schon vordefinierte Schaltungen, unter anderem für low pass filter und vieles mehr.

Gruß
BlackMark
 
Zurück
Oben