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.

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.

Automatische Erzeugung von Tonfrequenzen[Bearbeiten]

Voltage controlled Oscillator (VCO)[Bearbeiten]

  • XR8038 oder MAX038
  • XR2206

Spezielle Klang-ICs[Bearbeiten]

Für spezielle Klänge werden ICs angeboten z.B.

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

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, Telefongetute

  • 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

Manuelle Erzeugung von Tonfrequenzen[Bearbeiten]

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[Bearbeiten]

Sinustabelle[Bearbeiten]

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.

Sinusoszillators[Bearbeiten]

Mit Hilfe eines IIR-Filters, kann ein einfacher, selbstschwingender Oszillator programmiert werden.

Direkte Wellenerzeugung[Bearbeiten]

Ein einfacher Tongenerator lässt sich erzeugen, indem ein Integerwert periodisch um einen Inkrementalwert erhöht und die höchsten Bits zur Tonerzeugung genutzt werden. Je höher der Inkrementalwert, desto höher die Tonfrequenz. Dabei nimmt man z.B. einen 32 Bit-Wert und inkrementiert mit einer Frequenz von z.B. 100kHz und interpretiert die 8 höchsten Bits, wobei das höchste Bit die negative Halbwelle definiert:

Zwischenwert = (Bits (30..24)) x not (Bits (30..24)) If highbit = 1 then Wert = else Wert = - (Zwischenwert + 63)

Dies ergibt eine positive und negative Parabel im Bereich -4095 ... 4095. Diese ist sehr sparsam zu erzeugen und musikalisch gehaltvoller, als ein Sinus.

Tonausgabe[Bearbeiten]

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[Bearbeiten]

Mit einem DAC kann eine hochgenaue Ausgabe realisiert werden.

R2R-Netzwerk[Bearbeiten]

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[Bearbeiten]

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).

Meistens liefert eine Direktbeschaltung der Ausgangsstufe an einem Mikrocontroller nicht genügend Leistung. Bereits eine einfache Treiberstufe kann Abhilfe schaffen.

Pwm-wandler.svg

Die 20Ω Widerstand/ 4,7 µF Kondensator Kombination als Tiefpass entfernt die hohen Frequenzen des PWM-Signals aus dem Audiosignal. Durch Verringern des Ausgangswiderstandes kann noch etwas mehr Leistung herausgeholt werden. Noch besser ist eine Drossel im Ausgangszweig.

Siehe auch Pulsdichtemodulation

Hardware[Bearbeiten]

Piezo-Element[Bearbeiten]

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[Bearbeiten]

Um Lautsprecher an einem µC betreiben zu können, bedarf es in den meisten Fällen eines Verstärkers, da die Portpins des µC i.d.R. nur wenige mA Strom vertragen (Datenblatt!).

Klanggestaltung[Bearbeiten]

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.

Artikel[Bearbeiten]


Weblinks[Bearbeiten]

(TODO: Sichten und den verschiedenen Methoden zuordnen)