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

Dernière mise à jour : 26/10/2014

Article non terminé, volontairement non référencé dans les sommaires du site


Présentation

Cette interface MIDI dispose de huit entrées analogiques et d'une sortie MIDI.

interface_midi_015_pcb_3d_a

Elle permet de transformer en temps réel des événements audio en événement MIDI de type NoteOn. Elle a été conçue pour délivrer des notes MIDI en réponse à des sons issus d'une boîte à rythme dotée de sorties instruments individuelles.

Schéma

Le coeur du montage est un microcontrôleur PIC 18F45K22 cadencé par un quartz de 16 MHz. 

interface_midi_016

Fonctionnement général
L'interface possède huit entrées analogiques qui sont exploitées pour détecter la présence d'un signal audio. Quand une source audio est détectée sur l'une des entrées, une note MIDI est délivrée sur la sortie MIDI OUT.

Détection audio
Le signal audio dont on souhaite détecter la présence ne va pas directement sur les entrées du PIC. Ce serait, me semble-t-il, inconvenant. J'ai trouvé plus utile et moins risqué de passer par un étage d'adaptation qui permet une petite amplification, et surtout une détection d'enveloppe sommaire. Cet étage d'adaptation est dupliqué en autant d'exemplaires que d'entrées analogiques prévues, à savoir huit dans notre cas et pour commencer. Le signal BF appliqué à l'entrée de l'étage d'adaptation est d'abord amplifié, puis il est ensuite redressé et mémorisé sur une courte période. Cette mise en forme permet au PIC d'avoir le temps de réagir, sachant qu'il effectue une analyse sur l'ensemble des entrées une fois toutes les ms (donc 1000 fois par seconde). Imaginez simplement que le son à détecter ait une fréquence de 1000 Hz et que le PIC effectue la lecture quand le signal passe par zéro : dans ce cas on ne détecte rien ! En redressant et lissant le signal BF, on dispose d'une tension continue qui reste présente même quand le signal BF repasse par zéro, c'est le principe utilisé dans les indicateurs de niveau tels que vumètre ou crêtemètre. Le plus difficile dans l'affaire est de choisir une constante de temps qui convient pour une assez large plage de fréquences, tout en garantissant une ondulation faible de la tension continue obtenue par redressement et filtrage, et une chute (valeur de release) assez rapide quand le signal BF disparaît. Cela est d'autant plus "critique" ici qu'on veut détecter des sons très graves (grosse caisse) ou des sons plus "aigus" (cymbales). Pour "moyenner", j'ai décidé d'utiliser une constante de temps qui va bien pour des signaux dont la fréquence peut descendre à 80 Hz et monter à 2 kHz, le temps de réaction dépend de la fréquence du signal à détecter mais cela joue sur un temps de l'ordre de la milliseconde et cela me va. Globalement, le temps de réponse de l'interface est compris entre 3 et 4 ms, sachant qu'il correspond à l'écart de temps entre le début de montée du signal audio (qu'on n'entends pas encore) et la transmission du message MIDI NoteOn correspondant. J'ai un peu galéré pour conserver une bonne "sensibilité" de l'appareil, car je voulais que l'amplitude du signal redressé soit utilisé comme valeur de vélocité dans les messages MIDI transmis en sortie. Avec un signal de basse fréquence, l'ondulation résiduelle du signal redressé et filtré est plus élevée et pour de faibles niveaux BF d'entrée, on tombait dans la problématique des déclanchements intempestifs. La solution que j'ai adopté consiste à ajouter un hystérésis et disposer de deux seuils distincts pour créer les événements MIDI NoteOn et NoteOff. Il faut tout de même noter

Etages d'entrée audio
Sans grande surprise, les huit étages d'entrée sont identiques. Je propose plusieurs schémas :
- schéma interface_midi_016_ain : simple mais moins performant
- schéma interface_midi_016_ain_2 : plus compliqué mais fiabilité de détection accrue pour tous types de signaux et pas de gestion de vélocité
- schéma interface_midi_016_ain_3 : un intérmédiaire qui commence à me plaire...
Nota : *ain = Analog In

Schéma "interface_midi_016_ain"
Le plus simple donc, avec un AOP et quelques composant pour chaque entrée.

interface_midi_016_ain

On utilise deux circuits intégrés de type "quadruple AOP", référence LM324. L'AOP est alimenté en mono-tension, on fait donc travailler ses entrées avec une tension de polarisation dont la valeur est moitié de celle de la tension d'alimentation. Le signal amplifié est ainsi centré sur une tension continue fixe de +2,5 V, tension qui ne passe pas la barrière formée par le condensateur de liaison situé en sortie de l'AOP. Les composants qui suivent (diodes, condensateur et résistance) redressent et filtrent le signal audio amplifié, l'amplitude max en sortie au voisinage de l'écrêtage est voisine de 4,5 V.

Schéma "interface_midi_016_ain_2"
Ce second schéma utilise plus de circuits intégrés et surtout il est alimenté par une tension symétrique de +/-85 V. Non, c'est une blague, l'alimentation reste à +5 V. En revanche, le schéma qui suit ne montre qu'une seule voie...

interface_midi_016_ain_2

J'ai prévu une petite régulation d'alimentation locale, mais en pratique je pense que notre porte-monnaie peut s'en passer. Le circuit détecteur est composé de quatre sections : un étage amplificateur construit autour de U101:A et dont le gain peut être modifié grâce au potentiomètre RV101, un étage redresseur basé sur U101:B, U101:C et U101:D, un étage comparateur de tension centré sur U102 avec un seuil de basculement ajustable (RV102), puis pour finir un monostable redéclenchable élaboré autour d'une moitié de CD4538 (un CD4538 comporte deux monostables dans le même boîtier). Avec ce module de détection, on peut continuer d'utiliser le PIC avec les entrées analogiques même si des entrées configurées en mode logique suffisent. L'idée était de pouvoir interchanger le type d'étage d'entrée sans retoucher au programme du PIC. Il va de soi que ce système, s'il est plus fiable en temps de réponse pour une large palette de signaux sonores, ne travaille qu'en tout ou rien et la gestion de la vélocité n'est plus permise. Je devrais bien pouvoir élaborer à terme un schéma qui réponse à toutes mes demandes... peut-être un étage d'entrée Ain-3 ?
Remarque : ce détecteur est décrit en détail à la page Détecteur sonore 006.

Schéma "interface_midi_016_ain_3"
Ce troisième schéma me satisfait bien plus que les deux précédents, mais il réclame une alimentation symétrique. Pas grave, je sais faire. Une seule voie est représentée, les autres sont identiques.

interface_midi_016_ain_3

Un circuit de redressement double alternance fait suite à un petit ampli d'entrée, et le tout est suivi d'un circuit de mémorisation des crêtes qui ne les garde pas trop longtemps en mémoire. Ce circuit permet de détecter en 6-7 ms, la valeur max d'un signal de grosse caisse 80-120 Hz, sachant que le max peut se trouver sur la deuxième ou troisième alternance du signal audio (qui est de type amorti).

Circuit d'horloge / base de temps
Les lignes RA7/OSC1 et RA6/OSC2 du PIC sont monopolisées pour y connecter un quartz de 16 MHz avec deux condensateurs céramiques de faible valeur (22 pF / 63 V).

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) protégeant 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 RC7/RX1 du PIC. L'entrée RX2 du second UART du PIC n'est pas utilisée. L'entrée MIDI ne sert que pour programmer les notes que l'interface doit délivrer.

Sorties MIDI
Les deux sorties MIDI (broches RC6/TX1 et RD6/TX2 du PIC) délivrent brièvement une note MIDI C3 (Do3) lors de l'initialisation du circuit, ce qui permet à la mise sous tension de vérifier que tout démarre bien. Après l'initialisation, les sorties MIDI délivrent les infos MIDI seulement quand les entrées analogiques sont chatouillées. Pour l'heure, la sortie MIDI TX2 n'est pas utilisée, mais je la laisse, on ne sait jamais.

Programmation
Deux versions du programme existent :
- une version avec événements MIDI fixes codés en dur (aucune configuration possible par l'utilisateur après programmation du PIC);
- une version configurable par l'utilisateur.
Pour la version configurable, on peut utiliser un clavier MIDI ou un séquenceur MIDI, il suffit de respecter la procédure suivante :
1 - Soumettre l'entrée Prog (RD0) à l'état logique haut (cavalier JP1 en place) pour passer en mode Programmation.
2 - Envoyer sur l'entrée MIDI IN de l'interface, la note MIDI qui correspond à la voie à configurer (voir Nota 1).
3 - Envoyer sur l'entrée MIDI IN de l'interface, la note MIDI qui devra être envoyée sur la sortie MIDI OUT 1.
Répéter l'opération pour chaque voie (#1 à #8) à configurer.
Nota 1 : Do3 pour voie #1, Do#3 pour voie #2, Ré3 pour voie #3, etc. jusqu'à Sol3 pour voie #8.

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 délivrant 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 séquenceur portable QY70, le tout associé à mon logiciel MidiTest.

interface_midi_016_proto_001a interface_midi_016_proto_001b 

Le QY70 me sert pour délivrer des sons percussifs et le logiciel MidiTests permet de vérifier la présence des données MIDI en sortie de l'interface. Les tests déjà réalisés sont encourageants mais insuffisants. L'interface ne réagit pas comme je veux quand les sons appliqués aux entrées durent trop longtemps (cymbales). J'ai bien une petite idée pour corriger le problème, et la testerai quand j'aurai le temps.

Logiciel du PIC

Deux versions disponibles :
- une avec événements MIDI fixes codés en dur (aucune configuration possible par l'utilisateur après programmation du PIC);
- une configurable par l'utilisateur (me contacter pour les détails).
Seul le fichier binaire compilé (*.hex) de la version "libre de droits" est disponible, il suffit de m'en faire la demande par mail
Interface MIDI 016 - PIC 18F45K22 - 10/06/2014 - Non disponible sur ce site
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

02/10/2014
- Première mise à disposition.