Sommario:

Un'altra scatola da MIDI a CV: 7 passaggi (con immagini)
Un'altra scatola da MIDI a CV: 7 passaggi (con immagini)

Video: Un'altra scatola da MIDI a CV: 7 passaggi (con immagini)

Video: Un'altra scatola da MIDI a CV: 7 passaggi (con immagini)
Video: Maranza cerca di prendermi la moto 2024, Luglio
Anonim
Un'altra scatola da MIDI a CV
Un'altra scatola da MIDI a CV

Un altro MIDI to CV box è un progetto che ho sviluppato quando un Korg MS10 ha bussato alla mia porta e si è svolto nel mio studio. Essendo il mio setup fortemente legato al MIDI per automatizzare e sincronizzare tutti gli strumenti, quando ho comprato l'MS10 il primo problema che ho dovuto affrontare è stato come implementare tale controllo.

I Korg MS20/10 non sono i sintetizzatori più facili su cui implementare il MIDI: prima di tutto, si basano sul controllo Hz/V (correlazione lineare tra la tensione di controllo e la frequenza delle note), invece che ott/V (1V per ottava); secondo, per attivare una nota è necessario inviare un segnale di gate negativo e cortocircuitare l'ingresso a massa (S-Trig), non un segnale a +5 V (V-trig).

Ci sono varie soluzioni commerciali per controllare tali strumenti oggigiorno (es. Arturia Beatstep Pro, Korg SQ-1, Kenton Solo) ma io sono un bastardo da quattro soldi e anche 100 euro sono troppi per un dispositivo "che non suona":).

Eccoci quindi: lascia che ti mostri come costruire un MIDI to CV box a basso budget per controllare/automatizzare l'intonazione, il gate, la velocità e la frequenza di taglio di un sintetizzatore MIDI pre-MIDI con un controller MIDI esterno (tastiera, DAW, sequencer o altro).

"E il nuovo MS20 mini?"

Come quasi tutti sanno, il nuovo MS20 è in realtà MIDI ready: IN con connettore MIDI a 5 poli e IN/OUT con connettore USB.

"Quindi, se ho un MS20 mini questa cosa è inutile!"

Beh no. MS20 mini riconosce solo i messaggi di attivazione/disattivazione delle note e la tastiera non è sensibile alla velocità. Non c'è modo di superare questo problema con la tastiera vintage o mini MS10/20, ma con il midi box e una tastiera sensibile alla velocità sei d'oro. Inoltre, con il MIDI box è possibile automatizzare il taglio del filtro (o qualsiasi altro parametro controllabile in tensione) o farlo modulare dalla nota MIDI in ingresso sulla velocità. Anche in questo caso, l'unico canale MIDI a cui risponde MS20 mini è il canale 1. Con questo box puoi superare anche questo limite.

"E se avessi un synth Oct/V?"

Nessun problema! Il codice che ho scritto è compatibile con i sintetizzatori Oct/V (non testato, ma sono sicuro che funzionerà immediatamente;)).

Passo 1: !! Nota di attenzione - Esclusione di responsabilità

La tua attrezzatura è molto preziosa e non dovrebbe essere utilizzata per eseguire test.

Giocare con l'elettricità può danneggiare gravemente la tua attrezzatura o farti del male.

Non posso essere ritenuto responsabile per danni alla tua attrezzatura/hardware o anche a te stesso derivanti da uno qualsiasi dei software o schemi o informazioni o collegamenti che ho riportato in questo istruzioni.

Sei stato avvertito!

Passaggio 2: progettazione dell'hardware

Arduino è utile quando si ha a che fare con progetti come questo. L'esistenza di una grande Community e di ottime librerie che abbracciano quasi tutti i compiti comuni lo rendono la scelta giusta. Qui la scheda sarà programmata in modo tale da leggere i dati MIDI in ingresso e quindi inviare le tensioni appropriate all'azionamento:

- Pitch, convertendo un'uscita pwm in una tensione analogica per pilotare il VCO tramite un convertitore digitale-analogico (DAC)

- Velocity, filtrando un'uscita pwm per pilotare il VCA con un semplice filtro RC

- Filter Cutoff Frequency, filtrando un'uscita pwm per pilotare il VCF con un semplice filtro RC

