Spektrum PWM-Sinus

Hallo,

ich erzeuge mit einem kleinen Microcontroller PWM Signale so das sie nach Tiefpassfiltern einen Sinus ergeben. (23 Samels/Periode). Das Signal aus dem uC sieht etwa so aus:

____-____--_____----___-------___----_____--____-____ +5V

Nun ging ich davon aus das, wenn man einen idealen Tiefpass verwendet, ein Sinus heraus kommt dessen Gleichanteil bei 2.5V liegt und Vss von

5V hat. (Also von 0V bis 5V) Mit einem RC-Glied komme ich auch auf meine 2.5V Gleichanteil aber die Vss stimmt nicht. (Ich habe natürlich die Dämpfung durch das RC-Glied berücksichtigt).

Ich wollte der Sache auf den Grund gehen und habe mit dem PWM Signal eine Fourieranalyse durchgeführt, was gar nicht so einfach ist. Hier komme ich für c0 auf den korrekten Wert von 2.5V und für c1 (das ist meine gewünschte Grundfrequenz) auf ca. 1.25V (etwas weniger) was ja einer Sinusschwingung mit Vss von 2.5V entspricht, also der Hälfte von dem Erwarteten. Warum ist das so? Kann man das anschaulich erklären oder habe ich mich verrechnet? Denn wenn ich Oma fragen würde was da nun raus käme würde Sie 5Vss antworten.

Tschüss Martin L.

Reply to
Martin Laabs
Loading thread data ...

Martin Laabs schrieb:

Was heisst das? Werden pro Periode 23 Bits ausgegeben oder wird das PWM-Signal mit 23 Werten moduliert und 23 volle PWM-Perioden ausgegeben?

PWM-Frequenz? (s.o.), Zeitkonstante?

Du solltest Du das PWM-Signal an dein Filter anpassen, die Berechnung der auszugebenden Digitalwerte unter Berücksichtigung der Filtereigenschaften vornehmen. Die grösste Steigung des Signals (Nulldurchgang) wird durch das Filter bestimmt.

Gruss Udo

Reply to
Udo Piechottka

Martin Laabs schrieb:

Das sieht aber seltsam aus... Als erstes würde ich es mal so ändern, daß z.B. für den (Momentan-) Wert 1/2 sowas kommt:

_-_-_-_-_-_

anstatt

_____------

Also die Modulationsfrequenz möglichst hoch wählen bei gleichem Mittelwert. Sonst passt der Tiefpass - Filter ja nicht mehr - weil das Signal sehr niedrige Frequenzen beinhaltet...

Johannes

Reply to
Johannes Raschke

Martin Laabs schrieb:

Du solltest Delta-Sigma-Modulation verwenden. (siehe Posting von Martin Laabs)

So wie dein Signal hier aussieht liegen die Modulations- freqenz fm und deine Signalfrequenz fs (die des Sinus) viel zu nah beieinander.

Bei DSM sollte je nach Anwendung fm>100*fs sein, bei PWM noch höher. Bei deiner Skizze les ich Faktor 7 ab.

An deinem Modulator-Ausgang hängt ein Tiefpaß, der nun die Modulationsfrequenz unterdrücken soll (hohe Dämpfung), dein Sinus-Signal aber durchlassen soll (keine Dämpfung).

Die Grenzfrequenz des Filters muß zwischen beiden liegen. Liegen beide Frequenzen nah beieinander brauchst du ein sehr steiles Filter -> viel zu aufwendig.

Deine Grundfrequenz wird noch stark vom Tiefpaß gedämpft.

Hendrik vdH

Reply to
Hendrik van der Heijden

Naja. Ich verwende einen Atmel und fast-PWM. Bei 4MHz und 256Bit Auflösung bekomme ich höchstens 22 Samples/Periode hin weil ich 700Hz Sinus möchte.

Naja. 700Hz zu 15kHz sind sicher noch akzeptabel zumal ich das Signal nur als Mithörton eines Telegrafiegenerators verwende.

Meien Skizze ist nicht ganz Maßstabsgerecht, sollte nur das System verdeutlichen.

Ja, hab ich schon gemacht.

Jaja. Das hatte ich schon berücksichtigt. Ich habe jetzt nochmal gemessen:

Fquarz=4Mhz Fpwm=Fc/255=15.686kHz Fpwm/700Hz = 22.4

Ich verwende jetzt 22 Samples und komme auf 680Hz. Delta Sigmal mach ich nicht weil ich sonst eine Tabelle von 256Bytes brauche und es die 22 auch tun da es mir auf die exakte Frequenz nicht drauf ankommt.

Danach kommt ein Tiefpass aus 1.8kOhm und 100nF (f_3db=880Hz). Der hat bei den 713Hz eine "Verstärkung" von 0.78. Was heraus kommt ist ein Sinus mit 3.8Vss. Das ist ziemlich fast

5V*0.78. Da muss ich mich beim ersten mal vermessen haben weil es da nicht stimmte und ich annahm das die 700Hz nur mit 2.5V im Spektrum des PWM Signales vorhanden sind.

Nun hat meine Fourieranalyse aber ergeben das c1 nur 0.25 ist, theoretisch also nach dem Tiefpass nur 1.9V raus kommen müssten.

Tschüss Martin L.

Reply to
Martin Laabs

"Martin Laabs" schrieb im Newsbeitrag news: snipped-for-privacy@individual.net...

Der Verlust (das was an 5Vpp fehlt, also 50%) ist die Energie, die in deine Oberwellen (Klirr) geht.

