www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik pseudo zufall als pwm ersatz


Autor: ajax (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ekschperde (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn es mit einem simplen Tiefpass schneller gehen soll:
Shannon-Dekoder.

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

Autor: ajax (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: dummy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: ajax (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: dummy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ajax (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der PWM Ausgang hat ein Bit.
Der Ausgang des Rauschvergleichers hat ein Bit.

Der zeitliche Mittelwert der beiden Signale ist gleich.

Autor: dummy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Der zeitliche Mittelwert der beiden Signale ist gleich.

Der zeitliche Mittelwert von Rauschen ist Null.

Autor: pq (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Abdul K. (ehydra) Benutzerseite
Datum:

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



Gruß -
Abdul

Autor: Maxi (Gast)
Datum:

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

Autor: Hagen Re (hagen)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Abdul K. (ehydra) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Maxi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Abdul K. (ehydra) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Maxi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Abdul K.

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

Autor: Abdul K. (ehydra) Benutzerseite
Datum:

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


Gute Nacht -
Abdul

Autor: ajax (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ajax (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Christoph Kessler (db1uq) (christoph_kessler)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hagen Re (hagen)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ajax (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ajax (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.