Es geht um die Audioausgabe mit einem Mikrocontroller, billig und einfach. Ein (8 Bit) R2R-Netzwerk an einem Ausgangsport eines uC liefert mir eine wenig belastbare Spannung (ungefähr) im Bereich 0..5V. Die möchte ich nun impedanzwandeln und am Ausgang als Audio-Linelevel-Signal zur Verfügung stellen.(Statt dem R2R-Netz könnte ich auch z.B. einen AD7524 nehmen, das nachfolgende Problem bleibt das gleiche.) Mir kommt ein OP in den Sinn, als Spannungsfolger beschaltet, d.h. obige Spannung kommt auf den (+)-Eingang, und der Ausgang wird mit dem (-)-Eingang kurzgeschlossen. Nachdem die Stromversorgung aber nur 5V und 0V hergibt, wäre der OP in der Sättigung und hätte Verzerrungen. Für ein Audio-Line-Signal brauche ich aber (soweit ich das verstehe) ohnehin nur eine Wechselspannung von ca. 1V. Kann ich obige Ausgangsspannung des R2R-Netzes (0..5V) ganz einfach mit je einem weiteren R nach Vcc und Gnd verbinden und so auf (ca.) 2..3V umformen, damit der OP nicht in die Sättigung kommt? Am Ausgang des OP dann einzig ein Kondensator in Reihe, damit kein DC durch den nachgeschalteten Verstärker fließt? Das R2R-Netz braucht (zur Schonung der Lautsprecher) wohl auch noch einen Tiefpass, kommt der vor oder nach dem OP? Schonmal vielen Dank für Hinweise. Edit: bei http://www.avr-asm-tutorial.net/avr_de/avr_dac.html wird so etwas ähnliches gemacht; dort wird aber die Sättigung dadurch umgangen, dass der Digitalwert von [0..255] auf [0..127] beschnitten wird, also auf ein Bit der Dynamik verzichtet wird. Das kann nicht der elegantestmögliche Ansatz sein?
Schon an einen Spannungsteiler gedacht, mit dem der (+)Eingang auf Vcc/2 vorgespannt wird? Dann wird mittels Serienwiderstand und ungepoltem Koppel-Kondensator das R/2R-Signal eingekoppelt. Die Größe des Serienwiderstands relativ zum Spannungsteiler bestimmt die Begrenzung des Signals, um innerhalb der OV-verträglichen Spannungen zu bleiben.
Schon mal gehört, dass man an einem OP-Amp die Verstärkung in der invertierenden Schaltung auf 1/2 einstellen kann ? Also +-Eingang an 2,5 V legen, den -Eingang über 100k ansteuern und als Rückkopplungswiderstand 50k nehmen.
Travel Rec. schrieb: > Schon an einen Spannungsteiler gedacht, mit dem der (+)Eingang auf Vcc/2 > vorgespannt wird? Dann wird mittels Serienwiderstand und ungepoltem > Koppel-Kondensator das R/2R-Signal eingekoppelt. Die Größe des > Serienwiderstands relativ zum Spannungsteiler bestimmt die Begrenzung > des Signals, um innerhalb der OV-verträglichen Spannungen zu bleiben. Danke. Mir fehlt fürs Analoge ein bisschen die Erfahrung. Wie ermittle ich einen sinnvollen Wert für diesen Koppelkondensator? Es geht wie gesagt um Audiosignale. Mein erster Vorschlag ist im Prinzip auch dieser Spannungsteiler, aber direkt ohne Koppelkondensator. Was wäre daran falsch?
Also... 1) besser den nicht-invertierenden Spannungsfolger nutzen, da sonst das R2R Netzwerk belastet wird. Hängt aber von den verwendeten 2) wie wär's mit nem 5V single-supply rail-to-rail-input OP? 3) Grundlagen mit OPVs lernen! ;)
Peter R. schrieb: > Schon mal gehört, dass man an einem OP-Amp die Verstärkung in der > invertierenden Schaltung auf 1/2 einstellen kann ? > > Also +-Eingang an 2,5 V legen, den -Eingang über 100k ansteuern und als > Rückkopplungswiderstand 50k nehmen. Ah, das klingt nach einer sehr einfachen Lösung. Wenn ich es recht verstehe, kann man auf diese Weise jedes Intervall [a,b] von Eingangsspannungen auf jedes gewünschte Intervall [c,d] von Ausgangsspannungen bringen: Plus-Eingang auf Potential (c+d)/2 legen, Minus-Eingang über R ansteuern und Rückkopplung von Ausgang auf Minus-Eingang über (d-c)/(b-a) * R. Nebenbedingung ist, dass [c..d] innerhalb der Spezifikationen des Opamp liegt.
Lc E. schrieb: > 2) wie wär's mit nem 5V single-supply rail-to-rail-input OP? Das habe ich mich auch schon gefragt. Meine Recherchen (die sicher unvollständig sind) haben bisher ergeben, dass ein rail-to-rail OV in der Praxis nicht existiert oder aber gleich deutlich teurer ist. Weitere Überlegung war: am Ende brauche ich für das Line-Level-Audiosignal gar kein 0..5V, sondern etwas Kleieneres; somit erschien es mir widersinnig, einen aufwendigen OV zu verwenden und erst danach die Spannung zu teilen. (Kommentare zu diesen Überlegungen immer willkommen.) > 3) Grundlagen mit OPVs lernen! ;) Mit eurer Hilfe ...
Line-Level sind 1V Spitze-Spitze. Lass das ganze R2R Zeug weg, Gib das ganze per PWM raus, Tiefpass, Spannungsteiler und Koppel-Kondensator dahinter und fertig. Sollte belastbar genug sein und reicht für Audio allemal.
Matthias Becher schrieb: > Line-Level sind 1V Spitze-Spitze. Lass das ganze R2R Zeug weg, Gib das > ganze per PWM raus, Tiefpass, Spannungsteiler und Koppel-Kondensator > dahinter und fertig. Sollte belastbar genug sein und reicht für Audio > allemal. Pulsweitenmodulation macht ja nochmal ein ganz neues Fass auf. Wie ist denn die Audioqualität dabei? Mein Ziel ist die Synthese von musikalisch halbwegs brauchbaren Tönen mit Obertönen. Meine Überlegung: Wenn ich da 44kHz "Samplingfrequenz" hätte, bin ich mit 8bit auf dem PWM-Ausgabe-Pin schon bei 44k * 256 = 11.2MHz Auflösung, also 1 Takt bei einem Mikrocontroller. Realistisch erreichbar wären vermutlich nicht mehr als 4bit@44kHz, 5bit@22kHz, 6bit@11kHz usw. Dazu vermute ich (ist das richtig?), dass die Samplingfrequenz selbst auch noch irgendwie störend hörbar ist und mit einem Tiefpass gefiltert werden muss. Da bleibt dann nicht mehr viel übrig von den hohen Frequenzen?
Du brauchst erstmal 2 Timer im Controller, der idealerweise mit 16 MHz laufen sollte. Einen 8Bit Timer für die PWM. Der läuft mit den vollen 16 MHz -> /256 = eine 62 kHz PWM -> Sollte sich gut mit nem Tiefpass filtern lassen. Der 2. Timer muß nun deine PWM zur richtigen Zeit mit neuen Werten versorgen. Dieser bestimmt die Sampling-Rate. Ob dieser nun mit 44kHz, 22kHz oder sogar noch weniger läuft ist für deinen Tiefpass egal. Der Mensch der 20kHz noch hört ist schon nichtmehr ganz normal, also sollte es kein Problem sein die 62kHz mit nem einfachen RC Filter rauzubekommen.
PS: Der 2. Timer muß natürlich nicht mit 44 22 11 kHz laufen, sonder mit dieser Frequenz Interrupts auslösen. Wichtig ist außerdem, das deine PWM nicht langsamer ist als dein Sampling, da es sonst zu aliasing kommt.
Hallo Ulf, Ulf Rolf schrieb: [...] > Meine Überlegung: Wenn ich da 44kHz "Samplingfrequenz" hätte, bin ich 44kHz wäre CD-Qualität > mit 8bit auf dem PWM-Ausgabe-Pin schon bei 44k * 256 = 11.2MHz allerdings nie und nimmer mit 8Bit ;-) Sag doch mal was Du vorhast. Du willst doch dieses "Geräusch" nicht auf eine Stereoanlage geben, oder? > Auflösung, also 1 Takt bei einem Mikrocontroller. Realistisch > erreichbar wären vermutlich nicht mehr als 4bit@44kHz, 5bit@22kHz, > 6bit@11kHz usw. Dazu vermute ich (ist das richtig?), dass die > Samplingfrequenz selbst auch noch irgendwie störend hörbar ist und mit > einem Tiefpass gefiltert werden muss. Da bleibt dann nicht mehr viel > übrig von den hohen Frequenzen? Die Samplingfrequenz passt einfach nicht zu den acht Bit! Und weitere Frage, woher kommen die Digitaldaten, die Du ausgeben willst? Der nachgeschaltete Tiefpass muss idealerweise bei fsampling / 2 bereits komplett sperren. In Deinem Fall würde ich mal die max. Audiofrequenz auf 5kHz festlegen. Samplingfrequenz dann z.B. 20KHz und den Tiefpass bei knapp über 5KHz dimensionieren. Je höher die Ordnung des nachgeschalteten TP ist, desto näher können Samplingfrequenz und Audiofrequenz liegen. Die Samplingfrequenz muss aber immer größer als die doppelte Audiofrequenz sein. Aber ein paar wenige Artefakte durch nicht optimalen TP dürften bei 8Bit kaum zu hören sein ;-) ciao Marcus
Ulf Rolf schrieb: > Matthias Becher schrieb: >> Line-Level sind 1V Spitze-Spitze. Lass das ganze R2R Zeug weg, Gib das >> ganze per PWM raus, Tiefpass, Spannungsteiler und Koppel-Kondensator >> dahinter und fertig. Sollte belastbar genug sein und reicht für Audio >> allemal. > > Pulsweitenmodulation macht ja nochmal ein ganz neues Fass auf. Wie ist > denn die Audioqualität dabei? Mein Ziel ist die Synthese von musikalisch > halbwegs brauchbaren Tönen mit Obertönen. PWM ansich ist entgegen den oftmals gehörten Behauptungen voll Hifi-tauglich. Das Problem ist hierbei nämlich die Frequenzauflösung! Ein quasi-kontinuierlicher Takt im MHz-Bereich reicht völlig aus. Nun haben aber alle gängigen Prozessoren einen zeitdiskreten equidistanten Takt. > > Meine Überlegung: Wenn ich da 44kHz "Samplingfrequenz" hätte, bin ich > mit 8bit auf dem PWM-Ausgabe-Pin schon bei 44k * 256 = 11.2MHz > Auflösung, also 1 Takt bei einem Mikrocontroller. Realistisch > erreichbar wären vermutlich nicht mehr als 4bit@44kHz, 5bit@22kHz, > 6bit@11kHz usw. Dazu vermute ich (ist das richtig?), dass die > Samplingfrequenz selbst auch noch irgendwie störend hörbar ist und mit > einem Tiefpass gefiltert werden muss. Da bleibt dann nicht mehr viel > übrig von den hohen Frequenzen? Die Anforderungen für die Filterung sind nicht zu unterschätzen. Mal als Anhaltspunkt: Meine integrierte Soundkarte im PC liefert bei der maximalen Ausgabefrequenz 24kHz ein vierphasiges 96KHz Signal in der Art: 0, +1, 0, -1 Wie du siehst, ist da nicht mehr viel analog drin. Klingt aber meiner Meinung für MP3-Niveau völlig ausreichend. Warum nicht was fertiges nehmen? AKM oder Cirrus, TI irgendwas.
Marcus Woletz schrieb: >> Meine Überlegung: Wenn ich da 44kHz "Samplingfrequenz" hätte, bin ich > > 44kHz wäre CD-Qualität wenn auch noch 16 Bit Auflösung dabei wären. >> mit 8bit auf dem PWM-Ausgabe-Pin schon bei 44k * 256 = 11.2MHz > > allerdings nie und nimmer mit 8Bit ;-) Sag doch mal was Du vorhast. Du > willst doch dieses "Geräusch" nicht auf eine Stereoanlage geben, oder? Mich würde einfach mal interessieren, wie weit man mit einem solchen Mikrocontroller soundmäßig kommen kann, ohne gleich einen DSP zu verwenden. (Die Vermutung ist dabei, dass eine höhere Samplingfrequenz wichtiger wäre als eine hohe Bitauflösung.) > Die Samplingfrequenz passt einfach nicht zu den acht Bit! Gibt es einen notwendigen Zusammenhang zwischen Samplingfrequenz und Auflösung? > Und weitere > Frage, woher kommen die Digitaldaten, die Du ausgeben willst? Z.B. eine Wellenform aus Grundsinus und Oberschwingungen vorab im RAM berechnet, dann je nach gewünschter Frequenz mit Festkommaarithmetik aus der Tabelle ausgelesen und ausgegeben. Bei 40kHz Sampling und mit einer Tabelle von 1k Größe müsste man Töne bis herunter zu 40 Hz "sauber" ausgeben können? > Der nachgeschaltete Tiefpass muss idealerweise bei fsampling / 2 bereits > komplett sperren. In Deinem Fall würde ich mal die max. Audiofrequenz > auf 5kHz festlegen. Samplingfrequenz dann z.B. 20KHz und den Tiefpass > bei knapp über 5KHz dimensionieren. Je höher die Ordnung des > nachgeschalteten TP ist, desto näher können Samplingfrequenz und > Audiofrequenz liegen. Die Samplingfrequenz muss aber immer größer als > die doppelte Audiofrequenz sein. Aber ein paar wenige Artefakte durch > nicht optimalen TP dürften bei 8Bit kaum zu hören sein ;-) Die angegebenen Richtwerte sind auf jeden Fall schon mal hilfreich.
Abdul K. schrieb: > PWM ansich ist entgegen den oftmals gehörten Behauptungen voll > Hifi-tauglich. Das Problem ist hierbei nämlich die Frequenzauflösung! > Ein quasi-kontinuierlicher Takt im MHz-Bereich reicht völlig aus. > Nun haben aber alle gängigen Prozessoren einen zeitdiskreten > equidistanten Takt. Ich verstehe nicht ganz, was mit "quasi-kontinuierlicher" Takt gemeint ist. Geht es darum, dass man die An/Aus-Zeiten für jedes gewünschte Tastverhältnis immer so kurz wie möglich machen sollte? Das würde natürlich die schöne Timer-Idee (Timer läuft mit fester Frequenz, je nach gewünschtem Tastverhältnis wird der Anfang jedes Timerintervalls mehr oder weniger lang auf 1 ausgegeben) unmöglich machen und einen Mikrocontroller mit ~10 MHz Takt überfordern. > Warum nicht was fertiges nehmen? AKM oder Cirrus, TI irgendwas. Ich möchte durchs Basteln etwas lernen. Zum Musikhören steht schon ein CD-Spieler im Regal ...
Ein quasi-kontinuierlicher Takt wäre z.B. ein RC-Oszillator mit einem 74HC14-Inverter realisiert, bei dem R variabel ist.
Ulf Rolf schrieb: > Pulsweitenmodulation macht ja nochmal ein ganz neues Fass auf. Wie ist > denn die Audioqualität dabei? Mein Ziel ist die Synthese von musikalisch > halbwegs brauchbaren Tönen mit Obertönen. > > Meine Überlegung: Wenn ich da 44kHz "Samplingfrequenz" hätte, bin ich > mit 8bit auf dem PWM-Ausgabe-Pin schon bei 44k * 256 = 11.2MHz > Auflösung, also 1 Takt bei einem Mikrocontroller. Realistisch > erreichbar wären vermutlich nicht mehr als 4bit@44kHz, 5bit@22kHz, > 6bit@11kHz usw. Das ist Unfug, weil ich davon ausgegangen war, dass die PWM zu Fuß gemacht werden muss. Ich lese gerade im Datenblatt, dass (z.B.) der ATMEGA8 ja schon PWM (bis 10 Bit Auflösung) hardwaremäßig mit seinen Countern unterstützt. Der Programmier-Rechen-Aufwand beschränkt sich damit allein auf das Update des Samplingwertes, was ja relativ langsam passieren muss (z.B. bei 12MHz Takt: 8 Bit @ 47kHz oder 10 Bit @ 12kHz).
Man braucht übrigens nicht 2 Timer, wie oben behauptet. 1 Timer reicht, der macht das PWM in Hardware und beim Überlaufen löst er einen Interrupt aus, dessen ISR das OCRx-Register nachläd. Da das OCRx-Register doppelt gepuffert ist, wird der Wert beim nächsten Timer-Überlauf in die Hardware übernommen. Man hat also eine zur Samplerate vollsynchrone und 'jitterfreie' Ausgabe der Sounddaten. Trotzdem bleiben 8Bit nur 8Bit, und das hört man bei ruhigen Passagen immer.
Wenn man aber 44 oder 22 kHz Samplingrate in der richtigen Geschwindigkeit abspielen will, braucht man den 2. Oder man konvertiert halt die Sound-Datei auf diese krumme Samplingrate die mit einem verfügbaren Quartz machbar ist.
Matthias Becher schrieb: > Wenn man aber 44 oder 22 kHz Samplingrate in der richtigen > Geschwindigkeit abspielen will, braucht man den 2. Das ist leider keine Lösung. Wenn der PWM-Timer mit 65kHz läuft, der LadeTimer mit 44kHz, gibt es fiese Aliasing Effekte, weil manchmal das Sample sofort mit dem laufenden Timer-Zyklus übernommen wird und manchmal einen Timerzyklus warten muß, da die Timer ja asynchron laufen. Es wir also manchmal dasselbe Sample 2x wiedergegeben und manchmal halt nicht. Das beste ist es, die Taktfrequenz des Controllers auf genau 256x oder (übertaktet und 2fach Oversampling) auf 512x Samplerate zu bringen und wirklich nur einen Timer zu verwenden.
Travel Rec. schrieb: > Das ist leider keine Lösung. Wenn der PWM-Timer mit 65kHz läuft, der > LadeTimer mit 44kHz, gibt es fiese Aliasing Effekte, weil manchmal das > Sample sofort mit dem laufenden Timer-Zyklus übernommen wird und > manchmal einen Timerzyklus warten muß, da die Timer ja asynchron laufen. Danke für den Hinweis. In meinem (bisher nur im Kopf existierenden) Projekt spielt das keine so große Rolle, weil ich nicht vorgefertigte Samples einer festen Samplerate wiedergeben will, sondern so etwas wie Soundsynthese auf dem AVR machen möchte. Die Samplerate muss daher nicht zwingend 44.1kHz oder ein anderer Standardwert sein, sondern kann mehr oder weniger frei festgelegt werden, wie es sich aus dem Systemtakt und dem Timer-Teiler gerade passend ergibt.
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.