Forum: Analoge Elektronik und Schaltungstechnik DAC mit PWM - Wie Analogsignal aufbereiten?


von Markus M. (adrock)


Lesenswert?

Hi,

ich habe einen Controller der mir Wave-Dateien von einer SD-Karte per 
8-Bit PWM ausgbit.

Das ganze läuft mit 3V Batteriespannung, deswegen kann ich den 
Lautsprecher nicht direkt ansteuern nach der einfachen Schaltung aus den 
Artikeln hier (mit zwei bipolaren Transistoren) - das Ausgangssignal 
bringt einfach nicht genug Leistung an einem 8 Ohm Lautsprecher.

Da ich zugegebenermaßen in Analogtechnik nicht so fit bin, habe ich mir 
einen LM4991 Verstärker an den Ausgang geschaltet (in der Schaltung aus 
der Appnote) - das Signal ist nun von der Leistung her deutlich besser.

Allerdings ist die Qualität recht mies - der Verstäreker verstärkt eben 
direkt die Rechtecksignale der PWM und gibt sie an den Lautsprecher.

Wie müsste ich den PWM-Ausgang vom Mikrocontroller an den 
Verstärkereingang des LM4991 koppeln, um bereits dort ein halbwegs 
vernünftiges Signal (im Test also ein Sinus statt Rechteckspannung) zu 
haben?

Die PWM-Frequenz ist 187,5KHz (48 MHz / 256).

Muss es eine aufwändige Schaltung mit OP wie hier 
(Beitrag "Audio PWM von uC richtig Filtern") sein oder könnte man das 
auch mit passiven Bauteilen aufbauen?

Bitte auch gerne Links, ich weiß nur nicht so recht wo ich am besten 
anfange, bzw. ob ein RC-Glied reicht oder ich eine Induktivität brauche 
(oder beides)?

Und nein, ich möchte nicht auf einen Controller mit DAC wechseln. Es ist 
der kleine STM32F030 im TSSOP 20 Gehäuse.

Danke & Gruß
Markus

von M. K. (sylaina)


Lesenswert?

Markus M. schrieb:
> Muss es eine aufwändige Schaltung mit OP wie hier
> (Beitrag "Audio PWM von uC richtig Filtern") sein oder könnte man das
> auch mit passiven Bauteilen aufbauen?

Also ich würde ne PWM für Audio immer nur aktiv Filtern und nie passiv.

von Nachtaktiver (Gast)


Lesenswert?

Die Dynamik deines Ausgangssignals also in diesen Fall die 
Audiobandbreite, bestimmt die benötigte Grenzfequenz.

Die Differenz zwischen der Grenzfreqeunz und der Freqeunz deiner PWM, 
kombiniert mit den Qualität des gewünschten Ausgangssignals ergibt die 
benötigte Ordnung bzw. Flankensteilheit des Filters.


Aufgrund fehlender Informationen ist der Rest eine Ratestunde.


Michael Köhler schrieb:
> Also ich würde ne PWM für Audio immer nur aktiv Filtern und nie passiv.

Warum das denn?

von Ulrich H. (lurchi)


Lesenswert?

Ein reiner RC filter dürfte etwas wenig sein. Ein LC Filter geht, 
braucht aber eine eher große Induktivität. Eine sehr hohe Qualität kann 
man mit 8 Bit PWM allerdings nicht erwarten, das Problem sind auch jetzt 
eher nicht die Hochfrequenten Reste, sondern die geringe Auflösung und 
damit geringe Dynamik. Wenn die Daten mehr als 8 Bit haben könnte man 
noch ein kleines bisschen bei der Aufbreitung gewinnen, indem man nicht 
jeden Wert für sich rundet, sondern ähnlich wie bei einem Sigma Delta 
Wandler arbeitet.

Je nach Verstärker kann der aber auch durch die HF Anteile gestört 
werden, dann bringt der Filter noch einiges.

von Markus M. (adrock)


Angehängte Dateien:

Lesenswert?

HI,

hier mal die Schaltung, die Stützkondensatoren zwischen VDD und VSS sind 
natürlich da, habe ich aber jetzt nicht eingezeichnet.

Das PWM-Signal kommt am µC an PB1 raus.

Was sollte ich ändern?

Meine Samplefrequenz beträgt 44,1 KHz (ich habe einfach soviel Platz auf 
der SD-Karte, da muss ich nicht downsamplen).

