Circuit générateur de tensions aléatoires pour pendule sur oscilloscope





1. Intérêt du circuit

Une fois le circuit pendule installé à demeure sur un oscillo pour avoir l'heure en permanence, on peut se demander si c'est bien raisonnable de laisser un affichage dans une zone de l'écran de longues heures ...
En effet, le risque est, à terme, de marquer l'écran de l'oscilloscope, ce qui se traduit à la longue par un manque notable de luminosité de cette zone.

Si on reprend le schéma de principe de la pendule déjà décrite :



On voit bien que les chiffres affichés le sont toujours dans la même zone. L'idée de base du circuit peut être mise en évidence sur le schéma de principe suivant :



L'idée est d'ajouter aux tensions X et Y générées par le circuit pendule, 2 tensions x et y, variant aléatoirement à un rythme assez lent pour que l'affichage soit tout de même lisible, mais "mouvant" sur l'écran.
D'autre part, il est inutile que ces tensions x et y soient de grande amplitude, afin que l'affichage reste tout de même dans les limites de l'écran.



2. Solutions techniques

Il faut donc créer 2 tensions indépendantes, pratiquement aléatoires, de très basse fréquence (moins de 1Hz) et d'amplitudes "raisonnables" (de l'ordre de grandeur de quelques volts).


Comment réaliser des tensions aléatoires à fréquence très basse ?

L'utilisation de plusieurs oscillateurs sinusoïdaux à fréquences différentes, permet de générer des battements qui peuvent sembler aléatoires, surtout si on équipe un ou plusieurs des oscillateurs de capteurs (température, lumière ...) qui agissent sur leur fréquence.


Plusieurs générateurs sinusoïdaux, de fréquences proches mais différentes, d'amplitudes variables




L'utilisation de capteurs permet en plus de faire varier soit la fréquence, soit l'amplitude, soit les 2

Voilà à titre d'exemple une simulation sous tableur d'une association de 5 générateurs sinusoïdaux pour créer une tension semblant alétoire :



les fréquences utilisées sont 1-1,2-1,4-1,6-1,8Hz. Le graphique couvre 5 secondes. La tension somme, en noir, présente réellement des variations quasi imprévisibles.
Il suffit de créer une seconde tension de la même manière, avec 5 autres générateurs, à des fréquences encore différentes :



On obtient 2 tensions aléatoires qui semblent en plus, indépendantes. D'ailleurs, si on fait un graphique en XY de ces 2 tensions :



On obtient une figure qui est le lieu des points d'un point quelconque de l'affichage de la pendule dans le temps : l'ensemble de l'affichage suivra cette courbe, affichant la pendule dans une zone variable de l'écran.

Le problème de ce genre de circuit est la complexité de l'ensemble : les 10 oscillateurs sinusoïdaux à basse fréquence sont en général difficiles à mettre au point car les très basses fréquences imposent des éléments RC de grande valeurs. Si en plus, on utilise des capteurs pour faire varier des paramètres, on complique encore l'affaire
Cependant, l'intérêt est qu'on obtient directement des tensions analogiques...

Autre solution : on génère des grandeurs aléatoires numériques qu'on convertit ensuite en analogiques.

Quel que soit le principe retenu, il est difficile d'obtenir vraiment une variation aléatoire, on préfère parler de pseudo-aléatoire, c'est-à-dire qu'on admet une certaine périodicité de la tension, à condition que la période soit très grande devant le rythme de variation, afin qu'il soit impossible réellement de retrouver la périodicité; l'important étant que toutes les valeurs prises par la tension soient équiprobables, c'est-à-dire que la répartition de la probabilité soit uniforme.
Ce problème est commun à d'autres applications comme le codage de l'information, et il était résolu à une certaine époque par des générateurs à registres à décalage rebouclés.

Voici un schéma de générateur pseudo-aléatoire à registre à décalage :



A chaque coup d'horloge, les données présentes en sorties des cellules du registre se décale d'un cran vers la droite. La donnée complètement à droite est perdue.
La nouvelle donnée qui entre à gauche du registre est calculée par un circuit logique "différent de", soit un ou exclusif inversé à partir de au moins 2 sorties intermédiaires du registre.
La donnée d'entrée est donc égale à 1 si ces 2 sorties intermédiaires sont différentes (0 et 1 ou 1 et 0), et à 0 dans le cas contraire (0 et 0 ou 1 et 1)
Une des sorties intermédiaires est prise tout au bout du registre comme sur le schéma.
Si on regarde une sortie intermédaire quelconque et qu'on note les valeurs logiques qui défilent au rythme de l'horloge, on obtient une série de 0 et de 1 qui semble vraiment aléatoire.
Mais au bout d'un certain nombre de décalages, on revient à une séquence déjà rencontrée. Toutes les séquences sont équiprobalbes, c'est-à-dire que si on cherche la séquence "101101", on a autant de chances de la repérer que la séquence "001110" (et que toutes les autres)
Sauf que ... si le registre contient à un moment donné que des 1 en sorties, on tombe sur un état stable. En effet, la nouvelle donnée calculée est égale à1, on n'a rrivera jamais à rentrer un 0.
Il ne faudra donc jamais tomber sur cette situation, ce qui en pratique pourrait se présenter à la mise sous tension, par hasard. C'est rarement le cas, mais ce n'est pas improbable. On peut alors ajouter un circuit annexe qui détecte cette situation et qui en général remet à 0 toutes le registre.
En effet, la situation complémentaire (que des 0), elle, n'est pas stable.

