Forum: FPGA, VHDL & Co. Delta-Sigma-Wandlung - PWM


von Fabian H. (Firma: Technische Universität Berlin) (brein)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

meine Gruppe und ich haben an der Uni den Auftrag bekommen, ein recht 
einfaches Projekt in VHDL auf dem Nexys 2 Board zu lösen.

Die Aufgabe lautet im Wesentlichen eine Soundausgabe zu realisieren.
Die einfachste Variante wäre es, die vier Tasten zu nutzen um 4 Töne zu 
erzeugen. Von der Geige abgeschaut könnten das g-d-a-e sein.
Später könnte man das dann noch erweitern und meinetwegen den Ton mit 
den Schiebereglern einstellen und über die Knöpfe den Ton selber oder 
den Halbton höher oder tiefer auszuwählen.
Das aber ist alles nur Fleiß. Die interne Programmierung stellt meines 
Wissens jetzt auch nicht so die Herausforderung dar. Oder ich 
überschätze mich mal wieder.

Unser erster Lösungsansatz war es, in Lookuptables die Wert- und 
Zeit-diskreten Werte der vier Frequenzen abzuspeichern. Zeit-diskret 
heißt eine Samplerate von 44kHz, also 44 Tausend Werte für eine Sekunde. 
Und die Werte selber mit einer 16Bit-Auflösung zwischen 0 und 1 
abzuspeichern. Meinetwegen auch logarithmisch.
Dann kann man die 16Bit über 16Pins an einen D-A - Wandler übergeben und 
dann kommt einfach ein kleiner Speaker ran, wie die in einem PC.
Die Werte selber lassen sich ja mit MATLAB oder anderen Hilfsmitteln 
errechnen.
Das einigermaßen Elegante an der Lösung ist, dass sich dann die 
Frequenzen kombinieren lassen, indem man von den Werten einfach das 
arithmetische Mittel bildet. Also von jedem Signal den ersten Wert, dann 
den Zweiten und so weiter. (Zu mindest glaube ich jetzt, dass das so 
einfach geht.)
Ebenso dürfte es dann einfach sein, einen "Ausklingeffekt" zu erzeugen. 
Also eine Hüllkurve, die sich der Null annähert. wie etwa (1/2)^x oder 
e^(-x).
http://www.wolframalpha.com/input/?i=%281%2F2%29%5Ex

Nachteil dieser Lösung ist der enorme Rechenaufwand.
Im Embedded Project Journal 9 hatte ich das Projekt des EKG-Simolators 
auf Seite 10 entdeckt. 
https://www.mikrocontroller.net/attachment/114056/EPJ9_web.pdf
Dort wurde ein anderer Weg eingeschlagen um das analoge P-QRS-T-Signal 
zu erzeugen.
Es wird ein PWM-Signal erzeugt, diesen durch ein Tiefpass gejagt, dann 
durch einen Hochpass um den Gleichspannungsanteil heraus zu filtern und 
Schwups hat man ein analoges Signal.
Da liegt aber schon die Crux. Wenn ich nicht ganz falsch liege ist das 
doch ein Delta-Sigma-Wandler oder?
Ich habe bestenfalls davon gehört. Uns wurde er auch schon mal erklärt. 
Im Groben. Das er aus einem Addierer (Kondensator) und einem Vergleicher 
besteht. Daher das Sigma und das Delta.
Wie aber funktioniert er genau? Kann man das mit einfacheren Worten 
sagen, als die Erklärungen die man sonst so im Internet findet?

Ich denke sehr trivial. Wahrscheinlich ist das hier mein Problem.
Im Falle eines Delta-Sigma-DAC ist es ja noch recht einfach, wie ich 
vermute.
Ist das PWM im Moment ein High (also meinetwegen 5V) lädt sich der 
Tiefpass auf. Im Falle eines Low (0V) entlädt sich dieser.
(Ich hoffe, es handelt sich hier überhaupt um ein PWM-Signal.)
Da das PWM-Signal sehr hochfrequent ist, ergibt sich am Ausgang des 
Tiefpasses der Mittelwert. Bei einem Tastverhältnis von 0,5, also 50% 
High und 50% Low behält der Ausgang seinen Wert. Steigt das 
Tastverhältnis (also der Anteil der High-Zeit), steigt auch der 
Ausgangswert. Je höher das Tastverhältnis, desto steiler der Anstieg am 
Ausgang. Das selbe bei einem Tastverhältnis von <0.5 und einem Gefälle.
Der Charme hierbei ist natürlich, dass ich nur noch einen Ausgang 
brauche und als Peripherie lediglich ein paar Widerstände und 
Kondensatoren.
Ebenso brauche ich dann nur noch eine Periode pro Signal definieren.
Wie aber, erzeuge ich das passende PWN-Singal (also das 
118-Elemente-Array, das im Programm SINUS_ARRAY heißt), wie 
dimensioniere ich die Schaltung (so einfach sie auch sein mag), wie 
addiere ich dann zwei Signale und wie rechne ich dann die Hüllkurve ein?


Fragen über Fragen.
Wenn ich mich so verzettelt habe, dann habe ich meistens etwas 
grundlegend missverstanden oder es gibt viiieeellll einfachere Lösungen.
Ich hoffe, Ihr wascht mir nicht den Kopf, weil ich mit einer Hausarbeit 
ankomme.

