Forum: Mikrocontroller und Digitale Elektronik Tiefpass nach mcp4725 DAC sinnvoll?


von MeckerOhm (Gast)


Lesenswert?

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

von jo (Gast)


Lesenswert?

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.

von Manfred (Gast)


Lesenswert?

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.

von Wolfgang (Gast)


Lesenswert?

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

von ElektroFH (Gast)


Lesenswert?

Welche Appliaktion hast du?

Welche max Sinus-Frequenzen, Spannung usw möchtest du haben?

von MeckerOhm (Gast)


Lesenswert?

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.

von Ralph B. (rberres)


Lesenswert?

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

von MeckerOhm (Gast)


Lesenswert?

Schöne, ausführliche Erklärung. Vielen Dank!

von Ralph B. (rberres)


Lesenswert?

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

von Manfred (Gast)


Lesenswert?

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.

von Andi M. (andi6510) Benutzerseite


Lesenswert?

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.

von Ralph B. (rberres)


Lesenswert?

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

: Bearbeitet durch User
von MeckerOhm (Gast)


Lesenswert?

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.

von Andi M. (andi6510) Benutzerseite


Lesenswert?

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.

von Ralph B. (rberres)


Lesenswert?

Andi so würde ich das auch sehen.

Ralph

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.