- Gate, direttamente da un digital out in caso di V-trig (mettere in serie all'uscita un 1Kohm per ridurre il drain di corrente) o tramite un semplice interruttore a transistor pnp fuori dal digital out (vedi schema allegato allo schema passo).

Arduino non è in grado di emettere tensioni direttamente costanti, ma impulsi 0/+5 V con vari periodi (PWM). Abbiamo bisogno di convertitori da digitale ad analogico (DAC) per lo scopo. I filtri RC sono il DAC più semplice che mi venga in mente. Un filtro RC è abbastanza buono per l'amplificatore e il filtro controllati in tensione (VCA e VCF). I filtri RC sono progettati per ottenere una frequenza di taglio < 20Hz (frequenza udibile più bassa).

Ho fatto alcuni test con condensatori non polarizzati a bassa capacità e ho concluso con un valore di capacità di 0.1uF per essere la soluzione migliore. Testato bene su un MS20 MKII.

Sfortunatamente, non possiamo fare affidamento su un filtro RC per pilotare l'oscillatore controllato in tensione (VCO) poiché non sarebbe sufficientemente accurato (in scala Hz/V, all'estremità inferiore due semitoni adiacendi differiscono per meno di 0,02V; in V /ott due semitoni adiacenti differiscono per 0,083 V); useremo un IC DAC (MPC4725) per questo.

Limiti noti

Limitando la tensione dell'unità a 5 V (la tensione di uscita di Arduino), viene coperta l'intera gamma da 0 a 5 V per la velocità; il cutoff è coperto per metà (da -5V a +5V); la gamma VCO è parzialmente coperta poiché in Hz/V sarebbe necessaria una tensione di 8 V per raggiungere i 440 Hz A4. Con un limite di uscita di 5V possiamo portare l'oscillatore fino alla frequenza D4 in Hz/V.

Passaggio 3: elenco dei componenti

Elenco dei componenti
Elenco dei componenti
Elenco dei componenti
Elenco dei componenti
Elenco dei componenti
Elenco dei componenti

Hai bisogno di:

1X Arduino UNO (o nano)

1X scheda DAC MPC4725

4 connettori mono da 1/8" o 1/4"

1X connettore MIDI

Fotoaccoppiatore 1X 6N138

1X 1N4148 diodo

Resistore 1X 220 ohm 1/4 W

Resistore 1X 470 ohm 1/4 W

Resistore 1X 10K ohm 1/4 W

Resistore 4X 1K ohm 1/4 W

Condensatore 2X 0,1 uF

Transistor pnp 1X BC547 (in caso di S-trig)

1X scatola in ABS (almeno 55 x 70 x 100 mm)

… e ovviamente breadboard o perfboard, saldatore, filo di saldatura e cavi (2 metri di 28 AWG dovrebbero essere sufficienti).

Si noti che nelle immagini sopra il mio prototipo monta condensatori elettrolitici da 100 uF, ma sono troppo lenti a causa del tempo di carica della capacità. Una capacità di 0.1uF è la scelta giusta.

Ho usato un connettore aggiuntivo per alimentare il mio arduino; non è necessario poter alimentare il microcontrollore direttamente tramite il connettore mini USB a bordo.

Passaggio 4: collegamenti/schemi

Collegamenti/Schemi
Collegamenti/Schemi
Collegamenti/Schemi
Collegamenti/Schemi
Collegamenti/Schemi
Collegamenti/Schemi

MIDI IN

Il circuito MIDI IN è semplice e ben descritto in rete. Prendi QUESTO eccellente tutorial su MIDI e Arduino di Amanda Gassaei, per esempio. Comunque ho fatto l'ennesimo schema sull'argomento.

Notare che ho aggiunto uno switch nello schema MIDI IN (switch 1): questo è necessario quando si carica un nuovo sketch su Arduino perché l'opto interferisce con la linea RX anche senza messaggi midi in arrivo. Devi aprire lo switch prima di caricare il tuo schizzo o l'IDE non riuscirà a caricare il nuovo schizzo.

È possibile eventualmente modificare lo schizzo per utilizzare una comunicazione software seriale.

DAC, filtro RC, sintetizzatore

La connessione per DAC, filtri RC e Synth (pitch, gate e velocità) è mostrata nel diagramma in alto. Ho preso come riferimento un patch panel Korg MS20, ma ho testato tutto anche su un MS10. La connessione diretta del CV di velocità al patch point di "guadagno iniziale" VCA non ha alcun effetto (devo approfondire questa cosa) ma se lo colleghi al punto di patch "Total" e aumenti i tuoi potenziometri esterni totali (MG/T. EXT), sentirete piacevoli variazioni di tono in funzione della velocità della nota.

I miei schemi (e anche il mio prototipo) non utilizzano un resistore di limitazione della corrente all'uscita del DAC, ma è sempre una buona idea posizionarne uno per garantire una lunga durata ai circuiti. Sarà sufficiente una resistenza da 220 ohm.

Si noti che negli schemi sopra sono riportati condensatori elettrolitici da 100 uF, ma sono troppo lenti a causa del tempo di carica della capacità. I condensatori non polarizzati da 0.1uF sono la scelta giusta.

Cancello fuori

Nel caso in cui si voglia sequenziare un synth compatibile con i segnali V-Trig (trigger di tensione), sarà sufficiente un resistore in serie da 1k ohm per ridurre il consumo di corrente; nel caso di un synth S-Trig (switch trigger), potresti usare un semplice circuito switch PNP (vedi schema allegato).

