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 terriblement inconvenant. Il est plus sûr 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. Le signal BF (Basse Fréquence) appliqué à l'entrée de l'étage d'adaptation est amplifié avant d'être redressé et mémorisé durant une courte durée. 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 au moment même où le signal passe par zéro : manque de chance, on ne détecterait rien ! 

Le fait de redresser et de lisser (filtrer) le signal BF permet de disposer d'une tension continue qui reste présente même quand le signal BF repasse par zéro. C'est le principe de base 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, en plus d'un temps de chute (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). Un compromis peut heureusement être trouvé pour des signaux audio dont la fréquence peut descendre à 80 Hz et monter à 2 kHz. J'ai ainsi adopté une constante de temps qui va bien pour cette plage de fréquences. 

Le temps de réaction dépend de la fréquence du signal à détecter, mais ce temps est de l'ordre de la milliseconde et me convient. 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'entend 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.


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, 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 de décalage 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 maximale de la tension 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éponde à toutes mes envies... 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 7 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). La précision et la stabilité de la fréquence d'horloge est indispensable, car on désire créer et envoyer des données MIDI, qui si possible doivent être reconnues par n'importe quel appareil MIDI.


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 elle est prête à l'être, 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 78L05 (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.