Modular Step Envelope
From Diy
Contents |
About
DIY - Multi Stage Envelope from Wilfried Dietrich
Status
PCB done, frontpanel also stuffed, wiring and testing needed.
Modulbeschreibung
In analogen Synthesizern findet man üblicherweise Hüllkurvengeneratoren vom AD-, AR- oder ADSR-Typ. Mehrstufige Hüllkurven hingegen scheinen fast durchweg den digitalen Systemen vorbehalten zu sein. Zwar ist es möglich, zumal in einem Modularsystem, durch Überlagerung mehrerer einfacher Hüllkurven auch komplexere Verläufe zu erzeugen, dennoch kann ein mehrstufiger Hüllkurvengenerator eine durchaus wünschenswerte Erweiterung für ein bestehendes Modularsystem sein.
Das einzige mir z.Z bekannte kommerzielle Angebot ist unter Encore Electronics zu finden. Im DIY-Bereich kann noch auf die Konstruktion von Jim Patchell hingewiesen werden: Multi Segment Envelope.
Das hier vorgestellte Modul ist als Ergänzung zum aktuellen Formant Pro System entstanden und berücksichtigt in seiner Auslegung natürlich mechanisch und anschlußseitig den Formfaktor dieses Systems.
Bei Anlegen eines Gate-Signals erzeugt das Modul einen in 6 Schritte gegliederten Spannungsverlauf. Pro Schritt kann dessen Zeitdauer (Time) und die am Ende des Schrittes zu erreichente Zielspannung (Level) eingestellt werden. Die Level-Werte können jeweils als positive oder negative Spannung eingestellt werden, lediglich der Level-Wert für den 6. und letzten Schritt ist zwangsweise auf Massepotential festgelegt. Der Spannungsverlauf eines Schrittes hat - sofern sich der Level von dem des vorangegangenen Schrittes unterscheidet - einen logarithmischen Charakter. Der jeweils aktuell durchlaufene Schritt wird durch eine LED angezeigt (das ist zwar für das Funktionieren des Moduls nicht erforderlich, aber wie viele Analog-Fans bin auch ich der Magie blinkender Lämpchen verfallen :). Würde nun bei jedem Anlegen des Gate-Signals die Folge der 6 Schritte nur einfach einmal abgelaufen, wäre es mit der Flexibilität des Moduls nicht weit her, deswegen gibt es die beiden Drehschalter "Loop Step A" und "Loop Step B". Mit deren Hilfe kann innerhalb der Sequenz ein Loop-Bereich festgelegt werden. Dabei sind zwei Modi zu unterscheiden: Ist der mit A eingestellte Step (z.B. 3) kleiner als der mit B eingestellte (z.B. 5) so ergibt sich folgende Loop-Sequenz: 3 4 5 3 4 5 ... , d.h. der Loop-Bereich wird immer von vorn nach hinten durchlaufen. Wird jedoch B auf den kleineren Step eingestellt, so wird der Loop-Bereich pendelnd durchlaufen, d.h. unser Beispiel sähe wie folgt aus: 3 4 5 4 3 4 5 ...
Werden jedoch beide Schalter auf den gleichen Step eingestellt, so wird am Ende dieses Steps der klassische Sustain-Punkt realisiert, wie wir ihn aus der ADSR-Hüllkurve kennen. Unabhängig von der gewählten Stellung der Drehschalter gilt jedoch immer: Verschwindet das Gate-Signal, so wird zunächst der unmittelbar nächste Step, der sich hinter dem höchsten mit einem der Drehschalter gewählten Step befindet, gestartet. Ist dies nicht möglich weil keine höheren Step-Nummern verfügbar sind, so wird der 6. Step gestartet, falls der 6. Step nicht gerade durchlaufen wird (alles klar ?;-). Danach werden alle noch verbleibenden Steps durchlaufen und zum Schluß bleibt der Ablauf immer nach Step 6 stehen, dessen LED somit auch den Ruhezustand markiert.
Um ein Gefühl für die Möglichkeiten eines solchen Moduls zu geben hier noch die Einstellungen für ein paar besondere Anwendungsfälle:
- 1. Hüllkurve soll nach Gate-On einmal komplett ablaufen: Loop Step A und B werden beide auf 6 gestellt, für eventuell nicht benötigte, überzählige Schritte wird der Level auf 0 und Time auf Minimum gestellt.
- 2. Hüllkurve soll nach Gate-On erst verzögert einsetzen: Level 1 auf 0 stellen und mit Time 1 die gewünschte Verzögerung einstellen.
- 3. Hüllkurve soll erst bei Gate-Off einmalig ablaufen: Entweder man verwendet ein logisch invertiertes Gatesignal und nutzt die unter 1. genannte Einstellung oder man opfert wie unter 2. den ersten Step und stellt Level 1 auf 0, Time 1 auf Minimum und die Loop Steps A und B auf 1.
Schaltungsbeschreibung
Grundsätzlich wird der auszugebende Spannungsverlauf durch ein RC-Glied realisiert, dessen treibende Spannung (Level) und dessen R-Komponente (Time) schrittweise mittels CMOS-Multiplexer umgeschaltet werden. Zum Einsatz kommen Multiplexer vom Typ 4051, die für Logik- und der Schalterteil unterschiedliche Versorgungsspannungen erlauben, was die Realisierung eines symmetrischen Ausgangsspannungsbereichs besonders einfach gestaltet. Dabei wird jeweils eines der zwischen -5V und +5V aufgespannten Levelpotis ausgewählt (nicht in der Schaltung eingezeichnet, da nicht auf der Platine platziert, statt dessen gibt es die Kontaktleiste JP3 die zu den Poti-Schleifkontakten führt). Die Levelspannung wird hinter dem Multiplexer IC3 durch den OPV IC8 niederohmig entkoppelt und auf eine Sammelschiene gegeben, an die alle zeitbestimmenden Widerstandsregler angeschlossen sind. Der jeweils selektierte Regler wird über IC 4 mit dem Integrationskondensator C6 verbunden. Die dort aktuell anstehende Spannung wird direkt über einen hochohmigen Spannungsfolger abgegriffen und ausgegeben.
Um ein Schaltereignis für den Übergang zum nächsten Schritt zu gewinnen, könnte man versucht sein die Differenz zwischen der aktuell an C6 anliegenden Spannung und der durch das Level-Poti vorgegeben Spannung betragsmäßig auszuwerten und bei Unterschreitung einer Schwelle zum nächsten Schritt weiter zu schalten. Es ist jedoch leicht einzusehen, daß dieses Verfahren scheitert, wenn der Unterschied der Levelspannungen zweier aufeinanderfolgender Steps nur sehr klein sein soll. Wir behelfen uns daher mit einem einfachen Trick, indem für die Zeiteinstellung Tandem-Potis zum Einsatz kommen. Diese zweite Widerstandsebene ist über ihre Sammelschine fest mit +5V verbunden. Der über den Multiplexer IC2 ausgewählte Regler wird mit dem Kondensator C5 verbunden und lädt diesen auf. Die Ladespannung wird durch den Komparator IC7 "beobachtet". Kurz vor erreichen des Endwertes gibt dieser ein Signal an die Steuerlogik die daraufhin C5 über T1 schlagartig entlädt und zum nächsten Step weiterschaltet. Da C5 und C6 wertgleich gewählt werden, realisieren sie wegen des Tandempotis auch gleiche Zeitkonstanten (im Rahmen der Toleranzen, die hier aber unter pragmatischem Gesichtspunkt gesehen, keine Rolle spielen), Allerdings mit dem Vorteil, daß das Ende der gewünschten Zeitspanne nun sicher und unter gleichbleibenden Verhältnissen detektiert werden kann. Die Resetschwellspannung für das Zeitglied kann mit R11 im gewissen Grenzen dem persönlichen Geschmack angepaßt werden.
Die Steuerlogik für die Schrittsteuerung wird durch einen Atmel ATtiny 15L µController (IC1) realisiert. Nun müssen durch die Steuerlogik im ganzen 4 Eingangssignale (Gate, Loop Step A, Loop Step B, Step Ende) verarbeitet und 4 Signale (3 Bit Multiplexer Adresse, Resetsignal für C5) ausgegeben werden. Leider stehen am ATtiny 15L jedoch nur maximal 6 IO-Pins zur Verfügung, die Pins müssen also abwechselnd als Input und als Output betrieben werden. Daher mag die Umgebungsschaltung auf den ersten Blick etwas unübersichtlich wirken. Die Richtungssteuerung der angeschlossenen Elektronik erfolgt über das Pin 5 (PB0) des Controllers, das als einziges permanent als Ausgang betrieben wird. Liegt hier High-Pegel an gibt der Controller Signale aus. Jetzt wird die an den Pins 2,3,7 (PB2,PB3,PB4) anliegende Multiplexeradresse in das Latchregister IC 6 übernommen, gleichzeitig wird der C5-Reset-Pfad über R6 scharfgeschaltet. Muß in der aktuellen Output-Phase der C5-Reset auch tatsächlich ausgeführt werden, so liegt in diesem Moment an Pin 6 (PB1) gleichzeitig High-Pegel an. In der Input-Phase liegt an Pin 5 Low-Pegel. Jetzt wird über Pin 7 (PB2) das Gate-Signal (Eingang GATE) und über Pin 6 (PB1) das C5-Komparator-Signal eingelesen. Da für eine binäre Kodierung der Loop-Steps keine ausreichende Zahl von Input-Pins verfügbar ist, werden diese analog kodiert und über den ADC-Wandler hinter den Pins 2 und 3 (PB3, PB4) ausgewertet (Eingänge LA und LB). Die 6-stufigen Drehschalter für die Loop-Step-Einstellung (nicht in der Schaltung sichtbar) werden am "heißen" Ende (Step 6) an die Widerstände R27 bzw. R28 angechlossen. Wie man auf dem Rückseiten-Foto des Moduls sehen kann habe ich die einzelnen Widerstände der Kaskade direkt am Drehschalter angelötet. Die erforderlichen Werte sind der linken, kleinen Tabelle im Schaltplan zu entnehmen. (Wer will kann die Drehschalter aber auch durch Potis ersetzen und wer es möchte kann die Auswahl der Loopsteps auch durch eine externe Spannung steuern). Die Kontaktleiste JP2 dient der Programmierung, denn - das ist ja das schöne - der µController kann direkt in seiner Applikationsschaltung programmiert werden.
Damit ist praktisch alles zur Schaltung gesagt. Der Multiplexer IC5 dient der Ansteuerung der LEDs, die mit ihrer Anode an die Steckerleiste JP4 und mit ihrer Kathode an Masse angeschlossen werden sollen. Die an den Kondensatoren C5 und C6 sichtbaren zusätzlichen Kontaktpunkte stellen sich auf der Platine als zusätzliche Anschlüsse dar, so daß nach Herzenslust mit unterschiedlichen Kondensatorwerten und geometrischen Größen experimentiert werden kann. Die modulintern benötigten Spannungen von +5V und -5V (IC12 ist ein 7905L !) werden aus den Systemspannungen +15V und -15V abgeleitet (Hinweis: Das Rückseitenfoto zeigt eine etwas abweichende, ältere Variante dieser Stromversorgungsschaltung). Das am Systemsteckverbinder JP1 abgegriffene Signal I_GATE ist das systemweite Gate-Signal, das als Vorbelegung an die Buchse für den GATE-Eingang gelegt werden soll.
Ein näherer Blick auf die Schaltung zeigt, daß sie grundsätzlich in der Lage wäre eine 8stufige Hüllkurve zu realisieren. Daß hier nur 6 Stufen realisiert wurden, ist einzig und allein dem beschränkten Frontplattenplatz geschultet.
Die Schaltung steht als Eagle- und als PDF-Datei bereit. Die Materialliste als Text.
Leiterplatte
Als ich die Leiterplatte entwarf, sollte diese bewußt auf einen geringen technologischen Niveau realisierbar sein, also einseitig mit großzügen Leiterbahnbreiten und -abständen. Wegen der sehr regulären Struktur der Schaltung hat mir das aber leider eine recht hohe Zahl an Drahtbrücken beschert :-(. Heute würde ich mich trotz höherer Kosten wohl eher für einen zweilagiges Design entscheiden. Gehalten wird die Leiterplatte im Modul durch die 6 direkt darauf sitzenden Tandempotis. Das erscheint mir bei der geringen Tiefe der Leiterplatte als ausreichend und erspart das sonst im Formant Pro übliche L-förmige Halteblech und den zugehörigen Verdrahtungsaufwand.
Das Layout liegt als Eagle- und PDF-Datei hier vor.
Frontplatte
Die Frontplatte ist aus 2mm starken ALUCOREX (siehe www.bungard.de) hergestellt (großer Modul: 71 x 264 mm). Die Zeichnung zeigt die Belichtungsmaske (Positiv). Um Problemen mit der Kantenbelichtung aus dem Weg zu gehen ist die Außenkante nicht eingezeichnet (nur Eckmarkierungen) und der schwarze Bereich ist überstehend.
Die Photomaske liegt hier als PDF-Datei vor.
Programm
Liegt als Hex-File hier zum Download bereit.
Falls noch Fragen offen sind - hier meine Email-Adresse: wilfried.dietrich@sse-erfurt.de
Files
- Schematics (PDF, 315K)
- PCB (PDF, 180KB)
- MSE-Files (ZIP, 88K), with Board Files, Schematics and BOM