Die PWM-Frequenz beträgt wie gesagt 48 MHz / 256 = 187,5 KHz.

Da es sich um eine kleine Quäke handelt, müsste wohl die untere 
Grenzfrequenz nicht unter 100Hz liegen, die obere so dass es sich nicht 
gedämpft anhört, vlt. 14 KHz?

Grüße
Markus

: Bearbeitet durch User
von Ulrich H. (lurchi)


Lesenswert?

Die untere Grenzfrequenz ist unkritisch. 100 Hz sind ggf. schon relativ 
hoch. Die obere Grenzfrequenz darf auch niedriger liegen - über 14 kHz 
können viele gar nicht mehr hören. Auch über 10 kHz hat man selten noch 
was wesentliches.

Das Problem sind eher die 8 Bit - bei etwas Dynamik in der Lautstärke 
bleibt da nicht viel über und leise Teile gehen unter und sind verzerrt. 
Wie sich das auswirkt kann man auch am PC testen, indem man 
verschiedenen Dateiformate probiert.

Mit etwas mehr Bitbreite kann man deutlich mehr gewinnen als mit hoher 
Abtastrate. Also lieber 20 kHz und 12 Bit als 96 kHz und 8 Bit.

von Falk B. (falk)


Lesenswert?

@ Markus M. (adrock)

>Das PWM-Signal kommt am µC an PB1 raus.

>Was sollte ich ändern?

Schmeiss deinen "Verstärker" weg. Nimm einen 74HC04, so wie hier.

http://www.mikrocontroller.net/attachment/137530/Mini_Power_Ethernet_Xformer.png

IC1D musst du dir wegdenken. Dein PWM-Ausgang von Controller geht statt 
dessen dort dran, dein Lautsprecher kommt an die beiden Ausgänge, wo im 
Bild der Trafo dranhängt. Den Kondensator braucht man nicht.

Das ist ein Low Cost Gegentaktverstärker. Man kann auch einen 
MOSFET-Treiber ala ICL7667 nehmen, der hat wenige Ohm 
Ausgangswiderstand.

von Thomas R. (thomas-rudloff)


Lesenswert?

Hi,

ich verstehe nicht, warum man, wenn man schon eine PWM hat, noch analog 
heizen will.

Schau Dir mal die TAS51xx bzw TAS52xx oder TAS53xx von TI an. Die sind 
bei mir vorgesehen. Allerdings für höhere ansprüche. Falls die Dir zu 
viel "Wums" haben gibt es noch viele andere auch von anderen 
Herstellern.

Hinten dran hängst Du dann einen Cauer Filter mit passender Nullstelle.

Falls Du anständig Dynamic willst, solltest Du Dir mal die DSPICs von 
Microchip ansehen. Damit habe ich einen Proto laufen mit guter Qualität 
(und mehreren Phasen in der PWM) laufen. Mittels eines 74AUC1Gxx Gatters 
mache ich aus zwei Ausgängen eine "Centered PWM", da die Chips das nicht 
native in high resolution können.

von Markus M. (adrock)


Lesenswert?

@Falk:
OK, das mit dem 74HC04 werde ich ausprobieren. Ein 74HCT04 geht wohl 
nicht (den hätte ich da), da ich nur 3V Betriebsspannung habe?

@Ulrich:
Das Problem ist, wenn ich die Auflösung hochsetze, vermindert sich auch 
zwangsweise meine PWM-Frequenz. Der Timer kann max. mit 48 MHz getaktet 
werden, bei 10 Bit wären es dann nur noch 46 KHz PWM-Frequenz.

Kann ich die 16 Bit Samples einfach 6 Bits nach rechts shiften zur 
Umrechnung auf 10 Bit?

von Falk B. (falk)


Lesenswert?

@ Markus M. (adrock)

>OK, das mit dem 74HC04 werde ich ausprobieren.

Oder was ähnliches, 74HC14 geht auch.

> Ein 74HCT04 geht wohl
>nicht

Nein, der braucht 5V.

>zwangsweise meine PWM-Frequenz. Der Timer kann max. mit 48 MHz getaktet
>werden, bei 10 Bit wären es dann nur noch 46 KHz PWM-Frequenz.

Reicht für normale Qualität noch aus.

