Fonctionnement

Description

Ce module permet de génerer trois séquences de CV (tension de contrôle) en même temps durant jusqu'à huit pas. Il est possible de régler la tension lue sur chaque pas et cela pour chaque piste. On peut en plus choisir l'action après la lecture d'un pas, comme par exemple recomencer (ou l'action sur le pas en question comme par exemple le sauter). Chaque pas possède deux embases Jack, une sortie de Gate qui est active quand la séquence est sur le pas en question, et une entrée de Gate qui permet de faire passer la séquence directement sur ce pas. Cela permet de créer des séquences multiples et complexes. Il est possible d'utiliser la troisième séquence comme base de temps entre les différents pas. Avec ce séquenceur on peut aussi créer des séquences totalement aléatoires.

L'utilité première d'un tel module est de contrôler un VCO, donc de lui faire jouer une séquence de notes, ou de contrôler la fréquence de coupure d'un VCF ...

Caractéristiques

- Oscillateur interne avec fréquence variable et sélection de gamme

- Sortie de l'oscillateur interne sur 3 Jack

- Utilisation soit de l'oscillateur interne soit d'un oscillateur externe via 2 entrées

- 3 pistes de 8 pas

- 2 sorties isolées par piste sur Jack

- Gamme de tension de sortie réglable pour chaque piste

- Tension réglable pour chaque pas de chaque piste

- Sur chaque pas : normal, aléatoire, stop, passer, restart

- Sortie Gate sur chaque pas (Jack)

- Possibilité de passer sur un pas via entrée Jack

- Troisième piste pouvant contrôler le temps entre chaque pas

- Possibilité de séquence totalement aléatoire

Alimentation

Ici on utilise une alimentation externe de type symétrique en 15 volts (+15V / GND / -15V), car le module a été créé pour être utilisé au sein d'un synthétiseur modulaire YuSynth. Pour avoir les dix volts nécessaires à la création d'un signal de Gate, j'ai tout simplement utilisé un régulateur de tension de dix volts en lui associant ses propres condensateurs de découplage et une résistance assurant toujours une consommation minimale en courant.

Il y a aussi les traditionnels condensateurs de découplage situés entre les bornes d'alimentation des circuits intégrés présents sur le PCB et de la résistance protegeant l'amont de l'alimentation en cas de surintensité.

Oscillateur interne

schéma de l'ensemble du VCO interne (cliquez pour agrandir)

Ce module est dôté de son propre oscillateur réglable en fréquence via deux commandes :

- un sélecteur rotatif pour choisir la gamme de fréquences
- un potentiomètre pour ajuster finement la fréquence sur la plage définie précédemment

Il s'agit en réalité d'un générateur d'onde carrée basé sur un CD4046. On lit sur la broche numéro neuf une tension qui, en variant, modifiera la fréquence de sortie du générateur (disponible sur la broche quatre). Les résistances ajustables RV42 et RV43 servent de résistances talons et limitent donc l'influence du potentiomètre. Ceci a comme influence directe de réduire la plage de fréquences disponibles en tournant le potentiomètre d'un extreme à un autre (si les plages obtenues ne vous conviennent pas vous pouvez changer les valeurs de ces résistances). Avec des ajustables de 22k et un potentiomètre de 50k, il est possible de faire produire au CD4046 un signal allant d'environ 750 Hz à 3200 Hz. En sortie du CD4040, nous avons donc à disposition des signaux d'horloge ayant une période d'environ 80 ms au minimum (utilisation du séquenceur comme LFO en escalier), mais sur la position la plus lente, nous avons des pas de 5 secondes.

On place un condensateur chimique à la sortie de notre CD4046 (22 uF), puis on envoie notre signal carré sur l'entrée d'un compteur binaire CD4040.

De haut en bas : signal d'entré, sorties 1, 2, 3 et 4

Ce circuit intégré est un compteur de type binaire à douze étages. Dans notre cas nous allons l'utiliser comme diviseur de fréquence. En effet comme le montre le schéma ci-contre, en lisant une des sorties du CD4040, on retrouve notre signal carré, mais avec une fréquence divisée au choix par 2, 4, 8, 16, 32, 64, 128, 256... On utilise ensuite le nombre désiré de sorties de notre CD4040 (pour ma part j'ai utilisé les cinq dernières sorties) qu'on va connecter sur les broches d'un commutateur rotatif, pour pouvoir par la suite choisir la gamme de fréquences de notre générateur.

