Klangerzeugung

Wechseln zu: Navigation, Suche

Für die Klangerzeugung mit Microcontrollern gibt es eine Reihe unterschiedlicher Ansätze und Umsetzungen. Die jeweils optimale Methode hängt von der Art des zu erzeugenden Geräusches, der zur Verfügung stehenden Hardware, dem akzeptierten Aufwand an Software und dem gewünschten Ergebnis ab. Im einfachsten Fall erzeugt ein externer Klangerzeuger (z.B. ein Piezo-Element an einer Messingmembran) durch simples Ein- und Ausschalten Warn- oder Piepsgeräusche, wie es z.B. im PC üblich ist. Mit entsprechendem Aufwand sind aber auch Musik- und Sprachwiedergabe über Lautsprecher ist möglich.

Automatische Erzeugung von Tonfrequenzen

Es stehen eine Reihe von Chips zur Verfügung, die selbständig Klänge erzeugen können und u.U: nur eine minimale Ansteuerung oder einen Trigger benötigen.

Voltage controlled Oscillator (VCO)

  • XR8038 oder MAX038
  • XR2206

Spezielle Klang-ICs

Für spezielle Klänge werden komplexe Klangerzeuger-ICs angeboten z.B. :

Der klassische Gong-IC SAE800 -> Conrad, Reichelt, Bausatz bei ELV

Des Weiteren:

Mit Voice-Recorder lassen sich kurze Audiosequenzen über ein Mikrofon aufnehmen und auf Befehl abspielen.

  • ISD25xx z. B. ISD2560 -> Reichelt
  • ISD17xx z. B. ISD1730 -> ?
  • ISD14xx z. B. ISD1416 -> Conrad
  • Beispiel aus Roboternetz.de

DTMF, Telefontönen

  • MT 8880 -> Conrad
  • MT 8870 -> Conrad
  • CM 8870

Der Klassiker aus dem C64

  • MOS 6581/SID 6581 C64-Soundchip -> eBay
  • SID-Emulator mit AVR
  • [1] Beitrag hier im Forum, SID an AVR

Für diesen SID gibt es eine Reihe unterschiedlicher Implementierungen in FPGAs.

Für OEM-Kunden gibt es u.a. von Yamaha einige Chips zum Verbau in elektronischen Klangerzeugern, welche mit DSPs angesteuert werden können. Vereinzelt sind OPL- und FM-Chips im Markt verfügbar.

Manuelle Erzeugung von Tonfrequenzen

Im allgemeinen Fall, wenn ganz bestimmte Wellenformen wiedergegeben werden sollen, kann mit dem Microcontroller eine zuvor in einem RAM gespeicherte Wertefolge ausgegeben und mit einem externen Wandler in ein analoges Signal verwandelt werden. Die Wertefolge entspricht dabei direkt der Amplitude. Konkretes Beispiel für eine solche direkte digitale Klangerzeugung ist das DDS-Verfahren. Auf der Basis dieses Verfahrens existieren auch fertige Chips, die präzise Sinussignale generieren, sowie solche, die ganze Tonmelodien abspielen können.

Im Einzelfall können die Werte auch wie bei der synthetischen Klangerzeugung generisch erzeugt werden.

Sollen die Klänge im Prozessor erzeugt werden, so können entweder komplette Samples über einen Datenbus an einen AD-Wandler gesendet, oder eine 1-Bit Tonerzeugung mit nur einem digitalen PIN verwendet werden, der allerdings einen externen Filter benötigt, um vernünftig zu arbeiten.

Tonerzeugung

Sinustabelle

Man kann z.B. im Flash eine Sinustabelle ablegen, die je nach gewünschter Frequenz schneller oder langsamer abgetastet wird und so einen quasi analogen Momentanwert als Vorgabe zur Bildung einer PWM ermöglicht. Damit und zusätzlich einem Tiefpass hat man Sinustöne variabler Frequenzen, die sehr schön rund klingen können, sofern die Abtastung fein genug und die Bildung der PWM schnell genug erfolgt. Mit etwas Rechenaufwand kann man noch Lautstärke-Hüllkurven draufmodulieren (AM) und somit glockenähnliche Sounds erzeugen.