Dans ce circuit, on montre que le nombre de combinaisons maximal est égal à 2 puissance n, donc pour un registre de 11 cellules, ce nombre est égal à 2048.
Comme la combinaison "tout à 1" est interditre car stable, il ne reste que 2047 combinaisons pour ce registre à 11 cellules. Mais cela ne veut pas dire que la période du cycle est égale à 2047 !
En effet, la position des prises intermédiaires est importante. On montre, mais ce n'est pas le propos ici de le faire, que certaines positions permettent le cycle le plus long, alors que d'autres créent des cycles plus courts.

Voici à titre d'exemple, deux générateurs pseudos aléatoires largement utilisés :


Générateur à 11 cellules




Générateur à 15 cellules

Pour le premier, on peut espérer une longueur maximale de cycle de 2047 et pour le second 32767.
La conversion analogique peut être très simple : il suffit par exemple de sommer 2 sorties intermédiaires du registre à l'aide de 2 résistances :


Sommateur

Le choix des sorties n'a pas d'importance, elles peuvent être contigües ou au contraire éloignées.
La tension obtenue peut prendre 3 valeurs : 0 (xi=xj=0), +5V(xi=xj=1) ou +2,5V (xi différente de xj)
Il suffit alors d'intégrer cette tension à l'aide d'un condensateur pour obtenir une variation continue lente de la tension entre 2 valeurs.


Sommateur + intégrateur

Bien entendu, on peut utiliser plus que 2 tensions, la tension de sortie comportera plus que 3 valeurs.
A titre d'exemple, voici les signaux qu'on peut obtenir :


Sortie brute (S1) et intégrée (S2)

Pour réaliser le circuit complet, il faut 2 tensions. On peut prendre le même générateur, mais les prises intermédiaires pour la seconde tension doivent être différentes de celles de la première tension !
On peut simuler le fonctionnement dans un tableur en représentant un tableau de toutes les combinaisons et un graphique en XY :


Générateur à 5 cellules (L=63)

On remarque que les 9 valeurs possibles sont bien présentes, mais qu'on n'a pas toutes les branches du graphe : par exemple, on ne passe jamais de (0;0) à (+2,5;+2,5).
Cela est du au petit nombre de cellules du registre. Si on passe à 11 :


Générateur à 11 cellules (L=2047)

On constate que le graphe est complet. Ce qui est de bonne augure sur l'uniformité de la loi de probabilité ...

Dans cette simulation, les 2 tensions sont prises sur 2 sorties du même registre, mais en pratique, on préfèrera avoir 2 registres différents , par exemple un de 11 cellules, l'autre de 15, rendant complètement indépendantes les 2 tensions X et Y.

Bien qu'éprouvé depuis longtemps des générateurs pseudo aléatoires requièrent un nombre non négligeable de composants, et toute modification entraine la sortie du fer à souder ...


Il reste une possibilité, élégante : générer les 4 grandeurs numériques nécessaires à l'aide d'un microcontrôleur
En effet, les très basses fréquences voulues ne sont absolument pas contraignantes, un micro à 4MHz suffirait amplement, il n'y a que 2 calculs à faire (les ou exclusifs) et deux décalages de registres.
Les sommateurs et intégrateurs seront repris tels quels. Le compte de composants sera donc minimal.

Voici le schéma de principe du générateur à micro :


Générateur à base de microcontrôleur

Comme on peut voir, c'est simple : un petit PIC à 8 broches suffit à créer quatre variables numériques, deux par tension désirée, qu'on réalise en sommant à l'aide de deux résistances et un condo intégrateur.
Tel quel, et ceci aurait vrai aussi avec des générateurs à registres, si on veut utiliser les tensions créées sans souci, il faut aussi une adaptation d'impédance :


Adaptation d'impédance en sortie

Bien sûr, on va "perdre" 0,6V dans la jonction base-émetteur des transistors, mais cela n'est pas trop gênant, cela veut dire que la tension de sortie va être écrêtée (en bas) uniquement sur des suites de 0. Voici une simulation montrant l'effet de cette adaptation :


