Professional Documents
Culture Documents
Functies
• USB- & MIDI-bestuurd
• Oscillator met Tesla-spoel
• Nauwkeurige frequentiesturing
• Muzikale bedieningselementen
Clemens Valens (Elektor Labs)
In het november/december-nummer 2017 van Elektor [1] hebben we de Spiral MicroTesla gepresenteerd, een
USB-gevoede, platte mini-Teslaspoel die knetterende vonken kon produceren tot wel 4 cm lang. Natuurlijk is
dat een prachtige schakeling, maar erg nuttig is hij niet met zijn vaste vonkfrequenties van 5, 10 en 20 Hz.
In dit artikel laten we zien hoe hij kan worden omgebouwd tot een MIDI-bestuurde muzieksynthesizer.
Muziek maken met Tesla-spoelen werd die in real time met MIDI te besturen zijn: van coöperatieve multitasking, waarbij
populair in 2010, toen de Amerikaanse • vibrato-diepte en -snelheid een scheduler een lijst van taken afwerkt
techno-band ArcAttack had deelgenomen (frequentiemodulatie); en telkens als het kan één van de inge-
aan de TV-show America’s Got Talent. De • pitch bend (frequentieverschuiving); roosterde taken start op een bepaald
Tesla-spoelen van ArcAttack (figuur 1) • portamento (van de ene toon naar moment. Elke taak draait zolang hij wil
zijn metershoog, maar het concept van de andere glijden). en als hij klaar is, geeft hij de besturing
knetterende muziek is heel goed over- De MIDI-data kan naar de TeslaSynth weer terug aan de scheduler zodat de
draagbaar naar onze kaart met zijn worden getuurd via een USB-lijn of, volgende ingeroosterde taak kan worden
vlakke spoel en een ‘naald’ van 3 cm. na het toevoegen van een geschikte gestart. Als een taak nooit afsluit of als
In dit artikel leest u hoe Elektor’s Micro- MIDI-adapter (meer daarover later), via hij niet snel genoeg eindigt, blokkeert hij
Tesla kan worden omgebouwd tot een een traditionele MIDI-bus. de rest van het programma, net als een
Tesla-muzieksynthesizer met MIDI-in- Maar voordat we daaraan beginnen, gaan traditioneel, single-tasking-programma.
gang. De mogelijkheden om het geluid te we eerst eens kijken, hoe de MicroTesla De Mini Tesla heeft drie taken die con-
manipuleren blijven beperkt tot de toon- werkt, vooral qua software. tinu draaien:
hoogte, want we hebben geen manier om 1. Led_task: zorgt ervoor dat de LED’s
het geluid te digitaliseren en terug te voe- Real-time besturingssysteem in een aangenaam ritme knipperen;
ren naar de microcontroller voor verdere Het originele programma van de Spiral 2. Check_switch -taak: detecteert en
bewerking. Verwacht dus geen filtering of MicroTesla is gebaseerd op een klein real- meet het indrukken van de knop
volumeregeling, want die zijn er niet. U time besturingssysteem onder de naam voor het kiezen van de verschillende
krijgt wel enkele frequentieparameters Smalltask. Dit OS werkt met een soort modes;
2.6 0.8
2.4 0.6
2.2 0.4
0.2
2
0
1.8 -180 -150 -120 -90 -60 -30 0 30 60 90 120 150 180
-0.2
1.6
-0.4
1.4
-0.6
1.2
-0.8
1
0 0.2 0.4 0.6 0.8 1 -1
Figuur 2: De functie ex (grijs) en onze simpele benadering (rood) lopen Figuur 3: De kwadratische benadering (rood) van de sinusfunctie (grijs) is
snel uit elkaar bij grotere waarden van x. meer dan goed genoeg voor de laagfrequente vibrato-oscillator.
terwijl er een noot wordt gespeeld zal tot De CC-code voor portamento-besturing
gevolg hebben dat de nieuwe noot wordt doet (nog) niets.
onderdelenlijst gespeeld. De nieuwe toets loslaten, terwijl
de vorige toets nog steeds is ingedrukt Snellere maar minder
zal de vorige noot niet opnieuw starten. nauwkeurige wiskunde
Zie tabel 1 voor de MIDI-implementatie Voor de pitch bending zijn ingewikkelde
van de TeslaSynth. Waar mogelijk zijn wiskundige operaties nodig om muzikaal
standaard Control Codes (CC) gebruikt. acceptabele resultaten te krijgen. Het
CC 1 bijvoorbeeld komt meestal overeen lastigste is het berekenen van de pitch
met het modulatiewiel op een toetsen- bend-waarde vermenigvuldigd met de
bord. De pitch bend van een MIDI-toet- twaalfdemachtswortel van twee, want
senbord gebruikt geen CC code, maar daar is geen C-functie voor. Gelukkig is
heeft zijn eigen MIDI-statusbyte (com- daar een oplossing voor:
mando) 0x0b. De tabel geeft ook een ⎛ ⎛⎜ x ⎞⎟ ⎞
⎛x⎞ ln⎜⎜ 2⎝12 ⎠ ⎟⎟
CC-code voor release-tijd. Dit bepaalt ⎜ ⎟
hoelang het duurt, voordat een noot is 2 ⎝ 12 ⎠
=e ⎝ ⎠
uitgestorven nadat de toets is losgelaten. De natuurlijke logaritme (ln) kan als volgt
De TeslaSynth gebruikt dit om de puls- worden vereenvoudigd:
breedte ‘uit te faden’, maar het resultaat
⎛x⎞
is niet hetzelfde. ⎜ ⎟ ⎛ x ⎞
ln 2⎝12 ⎠ = ⎜ ⎟ ⋅ ln ( 2 ) =
⎝ 12 ⎠
Portamento wordt alleen ln ( 2 )
toegepast bij spelen in x⋅ = x ⋅ 0.057762265
12
legato-stijl
5
3
41
x⋅0.057762265 )
LFO-signaal wordt gesampled op 1 kHz, e(
dat is ruimschoots snel genoeg voor de
maximum LFO-frequentie van 20 Hz. Daar heeft C wel een functie voor, exp(),
De taak heeft het echt erg druk, want hij maar die is nogal traag bij de gewenste
zorgt ook nog voor het toepassen van de nauwkeurigheid. Door hem te vervangen
pitch bending (±2 halve tonen) en ver- door een afgekapt Taylor-polynoom, krij-
Tabel 1: Zo corresponderen MIDI zorgt de portamento. In de TeslaSynth is gen we een benadering die goed genoeg
Control Change (CC)-berichten dit effect geïmplementeerd als een lineair is voor onze toepassing (figuur 2):
met TeslaSynth-acties.
schuiven van noot A naar noot B. Hoe
CC-code Actie lang het schuiven duurt, is onafhankelijk y = x ⋅0.057762265
1 (0x01) vibrato diepte van de afstand tussen de beide noten. e y ≈ 1+ y + 0.5 ⋅ y 2
5 (0x05) portamento snelheid Verder wordt het alleen toegepast als de
12 (0x0c) vibrato snelheid noten legato worden gespeeld, d.w.z. als Een soortgelijk probleem doet zich voor
de noten worden gespeeld zonder stilte in de LFO waar we de sinus van een fase-
65 (0x41) portamento aan/uit
ertussen. Hiermee kunnen noten met en hoek willen berekenen. De ingebouwde
72 (0x48) release-tijd
zonder portamento worden gespeeld, functie sin() is veel te traag en moet door
84 (0x54) portamento control zonder tussentijds knoppen te bedienen. iets anders worden vervangen. Een vaak
Internet vond ik een mooie oplossing die interface. Hij heeft alleen een USB- R2
1k
220R
dering die goed werkt [2], zie figuur 3. nodig als de TeslaSynth moet worden K1 2
IC1
bestuurd door een MIDI-keyboard, 1
4
1 6 5
D1 3
USB-pollen: een taak erbij! voor computergestuurd spelen is de 2
R3
Toevoegen van een USB/MIDI-converter USB-poort voldoende. De MIDI-adap- 5
1N4148
3
100R
2
aan het programma betekent een hoop CNY17-3 4
ter (figuur 4) moet worden verbonden MIDI in
code, maar bijna alles kan letterlijk wor- met IC5, poort RB5 (pen 12). Om dat
VCC
den gekopieerd uit het audio-USB-voor- goed te laten werken, moet R15 worden
beeld van Microchip van de low-pin-count verwijderd (figuur 5). Onder normale
USB-ontwikkelkit voor de PIC18F14K50 omstandigheden kan R3 worden vervan- C3 C1 C2
in het pakket Microchip Libraries for gen door een draadbrug en kunnen C1, 1n 100n 100u 6V3
C35 C7
330R
330R
330R
330R
VDD
ICD3 of ICD4 nodig. Connectors K3 en K4 MCLR 4
RA3/MCLR
VCC
BUTIN 5 16
zijn daarvoor bedoeld. PWREN 6
RC5 RC0
9
RC4 IC5 RC7
(160592) MODE 14
RC2 RB7
10
1 K5
ENA 15 7 ERR
RC1 RC3
Weblinks D– 18
RA1/D–/PGC RB5
12 LED1 2
D+ 19 13 LED2
RA0/D+/PGD RB4 MIDI in
R25 11 LED3
[1] www.elektormagazine.nl/160498 RB6 3
8 LED4
PIC18F14K50-I/SS RC6
1k5
[2] http://forum.devmaster.net/t/
17
fast-and-accurate-sine-cosine/9648 VUSB
VSS RA5/OSC1 RA4/OSC2
[3] www.elektormagazine.nl/160592 20 2 3
S1 C12 C6 C13 X1
12MHz
Mounting holes
220n 220n 10n
in de store
ª160592-1 160592 - 11
MIDI-input adapter print
ª160498-91
Spiral MicroTesla module Figuur 5: Verbind de MIDI-inputadapter met poort RB5. Vergeet niet R15 te verwijderen.