On connecte par la suite la sortie du commutateur à une LED en série avec sa résistance d'atténuation (pour une LED rouge une résistance de 1 kOhm semble appréciable mais vous pouvez changer cette valeur pour jouer sur la brillance de la LED). On va aussi relier la sortie du sélecteur à quatre amplificateurs opérationnels. Ceux-ci jouent le rôle de suiveurs en tension, ce qui permet "d'isoler" le signal carré sur quatre sorties différentes. On va récupérer une de celles-ci sur notre Arduino. Les trois autres sorties sont envoyées sur des connectiques en façade (jack 6,35 mm dans mon cas) permettant de disposer du signal d'horloge pour cadencer d'autres modules.

Signal d'horloge externe

Il est aussi possible pour ce séquenceur de se baser sur un signal d'horloge externe. Ce choix s'opère via un levier servant à basculer la lecture de l'Arduino soit sur le VCO interne, soit sur deux entrées de "shift" indépendantes (même principe que pour le module "Switch").

A première vue ce schéma semble compliqué. Pour réaliser la fonction définie précédemment, ne pourrait-on pas tout simplement relier sur deux entrées d'une porte "ou" nos deux entrées, puis relier la sortie de la porte à l'Arduino ?

Théoriquement, on pourrait faire cela, mais imaginez la situation suivant : sur la première entrée, on envoie une impulsion de cinq secondes, puis une seconde après le début de cette impulsion, on envoie une autre impulsion d'une seconde sur la deuxième entrée. On aurait donc en sortie de notre porte "ou", une seule et même impulsion continue de cinq secondes alors qu'on devrait lire deux impulsions à une seconde d'intervalle ; ce qui voudrait dire que l'impulsion sur l'entrée numéro deux de notre porte sera noyée dans la première (voir chronogrammes ci contre).

En bleu et vert les impulsions d'entrées et en rouge la sortie, à gauche le fonctionnement de la porte seule, à droite le fonctionnement désiré

Pour éviter un tel comportement, on va, à partir de l'impulsion lue sur une des entrées, mettre en forme une autre impulsion de durée très courte. C'est cette deuxième impulsion qui sera envoyée sur une des entrées de la porte "ou". On utilise donc le dispositif ci-dessous sur chacune des deux entrées pour envoyer à la porte logique de brèves impulsions (mais assez longues tout de même pour pouvoir être lues par l'Arduino).

Ce montage est axé autour d'un générateur d'impulsions basé lui même sur une porte logique de type "ou". On ajoute avant celui-ci une résistance de 1kOhm ayant pour but d'absorber les surintensités générées par l'insertion ou l'enlèvement d'un jack dans son support. Le coeur du montage réside autour de la porte "ou" (porte logique, R124, R122, C21), montage qui en théorie nous donne en sortie une impulsion de durée égale à T=0,7xR124xC21. Le problème de ce montage est le suivant : lorsqu'aucun jack n'est inséré, R121 a "une patte en l'air". Le monostable se comporte donc n'importe comment, dans ce cas là, il lit sur l'entrée 0 ou 1 sans raison...

Le rôle de R119 est de corriger le défaut vu précédement en reliant l'entrée à la masse. Lorsqu'aucun jack n'est inséré, le monostable lit donc 0 volt (soit l'état logique 0). Mais il y a encore un problème, le montage ci-contre ne fonctionne que lorsque l'impulsion en entrée est de durée inférieure à la durée souhaitée en sortie du monostable. Pour régler ce problème, on va réaliser un montage générant une impulsion de durée infime (trop petite pour être lue par l'Arduino). Cette impulsion sera envoyée dans le montage précédent.

On réalise deux fois ce montage (une fois par entrée de "shift"), et on relie chacune des sorties sur une entrée d'une autre porte "ou". L'arduino lit ensuite la sortie de cette porte.

Gestion des entrées/sorties de l'Arduino

