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.
Hat jemand zu mindest einen Link, auf der das Thema Delta-Sigma-Wandler gut erklärt ist?
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!
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 .
Hallo Folgende Note ist empfehlenswert: http://www.numerix-dsp.com/appsnotes/APR8-sigma-delta.pdf Gruß Markus
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? :-)
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.