Forum: Analoge Elektronik und Schaltungstechnik Audio PWM von uC richtig Filtern


von Frank M. (frank_m35)


Angehängte Dateien:

Lesenswert?

Hallo,

ich sage gleich von Anfang: Ich habe wenig Ahnung von analogen 
Schaltungen/Filtern. Ich habe zwar versucht hier und da die nötigen 
Informationen zu finden, nur leider komme ich nicht weiter, daher wende 
ich mich nun an euch.

Ich spiele mit einem uC (PIC24F) mittels PWM eine 8-bit 22050Hz 
WAV-Datei, die ich von einer SD-Karte lade. (nach dem Buch 'Learning to 
Fly the PIC24F')

Hardwareseitig geht das PWM Signal vom PIC-uC Pin auf ein Sallen-Key 
Tiefpassfilter 2.Ordnung, von dort aus auf einen Audio-Booster an den 
dann ein kleiner Lautsprecher angeschlossen ist. (siehe Anhang für die 
Schaltung)
Das ganze funktioniert.

Das Problem dabei:
Ich habe ein kleines Hintergrundrauschen während der Wiedergabe welches 
ich gerne beseitigen möchte.

Als Stromversorgung dient einerseits ein Buck Converter (LTC3619 @ 
2.25MHz) der 5V auf die 3.3V Betriebsspannung wandelt.  Ich kann 
umschalten auf einen Boost Converter (LTC3539 @ 1MHz).
Bei beiden ist das Rauschen identisch, ich höre keinen Unterschied.

Bei anderen Schaltungen die ähnliches gemacht haben (von Microchip ein 
Starterkit zur Sprachausgabe) haben sie anstatt des MCP601 OpAmp den 
MCP617 verwendet, der anscheinend ein geringeres Rauschen aufweisen soll 
im unteren Frequenzspektrum (so zumindest meine Erkenntnis aus dem 
Datenblatt).
1. Frage: Welche Kriterien muss ein OpAmp am besten besser Erfüllen bei 
so einem Filter? Kommt es mehr auf 'Input Noise Voltage Density' oder 
auf 'Input Offset Voltage' mehr an? Mein verwendeter ist eher 
ungeeignet, denke ich/dachte ich, da das GBW extrem hoch liegt und dafür 
die anderen zwei Werte schlechter liegen.

Ich habe den Filter aufgebaut (da er im anderen Gehäuse ist, habe ich 
die Schaltung extra aufgebaut), jedoch ohne Besserung. Stattdessen ist 
er 'wählerischer'. Ich habe unterschiedliche Sampleraten bei den 
WAV-Files probiert, wodruch die PWM Frequenz variiert wird. Alle werden 
ohne Störung außer dem Rauschen mit dem MCP601 abgespielt. Dass es bei 
16kHz piepst ist, denke ich ist nachvollziehbar. Beim MCP617 hingegen 
knackst es bei 16kHz; 22kHz und 44kHz funktionieren sauber. Ebenso hat 
es auch wann anders hin und wieder geknackst, nur weiß ich nicht mehr 
genau die Parameter.
2. Frage: Warum? ;-)

Um das Filter zu dimensionieren habe ich dieses Tool verwendet:
http://sim.okawa-denshi.jp/en/OPseikiLowkeisan.htm
Das Problem ist nun, dass ich nicht so genau weiß auf was ich achten 
muss. In meinem 2nd Order-Filter ist der Q-Faktor 0.5 und der 
Dämpfungswert 1. Die Cut-Off Frequenz liegt bei 8.8kHz.
Wenn ich es mit dem Entwicklungsboard von Microchip vergleiche, so 
verwenden die einen 4th Order mit ganz anderen Parametern.
Einmal Q=0.5, Damping=0.96, f=4kHz
Und das zweite: Q=0.7 und Damping = 0.7, f=4kHz.
Dass die Frequenz nur bei 4kHz liegt daran, dass nur Sprache ausgegeben 
werden soll. Also der Umstand ist mir ersichtlich.
3. Frage: Welche Kombination von Q und Damping ist empfehlenswert?
Ich habe zwar schon einiges darüber gelesen, aber nur eben eine 
Beschreibung der Eigenschaft gefunden, nicht, welche Kombi Sinn- / 
Unsinn macht, d.h. ich bin kein bisschen schlauer geworden.

