DIY: Quad-LFO mit regelbarer Phase

Heute möchte ich Euch meinen selbst entwickelten Quad-LFO vorstellen. Ich habe zuvor den LFO von Yusynth nachgebaut und war von der Qualität der erzeugten Kurvenformen, gerade bei niedrigen Frequenzen, enttäuscht. Ich habe mich dann eine Weile lang im Netz nach DIY-Anleitungen umgesehen und festgestellt, dass mir immer irgendein Feature fehlte. Warum nicht also eine Eigenentwicklung? Und warum nicht auch gleich ein digitaler Quad-LFO? Aber dann bitte auch mit regelbarer Phasenlage der einzelnen Kurven zueinander.

Hier also mein voll funktionstüchtiger Prototyp. Ein BCD-codierter Schalter mit acht Kurvenformen, vier Ausgängen und jeweils ein Poti für Frequenz, Phasenlage und Amplitude. Tief im Herzen tickt Arduino-Clone, in meinem Fall ein Teensy 3.1. Eine Art “Schaltplan” findet sich hier. (Mein Leben ist zu kurz, um noch Eagle zu lernen. Ich nehme es mir seit Urzeiten vor, aber irgendwas ist ja immer. Wenn Jemand interessiert ist und sich berufen fühlt, einen Schaltplan zu zeichnen und vielleicht sogar ein Platinen-Layout erstellen möchte – be welcome!) Der Sketch selbst benötigt lediglich die Standard SPI-Library. Der Sketch findet sich hier. Im Header sind auch die erzeugten Kurvenformen beschrieben.

Ich habe einen BCD-codierenden Drehschalter für die Umschaltung der einzelnen Kurvenformen verwendet. Er ist von Grayhill (26ADS45-01-1-AJS) und der kostet leider um die 30 Euro. Ich hatte das Glück, eine Handvoll davon für lau bei Ebay zu erstehen. Die Eingabe kann aber auch auf anderem Wege realisiert werden (normaler Drehschalter, Rotary Encoder, Analog, e.t.c…) – der Sketch ist dann entsprechend anzupassen. Die Schaltung selbst ist einfach aufzubauen. Es wird allerdings Erfahrung im Umgang mit der Arduino IDE und dem Einbinden von Libraries vorausgesetzt, um dem Controller seinen neuen Job zu erklären. Zusammen mit dem Teensy 3.1, einer Frontplatte, drei Potis, vier Bananenbuchsen leigt der Preis bei roundabout 70 Euro, kann aber durch Verzicht der BCD-Schalters um ca. 30 Euro reduziert werden. Es ist dann lediglich der PReis für einen z.B. 8fach Drehschalter hinzuzurechnen.

Zur Funktionsweise: Ein Loop liest Daten aus dem Array und schreibt sie über den SPI-Bus auf zwei 12Bit-DACs (MCP4922). Ich habe Versuche damit gemacht, die Kurven “Live” zu erzeugen, aber leider änderte sich beim Umschalten der Kurvenformen die Wiederholfrequenz. Es ist eben ein Unterschied, ob ich einen Rechteck erzeuge oder eine Sinuskurve, die aufgrund von trigonometrischen Berechnungen mehr Prozessorzyklen frisst. Also habe ich die Kurven vorher mittels eines perl-Scriptes vorberechnet und in einem Array abgelegt. Leider kam damit ein Standard-Arduino nicht mehr in Frage, da er zu wenig Speicherplatz besitzt, um diese Datenmenge zu verdauen. Der zweite Grund war die Geschwindigkeit. Ein Arduino Nano wird mit 16 MHz getaktet, ein Teensy 3.1 ist mit 72 Mhz angegeben, wird aber von Hause aus mit 96 MHz übertaktet. Mein Prototyp erreicht Frequenzen von 0,2 – 35 Hertz (gemessen mit meinem uralten Frequenzzähler …). Die obere Frequenz wäre mit einem normalen Arduino bei Weitem nicht zu erreichen gewesen.

Die regelbare Phasenlage der Kurven zueinander ist folgendermaßen realisiert: Ein Loop mit 360 Steps (analog zu einem Vollkreis in Schritten von 1°) setzt einen Zeiger auf das Array und schiebt die ausgelesenen Werte in die DACs. Jetzt ist das Array aber nicht 360 Werte groß, sondern 720. (Ich habe die Werte einfach zweimal hintereinander kopiert.) Damit kann ich den Zeiger maximal um eine volle Periode verschieben. Ingesamt lasse ich also vier Zeiger im Loop “kreisen” und kann jedem einen Versatz von maximal 90° mit auf den Weg geben. Ist das Poti für die Phasenlage auf Null, streunen alle vier Zeiger snychron durch das Array. Stelle ich eine Phasenlage von z.B. 90° ein, fängt der erste Zeiger beim ersten Wert im Array an, der Zweite beim 90sten, der Dritte beim 180sten und der Vierte schließlich beim 270sten Wert und zählen synchron hoch.

Genug Theorie. Hier ein paar Beispiele, wie es klingt. Im ersten Beispiel lasse ich vier harmonisch gestimmte VCOs über vier VCA laufen, der Quad-LFO steuert die Control-Eingänge mit einem Sägezahn. Die Phasenlage beginnt bei 0°, wird langsam auf Maximum gedreht und wieder zurück.

Im zweiten Beispiel steuert der Quad-LFO vier synchron laufende VCOs direkt über die 1V/Octave-Eingänge mit einem Ramp-Signal. Phase und Geschwindigkeit werden variiert.

Die Nachteile der digitalen Wandlung sollen auch nicht verschwiegen werden. Beim schnellen Variieren der Phase entstehen “Glitches”, weil der Zeiger im Array beliebige Werte annehmen kann und bei kleinster Modulationsgeschwindigkeit hört man die digital erzeugte “Treppe”. Sind eben nur 12 Bit Auflösung …

Ich denke bereits über weitere Features nach. Da die Erzeugung digital realisiert wird, wäre es denkbar, mittels eines Schalters die Kurven theoretisch an jedem beliebigen Punkt einfrieren zu können. Weiterhin werden alle Parameter über Potis eingespeist, die an den analogen Eingängen des Controllers hängen und je nach Drehwinkel eine Spannung von 0 – 5 Volt abliefern. Damit wiederum wäre es möglich, alle Parameter über externe Spannungen zu modulieren.

Hinterlasse einen Kommentar

Du kannst diese HTML tags benutzen

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>