>Kann ich die 16 Bit Samples einfach 6 Bits nach rechts shiften zur
>Umrechnung auf 10 Bit?

Ja.

von Thomas R. (thomas-rudloff)


Lesenswert?

Falk Brunner schrieb:
> @ Markus M. (adrock)

>>Kann ich die 16 Bit Samples einfach 6 Bits nach rechts shiften zur
>>Umrechnung auf 10 Bit?
>
> Ja.

Siehe Dir das mal an:

http://www.dutchaudioclassics.nl/Philips-TDA1540-16bit-da-conversion/

Dabei wird der Fehler rausgedithert. Du mußt auch auf den Offset achten, 
der durch das Abschneiden entsteht und ggf runden!

von Ulrich H. (lurchi)


Lesenswert?

Mit mehr Auflösung geht die PWM Frequenz runter, aber bei der Frequenz 
ist ja noch einiges an Spielraum. Wenn die Audiofrequenzen über 10 kHz 
weg sind, merkt das normal keiner. Man kann die unteren Bits auch durch 
Dithering darstellen. Die PWM Frequenz bleibt dann weiter hoch, und nur 
das letzte Bit wird ggf. im langsameren Takt verändert. Man hat also 
einen kleinen Anteil bei z.B. 40 kHz, aber nur sehr wenig Amplitude.

von M. K. (sylaina)


Lesenswert?

Nachtaktiver schrieb:
> Michael Köhler schrieb:
>> Also ich würde ne PWM für Audio immer nur aktiv Filtern und nie passiv.
>
> Warum das denn?

Na weil man eine Audio-Signal ja auch hören will und da käme bei mir 
gleich ein passender OPV zum Einsatz der den gewünschten Lautsprecher 
auch treiben kann.

von Thomas R. (thomas-rudloff)


Angehängte Dateien:

Lesenswert?

Hier mein Vorschlag:

Einen zweiten Timer verwenden um ein inverses Signal mit gleicher PWM 
Phase zu erzeugen. Bringt 6dB Dämpfung des Trägers. Als Treiber einen 
doppelten Low-Side Gate-Treiber wie z.B. einen LM5111.

Filter habe ich mal schnell zusammengehackt. Am Ende ist eine 
Frequenzweische mit einem Snubberwiderstand. Der verhindert, daß die 
Höhen zu stark ansteigen wenn der Ausgang zu wenig belastet wird.

Ich hänge mal das LTSPICE File an. Zum Simulieren des Frequenzgangs 
einfach den Filter an die Voltage Source hängen.

von Markus M. (adrock)


Lesenswert?

Danke für die Antworten.

Ich hatte den Vorschlag von Falk (74HC04 als Treiber) ausprobiert, 
leider reicht die Leistung nicht aus, selbst wenn ich jeweils 4 74HC04 
Ausgänge parallel schalte. Ist einfach zu leise.

Da ich den LM4991 nun schonmal da habe, habe ich zwischen den 
PWM-Ausgang des Controllers und den Eingang des LM4991 einen LC Tiefpass 
gehängt.

Das Ergebnis ist nicht perfekt, aber im Vergleich ohne Tiefpass sehr 
gut. Es ist eh nur eine Art Spielzeug, mittlere Qualität reicht also 
aus.

von Thomas R. (thomas-rudloff)


Lesenswert?

Das sind natürlich Argumente. Von meiner mehr als zehnjährigen Erfahrung 
würde ich Dir aber doch raten noch einen zweiten Timer dazu zunehmen. 
Sofern der noch da ist und Deine Rechenleistung reicht. Falls ich den 
LM4991 richtig verstanden habe (habe nur kurz überflogen) kann man den 
auch voll symetrisch betreiben. Damit bist Du schonmal 6dB los. Dadurch, 
daß sich dann die Samplingrate quasi verdoppelt werden es nocmal 12dB 
bei einem Filter zweiter Ordnung. Schaue mal nach Multiple Feedback bzw. 
dem TI Filterdesigner. Wenn Du den alten bekommen kannst, bist Du besser 
dran. Falls ich den noch als Setup finde und Du es nicht weiter 
verrätst, kann ich Dir den auch gern per PM zumailen.

PS: Dann hast Du noch ein Bit mehr, da Du die Pulsbreite unterschiedlich 
setzen kannst.

: Bearbeitet durch User
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.