Siehe magic sinewaves auf

formatting link
.

--
Manfred Winterhoff, reply-to invalid, use mawin at despammed.com
homepage: http://www.geocities.com/mwinterhoff/
de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/
Read 'Art of Electronics' Horowitz/Hill before you ask.
Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.
Reply to
MaWin

Nein. Das glaube ich nicht weil ich alles Integrieren könnte (mit Nullinie bei 2.5V) und was Sinusähnliches heraus bekommen würde. Leider sind gerade die Akkus von meinem Taschenrechner alle, sonst würde ich sicherlich den Fehler finden. Ich glaube es geht in den Oberwellen viel weniger als 50% der Energie verlohren.

Das ist sehr lustig. Leider kann man dort keinen Offset mit rein rechnen lassen womit es für mich nicht taugt.

Reply to
Martin Laabs

Hallo Martin,

"Mart>

das mit dem Taschenrechner ist ja richtig ein Brüller :-). Den brauchst Du nicht, nur Bleistift und Papier. Ich hab das mal verfolgt und bin der Meinung, daß Du alles richtig gemacht hast und nichts mehr zu ändern brauchst.

Der Fehler, den Du suchst, muß in Deiner Fourieranalyse liegen. Auf den 1. Blick ist PWM eine Phasenmodulation und damit ziemlich kompliziert, auf den

  1. Blick wieder sehr einfach. Die Fourierreihe einer PWM kannste in Mathematik-Lexika nachschlagen, hier ist erstmal nur der Signalanteil nach der Tiefpaßfilterung:

u(t)=h/2*(1+sin(omega*t))

mit: phi_signal(t)=sin(omega*t) =modulierte Phase h=5V omega= Signalfrequenz

Das ist alles. Das h soll die Höhe des Rechteckimpulses sein. Die harmonischen Komponenten hast Du schon herausgefiltert und h ist dann der Vss-Wert Deines Sinus, also stimmt alles. Falls Du die Herleitung nicht nachvollziehen kannst, könnte ich die Fourierreihe detailliert posten.

Bei Audio-PWM-Verstärkern hat man natürlich noch die Bessel-Spektren drin, da müßte man beim Filter noch was machen, aber hier wird das wohl nicht das Problem sein.

mfg. Winfried

Reply to
Winfried Salomon

Darauf habe ich fast gewartet :-)

In welchem steht das denn drinn? Und wie wird diese verallgemeinert? Ich habe in meiner Formelsammlung nur Rechteck. Und die Fourieranalyse von meinem PWM Spektrum muss man in 22 einzelne Integrale aufteilen was man natürlich per Hand machen kann aber du holst dein Wasser ja auch nicht mehr mit Schöpfeinern aus dem Brunnen. (Oder gibt es den ultimativen Trick dazu?)

Ja, Das wäre sehr nett weil mich auch die 2. und 3. Harmonische interessiert. So rein vom Gefühl würde ich die als sehr klein abschätzen. Auch wäre ich an der generischen Fourierreihe für beliebige PWM Signal interessiert. (Auch wenn ich gerade stark am überlegen bin ob man das für beliebige Funktionen Integrallos schreiben kann)

Tschüss Martin L.

Reply to
Martin Laabs

Hi!

Mach mal ne FFT von einem reinen Sinus, um die Ausgabe Deiner FFT-Funktion (Real? Komplex? Amplitude? Energie?) zu verstehen.

Oft normiert die FFT so, daß je die Hälfte der Energie im positiven Frequenzband (was Du Dir anschaust) und im negativen Frequenzband (Spiegelfrequenz, was Du Dir wahrscheinlich nicht anschaust) liegt - damit die Energieerhaltung stimmt. Bei DC hingegen fallen +0Hz und

-0Hz zusammen, drum bekommst Du _da_ auch Deine 2,5V angezeigt.

Gruß, Michael.

Reply to
Michael Eggert

Komplexe Amplitude.

Super, genau ins schwarze getroffen. Danke. Jetzt stimmt das gemessene mit dem berechneten überein.

Tschüss Martin L.

Reply to
Martin Laabs

Hallo Martin,

[....]

ich habe hier:

Bartsch Taschenbuch mathematischer Formeln Harry Deutsch-Verl. 3. Auflage

Schon etwas verstaubt :-), im sicher allseits bekannten Bronstein vom gleichen Verlag steht dieser Fall nicht drin, ist nicht so ausführlich, dafür extrem theoretisch.

Ich hab die Koeffizienten nicht selbst berechnet, sondern nur die Reihe nachgeschlagen. Die Berechnung sieht auch nicht so schwierig aus, Symmetrie

  1. Art, gerade Funktion, also nur 1 Integral für die Cosinus-Koeffizienten, danach müßte das Bildungsgesetz der Reihe sichtbar sein.

Die PWM läßt sich IMHO so definieren: h ist die Höhe den Impulses, 2*phi die Breite symmetrisch zu 0. Man braucht nur von x = 0 bis phi zu integrieren, danach ist die Funktion 0. X ist erstmal eine allgemeine Abszisse. Das Ergebnis sieht dann so aus:

f(x)=(2*h/pi ) * ( phi/2 + (sin(phi)/1)*cos(x) + (sin(2*phi)/2)*cos(2*x) + (sin(3*phi)/3)*cos(3*x) + .......)

phi kann von 0 bis pi gehen

Achte auf die Klammern. Bis jetzt müßte es noch nachvollziehbar sein, Du kannst aber sehen, daß die Reihe nicht schnell abnimmt, leider nur linear: Als Hüllkurve im Spektrum steckt wieder mal die bekannte si(x)-Funktion drin. Jetzt führe ich die Zeit ein und moduliere phi:

x= omegat*t omegat= Abtast- oder Trägerfrequenz phi(t) = (pi/2) * (1+sin(omegas*t) ) = modulierte Phase omegas = Signalfrequenz

Da setzen wir in die Fourierreihe ein, brechen aber nach dem linearem Glied ab:

f(t)=(h/2) * (1+sin(omegas*t) )

Wenn ich mich nicht vertan habe, müßte das jetzt so stimmen. Wir haben es hier mit einer ganz normalen Phasenmodulation zu tun, die allseits bekannt ist. Die Fourierkoeffizienten habe ich reell gelassen, weil ich unanschauliche Komplikationen wie negative Frequenzen weglassen wollte. Die sind nur in der Nachrichtentechnik notwendig, wenn man analytische I/Q-Signale verarbeiten möchte. Das ist hier aber nicht sinnvoll.

Da oben ist schon die allgemeine Darstellung im reelen Zeitbereich. Die Harmonischen nehmen aber nicht besonders schnell ab. Als modulierendes Signal haben wir nur eine Sinus-Funktion genommen, selbst da wird das Spektrum schon sehr kompliziert. Das 2. Glied der Fourerierreihe enthält

(sin(phi(t))/1)*cos(omegat*t)

und dieser Ausdruck hat schon ein unendlich breites Spektrum, das mit der Bessel-Reihe beschrieben werden kann. Diese Reihe ist aber aufwendig zu berechnen, sie ragt natürlich in den Signalbereich rein. Das kann man nur durch Erhöhung der Abtastfrequenz oder Verkleinern des Phasenhubs verringern, falls nötig. Wenn Du als Signal eine kompliziertere Funktion aufmodulierst, überlagern sich dann gemäß Signalpektrum für jede Linie deren Besselspektren und es wird entsprechend kompliziert. Das Ganze wiederholt sich dann auch noch bei den Vielfachen der Abtastfrequenz.

mfg. Winfried

Reply to
Winfried Salomon

Hallo Winfried,

Ich habe jetzt etwas über dieser Reihe gebrütet, bin mir aber noch nicht ganz schlüssig ob sie wirklich ein PWM Signal darstellt. Denn erst einmal ist es ja eine Fourierreihe, setzt also eine Periode vorraus die nur dann gegeben ist wenn phi=const. ist. Das ist es aber nicht mehr wenn man es mit einem Nutzsignal moduliert. Da es diese Reihen extrem schwer zu überschauen sind habe ich mir erst mal die Originalfunktion erdacht:

f_o(x)=1/2*(h*(sign(2*phi-mod(x+phi,2*PI))+1)

Die Periode wird aus dem Term mod(x+phi,2*PI) bestimmt und man erkennt das diese bei variablem phi nicht mehr konstant ist.

Wobei das ja nur meine Trägerfrequenz ist, die mich nicht weiter stört weil sie weit genug von der Nutzfrequenz entfernt sein sollte.

Und genau das ist IMHO nicht zulässig weil man dann zwar etwas rausbekommt aber das nicht das PWM ist wie es der uC erzeugt. Bei diesem ist naemlich der Abstand zwischen zwei Impulsen (entweder steigende oder fallende Flanke, je nach Einstellung) konstant weil der Zähler ja immer von 0 bis 255 zählt und dann von vorn anfänge.

Das erste Glied ist doch der Gleichanteil. Warum ist der hier von t abhängig obwohl er von der Anschauung h/2 sein sollte? Oder habe ich dich da nicht richtig verstanden?

Und auch alle weiteren Fourierkoeffizienten sind von t abhängig was doch nicht sein sollte. Es ist jetzt keine Fourierreihe mehr und ich weis nicht ob man jetzt noch auf die Spektren schliessen darf.

Ich habe meinen Ansatz so gewählt das ich die PWM Koeffizienten k(n) zwischen 0 und 1 variiere und dann folgendes Integral aufstelle:

Int_{n}_{n+k(n)}( 1*e^(j*2*PI/p*k*x) )

Wobei k der gewünschte Fourierkoffezientgrad ist und p die Periode, bei den PWM Koeffizieten von 0..1 also die Anzahl der Samples/Periode. In meinem Fall ist die Periode also 22 weil ich 22 Samples/Periode erzeuge. Jetzt muss ich nur noch eine Summe der Integrale bilden indem ich n von 0 bis p laufen lasse und habe mein Spektrum.

Ich hoffe du verstehst jetzt warum ich meinen Taschenrechner bei diesen Aufgaben nicht missen möchte .-)

Tschüss Martin L.

Reply to
Martin Laabs

Hallo Martin,

"Mart>

die

integrieren,

(sin(2*phi)/2)*cos(2*x) +

Du machst aber jetzt ein schwieriges Problem draus, laß es doch so, es funktioniert doch :-).

Ich komm jetzt nicht dahinter was die Gleichung genau macht, mod() ist mir bekannt, aber bei sign() fehlt doch das 2. Argument? Welche Programmiersprache ist denn das? Ich weiß nur, daß in Fortran das Vorzeichen des 2. Arguments das des 1. Arguments bestimmt und das ist dann x1=sign(x1,x2). Oder sollte das sin() heißen? Aber nein, mit der sign() Funktion machst Du den Rechteck denke ich mal. Da fehlt doch 1 Klammer zu, aber wo, ganz rechts? Sign(1,x2) würde hier Sinn machen, aber zum Verständnis muß ich hier zuviel raten. Wenn das auf Deinem uC läuft, wird es sicher funktionieren. Ich finde im Moment meinen Kernigham/Ritchie nicht ;-).

