Dr.Godfried-Willem RAES

Kursus Experimentele Muziek: Boekdeel 2: Live electronics

Hogeschool Gent : Departement Muziek & Drama


<Terug naar inhoudstafel kursus>   hardware and software are described for the construction of polymetric capable metronomes using solenoids

2122:

toepassingsvoorbeeld:

8-tempi metronoom

Polyritmische muziek kan in de notatie erg vereenvoudigd worden wanneer we zouden kunnen beschikken over een dirigent per in de partituur voorzien speeltempo. Dat dit tot tamelijk absurde zoniet onmogelijke of praktisch onhaalbare musiceersituaties aanleiding zou geven hoeft geen betoog.

Omdat we met dit soort probleem reeds vaak waren gekonfronteerd, grepen we ook hier naar een hardware-matige oplossing.

Konsultatie met musici maakte ons duidelijk dat een alleen zuiver optische aanduiding van het gewenste tempo (een knipperend lampje of een LED) in orkestrale musiceersituaties niet wenselijk is: de musici blijken niet in staat het tempo goed te volgen, vooral omdat het lampje niet toelaat, op de periodiciteit van de puls te anticiperen.

We menen een oplossing te hebben gevonden in de bouw van een soort komputergestuurde mechanische metronooms, met zwaaiende arm dus.

Niet alleen laat dit ontwerp toe acht musici of kleine instrumentale groepen in nauwkeurig vastlegbare verschillende tempi te laten spelen, maar bovendien kunnen deze tempi ook in de loop van het stuk gewijzigd worden! Zo kan één partij bvb. een accelerando doorvoeren terwijl een andere weer gaat vertragen en dit alles zonder enige onderlinge beinvloeding. Of, hoe de droom van Henri Cowell en Conlon Nancarrow uiteindelijk toch kan worden verwezenlijkt met musici van vlees en bloed.

Hardware:

De hardware bestaat uit 1 enkele hoofdprint vanwaaruit maksimaal 8 kleine printjes waarop telkens een 'metronoom' gebouwd is, gestuurd worden.

De hoofdprint bestaat uit niet veel meer dan een inverterende latch (een 74HCT643 tussengeheugen) en 8 transistor drivers (BC107 of BC547) en een relatief zware voeding. Alle metronooms worden immers vanuit de hoofdprint met 12V gevoed. Elke metronoom trekt maksimaal 400mA, wat ons stroomvoorzieningsbudget doet uitkomen op zo'n 3.2A waarbij nog de stroom voor de hoofdprint zelf gevoegd moet worden. Vandaar de noodzaak van de zware 4A / 12V voeding. Om het probleem van een grote en erg zware transformator te vermijden, maakten we in dit ontwerp op onortodoxe wijze gebruik van de tegenwoordig door verschillende fabrikanten op de markt gebrachte monolitisch ingegoten schakelende voedingen voor halogeenverlichting. Volgens het opschrift leveren die een uitgangssignaal van 12V ac bij een vermogen tot 100Watt. De uitgangsfrekwentie van deze blokken bleek bij nameting zo'n 13 tot 14 kHz te bedragen geesuperponeerd op een sterke 50Hz komponent terwijl het onbelaste uitgangssignaal min of meer sinusvormig is met een amplitude van 54V piek-tot-piek. Omgerekend naar rms is dit dus 54V/ 2 * 2^1/2= 19V. Omdat 7812 regulators voor de hier nodige stromen bijzonder duur zouden uitvallen en omdat we bovendien geen behoefte hadden aan een bijzonder stabiele uitgangsspanning, ontwierpen we een eenvoudige diskrete voeding met een zware darlingtontransistor (TIP140) als serie-regulator. De bazis wordt ingesteld door de 330 ohm weerstand en een 12V zenerdiode in serie met twee gewone silicium diodes om de 1.2V spanningsval over de transistor te kompenseren. De gelijkrichtdiodes -komponenten waarbij we normaal gezien nooit blijven stilstaan- zijn hier BYW29's. Deze exemplaren werden gekozen omwille van hun uiterst snelle schakelsnelheid, iets wat bij de hier aangeboden frekwentie een rol begint te spelen. (Gewone diodes zouden erg heet worden...). De BYW29 wordt gespecifieerd voor een stroom tot 8A bij 200V en dit met een schakelsnelheid van amper 25ns.

