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.
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.
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 normalUne
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.
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.
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.
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.
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.
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.
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.
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.
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é.