Electronique > Réalisations > Interfaces > Interfaces MIDI > Interface MIDI 017

Dernière mise à jour : 15/12/2019

Présentation

Cette interface MIDI permet de convertir une note MIDI en sa représentation CV (Control Voltage), avec Gate et Trigger. Il s'agit donc d'un convertisseur MIDI/CV-Gate.

interface_midi_017_pcb_3d_a

Elle dispose d'une entrée MIDI et d'une sortie en tension 0 à +5 V. A chaque note reçue, l'interface délivre une tension analogique comprise entre 0 et +5 V qui dépend de la hauteur de la note (pitch). A chaque réception d'un événement NoteOn (touche clavier enfoncée), deux sorties logiques "Gate" et "Trigger" s'activent. La sortie Trigger ne s'active que très brièvement (environ 1 ms) alors que la sortie Gate reste activée et ne se désactive que lors de la réception de l'événement NoteOff correspondant. Le circuit est basé sur un PIC 16F628A et un convertisseur numérique analogique (DAC) de type MCP4921. Voir aussi (pour info) la page Commande CV_Gate 001.

Avertissement

Quid de cette interface ? A-t-elle un réel intérêt quand on voit tout ce qui se fait à gauche et à droite, tant chez les professionnels que chez les amateurs passionnés ? Oui, cette interface ne fait pas tout ce qu'on aimerait avoir sous la main quand on possède une grande quantité de synthétiseurs qui ne réclament pas les mêmes signaux de commande. L'idée ici est de montrer (une fois de plus, car je ne suis pas le premier à le faire) qu'il faut peu de choses pour réaliser une interface MIDI/CV. Certes, on peut fort bien acheter un module pro qui fait tout, on est (presque) sûr du résultat. Mais on peut aussi se casser un peu la tête et fabriquer soi-même son module, cela est financièrement intéressant pour un usage ponctuel ou pour un unique synthétiseur (plus ou moins) vintage et "à l'écart des autres" (ne me dites pas que toutes les interfaces existantes fonctionnent avec tous les synthés de la planète... à moins peut-être d'y mettre le prix).
Remarque : une interface MIDI/CV plus évoluée (interface MIDI 017c) est en cours de développement (demande pro). Elle fonctionne déjà, réagit plus vite que celle décrite ici et gère les courbes Octave/Volt ou Hertz/Volt, et est presque terminée. Affaire à suivre ;-)

Schéma

Le coeur du montage est un microcontrôleur PIC 16F628A cadencé par un quartz de 20 MHz. Le convertisseur numérique analogique MCP4921 ne fait que ce qu'on lui demande, à savoir restituer sur sa sortie analogique une tension qui correspond à une valeur numérique qu'on lui transmet via les broches de son bus SPI.

interface_midi_017

Fonctionnement général
L'interface possède une entrée MIDI et une sortie de tension analogique. Quand un événement MIDI de type Note se présente à l'entrée, l'interface décode les octets de l'événement et en extrait les valeurs (canal MIDI, hauteur note et vélocité). S'il s'agit du début d'une note (NoteOn), l'information de hauteur est envoyée au convertisseur numérique analogique après un très léger traitement. En même temps, la sortie logique Gate est placée au niveau haut. S'il s'agit de la fin d'une note (NoteOff), le convertisseur numérique analogique est remis à zéo (tension de sortie nulle) et la sortie logique Gate est placée au niveau bas. Cette interface simple ne peut pas gérer les accords. Si plusieurs notes arrivent "en même temps", c'est la dernière qui a le dernier mot. Le temps de réaction est élevé : une fois reçus tous les bits de l'événement MIDI, les sorties en tension, Gate et Trigger sont mises à jour en moins d'une milliseconde (610 us pour tout dire). Bien sûr, les sorties Gate et Trigger ne sont activées qu'une fois la sortie en tension mise à jour et stabilisée... ce qui demande entre 4 et 10 us au DAC utilisé ici.

Circuit d'horloge / base de temps
Les lignes RA7/OSC1 et RA6/OSC2 du PIC sont connectées à un quartz de 20 MHz avec deux condensateurs céramiques de faible valeur (22 ou 27 pF / 63 V). On peut en fait travailler avec toute fréquence comprise entre 8 et 20 MHz (recompilation requise si changement). La version précédente datée du 28/09/2014 tournait à 8 MHz, la version du 15/12/2019 tourne à 20 MHz. En passant de 8 MHz à 20 MHz, on gagne un peu en réactivité :

