Forum: Mikrocontroller und Digitale Elektronik pseudo zufall als pwm ersatz


von ajax (Gast)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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.

von Ekschperde (Gast)


Lesenswert?

Wenn es mit einem simplen Tiefpass schneller gehen soll:
Shannon-Dekoder.

Der braucht allerdings noch ein S/H vor dem Ausgang.

von ajax (Gast)


Lesenswert?

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

von dummy (Gast)


Lesenswert?

>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?

von ajax (Gast)


Lesenswert?

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

von dummy (Gast)


Lesenswert?

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

von ajax (Gast)


Lesenswert?

Der PWM Ausgang hat ein Bit.
Der Ausgang des Rauschvergleichers hat ein Bit.

Der zeitliche Mittelwert der beiden Signale ist gleich.

von dummy (Gast)


Lesenswert?

>Der zeitliche Mittelwert der beiden Signale ist gleich.

Der zeitliche Mittelwert von Rauschen ist Null.

von pq (Gast)


Lesenswert?

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.

von Benedikt K. (benedikt)


Lesenswert?

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.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Es funktioniert und wird z.B. bei Motorsteuerungen verwendet. Damit 
kriegt man das Gejaule typischer PWMs weg.



Gruß -
Abdul

von Maxi (Gast)


Lesenswert?

Aber heisst das nicht, das man sich relativ hochfrequente Signale ins 
Gerät holt? Vielleicht kriegt man dann Probleme mit EMV?

von Hagen R. (hagen)


Lesenswert?

>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

von Abdul K. (ehydra) Benutzerseite


Angehängte Dateien:

Lesenswert?

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

von Maxi (Gast)


Lesenswert?

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

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

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

von Maxi (Gast)


Lesenswert?

@ Abdul K.

Ja, ja, bist echt ein gaaanz Toller....

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Geht so. Ich vermisse auch die weißen Flecken, wo ich mich tummeln 
könnte.


Gute Nacht -
Abdul

von ajax (Gast)


Lesenswert?

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

von ajax (Gast)


Lesenswert?

>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

von Benedikt K. (benedikt)


Lesenswert?

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

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Beitrag "Re: Multiplizieren mit  einem einzelnen UND Gatter !"
da hatte ich mal so eine alten D/A-Wandler-Schaltung mit 
zufallsähnlichem Bitmuster gepostet.

von Peter D. (peda)


Lesenswert?

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

von Hagen R. (hagen)


Lesenswert?

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

von Benedikt K. (benedikt)


Lesenswert?

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.

von ajax (Gast)


Lesenswert?

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

von Benedikt K. (benedikt)


Lesenswert?

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.

von ajax (Gast)


Lesenswert?

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?

von Benedikt K. (benedikt)


Lesenswert?

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
Noch kein Account? Hier anmelden.