Crea sito

Germinimal – Schemi

Poichè il lavoro è in corso, e io ci dedico poco tempo, i circuiti subiscono delle variazioni. Ho pensato di mettere su questo spazio gli aggiornamenti degli schemi

  • Keyboard Controller

01/04/2012

  1. E’ stata aggiunta RM1 (47,5k) per correggere l’ errore sull’ ottava più bassa della tensione di controllo

GERM_KBD_Rev2

  • VCO

01/04/2012

  1. Sono variate R124 e R125 (da 182k a 18,2k) per un errore di immissione del valore nello schema.
  2. Eliminati: R15, R16, R17, R18, PT6,R11, R12, R13, R14, PT5, R7, R8, R9,R10, PT4.
  3. Aggiunti CM1, CM3, CM5 per disaccoppiare l’ onda triangolare
  4. Aggiunti CM2, CM4, CM6 per minimizzare i glitch della conversione da rampa a triangolare
  5. Aggiunte RM1, RM2, RM3 per aggiustare il livello di trigger del PWM (montaggio non in scheda ma sui potenziometri)

GERM_VCO_Rev1

Germinimal – VCO – La realizzazione

Introduzione

Sono alla fine arrivato alla realizzazione del modulo di 3 Vco. Le difficoltà incontrate non sono state poi molte ma mi hanno comunque impegnato.

La prima cosa che mi sento di dire è che fare circuiti stampati con il ferro da stiro va bene per cose di dimensioni contenute, nel mio caso (200×150 doppia faccia) è stato un vero disastro, la quantità di fili usata per correggere le piste non collegate è stata troppo alta, non proseguirò su questa soluzione per i prossimi circuiti. Meglio un montaggio a filo, o wire-wrap, fatto bene che un circuito stampato da debuggare. Del resto questi sono esemplari unici, non credo proprio di doverne fare una produzione e se mai dovesse accadere certamente non si potrebbe fare con dei circuiti stampati di questo livello.

Breve descrizione

Normalmente il metodo più usato per realizzare VCO per scopi musicali, è quello di generare una rampa di tensione, e resettarla quando raggiunge il livello desiderato.

Il vantaggio di questo sistema è che basta caricare un condensatore con una corrente costante per avere il controllo in frequenza attraverso una tensione.

La formula che governa il tutto è:

I=\frac{C dV}{t}

Dove I è la corrente di controllo, dV è la tensione picco-picco che si vuole ottenere e t è il tempo di salita della rampa, naturalmente C è la capacità da caricare.

Da questa formula risulta evidente che per raddoppiare la frequenza, ossia dimezzare t, occorre raddoppiare I, quindi il controllo dell’ oscillatore si ha attraverso il guadagno, l’ amplificazione del sistema. Tutto molto semplice ma fino ad un certo punto.

La tensione di controllo

Normalmente la tensione di controllo ha una progressione lineare, e viene poi convertita in esponenziale grazie ad un circuito, che però è soggetto alle variazioni di temperatura.

Per stabilizzare in temperatura i VCO, sul Germinimal la tensione di comando viene generata direttamente con andamento esponenziale.

Misura iniziale di accordatura

Come prima cosa ho rilevato la frequenza dei 5 DO, ai vari piedaggi (naturalmente dopo avere accordato il VCO sul DO centrale). La rilevazione è stata eseguita sul primo VCO.

E compare la prima cosa che non mi aspettavo: la nota più bassa con qualsiasi piedaggio ha un errore dell’ 1% circa.

Normalmente è presente un errore di offset nella scala, dovuto al tempo di reset della rampa, questo errore si fa sentire nella parte alta in quanto si viene a sommare una costante, cioè la formula che si ricava è:

dV=\left ( \frac{I t}{C} \right )+t_{offset}

La soluzione più semplice è quella di mettere una resistenza in serie al condensatore di modo che la formula diventi:

t=\left ( \frac{C dV}{I} \right )-\left ( R C \right )

Quindi sapendo che il tempo totale (T) è:

T=t+t_{offset}

E sostituendo:

T=\left ( \frac{C dV}{I} \right )-\left ( R C \right )+t_{offset}Quindi ponendo RC uguale a toffset si cancella l’ errore alle frequenze più alte. Ma in questo caso l’ errore compare alle frequenze più basse, e si manifesta per ogni piedaggio, segno che non dipende dal VCO ma dal circuito di comando.

Il Multiplexer selettore di ottava