Test: das Lied/Sprache wird abgespielt, das PWM Signal aber nicht an den 
OpAmp angeschlossen:
Der Audio Booster ohne angeschlossenem Eingang rauscht nicht.
Wird der OpAmp angeschlossen höre ich ein Rauschen (weiß aber nicht ob 
es das ist, das ich während der Wiedergabe raus höre). Wird GND entfernt 
ist das Rauschen immer noch da. Wird stattdessen VCC entfernt ist das 
Rauschen weg.
Wird kein Lied abgespielt, PWM Leitung weiterhin nicht angeschlossen, Op 
an Audio Booster angeschlossen, höre ich ganz leicht ein Rauschen, 
sobald das PWM Modul im PIC startet wird das Rauschen deutlicher.

Alles habe ich nur durch Hören getestet, kein Oszilloskop.

Ich bin um jeden Vorschlag/Hilfe sehr dankbar, da ich im Moment nichts 
weiter weiß.

von Georg A. (georga)


Lesenswert?

Du machst dir bei einer 8Bit-PWM echt noch Sorgen um das Rauschen? 
Google mal "Quantisierungsrauschen" ;)

Wenn bei Ruhe auch Ruhe sein soll, ist die Voltage Density 
(nV/Wurzel-Herz) relevant. Der MCP601 ist mit seinen 29 da schon ein 
ziemlicher Wasserfall und damit AFAIR schlechter als der ua741. Die 
uuralten TL071/2/4 (die nur nicht für Low Voltage taugen) haben schon 
18, MC33078 (auch nicht LV-tauglich) ist bei 4 rum.

von Frank M. (frank_m35)


Lesenswert?

Vielen Dank schon einmal für deine Einschätzungen bzgl. des OpAmp.
Wenn Ruhe ist, schalte ich den Verstärker aus, somit hat sich das 
Problem erledigt.
Macht sich die Voltage-Density nicht auch bei Betrieb bemerkbar, oder 
meintest du eher, dass Rauschen durch die 8-Bit das übertönen würde? :-)

Mit der Audioqualität von 8-Bit bin ich eigentlich sehr zufrieden. Zwar 
entsteht bei der Umwandlung von 16-Bit auf 8-Bit mit bspw. Audacity 
schon ein Grundrauschen, da es am PC aber deutlich weniger rauscht, 
dachte ich, ich könnte meine Schaltung noch weiter optimieren, bspw. mit 
besserer Wahl der Filterparameter, ...

von Frank K. (fchk)


Lesenswert?

Frank M. schrieb:

> Ich spiele mit einem uC (PIC24F) mittels PWM eine 8-bit 22050Hz
> WAV-Datei, die ich von einer SD-Karte lade. (nach dem Buch 'Learning to
> Fly the PIC24F')

Hat das einen Grund, warum Du einen PIC24 und keinen dsPIC33 nimmst. Da 
gibts nämlich Typen, die gleich 14 Bit Stereo Audio out eingebaut haben.
Schau Dir den dsPIC33F128GP802 (28 Pin) bzw GP804 (44 Pin) oder die 
MC802/MC804 an.

Da hast Du die Probleme nicht - der spielt auch 48kHz 16 Bit stereo 
problemlos ab.

fchk

von Frank K. (fchk)


Lesenswert?


von Frank M. (frank_m35)


Lesenswert?

Frank K. schrieb:
> Hat das einen Grund, warum Du einen PIC24 und keinen dsPIC33 nimmst. Da
> gibts nämlich Typen, die gleich 14 Bit Stereo Audio out eingebaut haben.
> Schau Dir den dsPIC33F128GP802 (28 Pin) bzw GP804 (44 Pin) oder die
> MC802/MC804 an.
>
> Da hast Du die Probleme nicht - der spielt auch 48kHz 16 Bit stereo
> problemlos ab.
>
> fchk

Sicherheit/Einfachheit.
Ich kam von 8-Bit PICs mit Basic. Um sicher mit 16bit PICs in C umgehen 
zu können und es zu erlernen kam erst einmal kein dsPIC in Frage. Das 
oben erwähnte Buch diente mir auch als Einstieg. Hinzu kommt, dass im 
Microchip Forum hin und wieder nicht immer positiv über den dsPIC 
geredet wurde, zumindest ist das bei mir hängen geblieben.
Und naja, eigentlich reicht der 24F auch aus. Ich brauche keine 
HiFi-Audioausgabe, ich habe auch nur Mono, es soll für Sprache und kurze 
vordefinierte Lieder sein.
Er ist eingebunden in einem größeren Projekt, das USB, OLED, ... 
aufweist, dadurch muss auch ein größeres Modell mit genug I/O Pins 
benutzt werden.
Hinzu kommt, dass alles auch mit Supercaps als Akku betrieben wird, 
wodurch der uC nicht allzu Stromfressend sein darf. Der dsPIC hat 
deutlich mehr Leistung, ob bei gleicher Leistung gleich viel verbraucht 
weiß ich nicht.
Aber bevor ich mich in dsPICs einarbeiten wollte, die dann auch wieder 
'nur' 16-Bit sind, wäre mein nächster Schritt, falls ich mehr Leistung 
und bessere Qualität brauche auf 32-Bit, vermutlich ARM sofern Microchip 
nichts besseres raus bringt, zu wechseln, was aber in ferner Zukunft 
liegt.
Kurz und knapp: Ich hatte keine Lust mich in dsPICs und deren Eigenarten 
einzuarbeiten und wollte lieber mit dem 'Allerwelts' Modell arbeiten, 
für das ich deutlich mehr Einsätze mir Vorstellen kann und weniger Zeit 
investieren muss.


Ich habe einmal einen passiven Tiefpass (30Hz) vor den Op Amp gesetzt, 
das Rauschen bei nicht angeschlossener PWM Leitung, aber Abspielen des 
Lieds, ist dadurch fast verschwunden. Einen Einfluss auf das Rauschen 
bei angeschlossener PWM Leitung hatte es aber nicht :-(
Vermutlich hat Georg A. schon das richtige Stichwort mit 
Quantisierungsrauschen angesprochen gehabt.
Bei 16-Bit WAV Files betrachtet in Audacity sieht man kaum ein 
Grundschrauen, umgewandelt auf 8-Bit und wieder mit Audacity betrachtet 
sieht man das Rauschen schon deutlicher, als Balken eben, da die 
Auflösung nur noch 8-Bit ist. Vielleicht kann ich also einfach die 
Audio-Files noch etwas optimieren. Hörbar ist es auch eher nur bei 
Sprache.

von Jonas K. (jonas_k)


Lesenswert?

Georg A. schrieb:
> Du machst dir bei einer 8Bit-PWM echt noch Sorgen um das Rauschen?
> Google mal "Quantisierungsrauschen" ;)

ich kenn mich jetzt bei audio (und wie genau des sein muss, damit mans 
nicht hört) nicht so aus, aber quantisierungsrauschen kriegt man doch 
mit nem rekonstruktionstiefpass weg, oder?
der muss halt die frequenz, mit der sich die PWM-Taktung ändert, 
rausfiltern....

von Frank K. (fchk)


Lesenswert?

Frank M. schrieb:

> Aber bevor ich mich in dsPICs einarbeiten wollte, die dann auch wieder
> 'nur' 16-Bit sind, wäre mein nächster Schritt, falls ich mehr Leistung
> und bessere Qualität brauche auf 32-Bit, vermutlich ARM sofern Microchip
> nichts besseres raus bringt, zu wechseln, was aber in ferner Zukunft
> liegt.

Unsinn.

Der Unterschied zwischen PIC24 und dsPIC sind einige zusätzliche Befehle 
für die DSP-Erweiterung. Mehr nicht. Punkt. Wenn Du PIC24 kennt, kennst 
Du dsPIC auch. Die Einarbeitung ist so ziemlich gleich 0, der Compiler 
ist ohnehin der gleiche. Die Unterschiede innerhalb der PIC24-Familie 
(z.B. zwischen einem PIC24F16KL401 und einem PIC24EP32MC203) sind 
wesentlich größer als die zwischen den korrespondierenden PIC24 und 
dsPIC-Familien (PIC24E-dsPIC33E, PIC24F/H-dsPIC33F,...)

fchk

von Georg A. (georga)


Lesenswert?

> aber quantisierungsrauschen kriegt man doch mit nem
> rekonstruktionstiefpass weg, oder?

Wenn das so einfach wäre, würde doch jeder nur noch Wandler mit 4Bit-PWM 
machen und nicht dieses hochkomplizierte Delta-Sigma-Zeug ;)

von jonas (Gast)


Lesenswert?

Ich würde mal vermuten, es muss halt ein möglichst steiler Tiefpass 
sein....

Natürlich kommt man mit weniger Auflösung nur zu schlechterer 
Tonqualität, das ist klar. Aber ich denke das könnte man trotzdem mit 
dem Tiefpass höherer Ordnung verbessern

von Frank M. (frank_m35)


Lesenswert?

Ich habe mal nach Rekonstruktionstiefpass gesucht, jedoch kaum etwas 
dazu gefunden. Bei manchen Quellen wird auch ein Tiefpass bspw. bei 
Rechtecksignalen so genannt, da eben die unerwünschten Oberschwingungen 
rausgefiltert werden und somit das Singal rekonstruiert wird.

Das mit einem Tiefpass höherer Ordnung kann ich mal nächstes Wochenende 
ausprobieren, nur da stellt sich mir eben die Frage, wie den Q-Faktor 
und Dämpfungsparameter bei den Sallen-Key Filtern wählen? Nach welchen 
Kriterien geht man dort vor?

von Frank K. (fchk)


Lesenswert?

Mal konkret: Welchen PIC24 benutzt Du denn genau?

fchk

von Frank M. (frank_m35)


Lesenswert?

Frank K. schrieb:
> Mal konkret: Welchen PIC24 benutzt Du denn genau?
>
> fchk

Den PIC24FJ256GB108-I/PT

von Sam P. (Gast)


Lesenswert?

Was 8 Bit angeht: ich empfehle dir µ-law oder a-law-Kodierung, das ist 
nicht lineares sondern (grob) logarithmisches PCM. Damit hast du 
wesentlich bessere Tonqualität bei vergleichbarem Aufwand. Du brauchst 
natürlich PWM mit höherer Auflösung (12 Bit ist ne gute Hausnummer) und 
eine Lookup-Tabelle für log->linear, aber ansonsten war's das. Hat sich 
jahrzehntelang im Telefonnetz bewährt (z.B. ISDN).

von Frank K. (fchk)


Lesenswert?

Frank M. schrieb:
> Frank K. schrieb:
>> Mal konkret: Welchen PIC24 benutzt Du denn genau?
>>
>> fchk
>
> Den PIC24FJ256GB108-I/PT

Aha. Also ziemliches Low-End, was PWM angeht - die MC (Motor Control) 
dsPICs können das deutlich besser.

