Germinimal – Midi-CV converter keyboard controller

Questo articolo funge un po’ da introduzione al nuovo sistema che sto realizzando, un sintetizzatore più leggero, sulla falsariga di un Minimoog o di un Korg MS20, meglio un mix dei due.

In questo primo articolo metterò anche una breve descrizione del sintetizzatore e le caratteristiche che mi propongo di ottenere.

Purtroppo il tempo è sempre poco, per cui non so fino a quando andrà avanti il lavoro.

Introduzione

Personalmente non ho nulla contro chi si vuole realizzare lo strumento utilizzando vecchie tastiere, però ritengo lo sforzo troppo oneroso, in termini di ore dedicate a rimettere a nuovo una tastiera recuperata, e poi adattare il tutto alle proprie esigenze.

Ho preferito come sempre, optare per una conversione dal protocollo MIDI ad una generazione CV/GATE, naturalmente il purista può storcere il naso, e ne ha ragione, ma ritengo che al giorno d’ oggi con spesa minore si riescono a utilizzare tastiere midi
veramente a un costo contenuto.

Il sintetizzatore

Lo strumento che mi propongo di realizzare è piuttosto limitato, diciamo composto dalle funzioni minime di un synth, da qui il nome che ho dato: Germinimal, mutuando la mia passione per la Rivoluzione Francese, da cui il nome di un mese del calendario rivoluzionario: Germinal, e il fatto che sia ridotto all’ osso ovvero “minimo”.

Nelle mie intenzioni lo strumento dovrebbe essere costituito da:

  • Convertitore da MIDI a CV/GATE con generazione della tensione esponenziale
  • 3 Oscillatori, 2 dei quali con funzione di detune di ± 7 semitoni
  • Selezione dell’ ottava nel range 2′, 4′, 8′, 16′, 32′
  • Risposta ad una tastiera MIDI di 4 ottave, da C1 (midi 36), a C5 (midi 84)
  • Riconoscimento del Key-Velocity per la CV del VCF e la dinamica del VCA
  • 1 LFO con due forme d’ onda a duty-cycle variabile (modello Korg MS10)
  • 1 Generatore di rumore con poche pretese
  • 1 Filtro passa-basso a 4 poli con regolazione del cutoff e della resonance
  • 1VCA
  • 2 Generatori di inviluppo
  • 2 Moduli di delay digitale

Il tutto dovrebbe, nelle intenzioni, essere realizzato su quattro schede:

  1. Keyboard Controller
  2. VCOs più waveshapers
  3. VCF VCA EGs
  4. DELAYs

Questa è la prima delle quattro.

Keyboard controller

La struttura della scheda è illustrata nella figura di seguito:

In pratica tutto ruota attorno a un microcontrollore PIC16F76, con clock a 20MHz, che riconosce i messaggi MIDI, e li converte in CV tramite i due PWM, opportunamente filtrati.
La tensione generata riguarda solo un’ ottava, le altre vengono ricavate per divisione (un po’ come si faceva per i Top Octave Generator), mediante un partitore preciso e un multiplexer.
Sulla scheda è anche presente il generatore di rumore e l’ LFO.
Dato che quest’ ultimo deve modulare le tensioni di controllo dei VCO, è incluso un convertitore esponenziale per la sola parte che riguarda i VCO, e che ha un basso impatto per quanto riguarda le variazioni di temperatura.
Il circuito è stato estratto dallo schema del Korg MS20.
La spiegazione del funzionamento l’ ho fornita in questo articolo:

Schema elettrico

Prima di dare una breve descrizione dei moduli che compongono il circuito, vorrei allegare un documento che ho redatto riguardante il dimensionamento:

Microcontrollore

  • Il connettore J1 serve per la programmazione del PIC, alla fine i pin vengono ponticellati.
  • E’ presente l’ optoisolatore (U2) per l’ ingresso MIDI, l’ oscillatore quarzato a 20MHz.
  • I segnali OCT_n servono a comandare il multiplexer che seleziona l’ ottava.
  • Il segnale RELEASE, come dice il nome, serve a comandare il release dei generatori di inviluppo, una sorta di gate negato, inoltre pilota il LED indicando la presenza di note attive. Il LED non è fisicamente sulla scheda, come tutti i componenti inclusi in riquadri tratteggiati, ma sul pannello.
  • I segnali EGn, servono a comandare la fase di DECAY/SUSTAIN, in risposta all’ avvenuto ATTACK (segnali EGn_IN).

