Hallo zusammen, ich spiele gerade ein bisschen mit MIDI, Synth & Co rum. Um die Steuerspannung für die VCO Frequenz zu generieren habe ich mir aus einem 74HC595 sowie einer handvoll 0.1% Widerstände einen 7 Bit R-2R DAC gebaut und damit mein MIDI interface realisiert. Dem Gehör nach passt das ganz gut, nachgerechnet ergibt sich 2mV Fehler bei 5V Referenzspannung. Wenn man die MIDI Noten 1-zu-1 auf die 7 Bit abbildet, (468mV entsprechen dann einer Oktave) macht das etwa 0.5% Fehler auf die Oktave bezogen bzw in Musikersprech ca 5cents. Jetzt habe ich mal überlegt ob ich mit einem Sigma-Delta DAC besser werden kann und bin jetzt über die Auflösung/Sprungantwort beim Sigma-Delta gestolpert. Nehmen wir mal einen 16 Bit Sigma-Delta DAC mit 48 kHz und "64x" Oversampling, der dann wohl mit 3072 kHz Takt läuft. Ein typischer (alter) Audio-DAC. Wenn ich bei dem 1/65536 VRef ausgeben wollte, dann sollte der 65535 Takte "0" und 1 Takt eine "1" ausgeben. Oder umgekehrt. Richtig? zwischen zwei Takten mit "High" vergehen dann rund 21ms. für Audioanwendung mit 48kHz wird der Tiefpass am Ausgang aber auf 20kHz ausgelegt sein. Dann kann der DAC doch gar keine 16 Bit Auflösung bei Audio erreichen, in dem von mir beschrieben Szenario kommen dann doch alle 21ms Pulse aus dem DAC statt einem konstanten Wert von 1/65536 VRef. Wo ist mein Denkfehler? (Hintergrund: mit mehr Bits im DAC könnte ich mit einer Lookup-Tabelle die Linearitätsfehler der Steuerspannung korrigieren) Preislich gesehen ist die R-2R Variante relativ günstig im Vergleich zu halbwegs brauchbaren und noch halbwegs bezahlbaren 12Bit DACs. Z.b. MCP4912 10Bit, aber 3.5LSB INL, der macht Auflösung von 4mV auf 5V, kostet 2€/2Kanäle. Der MCP48CVB22 mit 12 Bit soll angeblich 1LSB INL haben, wobei da im Datenblatt von Adjusted und Unadjusted Error gesprochen wird. Anscheinend muss man den dann auch noch kalibrieren, zumindest scheint der Fehler dort linear zu sein. Der kostet aber schon fast 4 Euro. Andreas
Hängt alles am "Oversampling Ratio". Irgedwoher muss es der 1-Bit-DAC ja holen ...
Zuerst einmal kann man gerade R-2R-Wandler sehr einfach um weitere Bits ergänzen. Bei Sigma-Delta ändert sich der Ausgang pro Takt um ein Bit. D.h. für vollen Hub über den gesamten Aussteuerbereich muss der Takt Zahl der Stufen * höchste aufzulösende Frequenz betragen. Bei 16 Bit ist die Auflösung 65536 Stufen * 20000 Hz = 1,3 GHz betragen. Nur dann kann der volle Aussteuerbereich zwischen 2 Samples überfahren werden. (Um es nicht zu kompliziert zu machen, habe ich mal das Abtasttheorem weggelassen, sonst würde sich der Takt noch einmal verdoppeln.) Wenn man mit Sigma-Delta-Wandlern arbeitet, geht man davon aus, dass die Änderung des Eingangssignals zwischen 2 Samples immer deutlich kleiner als der Aussteuerbereich ist. Wie hoch die maximale Sprunghöhe dann ist, kann man nach der Formel oben berechnen. Für Musikübertragungen spielt der Fehler keine Rolle, da das Gehirn einen großen Sprung "extrapoliert". Wenn man übrigens ein Sinussignal abtastet, dessen Amplitude so groß wie der volle Aussteuerbereich des Wandlers ist, erhält man je nach Frequenz und Abtastrate oftmals nicht die volle Auflösung des Wandlers. Nachzulesen ist das unter dem Stichwort "effective number of bits" (ENOB).
Günni schrieb: > Bei Sigma-Delta ändert sich der Ausgang pro Takt um ein Bit. D.h. für > vollen Hub über den gesamten Aussteuerbereich muss der Takt > Zahl der Stufen * höchste aufzulösende Frequenz betragen. Bei 16 Bit ist > die Auflösung 65536 Stufen * 20000 Hz = 1,3 GHz betragen. Das würde ich jetzt mal stark bezweifeln.... Nicht die Rechnung die stimmt vermutlich. 1.3 GHz das hätte schon auffallen können, dass da etwas nicht stimmt. Wie du selbst schreibst ändert sich pro Takt 1 Bit dann ist die Rechnung 16 * 20kHz. Das ist zwar immer nicht richtig weil man mit der doppelten max Frequenz rechnen muss.
Andreas M. schrieb: > Wo ist mein Denkfehler? Im Prinzip keiner. Du hast nur ein sehr ungünstiges Beispiel gewählt, weil die Auflösung von Delta-Sigma-Wandlern an den Grenzen des Aussteuerbereiches stark abnimmt. Futter zum Weiterdenken: Um wieviel unterscheidet sich 1/256 von 1/255? Oder 5/16 von 5/15?
Günni schrieb: > Bei 16 Bit ist die Auflösung 65536 Stufen * 20000 Hz = 1,3 GHz > betragen. Im Prinzip stimmt das, aber das ist eine sehr grobe Argumentation. Du rechnest alles auf eine übliche PWM mit einer Zweierpotenz als Blocklänge um -- das kann man sich zwar leicht vorstellen, ist aber eine sehr grobe Annahme. Die simple Pulsfolge "1001001001001..." liefert z.B. exakt 1/3*U_ref als Ausgangsspannung -- diesen Wert kann man mit einer Zweierpotenz als Blocklänge überhaupt nicht exakt erreichen, egal, wie viele Bits man nimmt. Und das gilt für alle Primzahlen als Blocklängen, von denen es selbst unterhalb von 65536 VERDAMMT viele gibt. Jede Primzahl als Blocklänge liefert ein einzigartiges Set von Ausgangsspannungen, das sich von dem aller anderen primen Blocklängen unterscheidet. Selbst zwischen 128 und 256 (=8bit) liegen 22 Primzahlen; diesen entsprechen über 3000 unterschiedliche Spannungen. Dazu kommt, dass ein PWM-Signal immer aus einen "0"-Run und einem "1"-Run besteht, weil das eben aus dem Prinzip der Erzeugung folgt -- aber das ist aus theoretischer Sicht überhaupt nicht notwendig. Man könnte auch Pulsfolgen der Art "11011101101110..." zulassen -- Stichwort: "noise shaping".
Egon D. schrieb: > Im Prinzip keiner. > Du hast nur ein sehr ungünstiges Beispiel gewählt, weil > die Auflösung von Delta-Sigma-Wandlern an den Grenzen > des Aussteuerbereiches stark abnimmt. Ok, dann war ich nicht ganz auf dem falschen Dampfer. Aber letzlich heißt das doch, das Sigma-Delta Wandler für quasi-statische Signale die präzise auf den Punkt getroffen werden müssen nicht so gut geeignet sind, also für meinen Anwendungsfall eher unbrauchbar? Ich denke damit das halbwegs spielbar bleibt, müsste die Sprungantwort in ca 10ms auf 13 Bit Auflösung einschwingen. Also von einer Note zur nächsten einschwingen. Wenn ich es richtig verstehe, bräuchte ich dann da ca. 800kHz Takt im Wandler. In Software auf dem ATmega wird das dann eher nichts, vor allem wenn er nebenbei noch midi bedienen soll. Eher eine Aufgaben für nen CPLD oder kleinen FPGA. Evtl kommt man mit einem 4-Bit Dac kombiniert mit Sigma-Delta auf einem ATmega hin.
> habe ich mir aus einem 74HC595 sowie einer handvoll 0.1% Widerstände einen 7 Bit
R-2R DAC gebaut und damit mein MIDI interface realisiert. Dem Gehör nach passt das
ganz gut, nachgerechnet ergibt sich 2mV Fehler bei 5V
Referenzspannung.
Ein 7Bit Wandler hat nur eine Aufloesung von 1%, da ist ein 16bit
Wandler schon eine andere Hausnummer.
Falls man einzelne Frequenzen erzeugen will, waere allenfalls ein DDS
angesagt. Die kommen dann quarzgenau, mit einer naehzu beliebigen
Aufloesung raus. Uns kosten auch nicht alles Geld.
Thomas Z. schrieb: > Wie du selbst schreibst ändert sich pro Takt 1 Bit dann ist die Rechnung > 16 * 20kHz. Genauer ändert sich pro Takt das Signal um "Delta" was 1 LSB ist. Bei 16 Bit hat nicht jedes Bit die gleiche Wertigkeit. Deshalb ist die Rechnung 16*20 kHz falsch.
Andreas M. schrieb: > ich spiele gerade ein bisschen mit MIDI, Synth & Co rum. Um die > Steuerspannung für die VCO Frequenz zu generieren habe ich mir aus einem > 74HC595 sowie einer handvoll 0.1% Widerstände einen 7 Bit R-2R DAC > gebaut... Also du willst ein Tonsignal erzeugen, indem du mit einem DAC eine Steuerspannung herausgibst, die dann als Input für einen VCO dienen soll. Die soll dir dann möglichst genau stehen und obendrein mußt du deinen VCO auch noch abgleichen, damit der nicht in einer anderen Tonart dudelt als die übrigen Musiker. Aha. Wenn du schon von einem µC aus Signale von genauer Frequenz agil erzeugen willst, warum machst du dann so einen Umweg über eine analoge Steuerspannung? Das riecht nach ewigem Abgleichen und unendlich viel Frust. Ich würde dir raten, einen einfachen DDS-Chip z.b. den AD9833 zu nehmen oder dich mit den steinalten OPL oder den etwas neueren OPL2-Chips von Yamaha bekannt zu machen. Das ist alles zielführender als das, was du geschildert hast. W.S.
Moin, Andreas M. schrieb: > Evtl kommt man mit einem 4-Bit Dac kombiniert mit Sigma-Delta auf einem > ATmega hin. Yepp, das scheint mir ein vernuenftiger Ansatz zu sein. Recht viel mehr als 4..5 Bit ausm R2R, was an stinknormalen IOs haengt, ist eh illusorisch. Gruss WK
Dergute W. schrieb: > Recht viel mehr als 4..5 Bit ausm R2R, was an stinknormalen IOs haengt, > ist eh illusorisch. Ähem, das nein. 8 Bit sind durchaus realistisch machbar. Wenn man nicht die völlig idiotische Erwartung hat, direkt an den Ausgang des R2-Netzes eine 1kOhm-Senke hängen zu können...
Moin, Es sei dir unbenommen. Ich bleibe bei meinen 4..5bit, bin halt nur ne kleine Entwicklerwurst ;-) Gruss WK
W.S. schrieb: > soll. Die soll dir dann möglichst genau stehen und obendrein mußt du > deinen VCO auch noch abgleichen, damit der nicht in einer anderen Tonart > dudelt als die übrigen Musiker. Aha. Ja, so wie ein modularer Synth nun mal eben funktioniert.... Danke für die vielen Beiträge. Ich habe mir das ganze nochmal durch den Kopf gehen lassen und werde vermutlich doch einen fertigen DAC einsetzten. Und zwar den hier: MCP48CVB22. Nach Datenblatt sieht der Linearitätsfehler ziemlich linear aus so dass man mit einem nachgeschalten OPV das gut in den Griff bekommen sollte. Falls wirklich notwendig kann man jede Note auch nochmal per Lookup Tabelle kalibrieren. Preislich ist das ähnlich zu meinem R-2R Konstrukt. Daraus soll dann ein modulares MIDI->CV Interface werden, ganz ähnlich dem Döpfer A190-3, nur das ich die Midi-Schnittstelle und Clockausgabe auf ein separates "Basis" Modul machen werde. Man kann dann CV Module nach Bedarf dranklöppeln. Möglicherweise sind die 12Bit auch vollkommen übertrieben. Das A190-3 arbeitet mit einem 8-Bit DAC. Den MCP48xxxxx gibt es ja auch in 8 und 10 Bit Varianten. Die Geschichte mit dem 4-Bit R-2R DAC hebe ich mir aber für Effektprozessoren auf. Möchte das so ähnlich wie http://elm-chan.org/works/vp/report.html machen. Den RAM hab ich noch rumfliegen.
Andreas M. schrieb: > Preislich gesehen ist die R-2R Variante relativ günstig im Vergleich zu > halbwegs brauchbaren und noch halbwegs bezahlbaren 12Bit DACs. PWM ist noch günstiger. Mit 16MHz CPU-Takt und 8Bit PWM kommst Du auf 62kHz, also weit über der Hörgrenze. Für 16Bit nimmst Du einfach 2 PWMs und addierst sie mit 2 Widerständen im Verhältnis 1:256.
Peter D. schrieb: > Für 16Bit nimmst Du einfach 2 PWMs und addierst sie mit 2 > Widerständen im Verhältnis 1:256. Und wieder was gelernt ...
Moin, Peter D. schrieb: > Du einfach 2 PWMs und addierst sie mit 2 > Widerständen im Verhältnis 1:256. Na, wenn das so kinderleicht geht, warum machen dann DAC-Hersteller so ein Gschiss mit lasergetrimmten Widerstaenden und anderem fancy Zeugs? Muessen alles Deppen sein... scnr, WK
Dergute W. schrieb: > Na, wenn das so kinderleicht geht, warum machen dann DAC-Hersteller so > ein Gschiss mit lasergetrimmten Widerstaenden und anderem fancy Zeugs? So, wo machen die das denn? Ich hab davon nichts in den Datenblättern gelesen. Z.B. beim AD5668 wird einfach ein String aus 65536 Widerständen mit 65536 Schaltern genommen. Und das dann 8 mal. Diskret kann man sowas nicht aufbauen. Lasertrimmung hat man vielleicht zu Anfang mal genommen, da hat dann aber ein DAC gerne mal 1000,-DM gekostet, z.B. DAC9377-16.
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.