Het schema van de hoofdprint ziet eruit alsvolgt:

 De metronooms zelf worden met de hoofdprint verbonden met 3-polige DIN stekkers en gewoon netsnoer met drie geleiders. Pin 1 en 4 zijn doorverbonden en voeren de 12V voeding via één ader. Pin 2 vormt de massageleider en pin 3 en 5 zijn eveneens doorverbonden en voeren het stuursignaal voor de metronooms. Door de gemaakte doorverbindingen kunnen nu ook zowel standaard MIDI-kabels als 'logos' kabels voor symmetrische voedingsaansluitingen worden gebruikt.

De metronoom-printjes worden bestukt met volgende onderdelen:

Alternatieve types zijn: BUK 442, IRF610 e.d.

Met deze power mosfets moet je wel voorzichtig omspringen: ze erg gevoelig voor statische elektriciteit. Houdt alle poten dus kortgesloten tot de mosfet goed in wel in de schakeling is gemonteerd. Eens met alle bijhorende onderdelen op de print gemonteerd bestaat er geen enkel gevaar meer.

Een opmerking: Power mosfets zijn bijzonder goede schakelaars: ze hebben een doorlaatweerstand van nauwelijks 0.1 Ohm. Het hier gekozen type heeft voldoende aan een gatespanning van 5Volt. Daar staat echter tegenover dat de gate zich tegenover massa gedraagt als een kondensator van 1.5nF! Dit stelt overeenkomstige stroomleveringseisen aan de sturende schakeling. De ingangsimpedantie van zo'n gate is uiterst hoogohmig ( >1GOhm) wat verklaart dat we een ontlaadweerstand voor de gate beslist niet kunnen achterwege laten.

De elektronische schakeling voor de metronooms is werkelijk de eenvoud zelf. Het probleem van deze konstruktie is dan ook in de allereerste plaats gelegen in de mechanische uitvoering: het bewegende stokje mag niet teveel resoneren en de bewegingen ervan dienen geruisloos te gebeuren. Het aanbrengen van stukjes vilt ter demping van het stokje en op de punt van de ijzeren kern van de trekmagneet is dan ook aangewezen.

 

dual coil metronomeEnkele jaren na de bouw van dit eerste prototype, veranderden we de mechanika voor deze metronooms ingrijpend. Hiervoor gingen we uit van dubbele spoelen en een roterend anker, zoals te zien op de schets hiernaast afgebeeld. Dit type elektromagneten tref je soms wel eens aan in bellen gebouwd voor wisselspanningsbedrijf. Wij gingen echter uit van registerinstelmagneten gemaakt door de firma Laukhuff (Weikersheim, BRD). De elektronika kan dezelfde blijven als tevoren op een kleine wijziging na: de bekrachtiging van de spoelen verloopt nu zo dat telkens slechts een spoel stroom voert. De tweede spoel kan worden gestuurd met het geinverteerde signaal van de eerste spoel. Nu wordt het meteen ook mogelijk trage bewegingen uit te voeren, waarbij we dan gebruik maken van pulsbreedte modulatie.


Software:

Het hier volgende programma moge gelden als een programmeervoorbeeld. Immers, zonder komputersturing doet onze polymetrische metronoom helemaal niks. Het zal duidelijk zijn dat het naar de meest diverse behoeften kan worden aangepast en uitgebreid. Het programma kan werken los van de hiervoor beschreven schakeling. De diverse tempi worden ook op het scherm getoond.

' **************************************************************************
' * DIRIGENT.BAS *
' * aansturingsprogramma voor polymetrische metronoom *
' **************************************************************************
' OKTOKONDUKTOR
 
COMMON SHARED Lptadr%, i%, byte%
COMMON SHARED Tempi%(), Periods#(), Maatnr%()
 
DECLARE SUB Tik (b%)
DECLARE SUB Gettempi ()
DECLARE SUB ToonTik1 ()
DECLARE SUB ToonTik2 ()
Lptadr% = &H378
Tik (0)
DIM SHARED Tempi%(7), Periods#(7), Maatnr%(7), Tim#(7)
 
