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.
>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.
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.
>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
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).
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.