8 MHz20 Mhz
Délai entre arrivée note MIDI-ON (1) et CV1,2 ms0,5 ms
Délai entre arrivée note MIDI-ON et Trig1,2 ms0,5 ms
Délai entre arrivée note MIDI-ON et Gate1,2 ms0,5 ms
Délai entre arrivée note MIDI-OFF et CV0,7 ms0,3 ms
Délai entre arrivée note MIDI-OFF et Trig (2) --
Délai entre arrivée note MIDI-OFF et Gate 0,2 ms0,11 ms
(1) : après réception effective des trois octets constituant la note MIDI, laquelle dure environ 1 ms
(2) : la durée du signal Trig est constante et ne dépend donc pas de la durée de la note

Entrée MIDI
L'entrée MIDI est composée de l'optocoupleur U2 raccordé sur la prise DIN 5 broche J1, via une résistance de limitation de courant (R1) et une diode (D1) qui protège l'optocoupleur en cas d'inversion des deux fils d'entrée de la prise DIN (broches 4 et 5). La sortie de l'optocoupleur permet de récupérer le signal MIDI au format TTL, grâce à la présence de la résistance de charge R2 reliée au +5 V. Les données MIDI mises en forme aboutissent à l'entrée RB1/RX1 du PIC.

Conversion MIDI vers CV
Il existe plusieurs "règles" de conversion, avec une approche linéaire (Hz / volt) ou exponentielle (octave / volt). J'ai adopté ici celle du 1 V / octave (méthode adoptée par Roland, Moog, Sequential Circuits, Oberheim ou encore ARP) avec une sortie 0 à +5 V :
- tension de 0 V pour la note Do0 (C0)
- tension de +1 V pour la note Do1 (C1)
- tension de +2 V pour la note Do2 (C2)
- tension de +3 V pour la note Do3 (C3)
- tension de +4 V pour la note Do4 (C4)
- tension de +5 V pour la note Do5 (C5)
La note Fa# (F#), qui se trouve entre deux Do (C) espacés d'un octave, correspond à une tension de x.5 V (1,5 V pour Fa#1, 2,5 V pour Fa#2, etc). De même, la note Ré# (D#), qui se trouve entre un Do et le Fa# qui suit, correspond à une tension de x.25 V (1,25 V pour Ré#1, 2,25 V pour Ré#2, etc). On remarque vite qu'une plage de tension de 0 V  à +5 V couvre 5 octaves (on peut noter au passage que certains instruments jouent une note différente du Do0 pour une tension CV de 0 V - Fa pour le MiniMoog, par exemple).