Le coeur de ce montage est une carte Arduino en version Mega, car nous avons besoin de beaucoup d'entrées / sorties. Dans les deux parties précédentes nous avons vu comment créer ou récupérer à partir d'une source externe notre signal d'horloge. Afin de respecter la tension de cinq volts maximum sur les entrées de l'Arduino, il faut juste utiliser un pont diviseur de tension pour que notre signal de dix volts passe en dessous de la barre des cinq volts (pas forcément cinq volts pile car on utilise une entrée numérique de l'Arduino fonctionnant en tout ou rien). J'ai pour ma part utilisé le couple de résistances de 390k / 220k, ce qui me donne en sortie du diviseur environ 3,6 volts.

Ce signal d'horloge est donc récupéré et analysé par l'Arduino qui se base sur celui-ci pour passer au pas suivant. Grâce au signal d'horloge, le microcontrôleur pilote les multiplexeurs via trois lignes d'information binaire (utilisant donc trois sorties numériques de l'Arduino).

Comme on peut le voir sur la façade de ce module, nous avons plusieurs boutons à connecter à l'Arduino. Pour ce faire rien de plus simple, on a juste à placer le poussoir entre une source de cinq volts et une entrée numérique de l'Arduino, en n'oubliant pas de mettre celle-ci à la masse au travers d'une résistance (10k en l'occurence).

Pour connecter le levier permettant de lancer une séquence aléatoire, rien de compliqué non plus :

Pour utiliser les commutateurs présents en façade, on réalise le montage suivant qui permet grâce à une entrée analogique de lire une tension dépendant de la position du commutateur.

Il ne reste plus qu'à connecter les entrées par prises jack, mais pour cela il faut adapter la tension de maximum quinze volts à une tension de maximum cinq volts. Pour cela on utilise un banal pont diviseur de tension avec les même valeurs que celui utilisé pour récupérer le signal d'horloge.

Tensions de référence

Le schéma ci contre montre le montage que j'ai réalisé pour pouvoir, à l'aide d'un commutateur rotatif, disposer de différentes tensions de référence aux bornes de mes potentiomètres. Il s'agit en fait d'un simple pont diviseur de tension multiple.

Utilisation de CD4051

Lorsque le séquenceur change de pas, ce sont les multiplexeurs qui lisent une nouvelle entrée. Voyez ceux-ci comme des commutateurs que l'on peut commander grâce aux lignes où transitent des informations binaires. Comme vu dans la partie précédente on utilise à la base, pour contrôler les CD4051, trois sorties de l'Arduino Mega. Mais le problème est que les multiplexeurs ont besoin comme tension de contrôle, 0 ou 15 volts. Pour ce faire on utilise un simple montage à transistor (NPN) saturé. On applique sur la base la tension de contrôle venant de l'Arduino, (cinq volts) au travers d'une resistance qui va saturer le transitor. Celui-ci deviendra donc passant et mettra la sortie à la masse. On a donc réalisé une porte "NOT", ce qui veut dire que si on applique une tension à son entrée, la sortie est à la masse et inversement. Cependant on a bien soit 0V soit 15V, il faut juste tenir compte de cette inversion lors de la programmation.

On utilise au total cinq multiplexeurs possèdant huit entrées/sorties et une sortie/entrée. Ils sont tous contrôlés par les même lignes de commande. Pour chaque ligne de potentiomètres destinés au réglage de la tension lue sur chaque pas, on utilise un multiplexeur. Sur chacune des huit entrées, on va relier la sortie d'un potentiomètre (en façade) monté en diviseur de tension. La sortie du multiplexeur est reliée à deux amplificateurs opérationnels montés en suiveurs de tension, ce qui permet de disposer de cette tension "séquencée" sur deux sorties isolées l'une de l'autre.

À chaque nouvelle instruction venant de l'Arduino, le multiplexeur va lire une autre entrée (reliée à un autre potentiomètre). Cela va donc donner le chronographe suivant :

chronographe représentant la tension de sortie en fonctions du pas joué

Comme ce module permet de gérer en même temps trois séquences de huit pas, pour des raisons pratiques il y a en façade trois lignes de huit potentiomètres. Cela signifie que la tension sur chaque pas est modifiable en même temps sur les trois pistes. Ce procédé requiert donc l'utilisation de trois multiplexeurs. Pour gérer la ligne de LEDs permettant d'indiquer sur quel pas la séquence jouée se trouve, on utilise un autre CD4051. On relie simplement l'entrée à une source d'alimentation et les huit sorties aux huit LEDs, en n'oubliant pas de mettre une résistance en série de chaque LED (valeur à changer pour jouer sur la brillance des LEDs, personnellement j'ai utilisé des 1 kOhm).

Ce module possède pour chaque pas une sortie "Gate" (sur prise jack), sur laquelle on peut lire une tension de dix volts quand la séquence arrive sur le pas en question. Pour mettre ceci en place rien de plus simple, on utilise un autre CD4051 avec une source d'alimentation stable de dix volts. On connecte cette source sur l'entrée du multiplexeur, et on ajoute une prise jack sur chacune des sortie.

Schémas de l'ensemble

Voici tous les schémas (cliquez pour les agrandir) :

Réglages du module

Fréquence du LFO interne

Pour régler la plage de fréquence du LFO, il faut jouer sur les valeurs de RV42 et RV43. Pour ma part j'ai réglé l'oscillateur de manière à avoir comme plage de pas la plus lente, des pas allant de 1,5 à 5 secondes (ces valeurs étant divisées par 2, 4, 8 et 16 pour les autres positions du commutateur). Pour obtenir un tel fonctionnement procédez comme suit :

1) Placer SW24 sur "5", placer un fréquencemètre en sortie de J128 (ou 129 ou J130)
2) Mettre RV25 au minimum
3) Régler RV43 pour avoir en sortie une fréquence de 3,20 Hz (si cela est impossible jouer aussi sur le réglage de RV42)
4) Mettre RV25 au maximum
5) Régler RV42 pour avoir en sortie une fréquence de 10,67 Hz (environ)
6) Réitérer les étapes 2, 3, 4 et 5 jusqu'à obtenir, sans avoir à toucher à RV42 et RV43 les fréquences voulues