Start:
CLS: LOCATE 10, 10: PRINT "Keuze menu: ";
LOCATE 12, 15: PRINT "1. 1/1 maat met enkele slag per tel";
LOCATE 13, 15: PRINT "2. 2/1 maat met periodische slagen";
LOCATE 14, 15: PRINT "3. 2/2 maat vanuit faktoren met een gemene puls";
LOCATE 15, 15: PRINT "4. Quit";
LOCATE 17, 20
INPUT "Keuze ?"; k%
SELECT CASE k%
CASE 1: GOTO Voorbeeld1
CASE 2: GOTO Voorbeeld2
CASE 3: GOTO Voorbeeld3
CASE 4: CLS: END
CASE ELSE :GOTO Start
END SELECT

Voorbeeld1:

Aansturing van de 8 metronooms met eigen onafhankelijke tempi

In dit voorbeeld slaan de metronooms eigenlijk een 1/4 maat, waarbij elke slag (naar beneden en direkt weer naar omhoog) overeenkomt met de gevraagde pulsduur. Of de mechanika van de gebruikte metronooms deze vaak erg korte pulsen kunnen volgen is zeer de vraag, want volstrekt afhankelijk van de mechanische opbouw.

Gettempi
Begin1:
FOR i% = 0 TO 7
Tim#(i%) = TIMER
NEXT i%
Tik (255): ' om de eerste slag te geven: alle metronomen tesamen
DO
FOR i% = 0 TO 7
IF TIMER >= Tim#(i%) + Periods#(i%) THEN
Tim#(i%) = TIMER
' wanneer dit het geval is moet de betreffende
' metronoom een tik geven
byte% = 2 ^ i%
Tik (byte%)
' for debugging purposes:
ToonTik1
END IF
NEXT i%
LOOP UNTIL INKEY$ <> ""
GOTO Start
END

Voorbeeld2:

Aansturing van de 8 metronooms met eigen onafhankelijke tempi en met zuiver periodieke slingerbewegingen.

In dit voorbeeld slaan de metronooms eigenlijk een 2/4 maat, waarbij elke slag (naar beneden en om de andere tel weer naar omhoog) overeenkomt met de gevraagde pulsduur. Bij gebruik van deze kode is de volgzaamheid van de metronooms veel beter gegarandeerd dan in het vorige voorbeeld.

CLS
Gettempi
byte% = 255
FOR i% = 0 TO 7
Tim#(i%) = TIMER
NEXT i%
Tik (byte%): ' om de eerste slag te geven: alle metronomen tesamen
DO
FOR i% = 0 TO 7
IF TIMER >= Tim#(i%) + Periods#(i%) THEN
Tim#(i%) = TIMER
' wanneer dit het geval is moet het bit van de betreffende omkeren zonder te raken aan de bits van de andere metronooms. Dit is eigenlijk een softwarematige flipflop
IF byte% AND (2 ^ i%) THEN
' in dit geval is het bit 1 en moet het naar 0 gebracht worden
byte% = byte% - (2 ^ i%)
ELSE
' in dit geval was het 0 en moet het 1 worden:
byte% = byte% + (2 ^ i%)
END IF
Tik (byte%)
' for debugging purposes:
ToonTik2
END IF
NEXT i%
LOOP UNTIL INKEY$ <> ""
GOTO Start

Voorbeeld3:

CLS
LOCATE 5, 5
INPUT "Common pulse tempo (M.M.) ?"; puls%
Periods#(0) = 60# / puls%
LOCATE 5, 45
PRINT "Pulstijd="; Periods#(0); "s"
FOR i% = 0 TO 7
LOCATE 7 + i%, 15
PRINT "Faktor voor tempo"; i% + 1; "?";
INPUT Tempi%(i%)
Tim#(i%) = 0
NEXT i%

Omdat er door afrondings- en andere fouten geen temporele verschuivingen zouden ontstaan, gebruiken we hier niet het programma van voorbeeld 2 met omgerekende tempi, zoals voor de hand lijkt ter liggen, maar gaan we uit van de hier voor alle tempi gegeven variabele puls% die een teller met j& stuurt. (Long integer!)

j& = 0
byte% = 255
Tik (byte%)
Tim#(0) = TIMER
DO
IF TIMER >= Tim#(0) + Periods#(0) THEN
j& = j& + 1
Tim#(0) = TIMER
FOR i% = 0 TO 7
IF j& MOD Tempi%(i%) = 0 THEN
' dit is dezelfde flip-flop als in voorbeeld 2:
IF byte% AND (2 ^ i%) THEN
byte% = byte% - (2 ^ i%)
ELSE
byte% = byte% + (2 ^ i%)
END IF
Tik (byte%)
' voor het debuggen toegevoegd:
ToonTik2
END IF
NEXT i%
END IF
LOOP UNTIL INKEY$ <> ""
GOTO Start
 
SUB Gettempi
CLS
LOCATE 3, 5
PRINT "Tempo settings:";
LOCATE 3, 52
PRINT "Time-interval:";
FOR i% = 0 TO 7
LOCATE 5 + i%, 5
PRINT "Tempo for metronome"; LTRIM$(RTRIM$(STR$(i% + 1)));"(M.M. number)"
LOCATE 5 + i%, 43
INPUT Tempi%(i%)
Periods#(i%) = 60# / Tempi%(i%)
LOCATE 5 + i%, 52
PRINT "T("; LTRIM$(RTRIM$(STR$(i% + 1))); ")="; Periods#(i%); "s";
NEXT i%
Maatteller:
' in de muziek worden maten steeds geteld vanaf maat 1, dus moeten we de teller ook zo resetten:
FOR i% = 0 TO 7
Maatnr%(i%) = 1
NEXT i%
END SUB
 
SUB Tik (b%)
OUT Lptadr%, b%
OUT Lptadr% + 2, 216
OUT Lptadr% + 2, 215
END SUB
 
SUB ToonTik1
' subroutine geschreven omwille van het debuggen
' gebruikt voor voorbeeld 1
Maatnr%(i%) = Maatnr%(i%) + 1
LOCATE 22, 10 + (4 * i%)
PRINT LTRIM$(RTRIM$(STR$(byte%))); " ";
LOCATE 23, 10
PRINT " ";
LOCATE 23, 10 + (4 * i%)
PRINT "1";
LOCATE 24, 10 + (4 * i%)
PRINT LTRIM$(STR$(Maatnr%(i%)));
END SUB
 
SUB ToonTik2
' Subroutine geschreven omwille van het debuggen.
' gebruikt in voorbeelden 2 en 3
Maatnr%(i%) = Maatnr%(i%) + 1
' volgende reeks IF's worden gebruikt om een string samen te
' stellen die de zuiver binaire reprezentatie omvat van het
' uitgestuurde byte (LSB first!).
IF byte% AND 1 THEN a$ = "1 " ELSE a$ = "0 "
IF byte% AND 2 THEN a$ = a$ + "1 " ELSE a$ = a$ + "0 "
IF byte% AND 4 THEN a$ = a$ + "1 " ELSE a$ = a$ + "0 "
IF byte% AND 8 THEN a$ = a$ + "1 " ELSE a$ = a$ + "0 "
IF byte% AND 16 THEN a$ = a$ + "1 " ELSE a$ = a$ + "0 "
IF byte% AND 32 THEN a$ = a$ + "1 " ELSE a$ = a$ + "0 "
IF byte% AND 64 THEN a$ = a$ + "1 " ELSE a$ = a$ + "0 "
IF byte% AND 128 THEN a$ = a$ + "1 " ELSE a$ = a$ + "0 "
LOCATE 23, 10
PRINT a$;
LOCATE 24, 10 + (4 * i%)
PRINT LTRIM$(STR$(Maatnr%(i%)));
END SUB 

Opmerking: het zal duidelijk zijn dat een uitbreiding naar elk gewenst aantal onafhankelijke metronooms op deze wijze erg eenvoudig is. Voor de besturing van een groter projekt zal men voor de software wel best gebruik maken van een of ander multitasking koncept. (Cfr. GMT)


Filedate: 00-06-18 / last update: 2012-05-29

Terug naar inhoudstafel kursus: <Index Kursus> Naar homepage dr.Godfried-Willem RAES this page is not available in english