Ok, Du hast recht, ich hab es mir leicht gemacht und den einfachsten symmetrischen Fall angenommen. Also hab ich mir mal die Mühe gemacht, die Fourierkoeffizienten für Deinen Fall auszurechnen. Der Puls mit Höhe h fängt jetzt bei 0 an und geht bis phi, wobei phi maximal 2*pi betragen darf, danach wiederholt es sich periodisch nach n*2*pi. Dann ist die Reihe komplizierter:

Gleichanteil:

--------------- a0/2=h*phi/(2*pi)

Cosinus-Koeff. an:

------------------------ an=(h/pi) * (sin(n*phi))/n

Sinus-Koeff. bn:

-------------------- bn=(h/pi) * ( 1 - cos(n*phi) ) / n

oder auch: bn=(h/pi) * ( (sin(n*phi/2))**2 ) / n

Wenn wir jetzt wieder phi modulieren mit:

phi(t)= (1+sin(omegas*t))*pi

und das in den ersten Term der Fourierreihe a0/2 einsetzen, alles andere aber wegfiltern, kommt das raus:

f(t) = (h/2) * ( 1+sin(omegas*t) )

also dasselbe wie vorher, die von Dir gewünschte Zeitfunktion. Die Phasenmodulation ist immer noch da, nur deutlich komplizierter und mit sin-Quadrat. Für das Stör-Spektrum wird sich aber nicht grundsätzlich was ändern, außer daß es wahrscheinlich noch etwas mehr Energie enthält.

Glied

Der 1. Term der Fourierreihe ist doch Dein gefilterter Sinus oder jede beliebige Funktion, die Dein Tiefpaß noch durchläßt, also was hinten rauskommt.

den

Ich weiß nicht genau, was Du da machst, berechnest Du das Fourier-Integral über 1 Periode des Sinus? Aber wo ist der? Aber dann hast Du das gleiche Problem wie ich, Deine modulierte Rechteckfolge ist nicht periodisch und Du mußt das Integral also von - bis + unendlich erstrecken, das berechnete Spektrum ist dann kontinuierlich.

Aber im Prinzip weiß ich was Du meinst. Ich mußte auch erst scharf darüber nachdenken wie das mit der Fourierreihe einer nichtperiodischen Funktion ist. Mal angenommen, die unmodulierte Rechteckfolge besteht aus starr gekoppelten harmonischen Oszillatoren nach der Fourierreihe, dann ist es egal, ob ich nur die Grundwelle phasenmoduliere, die Harmonischen machen die Bewegung sofort mit. Bei Frequenzvervielfachung wird ja auch der Phasenhub mit vervielfacht, egal ob mit Fourier oder ohne. Das Spektrum ist aber kein Fourier-Spektrum mehr, auch nicht bei einem einzigen Sinus, sondern IMHO ein Bessel-Spektrum. Das ist natürlich keine exakte mathematische Begründung, aber ich fürchte, die schafft hier sowieso keiner.

Dafür ist Deine GHz-CPU doch viel besser geeignet, jag doch Deine Funktion einfach schnell abgetastet durch 'ne FFT mit sagen wir mal 2**20 Punkten, dahinter noch 'ne Fensterung mit geeigneter Funktion wegen Leakage-Effekt und Du siehst alles hochaufgelöst wie auf dem Spektrumanalyzer.

mfg. Winfried

Reply to
Winfried Salomon

Hallo Martin,

"Mart>

die

integrieren,

(sin(2*phi)/2)*cos(2*x) +

also mir hat das keine Ruhe gelassen und habe das grade auf meinem 3.2 GHz Home-Rechenzentrum ;-) numerisch durchgespielt, geht manchmal nicht ohne. Deine obige Gleichung habe ich etwas modifiziert, damit sie mit meiner modulierten Fourierreihe übereinstimmt.

f_o(x)=(h/2) * (sign(1,phi-mod(x,2*PI))+1)

Deine Sign()-Funktion hat bei mir nicht funktioniert, aber so geht es jetzt, war verdammt schwer das hinzukriegen. Sie kann hier nur +-1 werden, so ist die Syntax gemeint, falls Du 'ne andere Programmiersprache als ich benutzt. Als Fourierreihe habe ich die modifizierte aus der Parallelmail benutzt, da war noch 1 kleiner Fehler drin:

oder auch: bn=(h/pi) * 2 * ( (sin(n*phi/2))**2 ) / n

die 2 als Faktor fehlte. Dann habe ich die Funktionen mit Deinen Werten berechnet, 2**10 Stützwerte mit 1 MHz Abtastfrequenz genommen und grafisch dargestellt. Bei der Fourierreihe habe ich n=1000 gewählt, weil sie nicht schnell konvergiert. Die beiden Zeitfunktionen sind praktisch identisch und die Unterschiede werden mit größerem n noch kleiner. Damit konnte ich numerisch nachweisen, daß ich die Phase in einer Fourierreihe modulieren darf, ohne die Zeitfunktion zu verfälschen. Das ist analytisch IMHO sehr schwer zu schaffen, vielleicht kann man es doch als Überlagerung periodischer Funktionen betrachten. Deshalb bin ich fast sicher, daß man das auch mit der Amplitude machen kann. Mal sehen, ob ich mir das Spektrum auch mal ansehe, das ist etwas mehr Aufwand. Man bekommt dann vielleicht einen Eindruck, was bei der heute oft eingesetzten PWM für Störungen zu erwarten sind.