Néanmoins il faut garder à l'esprit que :

- la fréquence mesurée en sortie du CD4046 sera divisée par le CD4040 (par 256, 512, 1024, 2048 et 4096)
- la plage de fréquence ne doit pas être excessivement large sous peine de perdre en précision (avec le potentiomètre)

Tensions de références

Pour procéder aux réglages, il suffit de tourner l'ajustable (RV31, RV36, RV41) en bas sur le schéma et de mesurer la sortie du commutateur (en position 1) pour obtenir une tension de 1 volt. Puis on passe le commutateur en position 2 et on ajuste le deuxième potentiomètre de réglage (RV30, RV35, RV40) pour obtenir 2 volts. On réitère l'opération pour obtenir ensuite 5 volts (avec RV29, RV34, RV39), 8 volts (avec RV28, RV33, RV38) et enfin 10 volts (avec RV27, RV32, RV37). Si ces valeurs ne vous conviennent pas, vous pouvez modifier le pont à votre guise.

Démonstrations

À venir ...

Conception et fabrication

Façade et connections

autocollant sur façade en métal
ligne d'alimentation et ligne de masse
test de continuité

Circuit imprimé (ancienne version) et module annexe (passage du 5 volts au 15 volts)

circuit imprimé (sans modification 5-15 volts)
module de conversion 5-15 volts (pour corriger défaut)
peuplage du PCB par les résistances et autres...
ajout des autres composants

Câblage (ancienne version)

début du câblage
un beau chevelu ...
câblage des sélecteurs rotatifs
câblage terminé : il ne reste plus qu'à regrouper les câbles

Circuit imprimé (nouvelle version)

tous les composants installés sur le nouveau PCB
Arduino sur face cuivrée

Câblage (nouvelle version)

câblage 1/2
câblage 2/2

Réglages

premier réglage : plage de fréquences de l'horloge interne

Visuel

Voici le visuel de la façade de ce module, comme cela vous pouvez plus facilement l'imaginer dans votre setup !

Ressources

Si ce module vous intérresse, rendez vous sur cette page, vous y trouverez toutes les ressources nécéssaires à sa réalisation.

Historique

5 Mars 2018 : fin de la réalisation

29 Juillet 2018 : conception du circuit imprimé avec correction (5V / 15V)

25 Octobre 2019 : montage sur le nouveau circuit imprimé (module terminé et testé)