Forum: Mikrocontroller und Digitale Elektronik Delta-Sigma Antwortzeit/Samplerate


von Andreas M. (amesser)


Lesenswert?

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

von Dennis D. (Gast)


Lesenswert?

Hängt alles am "Oversampling Ratio". Irgedwoher muss es der 1-Bit-DAC ja 
holen ...

von Günni (Gast)


Lesenswert?

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).

von Thomas Z. (usbman)


Lesenswert?

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.

von Egon D. (Gast)


Lesenswert?

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?

von Egon D. (Gast)


Lesenswert?

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".

von Andreas M. (amesser)


Lesenswert?

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.

von Purzel H. (hacky)


Lesenswert?

> 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.

von Günni (Gast)


Lesenswert?

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.

von W.S. (Gast)


Lesenswert?

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.

von Dergute W. (derguteweka)


Lesenswert?

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

von c-hater (Gast)


Lesenswert?

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...

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Es sei dir unbenommen. Ich bleibe bei meinen 4..5bit, bin halt nur ne 
kleine Entwicklerwurst ;-)

Gruss
WK

von Andreas M. (amesser)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von Andre G. (andgst01)


Lesenswert?

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 ...

von Dergute W. (derguteweka)


Lesenswert?

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

von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.