La scelta dell’ ottava è costituita da un partitore resistivo e da un multiplexer analogico. La mia idea è che ci siano delle correnti di leakage, in uscita dagli switch aperti che rientrino sull’ ultima resistenza del partitore, alterando il valore in tensione ai suoi capi. Probabilmente questo errore è trascurabile scegliendo un ‘ altra ottava, anche perchè diminuiscono i rami che possano iniettare corrente, insomma una cosa come i figura:

Ad ogni modo mettendo una resistenza da 47,5k in parallelo all’ ultima resistenza del partitore, l’ errore viene corretto.

Taratura dei VCO

La nuova taratura ha fornito i seguenti valori per il VCO 1:

per il VCO 2:

Il terzo VCO ha presentato un’ altro problema di accordatura, dovuto all tensione di offset di ingresso dell’ operazionale. Ho provveduto a selezionarne uno che avesse circa 1mV di offset (si può misurare direttamente tra i due ingressi durante il funzionamento, anche con un multimetro di bassa qualità, anche se la misura presenta sicuramente un errore, è importante trovare il valore migliore).

Il risultato per il VCO 3:

Misura di linearità dell’ ottava

Di seguito le misure di linearità su una ottava, i valori sono attendibili su tutti i piedaggi.

Forme d’ onda

Ho rilevato qualche forma d’ onda con un audio analyzer in versione demo.

La rampa:

La triangolare:

La sinusoide:

Qualche FFT, la rampa:

La triangolare:

La sinusoide:

Come si può notare la sinusoide non è molto pura, la seconda armonica ha un valore piuttosto alto. In ogni caso credo sia accettabile per uno strumento di fascia decisamente economica, e comunque per ora la lascio così.

Conclusioni

Tutto sommato ho raggiunto gli obbiettivi preposti, ovviamente sono state fatte delle modifiche. Non le pubblico su questo spazio, preferisco aprirne uno nuovo dove depositare gli schemi e la descrizione delle varianti.

VCO – Germinimal

Dopo il keyboard controller, i VCO.

Sono tre di cui due provvisti di detuner. Non vi è nulla di nuovo i soliti generatori di rampa a corrente costante.

Avrei voluto mettere anche la realizzazione, ma mi sono scontrato con la difficoltà di fare dei circuiti stampati a doppia faccia con il press-and-peel.

Cercherò di trovare una ditta che me li faccia a prezzi contenuti.

Intanto metto la documentazione attuale, ricordando che non ho ancora testato nulla.

  • Loschema:

GERM_VCO_sch

  • Elenco componenti:

GER_VCO

  • I files gerber per il circuito stampato:

GER_VCO

  • Qualche nota sul dimensionamento:

GERM_VCO

Fleuril goes on video

Non avrei mai pensato che il mio synth sarebbe uscito di casa.

Invece mi è toccato caricarlo in macchina, portarlo a Torino, e lasciarlo per un paio di notti fuori casa.

Spero che non si sia montato la testa, è stato usato nella realizzazione di un video musicale. In fin dei conti non ha poi neanche suonato, ma si è limitato a recitare una parte.

Tutto è iniziato quando sono stato contattato da Alex Bufalo, Art Director di DanceAndLove, la casa di produzione di Gabry Ponte, l’ ex tastierista degli Eiffel65.

Insomma per farla breve alla fine il giocattolone ha vissuto i suoi tre minuti di gloria effimera.

E’ stata per me comunque una bella esperienza, e anche una bella soddisfazione, ho avuto modo di vedere una casa di produzione professionale, di farmi una idea su come si creano questi video, insomma ne sono soddisfatto.

Naturalmente tutto questo non sarebbe stato possibile senza la presenza di supportimusicali.it e soprattutto di “am0″, ai quali va il mio ringraziamento.

Il link al video:

http://www.youtube.com/watch?v=m0k99c-CtMo

Germinimal – Keyboard Controller – Firmware

Di seguito riporto il Firmware contenuto nel PIC.

E’ stato realizzato con la versione dimostrativa di MikroPascal della MikroElektronika.

La versione dimostrativa di questo compilatore consente di generare un codice fino ad una lunghezza massima di 2kByte, e non può essere utilizzato per scopi commerciali.

Nel documento è presente anche una breve descrizione del protocollo MIDI, almeno per le parti che interessano il convertitore MIDI-CV.

Dato che il tutto è ancora in fase di test, è possibile che vi siano ancora dei bug, o delle imprecisioni nella descrizione del software. Ad ogni modo se vi saranno dei cambiamenti provvederò a aggiornare la documentazione, eventualmente anche ad ampiarla.

