Hi,
ich habe einen mcp4725 DAC an einem Atmega und dahinter noch einen Opamp
um das Ausgangssignal etwas zu verstärken. Das Signal (z.B. Sinus) sieht
hübsch aus, aber mir fehlt das Equipment um die Qualität wirklich zu
beurteilen.
Ist es sinnvoll einen Tiefpass nachzuschalten oder filtert der DAC
bereits ausreichend? Falls ich filtern sollte, macht es einen
Unterschied, ob ich vor oder nach dem Opamp filtere?
Liebe Grüße
MeckerOhm schrieb:> ich habe einen mcp4725 DAC an einem Atmega und dahinter noch einen Opamp> um das Ausgangssignal etwas zu verstärken. Das Signal (z.B. Sinus) sieht> hübsch aus, aber mir fehlt das Equipment um die Qualität wirklich zu> beurteilen.>> Ist es sinnvoll einen Tiefpass nachzuschalten oder filtert der DAC> bereits ausreichend? Falls ich filtern sollte, macht es einen> Unterschied, ob ich vor oder nach dem Opamp filtere?
Kuck hier:
https://de.wikipedia.org/wiki/Digital-Analog-Umsetzer#Schritte_der_Umsetzung
"Eine Annäherung an ein kontinuierliches Ursprungssignal, auf dem ein
digitales Signal basieren kann, wird mit einem meist direkt auf den
Digital-Analog-Umsetzer folgenden Rekonstruktionsfilter erzielt."
Wenn Dir das Signal "hübsch" genug ist (will sagen: deinen Ansprüchen
genügt), kannst Dir das Rekonstruktionsfiler sparen.
Ob Du vor oder nach dem Verstärker filterst ist (in erster Näherung)
egal.
MeckerOhm schrieb:> Ist es sinnvoll einen Tiefpass nachzuschalten oder filtert der DAC> bereits ausreichend?
Was soll der DAC filtern? Dein Sinus ist nicht ideal, sondern hat
Stufen, die man bei guter Auflösung auch am Scope sehen müsste.
Nun kommt es auf die Anwendung an, ob diese relevant sind. Wenn ja,
hilft ein Tiefpass. Aaaaber: Wenn sich die Frequenz des Sinus'
verändert, erzeugt der Tiefpass eine unerwünschte Verschiebung der
Amplitude.
Manfred schrieb:> Was soll der DAC filtern?
Im Datenblatt ist eine Settling Time von 6us angegeben. Alleine das
sorgt schon dafür, dass das Signal nicht als ideale Treppenfunktion,
sondern gefiltert heraus kommt ;-)
sorry, meinen Anwendungsfall einzugrenzen, wäre klug gewesen.
Es geht um ein Modul in einem modularen Synthesizer. Das Signal kann
sowohl LFO, Audio oder ein (quasi-)diskretes Control Voltage sein. Im
Grunde ein "general purpose" Modul, falls die Info einigermaßen
hilfreich ist.
Aber schon mal vielen Dank in die Runde. Ihr habt schon einige Dinge
ganz gut für mich erhellt.
MeckerOhm schrieb:> s geht um ein Modul in einem modularen Synthesizer. Das Signal kann> sowohl LFO, Audio oder ein (quasi-)diskretes Control Voltage sein. Im> Grunde ein "general purpose" Modul, falls die Info einigermaßen> hilfreich ist.
Wichtig zu wissen ist zunächst mal die Taktfrequenz, mit dem die
digitale Daten an den DA-Wandler gelegt werden, sowie die
Ausgangsfrequenz des analogen Signales, welchs der DA-Wandler erzeugen
soll.
Je größer die Taktfrequenz gegenüber der Ausgangsfrequenz ist, desto
geringer sind die Anforderungen bezüglich Flankensteilheit und damit
Ordnungszahl an das Tiefpassfilter, welches hinter dem DA-Wandler sitzt.
Wenn du den DA-Wandler z.B. mit 10us also 100KHz taktest, ist für ein
LFO, bzw ein Controllsignal wohl ein einfacher Tiefpass erster Ordnung
ausreichend.
Für ein Audiosignal, welches ja bis 20KHz reichen kann, wird der
Tiefpass wesentlich aufwendiger.
Hintergrund
Beim DA-Wandeln entstehen Aliasing-Produkte. Das heist es entstehen
zusätzlich Mischprodukte von Taktfrequenz - Ausgangsfrequenz und
Taktfrequenz + Ausgangsfrequenz.
Die Taktfrequenz muss mindestens 2 mal so hoch sein wie die
Ausgangsfrequenz. Der Abstand zwischen den beiden Frequenzen
Taktfrequenz und Taktfrequenz minus Ausgangsfrequenz( Aliasingfrequenz )
und die Wortbreite des Digitalen DA Signals bestimmt die erforderliche
Flankensteilheit des Tiefpasses. Je Bit Wortbreite hat das Signal einen
Dynamikumfang von etwa 6db. Das heist bei einen 10 Bit DA wandler müsste
das Tiefpassfilter bei dem Abstand zwischen höchster erzeugten
Analogfrequenz und Taktfrequenz eine Dämpfung von midestens 10bit * 6db
= 60db haben.
In unserem Beispiel mit 100KHz Taktfrequenz und höchster Audiofrequenz
müsste der Tiefpass bei 20KHz beginnen und bei 100KHz einen Abfall von
60db erzeugen, damit die Aliasingfrequenzen im analogen Signal sicher
unterdrückt werden. Bei einen 16Bit DA Wandler währen es 96db.
Pro Ordnungsstufe ( also pro Kondensator oder Spule im Tiefpass )
erzeugt der Tiefpass eine Flankensteilheit von 6db/ Oktave oder auch
20db/ Dekade.
Die realen Anforderungen an den Tiefpass kannst du dir jetzt selber
ausrechnen.
Ralph Berres
Mir ist ein Fehler unterlaufen.
Ich habe geschrieben
Ralph B. schrieb:> In unserem Beispiel mit 100KHz Taktfrequenz und höchster Audiofrequenz> müsste der Tiefpass bei 20KHz beginnen und bei 100KHz einen Abfall von> 60db erzeugen, damit die Aliasingfrequenzen im analogen Signal sicher> unterdrückt werden.
es müsste aber heißen
In unserem Beispiel mit 100KHz Taktfrequenz und höchster Audiofrequenz
> müsste der Tiefpass bei 20KHz beginnen und bei 80KHz einen Abfall von> 60db erzeugen, damit die Aliasingfrequenzen im analogen Signal sicher> unterdrückt werden.
Das untere Seitenband geht ja von 100KHz bis 80KHz. Damit Mischprodukte
unter der Schwelle bleibt, was der DA Wandler noch auflösen kann muss
der Pegel hinter dem Tiefpass schon bei 80KHz soweit abgesenkt sein,
damit es nicht zu Aliasing-Produkten kommt.
Ralph Berres
Ralph B. schrieb:> Wichtig zu wissen ist zunächst mal die Taktfrequenz, mit dem die> digitale Daten an den DA-Wandler gelegt werden, sowie die> Ausgangsfrequenz des analogen Signales, welchs der DA-Wandler erzeugen> soll.>> Je größer die Taktfrequenz gegenüber der Ausgangsfrequenz ist, desto> geringer sind die Anforderungen bezüglich Flankensteilheit und damit> Ordnungszahl an das Tiefpassfilter, welches hinter dem DA-Wandler sitzt.>> Wenn du den DA-Wandler z.B. mit 10us also 100KHz taktest, ist für ein> LFO, bzw ein Controllsignal wohl ein einfacher Tiefpass erster Ordnung> ausreichend.
Mir ist nicht klar, wie man diese Grundlagen auf den MCP4725 anwenden
will. Der Stein hat I2C, dem schicke ich einen Wert 0..4095 und der
Ausgang bleibt so lange stehen, bis ich einen anderen Wert sende.
Ich müsste also für einen Sinus der Frequenz entsprechend in Echtzeit
Daten zum MCP senden. Da kommt die Frage auf, wie schnell der µC und
I2C-Bus das überhaupt können.
Ich habe vor ganz vielen Jahren mal FSK-Signale mit Ringzähler und 1 aus
16 Decoder generiert, da musste ich ganz gewaltig filtern und einen
Kompromiß zwischen Signalgüte und unerwünschter Amplitudenmodulation
eingehen.
Wenn die Anwendung ein LFO bzw eine sonstige Kontrollspannung in einem
Synthesizer ist, dann wird die maximale Signalfrequenz eher im 100Hz
Bereich liegen. Ich würde in diesem Fall einfach den anschliessenden
Verstärker auf sagen wir Mal 500Hz bandbegrenzen, einfach, weil dann
eventuell vorhandene Störungen im höherfrequenten Bereich ausgefiltert
werden und jede noch so latente Schwingneigung des Verstärkes
unterdrückt wird.
Im einfachsten Fall schaltest du zum Rückkopplungswiderstand einen
Kondensator parallel. Der Wert kann dann so gewählt werden, dass sich
die Grenzfrequenz von 500Hz ergibt.
Manfred schrieb:> Mir ist nicht klar, wie man diese Grundlagen auf den MCP4725 anwenden> will. Der Stein hat I2C, dem schicke ich einen Wert 0..4095 und der> Ausgang bleibt so lange stehen, bis ich einen anderen Wert sende.
Dann wäre die Taktfrequenz zwangsläufig maximal 4095 mal der
Ausgangsfrequenz. Aber nur dann wenn jede Kurve die ausgegeben wird
wirklich immer aus 4095 Stützstellen besteht. bei sagen wir mal 40,95KHz
Taktrate der Daten, welche über den I²C-Bus gesendet werden wärem dann
maximal ein Sinus mit einer Frequenz von 10Hz möglich. 4,095KHz müssten
dann mit 10 Stützstellen auskommen.
Das Problem kennt man ja auch vom DDS-Synthesizer. Hier werden aber hohe
Frequenzen auch nur durch wenige Stützstellen beschrieben. Die
Stützstellen wandern aber dann in der Regel.
Andi M. schrieb:> Wenn die Anwendung ein LFO bzw eine sonstige Kontrollspannung in einem> Synthesizer ist, dann wird die maximale Signalfrequenz eher im 100Hz> Bereich liegen.
Lesen bildet
MeckerOhm schrieb:> Es geht um ein Modul in einem modularen Synthesizer. Das Signal kann> sowohl LFO, Audio oder ein (quasi-)diskretes Control Voltage sein.
Er schreibt unter anderem auch von Audiosignal. Das sind garantiert mehr
als 100Hz.
Wenn er keine Audiofrequenzen wandeln will dann hast du dann recht, wenn
die Aktualisierungsrate des DA Wandlers trotzdem um Zehnerpotenzen höher
bleibt als die LFO Frequenz.
Manfred schrieb:> Ich müsste also für einen Sinus der Frequenz entsprechend in Echtzeit> Daten zum MCP senden. Da kommt die Frage auf, wie schnell der µC und> I2C-Bus das überhaupt können.
Das wird nicht nur für den I2C bus schon schnell. Normal überträgt man
sowas besser mit einen parallelen Bus, und legt die Daten parallel an.
>> Ich habe vor ganz vielen Jahren mal FSK-Signale mit Ringzähler und 1 aus> 16 Decoder generiert, da musste ich ganz gewaltig filtern und einen> Kompromiß zwischen Signalgüte und unerwünschter Amplitudenmodulation> eingehen.
Das glaube ich.
Ralph Berres
Um vielleicht meinen Kontext noch mal etwas zurechtzurücken: ich möchte
mir ein Experimentiermodul bauen, das mir u.a. "Geräusche" generiert.
Das muss kein Hifi-Signal sein oder ein präziser Funktionsgenerator.
Einen sauberen Sinus würde ich ich sowieso eher versuchen, analog zu
erzeugen.
Der Fokus liegt auch eher im Bereich Kontrollspannung und LFO. Z.B.
möchte ich komplexere Hüllkurven haben, die mir in analog zu aufwendig
wären.
Nichtsdestotrotz wüsste ich schon gerne, wie ich's richtig machen würde,
speziell bei diesem I2C-Chip.
Ah, ok, das mit dem Audio hatte ich überlesen.
Für Audio wäre es wichtig, dass der Wandler mit konstanter Samplerate
betrieben wird, sonst ist das Ergebnis nicht wirklich brauchbar. Ein
optimales Rekonstruktiosfilter liegt dann wie oben schon beschrieben mit
der Grenzfrequenz knapp unter der halben Samplerate und hat entsprechend
steile Flanken. Nicht einfach also. Je schlapper die Flanken, je
niedriger die nutzbare Grenzfrequenz. Das kann man ggf durch eine höhere
samplerate ausgleichen. Der Wandler kann bis 3.4Mhz I2C clock. Bei 12
bit Auflösung wird das I2C Protokoll vermutlich 3 bytes oder 24 bit lang
sein. Macht also eine max Samplerate von ca 140khz. Ob ein ATmega das
schafft entzieht sich meiner Kenntnis. Aber sicherlich nicht per
bitbanging.
Wenn das ganze keine HighEnd Qualität haben soll, könnte man die ganze
Theorie erst Mal beiseite lassen und dem Bauchgefühl folgen. Z.b. könnte
man die Bandbreite per 1st oder 2nd Order Tiefpass auf ca 16kHz
begrenzen. Das schneidet alles ab, was man ohnehin nicht hört. Die
verbleibenden Störungen durch Aliasing gehören dann eben zum typischen
"Sound". Wenn's zu eklig klingt, kann man ggf die Grenzfrequenz noch
weiter absenken.