Segmentwave Synthesizer VCS 2

VCS 2 Studie

Eigenschaften

  • 2 x VCO’s mit Dreieck, Sägezahn, Puls, Segmentwaves und 6-Stage Polarity Waveshapes
  • 2 x 12 dB Multimode-Filter mit Notch-Struktur und „Asymetrischem Bandpass“
  • 1 x 14 Stage Kammfilter
  • 3 x VC ADSR Hüllkurven-Generatoren mit „Free Function Select“ und „Time Segment Control“
  • 3 x VC Niederfrequenz-Oszillatoren mit Sinus, Dreieck, Sägezahn, Puls, Stages und Synchronisation
  • 3 x VCA’s
  • 1 x Ringmodulator

Einige Fotos unserer Versuchsleiterplatten:

VCO mit 6 Stage Polarity Waveshaping2 x VCF und 2 x VCA3 x ADSR (nur einer bestückt)Mini-Panel mit 12 Bit Pot ADC

6 Stage Polarity Waveshaping

Die Pulswelle ist besonders gut zur Erzeugung von Obertönen geeignet. Deshalb wurde eine Schaltung entwickelt, die es ermöglicht, sechs Pulsbreiten innerhalb einer Periode zu erzeugen. Diese Pulsbreiten, Stages genannt, werden aus der Analyse von Extremwerten und Wendepunkten gewonnen. Jede Stage (Pulsbreite) bietet die einstellbaren Parameter WIDTH, LEVEL und POLARITY, mit denen die Basisform der Welle (Wave) gebildet wird. Benachbarte Stages können sich summieren. Der eigentliche Clou dabei ist, dass Stages getrennt durch ein Hoch– oder Tiefpass gefiltert werden können. Mit den zwei zusätzlichen Parametern CUTOFF und FILTERMODE wird die Gestaltung der Wave beendet. Dabei wird aber nicht etwa einer der Filter (VCF) geopfert, vielmehr verfügt jeder Oszillator (VCO) über ein integriertes Filter, welches nur für die Bearbeitung der Polarity-Waveshapes verwendet wird. Da alle Parameter durch den Prozessor steuerbar sind, können Wavetables angelegt, durchfahren oder gemorpht werden. Grade letzeres ist interessant, da durch die Definition einer Start– und End-Wave ein kompletter Wavetable errechnet werden kann. 6-Stage Animation Die Animation berücksichtigt weder das Filtern der Stages (grün) und der resultierenden Welle (rot), noch zeigt sie Summierungen. Trägt aber zum näheren Verständnis der Synthese bei. Desweiteren verfügt jeder Oszillator (VCO) über die internen Wellenformen Dreieck, Pulse (in Classic und Polarity) und Sägezahn, die zusätzlich über eine Sub-Oktave verfügen. Demnach kann jeder Oszillator zwei Oktaven gleichzeitig erzeugen. Die Sub-Oktave wird ohne Verfälschung aus der Basis-Oktave gewonnen (keine Frequenzteilung). Außerdem können die Oszillatoren (VCO’s) synchronisiert und frequenzmoduliert (sowohl exponentiell als auch linear) werden, welches auch für Segmentwaves und PolarityWaveshapes gilt.


Nach oben 

Multimode Filter (VCF)

Von diesem Filter (VCF) existieren gleich zwei pro Stimme (Voice), welche parallel oder seriell betrieben werden können. Es handelt sich dabei um 12 dB Filter, die über die Betriebsarten Tiefpass, Hochpass, Bandpass, Notch und dem „Asymmetrical Bandpass“ verfügen. Die Parameter Kennfrequenz (Cutoff), Emphasis (Resonanz) und Notch-Struktur sind spannunssteuerbar. Als Notch-Struktur bezeichnen wir das stufenlose Überblenden von Tief- und Hochpass. Da diese Filter über den selben temperaturkompensierten Expoential-Konverter wie die Oszillatoren (VCO) verfügen, besteht die Möglichkeit, sie völlig oktavrein als Sinus-Oszillatoren zu verwenden.


Nach oben 

14 Stage Comb Filter

