Hallo zusammen, hier wurde öfters schon mal die Frage diskutiert wie man mit dem uC digitalen Sound ausgeben kann. Die einfachste Möglichkeit scheint das Integrieren über einen RC Tiefpassfilter zu sein. Die eleganteste Methode ist das Verändern eines PWM Counter-Registers mit den WAV-Samplewerten. Hierdurch wird die Spannung über dem Kondensator geändert. Egal wie es gemacht wird, das Ergebnis ist ein entsprechend geladener Kondensator am Ausgangspin. uC Pin-> o-----RRRR----+----o Analoges Audiosignal-> | CCC | === Mein Problem ist nun wie ich den ausgegebenen WAV-Wert nun auf einen Lautsprecher gebe. Brauche ich einen Koppel-Kondensator um den Gleichstromanteil zu eliminieren ? Reicht bei einem 5V uC ein Transimpedanzverstärker, um das Signal dann auf einen Lautsprecher oder Piezo zu geben ? Ich will keine High-End Lösung sondern etwas was einigermaßen funktioniert. Danke für jeden Hinweis, Jürgen
Im Prinzip könntest du auch einfach einen NPN-Transistor direkt mit dem Portpin ansteuern, der wiederum einen Lautsprecher ansteuert. Der Lautsprecher ist dann der Tiefpass.
Oder ein kleiner NF-Verstärker IC dahinter. Kommt halt immer drauf an, was für Leistung, Stromverbrauch, Qualtität und Aufwand du willst.
Mein Problem ist, dass der Spannungsbereich durch die 5V uC Versorgung schon ziemlich groß ist, was jeden normalen NF Verstärker wohl überfährt. Ich werde mal die Billig-Transistor Methode direkt an Lautsprecher probieren. Vermutlich kommen da aber die Oberwellen der PWM Frequenz mit durch (=Pfeifen). Danke auch für den Atmel-Link, das ist natürlich schon eine umfassende Lösung :-) Gruß, Jürgen
Du könntest auch ein Poti hinter den Kondensator hängen (womit sich zwar der Ausgangswiderstand deiner Schaltung ändert) und damit dann die abgegebene Spannung reduzieren. Ein nachgeschalteter Verstärker sollten dann noch ein gewisses Tiefpass-Verhalten besitzen (Grenzfrequenz bei 16kHz...).
Ich hänge meist einen HC245 an der PWM Port, und schalte alle Gatter parallel. Das reicht um einen Lautsprecher mit >16Ohm anzusteuern. Der Sound ist zwar nicht HiFi, aber besser als man erwarten würde. Und der Wirkungsgrad und somit die erzielbare Lautstärke ist größer als bei einem Linearverstärker.
@jürgen um das pfeifen zu vermeiden kann man auch die pwm-frequenz um ein vielfaches (nach möglichkeit durch 2 teilbar) erhöhen. du gibst dann nur jedes x.te mal ein neues sample aus (sprich : beschreibst dein pwm-register). dadurch verringerst du den ripple auf dem tiefpassgefilterten signal, und die qualität wird besser (vor allem bei leisen audio-signalen) gruß rene
@TheMason Das mit dem PWM vervielfachen glaube ich nicht. Dass man mit der höchstmöglichen PWM-Frequenz des uC arbeitet ist eh klar, aber darüber hinaus :-/ Ich habe auch einen Vorschlag: Um den Ripple zu reduzieren, kann man synchron zur PWM den nachgeschalteten Tiefpass 1. Ordnung samplen und bis zum nächsten Samplen "holden", also synchron abtasten. In erster Näherung ist damit der Ripple komplett elime..., elimi..., entfernt. Ich bin nur unsicher, ob das Verfahren Verzerrungen hervorruft.
Der angegebene ATMEl Link (http://www.atmel.com/dyn/resources/prod_documents/doc1456.pdf) Enthält zwar eine wunderbare Schaltung, die jedoch nicht in der Lage ist einen Kopfhörer geschweige denn einen Lautsprecher zu treiben. Offenbar hat das noch nie jemand probiert... Eine Info an Atmel wird dazu noch raus gehen. Ich werde nun eine Lösung mit einem TDA7052 anstreben, das ist ein 1 Watt NF Verstärker der als externe Beschaltung nur noch 2 Kondensatoren benötigt, keine negative Versorgung und einen ziemlich freundlichen Spannungsbereich besitzt. Gruß, Jürgen
@christian habe deinen beitrag gerade erst gelesen. ich bin mir aber ziemlich sicher das es funktioniert. wenn du mit einem vielfachen der PWM-Frequenz arbeitest eleminierst (das wars :-))) die du störgeräusche (vor allem die grundfrequenz der PWM, bei einem tiefpass 1. ordnung immer noch zum teil durchkommt) dadurch das du diese in ein frequenz-spektrum verschiebst das deutlich über der frequenz des tiefpasses liegt. den ripple verminderst du dadurch das der tiefpass mit seiner r-c zeitkonstante ja quasi nicht "mitkommt" mit der pwm (will heißen die zeit zwischen laden/entladen ist um ein vielfaches kürzer, dadurch wird der ripple nicht so groß weil der kondensator eben seine zeit braucht). ich habs selbst schon getestet. ich hab das auf einem fpga implementiert. dort hatte ich einen systemtakt von 50MHz für eine 8Bit PWM. Bei 4fachem Wiederholen hatte ich eine effektive Samplerate von 48kHz. und der ripple war deutlich geringer als wenn ich nur mit einfacher samplerate gearbeitet habe (und dann nicht 8 bit sondern 10bit). gruß rene
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.