Aber Du hast Framed SPI, und damit kannst Du einen Codec per I2S oder 
TDM ansteuern. Frame Sync ist in diesem Fall !SS. Da gibts dann z.B. für 
Handys kleine Class D Audioverstärker mit digitalem Eingang, z.B. Analog 
Devices SSM2529 oder MAX98355A/B. Das sind zwar ziemliche Mikroteile, 
aber mit gelförmiger Lötpaste und Heißluft solltest Du die auf Deine 
Platine bekommen. Da kannst Du dann direkt ein kleines Lautsprecherchen 
ansteuern.

Manche dsPICs haben zu diesem Zweck noch ein extra DCI Digital Codec 
Interface. Aber jetzt weißt Du ja hoffentlich, das aus Programmiersicht 
PIC24 und dsPIC nahezu identisch sind, wenn Du die DSP-Intrinsics und 
die beiden 56 Bit Akkus nicht benutzt.

fchk

von Frank M. (frank_m35)


Lesenswert?

Frank K. schrieb:
> Aha. Also ziemliches Low-End, was PWM angeht - die MC (Motor Control)
> dsPICs können das deutlich besser.
>
> Aber Du hast Framed SPI, und damit kannst Du einen Codec per I2S oder
> TDM ansteuern. Frame Sync ist in diesem Fall !SS. Da gibts dann z.B. für
> Handys kleine Class D Audioverstärker mit digitalem Eingang, z.B. Analog
> Devices SSM2529 oder MAX98355A/B. Das sind zwar ziemliche Mikroteile,
> aber mit gelförmiger Lötpaste und Heißluft solltest Du die auf Deine
> Platine bekommen. Da kannst Du dann direkt ein kleines Lautsprecherchen
> ansteuern.
>
> Manche dsPICs haben zu diesem Zweck noch ein extra DCI Digital Codec
> Interface. Aber jetzt weißt Du ja hoffentlich, das aus Programmiersicht
> PIC24 und dsPIC nahezu identisch sind, wenn Du die DSP-Intrinsics und
> die beiden 56 Bit Akkus nicht benutzt.
>
> fchk

Vielen Dank. Das wäre natürlich die beste Lösung die optimalen Klang 
erzeugen würde, wodurch ich die ganzen Probleme mit Filter etc. nicht 
mehr hätte. Da gebe ich dir vollkommen recht.

Nachdem ich mir die dsPICs gerade nochmal genauer angeschaut habe kann 
ich dir auch ganz genau den Grund nennen der damals gegen sie sprach: Zu 
der Zeit, vor zwei Jahren, als ich mich mit den PIC24F angefangen habe 
zu beschäftigen, gab es keine dsPICs mit USB und die die es gab auch nur 
mit weiteren Einschränkungen. Erst die dsPIC33E-Reihe die wohl Mitte 
2011 oder noch später raus kam hatte das was ich brüchte, was ich aber 
nicht mitbekam, da ich auch nicht ständig auf der Jagd nach neuen 
Modellen bin ;-)

Da aber momentan mit dem PIC24FJ alles funktioniert wie ich es gerne 
hätte, die Leistung gut ausreicht und die Schaltung so weit fertig ist, 
und ich eben ein bisschen Rauschen bei der Sprachausgabe bemerkte, 
dachte ich, dass ich das durch ein geeigneteres Filter, was leicht 
realisierbar gewesen wäre optimieren hätte können.

Zeitlich bin ich momentan durch meine Abschlussprüfungen im 
Physikstudium auch extrem begrenzt, wodurch ich bei diesem Projekt, das 
ich in meiner reinen Freizeit realisiere, momentan nicht allzu viel 
weitere Zeit investieren kann. Zwar hast du mich überzeugt, dass ein 
Wechsel zu den dsPICs programmiertechnisch ohne Probleme von statten 
gehen sollte, für die Hardware, aufgrund eines anderen Packages, und 
kompletter Überarbeitung des Audioteils, braucht es aber eine komplett 
neue Schaltung, die Verdrahtung muss ggf. angepasst werden und meist 
übersieht man dann hier und dort ein paar spezielle Eigenarten, sodass 
es erst beim zweiten Anlauf perfekt wird.