Dieser Kammfilter verfügt über 14 Stufen und kann beliebig (Stage 1 bis 14) abgegriffen werden. Da selbst die Rückkopplungs-Stufe frei wählbar ist, kann über sanfte Phasingeffekte bis zu „röhrenden“ Sounds alles produziert werden. Selbstverständlich ist auch hier alles spannungssteuerbar.


Nach oben 

Envelope Generator (EG)

Der Hüllkurven-Generator besitzt zwei Eigenschaften, die völlig neuartig sind – wir nennen sie Free Function Select (FFS) und Time Segment Control (TSC). Viele Leute schwärmen z.B. vom Minimoog und sprechen in erster Linie von seinen Oszillatoren, Filter und den schnellen Hüllkurven, erkennen aber nicht, daß die Charakteristik einer Hüllkurve eine immense Bedeutung hat. Wären im Minimoog rein lineare Hüllkurven, so würden viele seiner Sounds nur noch langweilig klingen. Deshalb entwickelten wir einen ADSR-Generator, der neben einer hohen Geschwindigkeit freie lineare, exponentielle und logarithmische Funktionen besitzt, die getrennt für Attack, Decay und Release einstellbar sind und überblendet werden können. Dabei handelt es sich aber nicht um „echte“, sondern um angenäherte Funktionen, was in einem Hüllkurven-Generator kein Nachteil ist. Free-Function-Animation Die Animation Free Function Select verdeutlicht (grob) die Einstellmöglichkeiten.   Als Time Segment Control bezeichnen wir die zweite Eigenschaft. Sie ermöglicht, dass die Hüllkurve in jeder ihrer Phasen (Attack, Decay, Sustain-Level und Release) ein Gate erzeugt, welches dazu verwendet wird, prozessorgenerierte oder von anderen Baugruppen erzeugte Steuerspannungen freizuschalten. Dafür stehen 32 Quellen zur Verfügung, von der eine mittels Multiplexer auf 32 Ziele geroutet werden kann. Ein Beispiel: Während der Attack-Phase wird VCF-1-Cutoff von LFO-1-Dreieck in einer beliebigen Intensität moduliert. Die nachfolgende Decayphase deaktiviert diese Verbindung und verändert die Tonhöhe von VCO-1 mit einer DC/DA-Steuerspannung. In der Sustain-Phase könnte man dann z.B. die Notch-Struktur so verändern, dass VCF-1 und/oder VCF-2 von Tief- zu Hochpass überblenden. Danach wäre es möglich, in der Release-Phase VCO-1 durch VCO-2 zu modulieren. Diese Steuerspannungen sind unabhängig von der erzeugten ADSR-CV, quasi eine Sub-Hüllkurve mit einem Router, die synchron zur eigentlichen Hüllkurve erzeugt wird. Da die Hüllkurve retriggerbar ist, kann jede Phase z.B. Hüllkurven resetten oder starten.


Nach oben 

Niederfrequenz-Oszillatoren (LFO)

Im VCS 2 werden pro Stimme (Voice) drei analoge LFO’s verwendet, die spannungssteuer- und synchronisierbar sind. Sie erzeugen Sinus, Dreieck, ansteigenden und abfallenden Sägezahn, Polarity-Pulse und Stages. Polarity-Pulse entspricht derselben Wellenform des VCO’s und sagt aus, dass getrennte Pulsbreiten für den negativen und positiven Bereich einer Periode definiert werden können. Stages sind Treppenwellen, bei denen die Stufenanzahl ohne Geschwindigkeits- und Pegeländerung einstellbar ist. Darüber hinaus kann jeder Wellenform ein Offset zugewiesen werden, so das sie entweder im positiven, negativen Bereich oder null-symmetrisch arbeitet.


Nach oben 

Prozessorsteuerung