Tension de sortie

En bleu, trait fin : la tension somme au point commun des résistances, s'il n'y avait pas le condo
En rouge, la tension aux bornes du condo (à titre indicatif, car elle dépend de la constante de temps RC et de la période d'un bit)
En vert, la tension de sortie sur l'émetteur du transistor. On voit qu'elle est écrêtée dès qu'on a au moins deux zéros consécutifs

Ce circuit se connecte au circuit pendule et à l'oscillo de la manière suivante :


Ensemble du montage

Si on choisit une valeur de potentiomètre de l'ordre de 100k, la sommation avec les tensions issues de la pendule se fera correctement puisque l'impédance de sortie du circuit de décalage est très faible (moins de 500 ohm)



3. Réalisation de la version à microcontrôleur

Voici le schéma complet du circuit de décalage aléatoire :


Schéma électrique du décaleur (cliquez pour le PDF)


Quelques explications :

Le PIC choisi est un 12F675. Il comporte 6 E/S, une pour le reset, GP3 (car j'utilise le timer), une autre, GP2, pour choisir la fréquence, les 4 autres (GP0,GP1,GP4,GP5) sont les sorties vers les sommateurs à résistances.
La fréquence est choisie grâce au cavalier K1 entre 2 valeurs : 10kHz ou 10Hz. La première valeur permet de faire un gadget qui affiche un brouillard sur l'écran et dans ce cas, on n'a pas besoin du circuit pendule. La seconde valeur est celle à choisir pour le décaleur de pendule.
Suivant la fréquence choisie, il faut aussi changer les condos intégrateurs, grâce aux cavaliers K2 et K3. Bien sûr, les condos choisis sont les "gros" pour 10Hz et les "petits" pour 10kHz (100µF et 100nF)
Les transistors utilisés, BC182, peuvent être remplacés par des 2N2222 (par exemple).

Les liaisons de ce circuit au montage pendule et à l'oscillo se fait avec les 2 potards :


Schéma électrique de l'ensemble du système (cliquez pour le PDF)


Passons à la réalisation :

Le circuit n'est pas très complexe, il tient sur une petite plaquette de pastillé :



Un seul bornier regroupe : le +5V, le 0V et les 2 tensions de sortie aléatoires.



4. Essais : tensions aléatoires générées

Il suffit de connecter le 5V et un oscillo sur les sorties pour voir si ça marche.
La conception par microcontrôleur permet de modifier facilement la fréquence de commande du registre à décalage pour voir comment se comportent les tensions ; en particulier, en accélérant on peut afficher sur l'oscillo les valeurs prises par les tensions, alors qu'à fréquence réelle, proche de 1 Hz, on ne verrait que spot se déplacer en faisant des bonds. Voici quelques vidéos (en cliquant sur les images):


C=100nF, F=10Hz




C=100nF, F=100Hz




C=100nF, F=1000Hz

Sur cette dernière vidéo, faite avec le même registre de 15 cellules pour générer les 2 tensions X et Y, on constate que tous les états ne sont pas représentés et il y a un axe privilégié (la bissectrice y=x) : les tensions X et Y sont donc dépendantes.
Mais si maintenant on utilise deux régistres différents (un de 11, l'autre de 15 cellules) :


C=100nF, F=1000Hz

Le "brouillard" obtenu montre une meilleure répartition des états.

Les tensions X et Y étant correctes, on peut maintenant tester l'ensemble connecté au circuit pendule et à l'oscillo. La sommation des tensions issues du circuit pendule et celles du circuit aléatoire se fait simplement avec 2 potards, ce qui permet de doser les décalages en X et en Y, par rapport à la largeur et la hauteur de la série de caractères formant la pendule :


Pendule décalée aléatoirement sur oscilloscope moderne

Comme ça fonctionne, je vais installer ce décaleur sur la pendule que j'ai mise sur mon OS-2 :


Circuit pendule sur l'OS-2




Insertion du circuit décaleur à l'aide des 2 potards
Le circuit décaleur n'est pas alimenté pour l'instant; on voit que les dimensions de la pendule sont bien atténuées par les potentiomètres.
En effet, selon la position de chaque curseur on aura soit une prédominence des tensions issues de la pendule, soit de celles issues du décaleur.
Il faudra donc ajuster les potards, tout en réglant les gains de l'oscillo, pour obtenir les décalages désirés; voici 3 vidéos montrant cela :


Réglages "moyens" des potards




Réglages des potards amenant des décalages trop importants par rapport aux dimensions des caractères




Réglages des potards amenant des décalages faibles par rapport aux dimensions des caractères

Voilà, cette étude est terminée, la pendule ne risque plus de marquer l'écran du tube cathodique de mon OS-2 !