Ich bin dir wirklich dankbar für deine Tips, aber ich würde es gerne, 
momentan, bei dem momentane Aufbau belassen und versuchen das beste 
damit rauszuholen.

Im Nachhinein ist man immer schlauer, hätte ich das gewusst, was du mir 
gerade geschildert hast und hätte ich den dsPIC33E vor zwei Jahren 
gesehen und hätte ich vor zwei Jahren den Wissensstand von heute gehabt, 
hätte ich den dsPIC gewählt.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Im Audiobereich werden gerne 5-polige Butterworth-Filter benutzt. 
Scheint das Optimum bezüglich Aufwand vs. Leistung zu sein. An deiner 
Stelle würde ich einfach mal bei den DAC-Herstellern kopieren gehen.
Eine auch annähernd komplette psychoakustische Theorie ist mir nicht 
bekannt. Simulieren könnte man das, wenn man das Ohr spezifieren könnte. 
Die meisten werden das einfach durch Hörvergleichtests optimieren.

Das obige wäre dann aber schon Oberklasse für richtige DACs. Vermutlich 
kommst du mit 2-polig als Sallen-Key bereits aus. Die Filterparameter 
für solch einfach Sachen finden sich an vielen Stellen im Netz.

von Ralph P. (r_p)


Lesenswert?

Ich habe jetzt schon mehrere WAV Player und Rekorder auf MicroChip und 
Atmel Basis entwickelt und in Projekten implementiert. Das Hauptproblem 
ist immer, dass die Schaltungen die man im Internet findet zwar von 
Leuten mit Mikroprozessor Knowhow entwickelt wurden, diese aber keine 
Experten für Audio sind. Und so verwundert es nicht, dass die meisten 
Projekte die auch hier im Forum immer wieder zum Besten gegeben werden 
einfach unterirdisch schlechte Ausgabe/Eingabe haben.

Ich weigere mich eigentlich langfristige Projekte mit Chips zu 
entwickelt die Morgen schon nicht mehr erhältlich sind. Das ist 
vergebliche Liebesmüh. Es reicht doch ein normaler AVR Tiny oder PIC16 
für knapp 2 Euro völlig aus um klare Sprach- und Musikein-/ausgabe ohne 
Rauschen zu generieren sofern man die richtige Schaltung für den 
Verstärker bzw. Mikrofon-Eingang in bekannter und praxiserprobter 
Analog-Schaltung ohne IC's ausführt. Bequemer sind AMP natürlich, aber 
qualitätsmässig auch deutlich Schlechter.

Und so summieren sich die Kosten auf nicht mal 10 Euro um einen 
tauglichen Player/Rekorder in CD-Qualität herzustellen, benutzt man 
einen kleineren Quartz dann reicht es allemal für Telefonqualität - 
manchmal sogar Pflicht wenn es um Projekte geht die Störstrahlung so gar 
nicht brauchen können ;-)

Microchip bringt dieses Jahr noch einen neuen 8-Bit Chip, der über 28KB 
Programmspeicher und 1KB Ram verfügt (und der über 28 i/O im DIP Format 
verfügt, 32MHz Takt intern/20 Mhz Takt extern). Das dürfte dann 
ausreichen um gepuffert FAT lesen UND schreiben zu können und so 
nebenbei passt ein FAT Filesystem auch zum Schreiben auf die CPU. Und 
wem die Qualität der Samples nicht ausreicht der kann ja einen externen 
PWM mit 12-16 Bit nehmen, ist allemal besser als sein Design unnötig 
durch grössere CPU's aufblähen zu müssen. Klar könnte ich einen 
Raspberry PI nehmen oder ein Atmega/PIC24 aber der Chip allein ist schon 
grösser als die Platine für eine völlig ausreichende Lösung. Und wer MP3 
nicht braucht (weil auch Qualitativ schlechter als WAV) hat sowieso mehr 
Möglichkeiten.

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.