Un po’ di documentazione del MIDI:

midispec

The_MIDI_Specification

Il mio documento:

GRMN-KBD-FRMW

Il progetto in MikroPascal:

KBD_CONTR

Germinimal – Keyboard Controller – La realizzazione

 

Finalmente ho terminato la costruzione della scheda Keyboard controller. In qualche modo il circuito stampato a due facce col press-n-peel è venuto (non benissimo) e il risultato è questo:

Per provare il funzionamento ho utilizzato un oscilloscopio, un multimetro FLUKE a 4 digit 1/2, il sequencer Cubase collegato ad un convertitore USB-MIDI.

Di seguito riporto le prove salienti  del collaudo:

  • Il tempo di risposta ai messaggi midi, in pratica il  riconoscimento dei messaggi nota-on e nota-off.

La traccia inferiore rappresenta il segnale “RELEASE”, che corrisponde a un “GATE” negato.

Il nota-off:

  • Il generatore di rumore:

  • Il segnale generato dall’ LFO (in questo caso triangolare), passato attraverso il convertitore esponenziale:

  • Control Voltage

L’ errore massimo misurato sulle quattro ottave è stato dello0,2%, e si riferisce alla nota più bassa (156,25mV). Su questa misura sicuramente entra anche la risoluzione dello strumento. Occorra considerare che la tastiera del Minimoog era costituita da un partitore resistivo con la precisione dell’ 1%.

Nell’ immagine successiva si vede la risposta del filtro, per una CV che va dalla nota inferiore (DO1) alla nota maggiore (DO5):

Il tempo di risposta è intorno ai 500us.

La risposta del glissato, anche in questo caso riferito ad un salto di quattro ottave:

Il tempo intercorso è di circa 5s.

Nell’ immagine successiva si può vedere la tensione di comando ai VCO, con sovrapposta la modulazione:

  • Il Pitch-Bend

Il pitch-bend è ricavato dal messaggio MIDI e sovrapposto alla tensione di controllo dei VCO. La valutazione è stata fatta tramite Cubase:

La risposta (la tensione di controllo è al contrario):

La Dissipazione in un Amplificatore

Benchè l’ argomento non sia direttamente collegabile alla materia dei sintetizzatori, credo altresì che sia utile conoscere il metodo per arrivare a determinare la dissipazione, e in generale di quanto può scaldare un amplificatore.

Qui è riproposto il calcolo per un modello di tipo classe AB, ma il metodo è applicabile anche per altre applicazioni lineari.

Benchè possa sembrare noioso, ho cercato di riportare tutti i passaggi, in modo da rendere comprensibile il percorso fatto per arrivare alle formule finali.

Chiaramente io non sono nè un matematico nè un docente, quindi potrei avere sbagliato qualche passaggio, o comunque non essere riuscito a spiegare bene. Nel qual caso mi scuso.

Di seguito il documento in formato PDF:

Dissipazione

 

La generazione di forme d’ onda tramite le funzioni di Walsh

L’ utilizzo delle funzioni di Walsh è piuttosto diffuso in molti settori, naturalmente data la loro similitudine con la serie di Fourier, possono essere impiegate anche per generare delle forme d’ onda.

Nel periodo di maggiore sviluppo dei sintetizzatori analogici, sono stati fatti molti studi su come impiegare le sequenze di Walsh, prova ne è la grande presentazione di brevetti, ma la difficoltà nel controllare i pesi di ogni funzione, legata in particolare alla grande quantità di componentistica da utilizzare, hanno fatto si che non si arrivasse a nulla di concreto (almeno che io sappia).

Ad ogni modo le funzioni di Walsh hanno il pregio di fare meglio comprendere come sia possibile, con pochi banali calcoli, arrivare a ricostruire una forma d’ onda, e in particolare a meglio capire anche la serie di Fourier.

Almeno questo è quello che ho provato a fare con questo articolo.

Il documento in formato PDF:

Walsh

Un esempio di calcolo (manuale della DFT) fatto da TheAlu10000

DFTbyALU

Due fogli di Excel usati per trovare i pesi delle funzioni, il primo per le funzioni SAL  1-8 e CAL 1-7, il secondo per le sole SAL 1-16.

WALSH_16

WALSH_SAL_32

Inversione della scala su una tastiera MIDI

Aggiornamento del 6-5-2011.

L’ utilizzatore mi ha informato che con un’ altra tastiera non funzionava bene.

Il problema risiedeva nel fatto che non venivan0 trattati correttamente i messaggi di System Common e System Realtime.