mfg. Winfried

Reply to
Winfried Salomon

Hallo Winfried,

Mir hat es auch keine Ruhe gelassen und ich wollte schon gestern Nacht antworten. Ich habe so gegen 11 Uhr angefangen und als ich 2Uhr noch immer nicht fertig war habe ich es auf heute früh verschoben.

In Maple, Derive und Gnuplot ist sign folgend definiert:

sign(x)=1 für x>0 sing(x)=-1 für x die Unterschiede werden mit größerem n noch kleiner. Damit konnte ich

Ich glaube da habe ich ein Gegenbeispiel dafür. Aber das liegt an der PWM Generation im uC selbst.

Im uC wird ein Zähler (z) so lange um Eins erhöht wird bis er TOP erreicht hat. Danach zählt wird so lange Eins abgezogen bis er 0 erreicht wird um dann wieder Eins zu addieren usw. In einem Diagramm würde es folgend aussehen: (TOP=10)

formatting link
{Hier immer die gnuplot Befehlt falls jemand sich das nochmal ansehen will wenn die Bilder wieder gelöscht sind:

z(x)=int(abs(x))%20 z wird der Ausgang auf 1 geschaltet, wenn COMP = Ausgang=1) und dem zweiten Vergleich (z < COMP => Ausgang=0) relativ stark abweichen. Sonst sieht man es u.U. nicht auf dem Plot.

Ich werde jetzt als Modulationssignal folgende Funktion verwenden:

formatting link
{sawtooth(h,w,x)=(abs(x)-int(abs(x)/w)*w)/w*hmod(x)=(sawtooth(3.1,25,x))**2 plot [0:50] mod(x)}

Der Wert von COMP ist dann in dem folgenden Bild die grüne Linie, ähnlich wie in einer sample and hold Schaltung für einen ADC:

formatting link
{smod(x)=mod(int((x+10.)/20.)*10.) plot [0:100] mod(x),smod(x), z(x);}

Ein so moduliertes PWM Signal müsste so aussehen: (das rote)

formatting link
{set samples 1000 plot [0:100] z(x)

Reply to
Martin Laabs

Hallo Martin,

das Thema wird ja jetzt doch ziemlich kompliziert, da ich berufstätig bin, kann ich das nur Abends machen, das kann dann auch etwas dauern.

jetzt,

ist

benutzt.

Scheint sozusagen 'ne Untermenge von Fortran zu sein, dort ist es allgemeiner definiert und auch für 0, dann ist es positiv. Das Problem das ich hatte war, Dein Beispiel enthielt 2 Fehler und anstatt es ganz neu zu machen, hab ich alles Mögliche probiert und kam nicht dahinter, was Deine Gleichung bedeuten sollte. Aber nun geht's ja.

Grade eben hab ich die 2. unsymmetrische Fourierreihe getestet, indem ich Pulsbreite, -höhe und -frequenz nachträglich gleichzeitig moduliert habe mit jeweils unterschiedlichen Frequenzen. Das Ergebnis war, sie konvergiert immer noch präzise, man darf das also machen. Dieser Punkt war mir für das grundsätzliche Verständnis wichtig, denn das wage ich jetzt für beliebige Fourierreihen zu verallgemeinern und vom mathematischen Standpunkt ist das IMHO garnicht so eindeutig vorherzusagen.

Das Spektrum für den von Dir angegeben unsymmetrischen Fall habe ich mir auch noch mit einer 2**19 FFT mit Abtastfrequenz 10 MHz angesehen, sehr interessant. Bis 10 KHz Störungen unter 70 dB, darüber dann steil ansteigend erst um 15 KHz herum ein Spektrum, das einer Phasenmodulation gleicht, darüber dann alles wild überlappend und mit der Schaltung kannst Du lückenlos bis in den UKW-Bereich alles stören :-). Allerdings ist das Spektrum anscheinend insgesamt um 3 dB nach unten gerutscht, muß mir das nochmal in Ruhe ansehen.

Na ja, 'ne 2**19 FFT treibt den Rechner schon an die Grenze, Matlab würde da schon bald schlappmachen, also ein guter Spektrumanalyzer ist dem Rechner doch IMHO deutlich vorzuziehen.

Tja, mein Beispiel war ideal "analog" und was jetzt kommt, sind die Niederungen der Praxis mit den vielen komplizierten Zusatzeffekten, vor allem weil Du es "digital" machst. Ich versuche mal zu verstehen was Du meinst, könnte aber sein, daß ich das erst später gründlich betrachten kann.

z(x)=int(abs(x))%20 plot [0:50] z(x)}

Ist soweit klar, GNU-Plot habe ich auch, sogar als Windows-Programm, aber der Einfachheit halber lasse ich die Grafik mit Matlab anzeigen. Das Testprogramm habe ich auch in GNU-Fortran geschrieben, also alles kostenlose Software und läuft auch auf anderen Plattformen.

Das sieht aus wie die 1. Fourierreihe, falls man den Scheitelpunkt bei 0 festlegt. Aber ich glaube das simuliere ich jetzt nicht, weil es an der Betrachtung nichts mehr ändert, obwohl die beiden Prinzipien etwas unterschiedlich sind.