Filtro PWM

Due filtri a quattro poli per ricavare la tensione continua, dai segnali modulati in PWM.

Selettore di ottava

  • La tensione di controllo viene prima passata ad un circuito in cui è possibile variarla di ±1 semitono circa (U6A e U6B), successivamente al partitore che provvede a dividere la tensione per 2, 4, 8 e 16.
  • Come si può notare le resistenze di questo partitore sono molto precise, 0,1% 10ppm/°C, non è in realtà necessario utilizzare una tale precisione.
  • La tensione viene selezionata tramite il multiplexer U7 DG508, e inviata al circuito di GLIDE.
  • La resistenza RM1 è stata aggiunta dopo il collaudo dei VCOs, la spiegazione di questa modifica sarà riportata nell’ articolo riguardante i VCOs.

LFO-Noise

Non vi è nulla di particolare, l’ LFO è quello utilizzato sul Korg MS10, il generatore di rumore è uno schema classico, non ho aggiunto filtri per rumore rosa e quant’ altro, lo schema è ridotto all’ osso.

Modulation exponential converter

Prima di essere inviata ai VCO, la tensione di comando deve essere processata con il segnale d modulazione (LFO). Non si possono semplicemente sommare, se no le variazioni di intonazione sarebbero diverse secondo la nota suonata. Per fare in modo che l’ andamento del segnale modulante corrisponda in intensità a quello di intonazione della nota, si ricorre ad un convertitore esponenziale:

Lo stadio di conversione è composto dalla coppia di transistor Q2. Questo modo di funzionare del convertitore fa si che la corrente che attraversa il ramo di destra sia uguale a quella che attraversa quello di sinistra, insomma dipendente dalla tensione di controllo.

Al contrario le tensioni inviate sulle basi, subiscono una variazione esponenziale, che dipende dalla tensione di controllo. L’ operazionale successivo, U8D, esegue la differenza tra le due correnti, eliminando di fatto la componente continua e lasciando solo la modulazione, trasformata in esponenziale.

Infine la tensione di comando viene sommata con la modulazione.

Questo circuito ha il vantaggio che la tensione di comando non viene variata al cambiare della temperatura, eventuali variazioni derivate dalle caratteristiche del Transistor Pair, sono introdotte in presenza di modulazioni molto ampie, e quindi poco riconoscibili.

La coppia di transistor deve essere sullo stesso silicio ed avere buone caratteristiche di matching, anche se quella che ho usato io non è un granchè, risultati decisamente migliori si ottengono con, ad esempio, un CA3046, per non parlare dei MAT04, il cui costo però è molto maggiore.

In ogni caso per uso hobbystico va bene anche quella che ho usato, l’ importante è avere cura di tarare la deltaVbe a 0V a temperatura ambiente di circa 25°C.

Firmware

E’ un po’ il cuore di tutto il sistema, senza dilungarmi si occupa di leggere i messaggi MIDI e di interpretarli, generando le tensioni di controllo e gestendo gli stati dei due generatori di inviluppo. La documentazione un po’ più approfondita del firmware:

Nota: il software è stato sviluppato con MikroPascal versione demo di MikroElektronika. Questa versione consente di compilare fino a 2k di codice, e l’ utilizzo non deve avere fini commerciali.

Realizzazione

La scheda montata:

Riconoscimento NOTA-ON:

Riconoscimento NOTA-OFF:

Tempo di risposta del filtro PWM, variazione da C1 a C5:

Tempo massimo di GLIDE, passaggio da C1 a C5:

Noise generator:

Conversione esponenziale, sorgente LFO con onda triangolare:

Conversione esponenziale con LFO e GLIDE:

Per provare il riconoscimento del PITCH-BEND, ho generato una sequenza di variazioni con Cubase:

La tensione di controllo ricostruita (il segnale è al contrario dei valori di ingresso):