Hallo, ein DAC kann mehr oder weniger mit einem Tiefpass und einem RC-Glied erzeugt werden. Der Nachteil bei der Verwendung eines PWM-Signals ist, dass der Tiefpass relativ niederfreqent ausgelegt werden muss. Deshalb folgende Idee: Man erzeugt eine gleichverteilte Pseudozufallszahl und vergleicht die Zahl mit einem Schwellwert. Das Ergebnis wird auf den Tiefpass gegeben. Dadurch sollte ein höhere Grenzfrequenz erreicht werden, oder? Gruß, ajax
Grenzfrequenz bleibt Grenzfrequenz, du kannst dir da noch so was in die Tasche lügen... ;-) EDIT: Real gesehen könnte das Signal dann ja beliebig lange 1 oder 0 sein. Im langjährigen Mittel fiele das dar nicht auf.
Wenn es mit einem simplen Tiefpass schneller gehen soll: Shannon-Dekoder. Der braucht allerdings noch ein S/H vor dem Ausgang.
>Grenzfrequenz bleibt Grenzfrequenz, >du kannst dir da noch so was in die Tasche lügen... ;-) Nix in die Tasche lügen. Ein gleichverteiltes Rauschsignal hat ein ganz anderes Frequenzspektrum als ein PWM-Signal. Beim Rauschsignal sind die Frequenzanteile gleichmässig auch zu hohen Frequenzen verteilt. Deshalb vermute ich, dass für einen Audioausgang das Rauschsignal günstiger wäre. Meine Vermutung ist, dass sich ein ähnliches Frequenzspektrum wie bei einem Sigma-Delta Modulator ergibt.
>Nix in die Tasche lügen. Ein gleichverteiltes Rauschsignal hat ein ganz >anderes Frequenzspektrum als ein PWM-Signal. Das ist richtig. Was hat denn nun PWM mit Rauschen zu tun?
Über ein PWM-Signal lässt sich durch digitales Schalten die Leistung eines Verbrauchers steuern. Dies lässt sich auch mit einem Raussignal realisieren, wenn man die Wahrscheinlichkeit für das Schalten mit Hilfe eine Triggerschwelle reguliert.
>Dies lässt sich auch mit einem Raussignal >realisieren, wenn man die Wahrscheinlichkeit für das Schalten mit Hilfe >eine Triggerschwelle reguliert. Das Rauschen über dieser Triggerquelle ist doch auch immer noch Rauschen. Wie willst du da auf einen definierten Pegel kommen? Da gibt es immer noch Ausreisser bis zum Maximum.
Der PWM Ausgang hat ein Bit. Der Ausgang des Rauschvergleichers hat ein Bit. Der zeitliche Mittelwert der beiden Signale ist gleich.
>Der zeitliche Mittelwert der beiden Signale ist gleich.
Der zeitliche Mittelwert von Rauschen ist Null.
Hallo Ajax, Gute Idee ! ich hatte sowas ähnliches mal gemacht. Das geht ganz gut. Und zwar besteht ein PWM Generator ja aus einem Zähler und einem Vergleicher. Wenn man beim Zähler alle Bits vertauscht, also B7 wird B0, B6 wird B1 .. usw, dann kann man das viel besser tiefpassfiltern. Weil zb aus einem 50% Signal 00000000001111111111 ein 01010101010101010101 wird ... Gruß, pq.
pq wrote: > Weil zb aus einem 50% Signal > > 00000000001111111111 ein > > 01010101010101010101 wird ... Das dürfte dann ein 1bit Delta-Sigma DAC sein. Das 50% Signal ist allerdings best-case. Worst case sind extrem kleine oder extrem große Werte, aber auch die sind weitaus besser als bei reiner PWM. Wie man sowas am einfachsten Codetechnisch realsiert, sollte man sich leicht über Delta-Sigma ergoogeln lassen. Der Nachteil ist allerdings der erhöhte Softwareaufwand gegenüber einer PWM. Als Zwischenlösung könnte man eine PWM mit niedriger Auflösung verwenden und diese zwischen 2 Stufen periodisch hin und her schalten, z.B. nach obigem Schema. Das ist meiner Meinung nach die beste Lösung wenn Hardware PWM vorhanden ist, aber die Auflösung/Frequenz nicht ausreicht.
Es funktioniert und wird z.B. bei Motorsteuerungen verwendet. Damit kriegt man das Gejaule typischer PWMs weg. Gruß - Abdul
Aber heisst das nicht, das man sich relativ hochfrequente Signale ins Gerät holt? Vielleicht kriegt man dann Probleme mit EMV?
>Wie man sowas am einfachsten Codetechnisch realsiert, sollte man sich >leicht über Delta-Sigma ergoogeln lassen. >Der Nachteil ist allerdings der erhöhte Softwareaufwand gegenüber einer >PWM. Nicht über das SPI, damit sind 8Mhz drinnen, für 256 PWM Stufen, müsste man wiederholt 32 Bytes senden, vergleichbar mit 31.25KHz PWM. Gruß Hagen
Maxi wrote: > Aber heisst das nicht, das man sich relativ hochfrequente Signale ins > Gerät holt? Vielleicht kriegt man dann Probleme mit EMV? Es hält sich in Grenzen. Irgendeinen Heldentod muß man bei jeder Auslegung eines Konzepts sterben! Habe mal ein Paper angehangen. Gruß - Abdul
@ Abdul K.
>...Heldentod...
Lach. Von wegen. Ich will lieber mein Honorar. ;-)
Aber nach dem Paper ist es wohl so das sowohl im akustischen als auch
darüber das Spektrum mehr verwischt wird als das an sich vermehrt EMV
relevante Freq. auftreten.
OK. Wenn ich so darüber nachdenke klingt das irgendwie plausibel, wenn
ich es auch lieber auf dem SA sehen würde.
Maxi wrote: > @ Abdul K. > >>...Heldentod... > Lach. Von wegen. Ich will lieber mein Honorar. ;-) > > Aber nach dem Paper ist es wohl so das sowohl im akustischen als auch > darüber das Spektrum mehr verwischt wird als das an sich vermehrt EMV > relevante Freq. auftreten. > OK. Wenn ich so darüber nachdenke klingt das irgendwie plausibel, wenn > ich es auch lieber auf dem SA sehen würde. Och, das kann man noch weit weiter treiben... Die nächste Stufe wäre dann sowas was man unter dem Begriff "Magic Sinewave" bzw. "Harmonic Suppression" kennt. Dann kann man das Spektrum noch schön gemäß geltender EMV-Vorschriften shapen. Damit dann alle was von der Störung als vektorielle Addition im EM-Band haben... Du siehst, überall waren schon andere Leute vor dir da. Nervig, stimmts?!? Jetzt weißt du, was ein Typ wie ich, beim Warten auf den ICE am Bandgleis denkt... Gruß - Abdul
Geht so. Ich vermisse auch die weißen Flecken, wo ich mich tummeln könnte. Gute Nacht - Abdul
Hey, super, ich freue mich, dass mein Gedanke nicht ganz aus der Welt war. Ich hatte ja gehofft, dass jemand das Verfahren kennt, falls es schon exisitiert und es hier postet, damit ich mir nicht umsonst die Mühe mache, es noch mal zu erforschen. ajax
>ich hatte sowas ähnliches mal gemacht. Das geht ganz gut. Und zwar >besteht ein PWM Generator ja aus einem Zähler und einem Vergleicher. >Wenn man beim Zähler alle Bits vertauscht, also B7 wird B0, B6 wird B1 Hi pq, Dein Verfahren mit dem Verdrehen der PWM-bits von pq könnte vielleicht noch etas besser sein, weil eventuell die Pulse im Vergleich zum Pseudorandom günstiger verteilt. Günstig oder optimal in diesem Sinne bedeutet: möglichst viele Schaltvorgänge, damit das Signal mehr ins hohe Frequenzspektrum geschoben wird. Da fallen mir aber auch gerade die Nachteile der Nicht-PWM-Verfahren ein: die Verlustleistung an den Schalttransistoren steigt durch das gehäufte Umschalten. Gruß, ajax
Hagen Re wrote: > Nicht über das SPI, damit sind 8Mhz drinnen Nein. Die Daten müssen auch irgendwie berechnet werden. Der AVR von dem du vermutlich ausgehst, wird zu 100% ausgelastet sein, wenn er konstant einen 8MHz Bitstrom erzeugen soll. Das einzige was funktionieren könnte: Wenn man die Werte im voraus berechnet und der µC muss daher nur ein Byte anstelle der 8bits aussuchen muss. Aber selbst dann wird man kaum etwas nebenbei erledigen können, da 16 Takte alleine schon für Interrupt Ein und Austritt und diese Berechnung verbraucht werden (falls dies überhaupt reicht).
Beitrag "Re: Multiplizieren mit einem einzelnen UND Gatter !" da hatte ich mal so eine alten D/A-Wandler-Schaltung mit zufallsähnlichem Bitmuster gepostet.
Hagen Re wrote: > Nicht über das SPI, damit sind 8Mhz drinnen, für 256 PWM Stufen, müsste > man wiederholt 32 Bytes senden, vergleichbar mit 31.25KHz PWM. Mit dem ungepufferten AVR-SPI wird man aber nie eine ordentliche PWM erhalten, da man immer variable Lücken zwischen den Bytes hat, um das Schieberegister zu laden. Nur bei den neueren AVRs kann man die gepufferte UART als SPI-Master nehmen, dann gehts lückenlos, d.h. jedes Bit hat die gleiche Dauer. Über 8 Bit nimmt aber der SRAM-Bedarf stark zu, um die vorberechneten Bitmuster zu speichern. Oder man nimmt die stinknormale PWM eines AVR mit PLL, z.B. der ATTiny261 kann mit 64MHz zählen. Das ergibt dann satte 250kHz PWM, die man leicht wegfiltern kann. Oftmals sieht man hier Leute, die kennen nur ihren ATmega128 und brechen sich damit einen ab, statt auch mal andere AVRs anzugucken, die manches viel besser können. Peter
Meine Rechnung ist ja auch nur Pi*Daumen, der Bestcase eben. Man kann die PWM ja auch nicht zufällig verteilen, im Grunde gehts ja nur darum um die Gleichverteilung der On/OFF Chips auf den kompletten PWM Zyklus. Bei einem 16Mhz AVR benötigt man 16 Takte um 8 Bit rauszuschieben. Davon fallen ca. 3 Takte an um das SPI Register zu befüllen, +3 Takte für die Auswertung des STatisbits (was aber entfallen kann wenn man das Timing des Codes entsprechend anpasst). Verbleiben 10 Takte ungenutzt, die man zur Verfügung hat wenn das SPI gerage die Bits rausschiebt. Nun zeigt meine Rechnun g auch sehr deutlich das man mit entsprechenen AVRs und deren Highspeed PWMs bei weitem höhere Auflösungen und Frequenzen erreichen wird. 31.25Khz bei der SPI Methode ist ja nun nicht so dolle. Übrigens habe ich eine ähnliche Methode zur Software-Ansteuerung von LEDs benutzt. Essentiell gng es dabei aber um die "Gleichverteilung" der Impulsstromlasten. Wenn man zb. 16 LEDs per normaler PWM ansteuert, dann schalten meistens alle LED PWMs zum gleichen Zeitpunkt an. Die Stromlast ist also ungleichmäßig verteilt. Dazu habe ich die 256 Stufen der PWMs mit einem Primzahlteiler inkrementiert. Man hat also einen 8 Bit Counter. Dieser wird im PWM Takt zb. +7 imkrementiert. Dieser Counter wird verglichen mit den PWM Werten der LEDs. Ist der PWM-Wert < Counter schaltet die LED ein ansonsten aus. Würde man den Counter +1 inkrementieren hätte man eine normale PWM. Die Inkrementation um zb. +7 bewirkt aber das die Stromlast sich auf die 256 PWM Takte um Faktor 7 gleich verteilen, und somit auch EMV. Gruß Hagen
Hagen Re wrote: > Dazu habe ich die 256 Stufen der PWMs mit einem Primzahlteiler > inkrementiert. Man hat also einen 8 Bit Counter. Dieser wird im PWM Takt > zb. +7 imkrementiert. Dieser Counter wird verglichen mit den PWM Werten > der LEDs. Ist der PWM-Wert < Counter schaltet die LED ein ansonsten aus. Das ist ein interessantes Verfahren. Das habe ich auch mal verwendet, um ein gemultiplextes Display zusätzlich noch per PWM zu dimmen, ohne die Frequenzen und somit die Rechenleistung erhöhen zu müssen. Dann leuchtet in einem Scandurchlauf mal die erste Stelle auf, im nächsten z.B. die 3., dann die 2 usw. Dies führt zu einem schwächeren Flimmern als wenn man das ganze normal dimmen würde. Ähnliches scheinen auch die LCD Controller zu machen, die passive Displays mit vielen Graustufen ansteuern: Bei 16 Graustufen und 70Hz Framerate wären das worst case 4,4Hz. Trotzdem flimmern die Displays bei den Graustufen nicht.
Hallo Zusammen, es ist doch interessant zu sehen, was sich aus so einer Diskussion ergibt. Auch immer wieder neue Aspekte, auf die man gar nicht selbst gekommen wäre. Also, ich fasse die Verfahren zusammen: 1. PWM 2. Pseudo-random-noise mit rückgekoppeltem Shiftregister 3. höherwertige und niederwertige Bits des PWM Zählers tauschen 4. Primzahlincrement bei PWM-Zähler verwenden Na, das ist doch schon einiges. Vermuten würde ich, dass beim höherwertige/niederwertige Bits vertauschen die Verteilung am besten ist. Beim Primzahlincrement dürfte hingegen die Rechenzeit kleiner sein. ajax
ajax wrote: > Also, ich fasse die Verfahren zusammen: > > 1. PWM > 2. Pseudo-random-noise mit rückgekoppeltem Shiftregister > 3. höherwertige und niederwertige Bits des PWM Zählers tauschen > 4. Primzahlincrement bei PWM-Zähler verwenden Du hast das Delta-Sigma Verfahren vergessen. http://www.beis.de/Elektronik/DeltaSigma/DeltaSigma_D.html Hier mal eine analoge Realisierung + Anwendung davon: http://elm-chan.org/works/srp/report_e.html Damit wird eine analoge Spannung in ein 1 Bit Signal mit 2MBit/s umgewandelt, verzögert und wieder zurückgewandelt. Die digitale Realisierung funktioniert genauso: Man addiert die Werte auf und gibt das Überlauf Bit aus. Bei sehr großen Werte, tritt fast bei jeder Addition ein Überlauf aus, daher kommen viele 1er raus. Je kleiner der Wert, desto seltener wird eine 1 ausgegeben. Dieses Verfahren lässt sich sehr leicht auf einem µC realisieren, oder aber auch in einem CPLD oder FPGA, da es mit einer Addition auskommt. Man kann das ganze noch etwas verfeiner, indem man eine höhere Ordnung verwendet, was zu einem besseren Signal führt, aber eben auf Kosten von einem höheren Aufwand.
Du hat recht, das Delta-Sigma Verfahren fehlte in der Liste. Da ich noch nie einen Delta Sigma Wandler von Hand realisiert habe: Kann es sein, dass man für eine Auflösung von 8 Bit den gleitenden Mittelwert von 256 bits bilden musss, um den Wert für den Vergleicher zu erhalten?
ajax wrote: > Kann es sein, > dass man für eine Auflösung von 8 Bit den gleitenden Mittelwert von 256 > bits bilden musss, um den Wert für den Vergleicher zu erhalten? Das dürfte so sein, denn für einen Wert von 1 oder 255 braucht man ein Verhältnis von 1/256, und das erreicht man nur über 256 Takte. Im Gegensatz zu PWM ist der Zusammenhang Samplerate >= PWM Frequenz bei dem Delta-Sigma Wandler aber kein Muss, da der neue Wert unmittelbar Auswirkungen zeigt (während bei PWM der Wert erst in der nächsten Periode übernommen wird, bzw. den alten Wert überschreibt). Aufgrund des Tiefpassverhaltens des Delta-Sigma Modulators gehen dann nur die eventuell vorhandenen hohen Frequenz verloren.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.