Précision de la tension de sortie CV
La tension max de sortie du convertisseur (valeur pleine échelle) correspond à la tension appliquée sur la broche VREFA du DAC (broche 6). Si la tension de sortie de l'alimentation utilisée pour cette interface ne fait pas pile poil +5,00 V, alors la tension de sortie du convertisseur sera décalée d'autant puisque c'est cette même alim qui est utilisée comme référence de tension. Pour faire plus sérieux, on peut appliquer sur la broche VREFA du DAC, une tension de +5 V issue d'une référence de tension, qui sera bien plus stable même avec des différences de température ambiante élevées. Le TL431 avec un petit potentiomètre ferait très bien l'affaire, ainsi qu'un AD588 (en +5,000 V). Ceci dit vous avez sans doute noté la présence de deux boutons poussoirs appelés T- et T+. Ils permettent de décaler la tension de sortie en plus ou en moins par pas de 1,22 mV, valeur qui correspond au pas du convertisseur (4096 pas en 12 bits -> 5,000 V / 4096 = 1,22 mV). La plage de réglage va de -125 à +125 pas, ce qui permet d'obtenir en sortie une valeur de pleine échelle comprise entre +4,85 V et... +5 V. Bah oui, le DAC ne va pas sortir plus que la tension d'alim ! Mais pour toutes les valeurs inférieures, le décalage sera celui imposé par vos soins (sauf bien sur en tout début ou en toute fin d'échelle, où on observera forcément un tassement progressif). A la première mise sous tension du montage, la valeur du décalage est de 0. La pression des boutons-poussoirs T- ou T+ vous permet de décaler le cas échéant, la tension de sortie sur toute son étendue. La valeur de décalage spécifiée est bien sûr conservée en mémoire et réappliquée à la mise sous tension suivante. Pendant la phase de réglage (pression sur T- ou T+) la tension de sortie du DAC correspond à la valeur de la dernière note reçue avec application de l'offset. Si aucune note n'a été reçue depuis la mise sous tension, c'est la note Do3 qui est utilisée. Si vous n'avez que faire de cette fonction de réglage de décalage, vous pouvez supprimer les deux boutons T- et T+ et raccorder en permanence à la masse les broches RA2 et RA3 du PIC.

Modification de la note de bas d'échelle
La note de bas d'échelle est fixée par défaut à C0 mais on peut la modifier via la fonction Learn. La procédure à suivre est très simple :
- appuyer sur bouton Learn, puis
- envoyer la note MIDI qui correspond au bas d'échelle désiré.
La hauteur de la note reçue est désormais utilisée comme bas d'échelle et est conservée en EEPROM pour usage ultérieur, même après coupure de l'alimentation.

Sortie Gate et Trigger
La sortie Gate délivre une tension positive de +5 V tant qu'une note est jouée. La sortie Trigger délivre quant à elle une courte impulsion positive d'environ 1 ms au début de la note (événement NoteOn).

interface_midi_017_graphe_001a

Alimentation
Un régulateur de tension de +5 V est prévu directement sur le circuit (U3), ce qui permet d'alimenter l'interface avec n'importe quel bloc d'alimentation secteur qui délivre une tension comprise entre +9 V et +15 V. La consommation est assez faible pour se permettre d'utiliser un régulateur de tension "miniature" de type LM78L05 (100 mA max), et ce dernier n'a pas besoin de dissipateur thermique.

Choix d'autres optocoupleurs

Il est possible d'utiliser d'autres optocoupleurs pour l'entrée MIDI, voir page Interfaces MIDI pour plus de détails. 

Brochage des prises MIDI

Câblage valable pour les prises MIDI IN, MIDI OUT et MIDI THRU.

midi_din_cablage_001

La borne 2 est reliée à la masse au niveau des sorties mais pas au niveau des entrées, pour éviter toute boucle de masse entre équipements.

Prototype

Interface réalisée et testée avec ma platine EasyPic7 et mon petit clavier maître Evolution (bas de gamme mais suffisant).

interface_midi_017_proto_001a interface_midi_017_proto_001b 

La procédure de test était simple. Elle a consisté à presser une note en continu sur le clavier MIDI, et à vérifier à l'ohmmètre la valeur de la tension de sortie du convertisseur. Une LED câblée sur les sorties Trigger et Gate confirmaient la bonne marche (le bon déclenchement) du système. La LED Trigger s'allumait si brièvement qu'on avait peine à la voir, mais le reste montre que c'est OK. Mesures effectuées avec Do0 comme base de l'échelle et avec un offset de décalage de 0 (boutons T- et T+ non utilisés) :
- Do0 : tension mesurée de 0,00 V
- Do1 : tension mesurée de 0,99 V
- Do2 : tension mesurée de 1,98 V
- Do3 : tension mesurée de 2,99 V
- Do4 : tension mesurée de 3,99 V
- Do5 : tension mesurée de 4,99 V
Tension d'alimentation mesurée aux bornes du convertisseur MCP4921 : 4,99 V. Résultats tout-à-fait cohérents donc.

Logiciel du PIC

Le logiciel compilé (*.hex) est disponible en libre service, comme d'habitude.
Interface MIDI 017 - PIC 16F628A - 15/12/2019
Si vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à utiliser, merci de consulter la page PIC - Sources.

Circuit imprimé

Non réalisé.

Historique

15/12/2019
- Recompilation du code après remplacement du quartz 8 MHz par un quartz 20 MHz, pour une réactivité légèrement accrue (voir paragraphe Circuit d'horloge / base de temps).
28/09/2014
- Première mise à disposition.