Dreiecksgenerator

Durch die Interferenz zweier 1-Bit-Rechtecksignale mit geringfügig unterschiedlicher Frequenz und multiplikativer Mischung mit XOR entsteht eine PWM, die nach Glättung am Ausgang ein Dreieck erzeugt. Beispiel: https://www.mikrocontroller.net/topic/434877#5144809

Sinusoszillator

Mit Hilfe eines rückgekoppelten IIR-Filters, kann ein selbstschwingender Oszillator programmiert werden. Die einfachste Version ergibt sich z.b. durch den Konstrukt: Wert4 = 0,9* Wert3 + (Wert3-Wert2)*1,4 - (Wert2-Wert1)/2 - ausgehend von den Initialwerten -1, 0 und 1. Die Periode liegt etwa bei 1/10 der Aktualisierungsfrequenz und ist damit für sehr langsame MCUs geeignet. Durch Variation der Werte lassen sich auch gedämpfte Schwingungen erzeugen. Beispiel: https://www.mikrocontroller.net/topic/324429#3778743

Direkte Wellenerzeugung

Ein einfacher Tongenerator lässt sich erzeugen, indem ein Integer-Wert periodisch um einen Inkrementalwert erhöht- und die höchsten Bits zur Tonausgabe genutzt werden. Je höher der Inkrementalwert, desto höher die Tonfrequenz. Dabei nimmt man in digitalen Schaltungen wie PLDs z.B. einen 32 Bit-Wert und inkrementiert mit einer Frequenz von z.B. 100MHz und interpretiert die höchsten 12 Bits, wobei das höchste Bit die negative Halbwelle anzeigt. Dies ergibt eine positive und negative Parabel im Bereich -4095 ... 4095. Diese ist sehr sparsam zu erzeugen und musikalisch gehaltvoller, als ein Sinus.

Für einen 8-Bit Microcontroller ließe sich folgende Version verwenden: Akkumulator = (Akkumulator + Inkrement) Modulo 65536, Step = Ganzzahl(Akkumulator/256), Halbwelle = Step x (255 - Step), Inkrement = 128 - Ganzzahl (Halbwelle / 256).

Tonausgabe

Die analoge Ausgangsspannung für den Verstärker und später den Lautsprecher bzw ein elektronikfreies Piezoelement kann außerhalb des Mikrocontrollers auf verschiedene Weise erzeugt werden:

Digital-Analog-Wandler

Mit einem DAC kann eine hochgenaue Ausgabe realisiert werden.

R2R-Netzwerk

Mit einem R2R-Netzwerk kann ein einfacher Wandler realisiert werden. Siehe Widerstandsnetzwerk, R2R-Netzwerk Samplerate direkt in der Ausgabe

Nach dem R2R folgt in der Regel ein OPV. Mit einem Kondensator in der Signalleitung kann dabei ein eventuell vorhandener Gleichspannungsanteil (DC-Offset) reduziert werden.

PWM

Die PWM eignet sich zur Ausgabe von Tönen über einen digitalen Pin. Für einigermaßen hochwertiges Audio wird eine schnell laufende PWM benötigt, d.h. der Controller wird schnell getaktet - z.B. mit 256facher Samplerate. Wenn Piezo zum Einsatz kommt, dann sollte mit 50% Duty-Cycle gearbeitet werden. Die Toggle-Frequenz entspricht der halben Tonhöhe (zwei mal Umschalten pro Periode).

Hardware

Piezo-Element

Piezo-Elemente sind einfach anzusteuern und als Buzzer/Summer von Reichelt, Conrad... erhältlich.

Es gibt hier zwei Typen:

  • Mit integrierter Elektronik; braucht nur mit Gleichspannung versorgt zu werden.
  • Ohne Elektronik; braucht eine Wechselspannung.