Passaggio 5: il software

Il software
Il software

Ho cercato di mantenere lo schizzo il più chiaro e "leggibile" possibile.

Ho lavorato su un semplice foglio di calcolo che ho trovato QUI per derivare una curva Voltage Vs Note# e utilizzare direttamente l'equazione nel microcontrollore. L'equazione è mostrata nel grafico in alto. Ho usato C2 come nota di riferimento per ottenere una relazione Tensione Vs conforme ad Arp/Korg (C0 - 0.25V, C1 - 0.5V, C2 - 1V, C3 - 2V, C4 - 4V, C5 - 8V e così via).

Ho dovuto definire qualche variabile con cui giocare per ottenere una buona messa a punto… prenditi il tuo tempo per trovare i valori corretti. È necessario un sintonizzatore.

Aumenteremo la frequenza pwm di un timer/contatore per ridurre l'ondulazione delle tensioni di uscita (facile come una riga di codice).

Per mantenere il codice reattivo ai byte in ingresso, il codice si basa molto sui callback delle funzioni.

Hai bisogno delle librerie "Adafruit_MCP4725.h" di Sparkfun e "MIDI.h" di Forty Seven Effects/Francois Best da compilare! (Grazie mille a queste persone: senza i loro sforzi questo progetto non sarebbe mai stato realizzato!).

Presumo che tu abbia l'IDE Arduino pronto nel tuo PC e che tu sappia come caricare uno schizzo sulla tua scheda Arduino.

Non sono un programmatore nella vita reale, quindi è molto probabile che lo sketch possa essere scritto in un modo migliore. Sono aperto ai suggerimenti (imparo sempre qualcosa guardando il codice del programmatore;))

Ulteriori note sono scritte nel codice sottostante. Installa le due librerie, apri il codice allegato sul tuo IDE, collega la tua scheda, seleziona il tipo di scheda e carica.

Passaggio 6: risoluzione dei problemi

Anche se il progetto è di basso livello, ci sono un sacco di cose che potrebbero andare storte. Se riscontri problemi durante il tentativo di creare la tua casella MIDI in CV, segui questi passaggi:

1. Assicurati che Arduino stia ricevendo correttamente i messaggi MIDI

Controlla il canale di uscita su cui la tua tastiera, DAW o Sequencer sta emettendo i messaggi MIDI. Arduino sta ascoltando il canale 1 per impostazione predefinita. Carica "TEST_MIDI_IN.ino" per leggere un messaggio noteON in arrivo.

2. Ricontrolla i cablaggi

… o meglio ancora: ricontrollali tre volte! Tieniti il tuo tempo per questo.

3. Controllare l'indirizzo e l'uscita del DAC

Il DAC potrebbe essere impostato per ricevere i dati su un indirizzo diverso da quello che ho impostato nello sketch. Controllare l'indirizzo eseguendo "I2C_scanner.ino". Se si verifica un errore "nessun dispositivo trovato", controlla il cablaggio del tuo DAC (gli ingressi SDA e SCL sono diversi su schede Arduino diverse!). Se possiedi un oscilloscopio (anche quegli oscilloscopi digitali da 15 euro sono abbastanza buoni… e divertenti da usare!) puoi controllare l'uscita del tuo DAC caricando l'esempio del generatore di onde triangolari incluso con l'installazione della libreria DAC.

Ricorda che quando un fotoaccoppiatore è collegato all'ingresso RX della tua scheda arduino, non sarai in grado di caricare un nuovo schizzo!! Posiziona un interruttore (potrebbe essere un semplice jumper) prima del pin RX.

La maggior parte di questi schizzi di prova non sono miei o almeno basati su materiale online esistente.

Questa cosa mi suona stonata!?

Questo non è un problema reale: l'equazione derivata per il controllo Hz/V è "ideale". Qualche deviazione dal comportamento ideale può nascere dai +5V che stai fornendo non 5.000V, dal DAC e dallo strumento stesso. Per risolvere devi agire sul tuo potenziometro synth tune/fine tune e "voilà" un controllo MIDI perfettamente accordato;)

Passaggio 7: link utili

en.wikipedia.org/wiki/CV/gate

www.instructables.com/id/Send-and-Receive-…

www.songstuff.com/recording/article/midi_me…

pages.mtu.edu/~suits/NoteFreqCalcs.html

espace-lab.org/activites/projets/en-arduin…

learn.sparkfun.com/tutorials/midi-shield-h…

provideyourown.com/2011/analogwrite-conver…

www.midi.org/specifications/item/table-3-c…

arduino-info.wikispaces.com/Arduino-PWM-Fr…

sim.okawa-denshi.jp/en/PWMtool.php

Consigliato: