Electronique > RéalisationsProduction sonore > Générateur de percussions 003

Dernière mise à jour : 13/06/2010

Présentation

Le montage présenté ici permet de générer quatre sons d'instrument de musique de type "percussion". Attention, les sons ne sont pas générés localement, mais au travers d'un instrument de musique électronique (synthé ou expandeur) ou logiciel (VSTi ou autre instrument virtuel). L'appareil dont il est question ici n'est qu'un système de déclenchement, qui produit des évenements MIDI à partir d'impulsions mécaniques ou électriques. Pour ce faire, il est doté de quatre capteurs sensibles aux chocs mécaniques et d'une sortie MIDI OUT qui génère des notes en fonction des capteurs sollicités. Ce générateur est dynamique, c'est à dire qu'il gère la vélocité (force de frappe) des capteurs. Selon que l'on frappe doucement ou fort sur les capteurs, les notes générées possèdent une valeur de vélocité faible ou forte. Le coeur du montage est un petit PIC de type 16F88 et les notes générées peuvent être modifiées à tout instant et très simplement. Une version simplifiée à base de PIC 12F675 (une seule voie MIDI et pas de gestion de vélocité) est présentée à la page Générateur percus 003b. Une version plus évoluée à base de PIC 24F (64 voies avec gestion vélocité) est également présentée à la page Interface MIDI 021.

Schéma

Le schéma complet est visible ci-dessous.

percus_003

Le circuit peut être décomposé en trois parties bien distinctes :
- les étages d'entrée analogiques
- le circuit de gestion à base de microcontrôleur
- l'alimentation secteur

Etages d'entrée analogiques
On trouve sur le net des schémas d'étage d'entrée bien plus simples que celui que j'ai adopté. On peut en effet se contenter d'un capteur piezo relié directement sur une entrée analogique d'un microcontrôleur, mais le traitement logiciel à effectuer est un peu plus complexe. Dans mon cas, je ne suis pas encore assez à l'aise avec les microcontrôleurs et le suis un peu plus avec le monde analogique. J'ai donc préféré simplifier le côté logiciel et faire ce qu'il fallait côté matériel. Je vois dans cette approche un avantage : celui de pouvoir modifier certaines caractéristiques des déclenchements sans devoir retoucher au logiciel et donc sans besoin de reprogrammer le microcontrôleur. Cela me semble en tout cas une raison valable pour justifier mon choix et excuser mon manque de compétence. Voyons maintenant comment est constitué le premier étage d'entrée, sachant que les quatre sont rigoureusement identiques. Le capteur piezo n'est pas raccordé directement sur l'entrée analogique du microcontrôleur car j'ai voulu ajouter un système de mémorisation de crête facilitant la lecture de l'amplitude maximale du signal sinusoïdal amortit que ce capteur génère quand on lui tape dessus. Mon dieu que cette phrase est longue, je vous autorise à la relire. A la rigueur, je me demande si un petit graphe n'aiderait pas à comprendre plus vite.

percus_003_graphe_001a

Le signal issus du capteur quand il est soumis à un choc mécanique ressemble à une sinusoïde qui perd de la force très rapidement dans le temps. C'est un peu ce que représente la courbe verte du graphe, que j'ai simplifié et construite à la main pour les besoins de la simulation. La courbe rouge représente le signal électrique analysé par le microcontrôleur, signal que l'on obtient après passage du signal d'origine dans la totalité de l'étage d'entrée. On notera tout de suite que l'amplitude maximale de la courbe rouge ne dépasse pas +5 V, alors que le signal d'origine atteint presque +7 V. Cela est voulu et maîtrisé, grâce à la diode zener D1 de 5,1 V présente dans l'étage d'entrée, qui rabote le surplus pour ne pas faire trop sursauter le microcontrôleur. Mais avant d'arriver à la diode zener, notre signal se retrouve sur la base du transistor Q1 qui est monté en "suiveur de tension" (on parle aussi de montage en collecteur commun). On retrouve sur l'émetteur de ce transistor la même chose qu'on applique sur sa base, mais avec une différence de potentiel de 0,6 V en moins. Le potentiomètre RV1 permet de récupérer une fraction plus ou moins importante du signal en sortie du transistor et de régler la "sensibilité" du système. Le signal présent au curseur du potentiomètre passe par une diode "petits signaux" de type 1N4148  (oui il s'agit bien de D5) pour aboutir sur le condensateur C1. Résultat des courses : l'amplitude max (crête) du signal est mémorisée un court instant par C1 et le signal chute ensuite progressivement. Avantage vu du microcontrôleur ? On voit une courbe qui monte rapidement et qui chute ensuite progressivement, et non pas une succession de montées et de descentes qu'il faudrait pouvoir "trier". De la sorte, le traitement logiciel consiste simplement à regarder dans quel sens va le signal électrique : en montant en amplitude ou en chutant. L'analyse du signal ainsi traité se fait environ 1000 fois par seconde (échantillonnage à 1 kHz). Tant que le signal monte on se contente de l'observer. Et dès qu'il redescend, on considère que la crête a été atteinte. Ne reste alors qu'à lire la valeur maximale acquise et à en déduire la vélocité à donner à la note MIDI qui sera générée dans la foulée. Simple, non ? Pour en finir avec le graphe, précisons que les informations logiques que l'on voit en haut sous l'appellation Out correspondent aux deux évenements MIDI NoteOn et NoteOff, espacés dans le temps de quelques ms.

Circuit de gestion
Il fait ce qui a été dit dans les lignes précédentes. A quoi ça sert de faire des paragraphes, je vous le demande.

Spécification des notes à jouer (mode réglages)
Vous pouvez spécifier la note à jouer mais aussi le canal MIDI de chaque note, grâce au cavalier JP1 et aux interrupteurs et poussoirs câblés sur les lignes RA5, RB0, RB1, RB3, RB4, RB6 et RB7 du PIC (respectivement Prog, SetA, SetB, SetC, SetD, Down et Up). Il n'y a aucune obligation de modifier la hauteur des notes ou numéro de canal MIDI si les valeurs par défaut vous conviennent. Dans ce cas tous les interrupteurs et poussoirs deviennent facultatifs mais la ligne RA5 du PIC doit tout de même être câblée à la masse (les lignes du PORTB peuvent rester en l'air, le pullup interne étant activé). Les valeurs de notes par défaut sont les suivantes :
- Note 1 : Do3 / canal MIDI 1
- Note 2 : Ré3 / canal MIDI 1
- Note 3 : Mi3 / canal MIDI 1
- Note 4 : Fa3 / canal MIDI 1
La fonction des interrupteurs et poussoirs est décrite ci-après :
Cavalier JP1/Prog (câblé sur la ligne RA5)
- cavalier entre broche centrale et masse (RA5 = 0) : mode d'utilisation normal du système
- cavalier entre broche centrale et +5 V (RA5 = 1) : mode réglage des notes à générer
Interrupteur SW1 / SetA (câblé sur ligne RB0)
- interrupteur ouvert (RB0 = 1) : réglage hauteur de note (pitch)
- interrupteur fermé (RB0 = 0) : réglage canal MIDI (channel)
Interrupteur SW1 / SetB (câblé sur ligne RB1)
Actuellement non utilisé.
Interrupteurs SW1 / SetC et SetD (câblés sur lignes RB3 et RB4)
Ces deux interrupteurs permettent de spécifier la note à modifier parmi les quatre disponibles. Un interrupteur ouvert correspond à un état logique haut (valeur logique 1) et un interrupteur fermé correspond à un état logique bas (valeur logique 0).
- Sélection Note 1 / Trig 1 : RB4 = 0 et RB3 = 0
- Sélection Note 2 / Trig 2 : RB4 = 0 et RB3 = 1
- Sélection Note 3 / Trig 3 : RB4 = 1 et RB3 = 0
- Sélection Note 4 / Trig 4 : RB4 = 1 et RB3 = 1
Boutons poussoir Down et Up (câblés sur lignes RB6 et RB7)
Ces boutons poussoir permettent d'incrémenter (Up) ou de décrémenter (Down) les paramètres de la note en cours de sélection. Le paramètre de la note qui est modifié dépend de l'état de l'interrupteur SW1 / SetA (ligne RB0).
- Down : diminution hauteur note si RB0 = 1 ou diminution canal MIDI si RB0 = 0
- Up : augmentation hauteur note si RB0 = 1 ou augmentation canal MIDI si RB0 = 0

Réglage de la hauteur des notes (pitch)
Pour spécifier la hauteur de chacune des quatre notes, il faut tout d'abord que le cavalier câblé en ligne RA5 soit positionné vers le +5 V (RA5 = 1). Ouvrir l'interrupteur SW1 / SetA câblé sur la ligne RB0 (RB0 = 1) pour passer en mode de réglage de hauteur de note. Sélectionner le numéro de la note devant être modifiée à l'aide des microswitches SW1 / SetC et SetD câblés sur les lignes RB3 et RB4.
- Sélection hauteur note 1 (Trig 1 / Note 1) : RB4 = 0 et RB3 = 0 et RB0 = 1
- Sélection hauteur note 2 (Trig 2 / Note 2) : RB4 = 0 et RB3 = 1 et RB0 = 1
- Sélection hauteur note 3 (Trig 3 / Note 3) : RB4 = 1 et RB3 = 0 et RB0 = 1
- Sélection hauteur note 4 (Trig 4 / Note 4) : RB4 = 1 et RB3 = 1 et RB0 = 1
Puis appuyer sur le bouton Down (câblé sur la ligne RB6) ou sur le bouton Up (câblé sur la ligne RB7) pour ajuster à la note désirée. A chaque modification, la note modifiée est envoyée en temps réel sur la sortie MIDI pendant une brève durée.

Réglage du canal MIDI des notes (channel)
Pour spécifier le numéro de canal MIDI de chacune des quatre notes, il faut tout d'abord que le cavalier câblé en ligne RA5 soit positionné vers le +5 V (RA5 = 1). Fermer l'interrupteur SW1 / SetA câblé sur la ligne RB0 (RB0 = 0) pour passer en mode de réglage de canal MIDI. Sélectionner le numéro de la note devant être modifiée à l'aide des microswitches SW1 / SetC et SetD câblés sur les lignes RB3 et RB4.
- Sélection canal MIDI note 1 (Trig 1 / Note 1) : RB4 = 0 et RB3 = 0 et RB0 = 0
- Sélection canal MIDI note 2 (Trig 2 / Note 2) : RB4 = 0 et RB3 = 1 et RB0 = 0
- Sélection canal MIDI note 3 (Trig 3 / Note 3) : RB4 = 1 et RB3 = 0 et RB0 = 0
- Sélection canal MIDI note 4 (Trig 4 / Note 4) : RB4 = 1 et RB3 = 1 et RB0 = 0
Puis appuyer sur le bouton Down (câblé sur la ligne RB6) ou sur le bouton Up (câblé sur la ligne RB7) pour ajuster au canal MIDI désiré. A chaque modification, la note modifiée est envoyée en temps réel sur la sortie MIDI pendant une brève durée.

Retour au mode d'utilisation normal
Une fois les réglages effectués, repositionner le cavalier JP1 vers la masse (RA5 = 0) pour sortir du mode réglage et éviter toute modification intempestive par appui accidentel sur les poussoirs Down ou Up. Les derniers réglages effectués sont stockés en EEProm et sont donc conservées même en cas de coupure d'alimentation.

Ligne RB2 du PIC inutilisée ?
Vous aurez surement noté que les entrées de réglage sont confiées aux lignes RB0, RB1, RB3, RB4, RB6 et RB7 du PIC. Pourquoi ce "trou" en RB2 ? Tout simplement parce que cette ligne pourrait dans un futur plus ou moins proche être utilisée en tant qu'entrée MIDI. On ne sait jamais trop d'avance ce que les évolutions logicielles peuvent apporter...

Alimentation secteur
Elle est basée sur un régulateur de tension tripode classique de type LM7805. La tension d'entrée peut être comprise entre +9 V et +15 V. La diode 1N4007 située à l'entrée du régulateur permet de protéger le tout en cas d'inversion de polarité, ce qui se produit facilement quand on utilise un bloc secteur tout fait - surtout si la polarité de sortie peut être modifiée par l'utilisateur.

Prototype

Dans un premier temps et dans l'attente de réception de PIC 16F88, deux tests ont été réalisés avec succès :
- génération des notes MIDI avec un PIC 16F628A, sans gestion de vélocité au niveau du déclenchement.
- production d'un signal analogique apte à être facilement interprété par le PIC 16F88.

percus_003_proto_001a percus_003_proto_001b percus_003_proto_001c percus_003_proto_001d percus_003_proto_001e percus_003_proto_001z

Les graphes qui suivent sont des copies d'écran de mon oscilloscope portable deux voies picoscope visible sur l'une des photos précédentes (il est raccordé sur mon PC portable). La première voie (voie A, courbe bleue) accueillait le signal en sortie du capteur piezzo, et la seconde voie (voie B, courbe rouge) accueillait le signal traité, en sortie de l'étage d'entrée. Les premières courbes où il n'y a pas de rouge représentent le signal en sortie du piezo quand il n'est pas chargé, ou tout du moins quand il n'est chargé que par l'entrée de l'oscilloscope (1 MO). Ces courbes montrent la forme principale du signal que peut délivrer le capteur lorsqu'on le frappe.

percus_003_proto_001_graphe_001a percus_003_proto_001_graphe_001b percus_003_proto_001_graphe_001c 

On reconnait tout de suite une sinusoïde amortie dont l'amplitude décroit rapidement dans le temps. La régularité de la forme d'onde dépend beaucoup de l'endroit où est posé le capteur et de la façon dont on le frappe. Elle n'a pas vraiment d'importance dans le cas qui nous concerne. Il est intéressant de constater que selon le sens de branchement du capteur, la portion de la sinusoïde qui possède la plus forte amplitude est soit côté positif, soit côté négatif. Peut-être n'est-ce pas pour rien que le capteur que j'ai utilisé possède deux fils colorés rouge et noir... (après tout, un HP classique est bien "polarisé" lui aussi). Les copies d'écran suivantes montre ce que l'on a quand le capteur est branché avec sa "masse" sur l'entrée de l'étage d'adaptation et sa sortie "positive" à la masse du montage. La crête la plus importante est négative.

percus_003_proto_001_graphe_001d percus_003_proto_001_graphe_001e percus_003_proto_001_graphe_001f

Cela a son importance car comme vous pouvez le constater, la montée du signal traité se fait par paliers (courbe rouge sur les deux copies d'écran ci-avant) et il peut y avoir une légère chute entre chaque. Ce qui pose problème si le microcontrôleur s'en apperçoit car il peut dans ce cas déclancher plusieurs notes MIDI là où il n'en faudrait qu'une seule. Les copies d'écran suivantes montrent ce que l'on obtient en branchant le capteur dans l'autre (le bon) sens. 

percus_003_proto_001_graphe_001g percus_003_proto_001_graphe_001h percus_003_proto_001_graphe_001i

La crête la plus importante est maintenant positive et le condensateur de mémorisation se charge tout de suite à sa valeur la plus haute, la décroissance qui suit est régulière. C'est le comportement souhaité pour que le microcontrôleur fonctionne de façon optimale. Notons toutefois que le signal traité met un peu trop de temps à redescendre, cela est lié à la valeur du condensateur de mémorisation (C1) ou à la résistance de décharge qui est en parallèle avec lui (R9) qui est trop élevée. Des valeurs initiales de 100 nF et 220 kO, je suis passé à 100 nF et 100 kO ou 47 nF et 220 kO. Les copies d'écran qui suivent montre qu'avec cette simple modification la descente du signal traité est plus rapide. Profitez-en pour noter la différence des formes d'onde selon les coups portés sur le capteur. Nouvelle preuve que rien n'est parfait dans ce monde.

percus_003_proto_001_graphe_001k percus_003_proto_001_graphe_001l percus_003_proto_001_graphe_001m  

La copie d'écran suivante met le doigt sur un petit "problème" qui heureusement n'est pas gênant. On observe deux crêtes positives de forte amplitude, qui conduisent à un signal traité qui monte brusquement, descend un peu et remonte avant sa décroissance finale. 

percus_003_proto_001_graphe_001j

Le logiciel du PIC pourrait fort bien interprêter cette forme comme la résultante de deux coups séparés, puisqu'il s'attend à avoir une seule montée de tension pour chaque choc sur le capteur. Mais ici une seule note est bien déclanchée, pour la simple raison qu'elle l'est lors de la première descente du signal traité et que la remontée de tension à lieu dans l'intervalle de temps qui sépare l'envoi des deux évenements MIDI NoteOn et NoteOff et qui est de plusieurs millisecondes. Comme l'analyse de la tension présente sur l'entrée du convertisseur analogique / numérique du PIC ne reprend qu'après l'envoi de l'évenement NoteOff, la seconde remontée de tension est masquée et ne pose pas de problème.  Pour finir avec les copies d'écran, vous trouverez sur les suivantes ce que l'on a comme signal traité quand la sensibilité est forte et que l'on tape vraiment fort sur le capteur.

percus_003_proto_001_graphe_001n percus_003_proto_001_graphe_001nb

On constate un petit plateau de tension qui est lié à l'écrêtage du à la diode zener. Ici la valeur max est de 5,6 V car la diode zener est une 5,6 V (je l'avais sous la main et n'ai pas eu le courage de retourner au garage pour aller chercher une 5,1 V).

Puis est venue l'heure des tests en grandeur réelle avec un PIC 16F88. Là encore j'ai fait usage d'une de mes petites platines d'expérimentation sans soudure dont je raffole.

percus_003_proto_001f

Le circuit a été testé avec succès avec mon logiciel MidiTest dans un premier temps, puis ensuite avec Cubase 5 chargé de quelques instruments virtuels, ainsi qu'avec mon QY70 qui fonctionne toujours dans sa petite valise en alu. Il faut reconnaitre que ça n'a pas fonctionné du premier coup. C'est la première fois que je mettais en oeuvre un PIC 16F88 et j'ai eu droit à quelques égarements fort logiques de la part d'un débutant. C'est bien comme ça qu'on procède, non ?

Logiciel du PIC

L'archive zip dont le lien suit contient le source complet (MikroPascal Pro V3.8) et le fichier binaire compilé (*.hex).
Générateur percus 003 - 16F88 (13/06/2010)
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é.