Die Piezo-Elemente haben eine Eigenresonanzfrequenz um 1,5 kHz ("Fiep"), und sind damit am lautesten. Fertige Module sind oft mit Resonanzkörper ausgestattet (Helmholtz-Resonator).

Piezo Elemente ohne integrierte Elektronik können direkt an die Pins eines AVR oder PIC angeschlossen werden. Um die Lautstärke zu erhöhen, kann man zwei Pins benutzen, die immer abwechselnd auf LOW bzw. HIGH gesetzt werden. Dadurch ergibt sich eine Wechselspannung um V_cc. (Prinzip der H-Brücke)

Bei selbsterregenden Elementen (die aus einer Gleichspannung ihre Frequenz selbst erzeugen) sollte man auf die Daten achten. Im Allgemeinen brauchen kleine Module aber auch nur einige mA.

Lautsprecher

Meistens liefert eine Direktbeschaltung der Ausgangsstufe an einem Mikrocontroller nicht genügend Leistung. Um Lautsprecher an einem µC betreiben zu können, bedarf es daher oft eines Verstärkers, da die Portpins des µC i.d.R. nur wenige mA Strom vertragen (Datenblatt!). Bereits eine einfache Treiberstufe kann aber Abhilfe schaffen:

Pwm-wandler.svg

Die 20Ω Widerstand/ 4,7 µF Kondensator Kombination als Tiefpass reduziert die hohen Frequenzen des PWM-Signals im Audiosignal. Noch besser ist eine zusätzliche Drossel im Ausgangszweig. Durch Verringern des Ausgangswiderstandes kann noch etwas mehr Leistung herausgeholt werden. Wichtig ist das Verständnis, dass bei dieser Schaltung das digitale Signal verstärkt wird, um es erst nach der Verstärkung zu filtern, was sich dazu eignet, Strom und damit Leistung zu sparen. Für geringe Leistungen ist es allerdings besser, die Filterung vor den Verstärker zu setzen und diesen im AB-Modus zu fahren, um zu einer besseren Qualität zu gelangen.

Klanggestaltung

Ein weit unterschätzter Punkt ist die Gestaltung des Klanges im Bezug auf seinen Informationsgehalt. Viele Töne in Geräten drücken nicht das aus, was sie eigentlich ausdrücken sollten. Warntöne z.B. sollten deutlich wahrnehmbar sein, Meldungen und Bestätigungen dagegen eher beruhigend und keinesfalls aggressiv. Statische und gleichbleibend laute Töne sind zu vermeiden. Wirksame Töne, die dennoch nicht erschrecken, erzeugt man z.B. mit einer ansteigenden Lautstärke. Gut wahrnehmbar sind Töne mit grosser Bandbreite, die also aus mehreren Einzeltönen auf unterschiedlichen Oktaven bestehen. Weiche Töne wiederum erzeugt man mit einem nicht zu komplexen Gong-Ton, mit limitierter Anstiegszeit von minimal 20ms und einer Ausklingzeit von wenigstens 1s.

Es ist auch wichtig zu verstehen, daß bei realen Klängen die Amplituden, Frequenz und Phase in einem natürlichen Zusammenhang stehen und sich gleichmäßig ändern müssen, um nicht langweilig und steril zu klingen. Diese Effekte sind nur bei richtig nachgebildten Oszillatoren korrekt und z.B. mit starrem Vibrato oder Tremolo nur unzureichend nachzubilden. Ein natürlicher Klang ist daher kein mathematischer Sinus sondern eine sich permanent ändernde Welle mit Offset, Phasenänderung und Amplitudenänderung, die sich aufgrund des durch äußere Einflüsse gestörten Oszillators einstellt.

Unnötige Töne bei elektrischen Geräten sind gänzlich zu vermeiden, weil sie zu einer Abstumpfung im Gehör führen und wichtige Töne dann nicht mehr wahrgenommen werden.

Artikel

Weblinks

(TODO: Sichten und den verschiedenen Methoden zuordnen)