Oh, das ist schlecht. Wenn ich so darüber nachdenke, fallen mir Echtzeitprobleme bei einem ARM-RISC-Controller ein, da wurde der AD-Wandler zuerst mit Takt vom Timer-Interrupt angesteuert. Leider mußten wir feststellen, daß der so erzeugte Takt unakzeptabel jitterte. Was das in der Signalverarbeitung bedeutet ist klar, die abgetastete Zeitfunktion wird nichtharmonisch verzerrt. So ähnlich könnte das hier auch zu sein, bin noch nicht sicher.

Das ist wieder ein Abtastproblem, dafür hast Du ja den Tiefpaß davorgeschaltet. Den Fall in Bild 8 habe ich jetzt nicht richtig verstanden, ist das sozusagen der analoge Komparator?

Wenn Dein Fall mit dem uC Bild 5 entspricht, so müßte man es erstmal mathematisch so erfassen, daß man eine Fourierreihe daraus entwickeln kann, da müßte dann die Abtastverzögerung mit eingehen. Falls das geht und die Reihe auch richtig konvergiert, kannst Du ja die Signalkomponente in der Reihe sehen. Wenn die richtig ist, müßte alles funktionieren.

So ganz sicher bin ich nicht, ob ich das jetzt alles richtig sehe, im Moment sind da zuviele Aspekte. Aber der Fall mit dem Sägezahn und der steil abfallenden Flanke sieht mir im Moment richtig aus. Weitere Überlegungen muß ich erstmal verschieben.

mfg. Winfried

Reply to
Winfried Salomon

Ich habe zwar gearde Vorlesungsfreie Zeit aber scheibe noch viele Prüfungen so das ich auch nicht allzu viel Zeit habe.

Ich muss mal kurz rekapitulieren: Die 1. Fourierreihe war die symetrische, mit nur cos Termen, die

  1. Fourierreihe war wie die 1. nur um phi/2 in x-Richtung verschoben.

Ja. Man müsste mal in de.sci.math nachfragen ob soetwas generell zulässig ist. Also ob man eine Fouerierreihe mit einem Parameter aufstellen kann und diese dann noch korrekt gegen den Funktionswert konvergiert wenn man den Parameter ändert.

Ja, Das habe ich mir auch schon fast gedacht. Wobei es mich interessiert ob es wirklich ein kontinuierliches Spektrum ist (durch die Modulation) oder nur ein Linienspektrum ist wie es von der Fouerierreihe gewöhnt ist. Mit welchem Programm berechnest du denn die FFT? Auch matlab? Ich mag ja lieber Maple.

Naja. Wenn man diese Vorhersagen machen wollte müsste man noch die Flankensteilheit beachten die von den MOS-Transistoren und Kapazitäten abhängig sind. Ich glaube das wird dann bald unberechenbar.

Der Scheitelpunkt ist doch bei 0. Oder verstehen wir darunter zwei verschiedene Sachen? Diese Funktion (grün) ist doch symetrisch zur y-Achse und somit, von der Periode und Höhe der Impulse mal abgesehen, genau wie die 1. Fouerierreihe.

Es wäre die 2. Fourierreihe wenn man die steigende Flanke nur halb so schnell ansteigen lassen würde und die fallende durch einen Sprung nach unten. Aber ich habe ja dieses Beispiel nach der 1. Fourierreihe entwickelt. Evt. mach ich später noch mal einen Plot.

Nein. Am Bild 7 erkennt man z.B. das bei x=80 bei der analogen Variante (rot) ein Puls mehr da ist.

Ja, ich werde es später nochmal mit Sägezahn plotten. Aber prinzipiell müsste es gleich bleiben. Aber neben dem Jitter erwarte ich in diesem Beispiel eben auch kleine Spikes die natürlich nur gehäuft auftreten wenn die Modulationsfrequenz nah an der PWM-Frequenz liegt.

Es war auch sehr schwer das zu modelieren. Aber anders konnte ich die

  1. Fourierreihe nicht nachbilden.

Ich hatte vergessen noch die Schwellwertfunktion mit rein zu plotten.

formatting link

Hier erkennt man das der Schwellwert (COMP) bei 10+n*20 genommen wird.

Auf was bezogen Jitterfrei? Wenn das digitale PWM Jitterfrei ist hat das analoge einen Phasenfehler der Proportional zu mod(x+p)-mod(x) ist wenn mod(x) die Modulationsfunktion ist. (Einfach mal so hingeschrieben ohne es zu überprüfen)

Ja. Bild 6 (nicht 8) ist die Analoge Variante und Bild 7 zeigt den direkten Vergleich zwischen Analog und Digital.

Genau. Bild 5 ist mit Digital. Aber mit verzögert geh ich nicht ganz mit weil das Modulationssignal/funktion ja diskret ist.

Ja, ich werde auch noch etwas grübeln und es nochmal mit der Sägezahnfunktion plotten. Ich muss mal sehen ob ich ein Programm finde mit dem ich eine FFT von einer Funktion machen kann.

Tschüss Martin L.

Reply to
Martin Laabs

Hallo Martin,

ich

mit

ich versuche das auch mal etwas zusammenzufassen, um nicht den Überblick zu verlieren, weil dieses Thema in der Komplexität IMHO schon an die Grenze dessen stößt, was man in einer Newsgroup diskutieren kann.

Wie mir jetzt klargeworden ist, stellen beide Fourierreihen den Fall einer analogen Schaltung dar, bei der ein Komparator eine Signalspannung (in diesem Fall Sinus) mit einem symmetrischen Dreieck oder unsymmetrischen Sägezahn vergleicht. Ich habe den symmetrischen Fall jetzt auch im Zeitbereich modelliert, was recht schwierig war, auch dort exakte Übereinstimmung mit Fourierreihe. Deshalb gehe ich im Moment davon aus, daß die ersten Aussagen alle richtig waren für diese "analogen" Fälle.

beliebige

das

Im Moment bin ich eher wieder vorsichtig. Amplitude und Frequenz zu modulieren müßte IMHO immer gehen, aber jeden beliebigen Parameter zu modulieren, ist überhaupt nicht zu überschauen. Ich habe nur die Integrationsgrenzen moduliert und das funktioniert nachweislich. Falls da aber noch weiter Abhängigkeiten drinstecken sollten, überschaue ich das so nicht. Im Grunde habe ich beim Aufstellen der Reihen nicht großartig nachgedacht und wundere mich nachträglich, daß das alles so paßt :-).

Man könnte sicher in de.sci.math nachfragen, aber der Fall von beliebigen Parametern könnte zu einer sehr schwierigen Diskussion führen, weiß nicht, ob man das durchhalten könnte.

ansteigend

Ich habe jetzt beide "analogen" Fälle durch eine 2**22 FFT gejagt, wobei ich da allmählich an Grenzen stoße, z.B. ist das ASCII-File für die Zeitfunktionen da schon ca. 370 MB groß und Matlab brauch schon einige Minuten, nur um es für die grafische Darstellung zu laden.

Die Spektren sind trotz Modulation ein Linienspektrum, wobei die Bessel-Linien im symmetrischen Fall den doppelten Abstand haben, zumindest sieht es also störungsfreier aus. Aus der FFT könnte man natürlich alles wie S/N herausrechnen, ich habe erstmal abgeschätzt, wie hoch Du mit der Signalfrequenz bei 70 dB Störabstand gehen kannst, das sind ungefähr 1.8 KHz, also hast Du noch Reserve. Das Abtasttheorem gilt hier auch, aber deutlich scharfer, Du mußt noch weit unter der halben Impulsfrequenz bleiben.

Um diese Spektren mit einer Dynamik von ca. 100 dB darzustellen und die Linien aufzulösen, muß ich im Vergleich zu einem Spektrumanalyzer schon gigantische Rechnerleistung auffahren.

Die FFT führe ich mit einem Fortran-Programm durch, einem 32 Bit Compiler der DJGPP-Distribution, der setzt das intern nach C um glaube ich. Das FFT-Programm funktioniert nach Cooley-Tukey und scheint im Vergleich zu anderen am schnellsten zu sein, ist aus einem Buch. Es schien ursprünglich nicht ganz fehlerfrei zu sein, im Moment macht es aber das was ich will und habe es schon öfters mit Erfolg eingesetzt. Um den Leakage-Effekt zu verringern, hab ich das Spektrum mit einem Kaiser-Bessel-Fenster gefaltet mit Nebenzipfeldämpung hier bei 120 dB. Das habe ich selbst geschrieben, nur die sehr schwer zu programmierende Bessel-Funktion habe ich aus der glaube ich freien NSWC-Bibliothek entnommen, die fand ich an der UNI Stuttgart per FTP. Das ist natürlich alles Fortran77, ob es das in C gibt, entzieht sich meiner Kenntnis, bin da nirgends fündig geworden. Zwar ist C jetzt in Mode, aber programmiert wird ja wohl mittlerweile nicht mehr, bestenfalls grafische Oberflächen per Mausklick zusammengenagelt. Es gibt auch Bibliotheken an UNIs, die sind meist für LINUX oder so, nur frei für rein wissenschaftliche Zwecke, nur scheint die mittlerweile keiner mehr zu benutzen, wie man mir im Rechenzentrum sagte.

Mit Matlab kannst Du das auch machen, ich benutze es nur für die grafische Ausgabe, weil ich in GNU-Plot den Zoom per Maus nicht habe. Nur ist Matlab sehr teuer und ich selbst finde es besser, kostenlose eigene GNU-Programme zu haben. Wir hatten letztens Probleme bei Matlab, den Kanal einer OFDM-Modulation per FFT zu berechnen, da gab es RAM-Probleme und der Algorithmus schien mir nicht gut zu sein, das Ergebnis blieb zweifelhaft. Wenn Du das selbst machst, kann Dir das nicht passieren, wenn Du es kannst ;-).

Das ist nicht so schwierig, man würde dann natürlich einen Schaltungssimulator wie SPICE benutzen, der kann glaube ich sogar das Spektrum berechnen, die Qualität weiß ich jetzt nicht. Man könnte auch nachträglich eine FFT der Zeitfunktion durchführen, ich sehe da keine grundsätzlichen Probleme. Aber hier wäre der Aufwand übertrieben.

Ok, der untere Scheitelpunkt ist hier wohl richtig, kann sein daß ich mich vertan hatte.

Wenn

die

Wenn ich das jetzt richtig verstanden habe, fallen die 2. Fourierreihe der "analogen" Lösung mit Deiner uC-Realisierung zusammen, damit wäre dieser Fall schonmal eine sinnvolle Lösung.

Moment. Bild 6 war jetzt die analoge symmetrische Variante, in Bild 7 ist die rot und das grüne die uC-Funktion? Daß die Funktionen in Bild 7 sich unterscheiden ist klar, denn die digitale symmetrische Variante ist komplizierter zu betrachten und anders.

Der Impuls bei der analogen symmetrischen Variante ensteht IMHO dadurch, daß Du das Abtastheorem verletzt. Du mußt das Signalspektrum hier auf 1.8 KHz begrenzen, sonst entstehen schwer zu überschauende Effekte, Du hast aber einen spektral unbegrenzten Exponentialimpuls benutzt, das ist nicht zulässig. Diese grundsätzlichen Aspekte der Signaltheorie müssen wir evtl. noch etwas vertiefen, falls Du da Probleme siehst.

Wenn Du das Abtastheorem nicht verletzt, müßten im 2. unsymmetrischen Fall analoge und digitale Variante identisch sein, bis auf einen delay. Leider weiß ich immer noch nicht genau, was Dein uC macht, deshalb wüßte ich kein richtiges Modell dafür.

Das war auch schwer, hat aber dann doch gut funktioniert und die Annahmen bestätigt.

In Bild 9 verstehe ich die Entstehung der violetten Abtastwerte nicht. Pro Periode sind auf der fallenden und dann steigenden Flanke des Dreieck Abtastungen möglich, wird nur der steigende genommen? In der Grafik kann ich diesen Zusammenhang nicht erkennen. Aus diesem Grunde versteh ich die Funktionsweise Deines uC nicht richtig, das müßten wir erstmal klären, um es weiter zu analysieren.

  1. > > Das könnte darauf hindeuten, daß auch das jitterfrei geht.

Die Betrachtung als Abtastsystem finde ich hier sehr kompliziert. Die analoge symmetrische Variante, die jetzt eigentlich klar ist, tastet nichtperiodisch ab, trotzdem klappt alles wie gewünscht. Mit Jitter meine ich hier eine Abweichung der Abtastfunktion von der gewünschten bezüglich Zeit. Die Auswirkung wäre in der FFT sofort zu sehen, das Signal, in meinem Fall Sinus, würde zerlaufen, tut es hier aber nicht.

Die digitale symmetrische Variante, deren Funktionsweise mir noch nicht ganz klar ist, tastet periodisch zur Pulsfrequenz ab. Aber da ich nicht weiß, wo genau abgetastet wird, kann ich noch nicht erkennen, ob Dein Abtastzeitpunkt hier auch vom Signal abhängt und mit welchen Auswirkungen. Meine Vermutung war, daß nur der steigende Wert abgetastet wird, dieser wird am nächsten Maximalwert des Dreieck ausgegeben und damit funktioniert auch diese Variante jitterfrei und richtig. Es könnte also wirklich so sein, daß von Anfang an alles richtig war und Deine Probleme woanders liegen, in der Interpretation der Signalverarbeitung.

Aber um sicherzugehen, weil es unüberschaubar wird, würde ich das jetzt mit 'ner großen FFT testen. Bei der digitalen symmetrischen Variante halte ich das Aufstellen einer Fourierreihe wie eingangs fast für unmöglich, weil das abgetastete Signal selbst schon als Fourierreihe vorliegt. Hier wird der Rechner IMHO also mal wirklich zum 1. Mal nötig, aber sicher kein Taschenrechner, sondern schon gleich 'ne Power-Workstation :-)

verstanden,

Ok, scheint mit meinem Verständnis übereinzustimmen. Das mit dem Abtasttheorem sollten wir noch getrennt klären.

kann,

Du müßtest nochmal erklären, wie die abgetasteten Schwellwerte in Bild 9, violette Kurve, entstehen. Daraus könnte man dann ein Modell der Zeitfunktion bilden und mit 'ner FFT die Rekonstruierbarkeit des Signal einfach ausrechnen, alles andere ist IMHO zu aufwendig.

In der NSWC-Fortran-Library sind etliche FFT-Routinen drin, habe sie aber noch nicht eingesetzt. Aber falls Du Dich nicht in die GNU-Compiler einarbeiten willst, wäre Matlab wohl die schnellste Lösung.

mfg. Winfried

Reply to
Winfried Salomon

Hallo Martin,

ich habe die Sache mit dem Spektrum der PWM vorläufig zum Abschluß gebracht, mich hat das einfach mal interessiert. Die Spektren der beiden uC-Varianten habe ich mir auch angeschaut.

Die beiden "analogen" Fälle funktionieren sehr gut, das Signal (Sinus) läßt sich ideal rekonstruiren laut Spektrum. Am besten insgesamt sieht die "analoge" symmetrische Lösung aus.

Bei der Untersuchung der uC-Lösungen habe ich mal Realisierungen angenommen, die ich aus Deiner Beschreibung geschlußfolgert habe aber nicht weiß, ob sie wirklich stimmen. Der unsymmetrische Fall ist hier wie erwartet jitterfrei identisch mit der "analogen" Lösung, bis auf eine Verzögerung der Abtastung um 1 Pulsperiode.

Der symmetrische "digitale" Fall jedoch hat hier den befürchteten Jitter in der Abtastung, sodaß das Signal grundsätzlich verbeult wird. Der Klirrfaktor liegt bei 700 Hz Sinus ca. bei 1% und steigt mit der Frequenz steil an. Die Modellierung war wirklich sehr schwierig, aber ich wollte das mal wissen, kann aber einen Fehler nicht ausschließen. Falls ich keinen Fehler gemacht haben sollte, ist diese Lösung wegen des Jitters nicht zu empfehlen. Den Grund für den Jitter habe ich noch nicht vollständig verstanden, aber die FFT zeigt mir das an.

Auf jeden Fall hat diese Untersuchung viel für das Verständnis der PWM gebracht, es ist nicht so einfach wie man zuerst glaubt. Falls Du das auch weiter untersuchen möchtest und kein Programm für die FFT findest, dann sag mal Bescheid, da läßt sich bestimmt was machen.

mfg. Winfried

Reply to
Winfried Salomon

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.