Da jedes Voice-Board weit über 128 Steuerspannungen erfordert, kommt für eine 8-stimmige Tonerzeugung eine reine Prozessorsteuerung nicht mehr in Frage, weshalb wir eine autonome Refresh-Matrix entwarfen. Deshalb besitzt jedes Voice-Board einen eigenen 12 Bit D/A-Wandler, der seine Daten aus einem vom Prozessor unabhängigen RAM bezieht, der zyklisch von einem Zähler (Counter) ausgelesen wird. Trotzdem kann (und muss) der Z80 zu einem beliebigen Zeitpunkt Daten in diesen RAM schreiben können. Ansonsten funktioniert alles in alter Tradition mittels Multiplexern (4051) und Spannungsfolgern mit Haltekondensatoren. Dieses Prinzip ermöglicht, daß der Prozessor nicht ständig mit dem Auffrischen der Steuerspannungen beschäftigt ist, sondern einen aktuellen Wert nur ein einziges Mal in den RAM schreibt. Einige werden jetzt denken, dass 12 Bit Auflösung nicht ausreichend sind. Allerdings verfügt der VCS 2, im Gegensatz zu anderen Synthesizern, für einige Parameter über mehrere CV-IN, die summiert werden. So werden z. B. für die Tonhöhe eines VCO’s drei Eingangswerte (Inputs) verwendet (Keyboard, Regler, Prozessor). Da die Refresh-Matrix sowieso notwendig ist, da z. B. die Polarity-Waveshapes allein 18, durch CV’s gesteuerte, Parameter benötigen (von den Segmentwaves gar nicht zu sprechen), konnten wir die Prozessorsummierung und vor allen Dingen die Verwendung von teueren 16 Bit DAC’s vermeiden. Außerdem kommt ein 10 Bit A/D-Wandler (vorher 12 Bit) zum Einsatz, der dafür sorgt, dass ein Regler mit 1024 Schritten gerastert wird und damit keine hörbaren Sprünge beim Drehen auftreten. Die Reglerabfrage geschieht übrigens auch autonom in „High-Speed“, so das der Z80 nur bei dem Anliegen eines neuen Wertes benachrichtigt wird und nicht mehr ständig den alten mit einem eventuell neuen Wert vergleichen muss. Eine weitere Änderung besteht darin, dass nun zwei Z80 Prozessoren verwendet werden, wobei der Hauptprozessor in erster Linie für die Berechnung der DC/DA-Algorithmen / MIDI / Keyboard-Modes / Sound-Verwaltung verwendet wird, während der zweite für alle Panel-Elemente (Regler, Taster und hauptsächlich Display) verantwortlich ist.


Nach oben 

Polyphonic Modular Matrix

Für die Flexibilität eines Synthesizers ist ja nicht nur die Anzahl der Baugruppen, sondern auch deren Verbindungsmöglichkeiten ausschlaggebend. Polyphonic Modular Matrix Deshalb verzichteten wir auf jegliche starre Verbindungen und überlegten, wie man aus dem VCS 2 ohne großen Hardwareaufwand einen Modulsynthesizer machen könnte, dessen Verbindungen durch den Prozessor aktiviert werden können. Die herkömmliche Methode mit 4066-Switches (Schalt IC’s) kam nur begrenzt in Frage, da für jede Verbindung ein seperater Abschwächer vorhanden sein sollte. Damit wäre der Hardwareaufwand zu massiv. Polyphonic Modular Matrix Die Lösung bestand im splitten und umleiten des Eingangssignals mit Multiplexern. Um einen Abschwächer pro Kanal zu realisieren, wird ein 8 Bit DAC als Digital Controlled Attenuator für je 16 Kanäle benutzt, der seine Daten aus einem eigenen RAM bezieht, auf den der Prozessor zugreifen kann. Da die Matrix zyklisch durchlaufen wird, liegen mit 50 kHz gerasterte Signale mit seperater Abschwächung an den Ausgängen der Multiplexer an. Weil dieses System modular ist und mit jeweils 16 Kanälen erweitert werden kann, sind auch mehr als die bereits verhandenen 256 Kanäle machbar. Ein Nachteil dieser Matrix besteht darin, dass Transienten (schnelle Einschwingvorgänge) durch die Rasterung verloren gehen, weshalb eine zweite Matrix existiert.


Nach oben 

Transient Protect Matrix

Transient Protect Matrix Diese Matrix wird direkt durch die Regler und Taster des Panels programmiert und entspricht einem normalen Ein- und Ausschalten der Verbindungen mittels elektronischer Schalter (4066). Diese Verbindungen sind fest vorgegeben und können nicht geroutet werden. Sie entsprechen der herkömmlichen VCO-VCF-VCA-Struktur, wurden aber auch um musikalisch relevante Verbindungen erweitert. Der Vorteil liegt in einer ungerasterten Signalführung, um Transienten zu schützen (wie Kabelverbindungen) und einer intuitiven Programmierung über Regler und Taster (direkter Zugriff). Nachteile liegen in der begrenzten Verbindungsanzahl und darin, dass jede Gruppe nur über einen einzigen Abschwächer (in diesem Fall ein VCA) verfügt.


