Hallo Elektronikfreunde,
ich habe mir vor kurzem einen Raspberry Pi 400 gegönnt und leider
ziemlich große Probleme mit dem PWM-Signal festgestellt.
Mein Ziel ist es ein möglichst genaues PWM-Signal mit 1 kHz und
Duty-Cycle zwischen 5 % und 95 % hinzubekommen, ich würde 1 % Abweichung
akzeptieren.
Habt ihr eine Idee, wie ich ohne große Korrekturrechnungen das
PWM-Signal einstellen kann?
----------------------------------------------------------------------
Ich habe es mit der Standardfunktion probiert sowie mit einem
time.sleep.
Anbei mal ein paar Code-Schnipsel mit denen ich herumprobiert habe.
Die Abweichungen sind mindestens immer 3 % groß, im Bereich unter
Duty-Cycle 10 % sogar 5 % Abweichung.
Grüße und ich freue mich auf eure Hilfe.
Michael
--------------------
GPIO-Funktionen
--------------------
Hallo,
es weicht beides ab. Die Frequenz schwankt immer so random um 10 Prozent
selbst um den sich ergebenden Wert.
Bei einer Sollfrequenz von 10 kHz erreiche ich noch 5.4 kHz, bei Soll
von 1 kHz etwa 840 Hz und bei Soll von 500 Hz sind es immerhin 450 Hz.
Der DutyCycle passt bei 50 % super, drum herum sind die Abweichungen
zwischen 3 % und an den Grenzen weit über 5 %, kleine Werte wie 2 % kann
man garnicht stellen.
Ich bin mir bewusst, dass es ein Soft PWM ist, aber kriegt man das nicht
besser hin?
Der Prozessor kann doch Hardware PWM. Weiß nicht, ob inzwischen die
Treiber beim Raspian mitgeliefert werden. Als es es das letzte mal
brauchte, gab es zig Varianten, die man selbst aus dem git kompilieren
musste.
In Software klappt das doch eh nicht. Gibt ja keine Echtzeitprozesse,
bei denen dir das Linux rechtzeitig und gleichmäßig Rechenzeit zuteilt.
Nimm das hier:
https://www.amazon.de/dp/B08YD8PDLS/
Da wird das PWM-Signal in Hardware erzeugt, unabhängig vom Prozessor
(und ob der hoch oder runter taktet), und das ist dann wirklich stabil.
fchk
> Nimm das hier:
Gute Gelegenheit, da starten wir doch gleich mal einen Religionskrieg.
Nimm einen Arduino. Dort arbeitet das sleep() exakt. Nicht so einen
neumodischen Kram mit Multitaskingbetriebssystem.
Michael schrieb:> Die Abweichungen sind mindestens immer 3 % groß, im Bereich unter> Duty-Cycle 10 % sogar 5 % Abweichung.
Ist so natürlich in ziemlich vielen Anwendungen völlig
unbrauchbar - man müßte was drehen oder beifügen*, bzw.
könnte man gleich alles ganz anders machen.
Vielleicht ja einfach nur irgendeine Art von Feedback-
Schleife anlegen, um aus dem (vermutlich) Steller einen
Regler zu machen - wenn das denn ginge. Oder, oder, oder.
Wie am besten, ist bisher noch etwas schwer zu sagen,
bzw. könnte man viele Tipps geben, die funktionierten,
aber aus noch unbekannten Gründen nicht paßten.
Darf man erfahren, worum genau(er) es geht? (Ungefähr?)
Und stünde z.B. Verwendung anderer Komponenten (siehe den
Post davor) überhaupt zur Auswahl bzw. Debatte?
Etc., was Dir halt potentiell Relevantes einfiele.
So etwas ist auf einem Raspi mit Linux nicht so einfach zu machen. Wenn
man Pech hat, schlägt eine SD-Karten Schreibroutine zu, und die Hardware
ist erst mal beschäftigt.
Es soll Hardware-Chips geben, die die PWM erzeugen und über I2C
angeschlossen sind. PCA9685 habe ich auf die Schnelle gefunden.
Ich habe die PWM beiseite gelegt, und bin auf I2C DACs umgestiegen. Da
ist die Spannung wesentlich konstanter, die Glättung entfällt.
> Ich habe die PWM beiseite gelegt, und bin auf I2C DACs umgestiegen. Da> ist die Spannung wesentlich konstanter, die Glättung entfällt.
Du bekommst mit PWM relativ einfach einen DA-Wandler mit 16Bit
Genauigkeit wenn du es mit der Aenderung des Ausgabewertes nicht zu
eilig hast. Da musst du bei einem DAC tiefer in die Tasche greifen, bist
aber schneller. Hat also beides so seine Berechtigung.
Olaf
Hallo,
ich will eigentlich nur ein altes Roboterlein, was ich mir mal gebaut
hatte, ansteuern. Ich komme mit PWM-Frequenzen zwischen 500 Hz und 2 kHz
klar, aber der Duty-Cycle sollte halt passen.
ich werde mir ein externes Modul kaufen.
Der interne Hardware-PWM scheint mir nur 8 Bit Auflösung zu haben.
Wisst ihr zufälligerweise, ob man beim internen Hardware PWM nicht doch
etwas cheaten kann :D ?
Also wenn ich die Hardware PWM meines Raspi 4 verwende sieht das nicht
all zu schlecht aus:
2 Kanäle mit je 1kHz und 5% bzw. 95% (siehe Anhang).
Dein Problem ist dass du das mit Software und einem Betriebssystem nicht
hinbekommst weil der Task-Jitter zu groß ist und damit deine
Ein-/Ausschaltzeitpunkte versaut.
olaf schrieb:> Aber angesichts der Mouser/RS-preise wuerde ich da doch wieder zu> irgendeiner anderen Loesung raten. :-D
Zum Beispiel SPI statt I2C. Dazu ein anderer Hersteller und/oder
Händler. Reichelt hat über 20 Typen von Microchip auf Lager, auch 1 oder
2 mit I2C.
https://www.reichelt.de/signalwandlung-c8710.html?&nbc=1
olaf schrieb:>> Auflösung. Genauigkeit ist etwas anderes.>> Ich weiss das es etwas anderes ist und habe das Wort bewusst gewaehlt.> .-)> Olaf
Selbstverständlich