Per correggere il problema ho variato una istruzione nel programma.

Al fondo dell’ articolo allego in nuovo software.

Qualche tempo fa, su un forum di elettronica, è stato aperto un Thread da un utente mancino che voleva sapere se era possibile utilizzare la tastiera con progressione delle note invertita, cioè da destra a sinistra, un po’ come si fa nelle chitarre per mancini.

Ovviamente il dibattito è proceduto nel senso che tutti i tastieristi conosciuti, sia destri che mancini, suonano tutti con lo stesso tipo di tastiera.

Alla discussione si è aggiunto un altro utente a difesa della possibilità di utilizzare la scala invertita, motivandola con il fatto che comunque un mancino ha un migliore controllo e naturalmente una maggiore velocità e precisione con la mano sinistra.

Questo utente mi ha contattato privatamente e mi ha chiesto se era possibile realizzare questa modifica, per lui importante.

In effetti la sua idea stava su delle basi concrete ed era motivata dal fatto che in realtà la tastiera è speculare, basta considerare il MI come un DO, e me lo ha dimostrato con questo semplice schemino:

Naturalmente ho detto che se aveva una master Keyboard bastava intercettare il messaggio, e modificarlo.

Purtroppo la sua tastiera è proprio un sintetizzatore, neanche da ridere, e giustamente lo vuole sfruttare così com’ è.

La prima cosa che mi è venuta in mente è stata quella di attivare il comando “LOCAL OFF”, che dovrebbe essere presente su tutte le tastiere MIDI, e che consente di dividere lo strumento in due moduli: la tastiera come generatore di eventi MIDI, e il sintetizzatore come modulo sonoro (una sorta di expander).

A quel punto basta prendere il messaggio MIDI inviato dalla tastiera, modificarlo e inviarlo al modulo sonoro.

La particolarità è che per fare tutto questo non serve neanche chissà quale software, basta riconoscere il valore della nota e fare: 124-val_nota, e si ottiene la scala invertita con il DO al posto del MI e via di seguito.

Il circuitino per realizzare il tutto è incentrato su un PIC16F628A, con un clock a 10MHz, lo schema è il seguente:

L’ immagine è sicuramente poco leggibile, per cui allego il PDF:

Midi_schema

Premessa: non ho usato un 7905 al posto di un 7805  perchè sono un tipo originale, semplicemente avevo solo quello.

Anche per quanto riguarda la realizzazione, non mi sono dannato l’ anima a fare un circuito stampato, ma una millefori pure montata così così:

Ai due morsetti viene applicata la tensione di alimentazione (il morsetto in alto è il positivo) tra i 9 e 12Vdc, oppure in alternata tra i 6 e 9Veff. In realtà si può anche superare la tensione massima di alimentazione in quanto non c’ è un grande passaggio di corrente.

I due cavi neri sono: quello in alto il MIDI IN (da collegare al MIDI OUT della tastiera), ovviamente l’ altro è il MIDI OUT (da collegare al MIDI IN della tastiera).

PROVE

Per provare il funzionamento del circuito ho utilizzato un sequencer (Cubase), un convertitore USB-MIDI, ovviamente l’ oscilloscopio.

Il setup di prova è quello visibile di seguito:

Per eseguire la prova, molto semplicemente ho inserito in una traccia del sequencer una serie di note, dopodichè ho messo in Play quella traccia, il flusso di dati l’ ho fatto processare dal circuito, l’ ho rimandato al sequencer e ho fatto registrare il risultato su un’ altra traccia.

Il risultato ottenuto è illustrato nell’ immagine seguente:

Nell’ immagine gli eventi grigi sono quelli preregistrati, mentre quelli rossi sono ottenuti dopo il reversing della scala.

Si può notare un certo ritardo, che è intrinseco nella fase di elaborazione, e in quella di trasferimento del segnale che viene isolato otticamente, e quindi di fatto ritardato. Occorre inoltre dire che il ritardo in registrazione dipende anche dalla quantizzazione della registrazione del sequencer, ad ogni modo non dovrebbe influenzare sull’ esecuzione di un brano.

Un’ altra immagine presa dalla videata principale di Cubase:

Infine quella che rende meglio l’ idea, lo score editor:

 

Per completezza allego la schermata dell’ oscilloscopio:

Come si può vedere il ritardo tra il dato entrante (traccia superiore) e il dato uscente (traccia inferiore), è circa quello di un byte.

Il SOFTWARE

Ho sviluppato questo “complicatissimo” firmware in Pascal (MikroPascal), di seguito il listato:



–>


program NIKKE;

var

     event : byte; absolute $20;
     get_midi : byte;  absolute $21;
     run_stat : byte; absolute $22;

//**************************************************************************
//Procedure e Function
//**************************************************************************
 procedure nota_on();
 begin
        run_stat := $90;            //Note ON/OFF
        usart_write(event);
 end;

//***************************************************************************
  procedure nota_off();

  begin
        run_stat := $80;           //Note OFF
        usart_write(event);
  end;
//**************************************************************************

//***************************************************************************

//***************************************************************************

//**************************************************************************
//Main Program
//**************************************************************************
begin                      //Main
     run_stat := 0;

     trisa := %11111111;
     trisb := %01000010;   //***********************************
                           //RB0 = Note                  OUT
                           //RB1 = Midi In               IN
                           //RB2 = Toggle Sync           OUT

                           //RB3 = Key Velocity          OUT
                           //RB4 = Pitch Bend            OUT
                           //RB5 = Gate                  OUT
                           //RB6 = 8th/16th 1=16th       IN

                           //RB7 = Data Out 5            OUT
                           //RA0 = Data Out 0            OUT
                           //RA1 = Data Out 1            OUT

                           //RA2 = Data Out 2            OUT
                           //RA3 = Data Out 3            OUT
                           //RA4 = Data Out 4            Out

                           //RA5 = Legato/Staccato 1=Leg IN
                           //RA6 = Data Out 6            OUT
                           //RA7 = Clock                 IN

     usart_init(31250);    //Inizializza la linea midi a 31250 baud

     portb := %00011001;
     cmcon := %00000111;
     while true do
     begin
          if usart_data_ready = 1 then //Verifica se è arrivato un dato

             begin                     //E' arrivato un dato valido
             get_midi := usart_read;   //Legge il dato midi
             event := get_midi;
             if get_midi < $80 then    //Running Status

                     begin
                         case run_stat of
                         $90begin
                              event := 124 - event;
                              usart_write(event);
                              run_stat := $91;

                              end;
                         $91begin
                              usart_write(event);
                              run_stat := $90;
                              end;
                         $80begin
                              event := 124 - event;

                              usart_write(event);
                              run_stat := $81 ;
                              end;
                         $81begin
                              usart_write(event);
                              run_stat := $80;
                              end;

                         $0:  usart_write(event);
                         end;
                      end
              else
                   begin
                   if get_midi < $F8 then get_midi := get_midi and $F0;

                      case get_midi of
                      $90:  nota_on();
                      $80:  nota_off()
                      else begin
                 //Devo fare passare i real-time code 
                            if get_midi < $F8 then run_stat := 0; 
                            usart_write(event);
                            end;

                      end;
                    end;
             end;
     end;
end.

 

 

Data la scarsa leggibilità allego tutto il progetto sotware in fomato .zip

Nikke

Il software in revisione 1

Nikke-Rev1

LAVORO FINITO

Oggi 16-03-2011, si è finalmente conclusa la collaborazione con Nikke, che se magari non è un espertissimo di elettronica, con le scatole se la cava proprio bene.

Innanzitutto ha provveduto ad installare un trasformatore per alimentare il tutto, ha effettivamente usato una tensione un po’ alta (13Vac), ma ha verificato che l’ oggetto anche dopo molte ore di funzionamento non scaldava:

Un particolare del trasformatore:

E poi ha iniziato col farsi la scatola:

E ad allogiarvi l’ elettronica:

 

E il risultato finale:

 

 

 

CONCLUSIONI

L’ oggetto è stato realizzato e a quanto pare funziona, va detto che questo semplicissimo accorgimento può trovare molte espansioni, ad esempio suonare gli accordi con un dito, arpeggi automatici, trasposizione di scale, e molte altre applicazioni.

 

Numeri immaginari e filtri attivi

Questo documento è stato scritto per venire incontro a tutti coloro che, pur essendo appassionati di elettronica, non hanno avuto l’ opportunità di entrare in confidenza con questo argomento.

Il termine stesso di “numero immaginario”, suscita subito una certa diffidenza. In realtà non è nulla di particolarmente complicato, almeno nell’ utilizzo che se ne fa nel campo dei filtri attivi, o dei controlli automatici.

Premetto che io non sono un insegnante e spero quindi di riuscire a trasmettere quel poco di cui sono a conoscenza.

Mi auguro di non avere scritto troppi strafalcioni e di non fare storcere il naso a lettori esperti nel settore.

Numeri Immaginari e Filtri

Blogging Sites