Den EKG-Simulator habe ich auch schon mal aufgebaut, der funktioniert 
auch.
Das Bild PWM.png zeigt das PWN am Pin 6 des ATtiny (bei mir 13).
A1 ist der Messpunkt an C2 im Schaltplan, A2 ist der Messpunkt am C3, A3 
an der positiven Seite vom C4 und A3_1 an dessen negativer Seite.

Sowas möchte ich auch erzeugen. Mir ist auch klar, wenn man die Frequenz 
erhöhen würde und damit das PWM-Signal granularer machen würde, wäre das 
Signal an A3_1 viel feiner.


Ich wäre dankbar für jede Äußerung zu unserem Vorhaben.
Mich würden neben Tipps und Trick auch eure Meinung und eigene 
Erfahrungen interessieren.

Vielen Dank euch allen.

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Hat jemand zu mindest einen Link, auf der das Thema Delta-Sigma-Wandler 
gut erklärt ist?

von user (Gast)


Lesenswert?


von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

user schrieb:
> xapp154
> http://www.xilinx.com/support/documentation/application_notes/xapp154.pdf

Ja, danke!
Gefunden hatte ich das auch bereits.
Leider erfüllt es nicht den Tatbestand der Einfachheit. ^^

Aber wenn man schon mit der Nase drauf gestoßen wird, quäle ich mich mal 
dadurch.
Ausgedruckt ist es schon.

Danke!

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Ich habe auch noch das hier gefunden, für Diejenigen, die es auch noch 
interessiert: 
http://www.medialab.ch/archiv/pdf_studien_diplomarbeiten/1sa00/1sa2000-111_DeltaSigmaDacMitFpga%20(Kleinferchner&Landert).pdf

Aber der Author bezieht sich auch auf das xapp154.pdf .

von MJF (Gast)


Lesenswert?

Hallo

Folgende Note ist empfehlenswert:

http://www.numerix-dsp.com/appsnotes/APR8-sigma-delta.pdf

Gruß

Markus

von Stefan (Gast)


Lesenswert?

Fabian Hoemcke schrieb:
> Es wird ein PWM-Signal erzeugt, diesen durch ein Tiefpass gejagt, dann
> durch einen Hochpass um den Gleichspannungsanteil heraus zu filtern und
> Schwups hat man ein analoges Signal.

Das hat mit einem Delta-Sigma DAC aber auch gar nichts zu tun, sondern 
nur mit einfachster Signalfilterung...

Hoch- und Tiefpass wurden doch im Grundstudium ausgiebig durchgekaut, 
oder?

:-)

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Stefan schrieb:
> Fabian Hoemcke schrieb:
>> Es wird ein PWM-Signal erzeugt, diesen durch ein Tiefpass gejagt, dann
>> durch einen Hochpass um den Gleichspannungsanteil heraus zu filtern und
>> Schwups hat man ein analoges Signal.
>
> Das hat mit einem Delta-Sigma DAC aber auch gar nichts zu tun, sondern
> nur mit einfachster Signalfilterung...
>
> Hoch- und Tiefpass wurden doch im Grundstudium ausgiebig durchgekaut,
> oder?
>
> :-)

Ja, danke.
Deshalb verwendete ich ja auch die Begriffe Hoch- und Tiefpass.

Die Aussage dass das Hoch- und Tiefpässe sind, schließt doch nicht aus, 
dass es sich um einen D-S-Wandler handelt.
In dem APR8-Dokument von MJF steht doch schon auf der ersten Seite (8. 
Blatt), dass der Delta-Sigma-Wandler auf Filtertechniken aufbaut.
Oder habe ich das jetzt falsch übersetzt?

Gruß
BrEin

von Duke Scarring (Gast)


Lesenswert?

Der Ansatz mit der LUT (Lookup table) ist doch gar nicht so schlecht (es 
gibt auch noch andere).
Ich würde ich Aufgaben teilen:

* Ausgabe eines Wertes an den DAC (Simulation + Oszi)
* Erzeugung eines Sägezahns (= einfacher Zähler) mit Simulation und 
Oszitest
* dann kommt die Lookuptable und der Sägezahn dient als Adresse
* Kombination mit dem Taster

Damit steht erstmal die Grundfunktion. Jetzt kann das ganze vervielfacht 
werden. Die Ausgänge werden aufsummiert.

Damit dürfte die Pflicht erfüllt sein. Dann kommt die Kür.

Fabian Hoemcke schrieb:
> Ebenso dürfte es dann einfach sein, einen "Ausklingeffekt" zu erzeugen.
> Also eine Hüllkurve, die sich der Null annähert. wie etwa (1/2)^x oder
> e^(-x).
> http://www.wolframalpha.com/input/?i=%281%2F2%29%5Ex
>
> Nachteil dieser Lösung ist der enorme Rechenaufwand.
Kommt drauf an. Entweder mach nimmt eine einfachere Funktion oder holt 
sich die Hüllkurve auch aus einer LUT.

Duke

P.S.: Nicht vergessen: Immer schön simulieren!

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.