Nach oben 

Digital Control Data Algorithms

Control Data AlgorithmsDie Programmierung der DC/DA-Routinen mussten wir mehrmals überdenken, da wir einige Punkte in der Erweiterbarkeit übersahen und einzelne Module miteinander inkompatibel waren, was zum Absturz des Systems führte. Diese Probleme sind nun gelöst und die ersten Module funktionieren. Die Module

  • WAVEFORMER – Erzeugung von digitalen Hüllkurven / LFO’s
  • ATTENUATOR – Abschwächer
  • SAMPLE & HOLD – hält die zugeführte Steuerspannung mittels Takt vom
  • DATA SEQUENCER – Erzeugung von Step CV’s und / oder GATE’s
  • ARITHMETICAL – bildet die Summe, Differenz, Produkt, Quotient zweier CV’s
  • ROUTER – ermöglicht das Umleiten / Splitten von CV’s und / oder GATE’s

Die mögliche Maximalgeschwindigkeit / Auflösung einzelner Module wird noch getestet, jedoch tendieren wir zu einer Reduzierung zugunsten der Anzahl parallel aktivierbarer Module. Da die benötigte Rechenzeit für Module unterschiedlich hoch ist, können z.B. nur 2-3 Waveformer pro Voice aktiviert werden, während die Anzahl anderer Module, z.B. Data Sequencer, bei ca. 6 – 8 liegen kann.


Nach oben 

Betriebssystem

Als wir damals die ersten Routinen programmierten, mussten wir natürlich ein Hauptprogramm entwickeln, welches zur Einbindung und Steuerung sämtlicher Unterprogramme nötig ist. Nachdem wir einige Wochen verschiedene Algorithmen entwarfen, kamen wir auf eine extrem einfache Lösung. Dieses Hauptprogramm nannten wir den Task Scanner, welcher nur 47 Bytes lang ist und die komplette Steuerung aller Unterprogramme übernimmt. Darüber hinaus bietet er eine Prioritätssteuerung. Das Prinzip des Task Scanners beruht darauf, dass mehrere Bytes zyklisch nach gesetzten Bits durchsucht werden. Diese Bits repräsentieren abzuarbeitende Aufgaben (Tasks) und können von allen Unterprogrammen gesetzt oder gelöscht werden. Die Haupttätigkeit des Prozessors liegt also im Erkennen einzelner Bits. Sobald ein Bit erkannt wurde, wird aus einer Tabelle die Sprungadresse (einzelne 16 Bit Addition) errechnet. Dieses Unterprogramm kann nun von sich aus für andere Subroutinen oder für sich selbst Bits setzen oder löschen. Falls z.B. eine Berechnung beendet wurde, schreibt das Unterprogramm das Ergebnis in einen Zwischenspeicher, aktiviert für die Auswertung das nächste Programm und deaktiviert sich selbst, bis es durch andere Unterprogramme wieder aufgerufen wird. Das gleiche gilt natürlich auch für Interrupts. Dieses Prinzip ermöglicht also auch preämtives Multitasking und eine völlig unproblematische Erweiterung. Bei der Prioritätssteuerung werden die Bytes nicht linear geprüft (1,2,3,4 etc.) sondern Byte 1 wird immer wiederholt (1,2,1,3,1,4 etc.). Die Bits des ersten Bytes sind für relativ zeitkritische Routinen reserviert. Des weiteren kann das Betriebssystem jederzeit aktualisiert werden, da nur die Basis MIDI I/O Routinen und die Daten für das Display im ROM gespeichert sind. Jede OS-Version wird im RAM gespeichert und kann mit einem MIDI fähigen Computer als SysEx z.B. über das Internet aktualisiert werden. Außerdem haben wir vor, den VCS 2 mit einer USB-Schnittstelle auszurüsten. Ein PC Editor mit einer Obertonanalyse von Samples, Konvertierung in Segmentwaves und 6-stage-Polarity-Waveshapes ist geplant, liegt allerdings in ferner Zukunft. Nach oben