Vous êtes sur la page 1sur 25

2019/2020

Projet synthétiseur
LOIC SAVORNIN AMAURY DURAND JULIEN ROUECHE MATHEO MAY
VALENTIN GIERSKI
Table des matières
Introduction..................................................................................................................................................... 2
Spécifications................................................................................................................................................... 2

Environnementale ....................................................................................................................................... 2
Fonctionnelles et opératoires ..................................................................................................................... 2
Techniques .................................................................................................................................................. 3
Schéma fonctionnel principal .......................................................................................................................... 3
Le synthétiseur ................................................................................................................................................ 4
1er partie ...................................................................................................................................................... 5

2ème partie ................................................................................................................................................... 6


3ème partie ................................................................................................................................................... 7
4ème partie ................................................................................................................................................... 8
5ème partie ................................................................................................................................................... 9
6ème partie ................................................................................................................................................. 10

Conception des cartes ................................................................................................................................... 11


Découpage du synthétiseur en 3 plaques ................................................................................................. 11
Switch / Multiplexer ...................................................................................................................................... 13
Potentiomètre / Convertisseur Analogique Numérique ............................................................................... 16
Fonctionnement ........................................................................................................................................ 16
Convertisseur Numérique Analogique (DAC) ................................................................................................ 17

Fonctionnement ........................................................................................................................................ 17
Low Frequency Oscillator (LFO)..................................................................................................................... 18
Low Frequency Oscillator carré ................................................................................................................. 18
Low Frequency Oscillator sinusoïdal ......................................................................................................... 18
ADSR .............................................................................................................................................................. 18

L’Attack Release (AR)................................................................................................................................. 20


VCO1.............................................................................................................................................................. 20
Réalisation ................................................................................................................................................. 21
L’horloge générale du VCO1 .................................................................................................................. 21
Déterminer la fréquence jouée ............................................................................................................. 21
La fréquence déterminée par la touche ................................................................................................ 21

La Fréquence déterminé par les potentiomètres ................................................................................. 22


Assemblage des fonctions sous format VHDL ....................................................................................... 22

1
PRESENTATION
Introduction

Le projet Synthétiseur numérique a pour but de créer à partir d’un synthétiseur analogique un
synthétiseur numérique. Pour cela nous avons donc besoins de matériels électroniques ainsi que des
logiciels pour pouvoir coder et créer les cartes où seront positionnés les composants.

Objectif : Transformer le synthétiseur analogique en synthétiseur numérique avec l’aide de carte FPGA où
l’on code entièrement le fonctionnement du synthétiseur, ensuite tout cela est envoyé sur 3 différentes
plaquettes où sont présent nos composants.

Fonctionnement : Notre synthétiseur numérique doit à partir d’une pression sur une touche produire un
signal qui ensuite passe dans un modulateur que nous avons paramétré avec des switchs et des
potentiomètres, enfin nous avons le signal modulé qui nous parviens à l’aide d’un ampli présent dans le
commerce.

Le synthétiseur fonctionne à l’aide de potentiomètre, ces valeurs sont donc analogiques. Dans notre
projet nous travaillons avec des cartes programmables. Nous avons donc besoin de convertir nos signaux
en numérique afin de pouvoir les exploiter plus facilement. La carte programmable que nous utilisons, la
Quartus DE10-Lite permet de réaliser cette fonction, mais étant donné le grand nombre de valeur à
convertir nous utilisons un autre composant, un convertisseur analogique numérique.

Spécifications
Environnementale
La carte du synthétiseur numérique est munie d’un plan masse. L’utilisateur a directement accès aux
switches et potentiomètre pour pouvoir faire les réglages souhaités.

Fonctionnelles et opératoires
Faire un son à partir d’un signal d’entrée qui est ensuite modulé avec les paramètres que nous avons
réglés manuellement avec des potentiomètres et des switches. Les valeurs de potentiomètres étant
numérique, nous utiliserons un ADC, un TLV1543CN. Pour réaliser sa trame de fonctionnement nous
réaliserons l’horloge et récupérerons les valeurs converties en langage VHDL. Pour créer les fréquences
des différentes touches du clavier du synthétiseur en fonction des réglages de la fréquence du son on doit
utiliser un VCO. Le VCO devra être réalisé en VHDL. La fréquence minimale devra être de 20𝐻𝑧 et la
fréquence maximale sera de 2𝑘𝐻𝑧. Le synthétiseur est équipé d’un bouton on/off pour pouvoir démarrer

2
et éteindre le synthétiseur. L’utilisateur est capable de produire des sons avec le synthétiseur numérique
sur 1 octave choisis parmi les 3 disponibles. Le synthétiseur est aussi muni d’un ADSR qui permet la
modulation finale du signal.

Techniques
Conception avec une partie analogique et une partie numérique. Les composants sont alimentés en 3.3V.
Création de la carte avec plan de masse.

Logiciels : Quartus Prime, EasyEDA

Composants : CD74AC153E, TLV1543, MFP211N et MCP4902.

Schéma fonctionnel principal

3
Le synthétiseur
Tout d’abord parlons de l’aspect extérieur du synthétiseur. On peut voir qu’il est découpé en plusieurs
partie, ces parties ont chacune un rôle très important au sein de ce synthétiseur, mais elles sont assez
compliquées à comprendre c’est pourquoi nous avons choisi de vous en parler et d’essayer de détailler
leur fonctionnement.

Voici à quoi ressemble la partie extérieure du synthétiseur :

Ce travail nous a pris 2 séances, il nous a donc permis de comprendre un peut mieux le fonctionnement
du synthétiseur ARP Odyssey cependant nous nous sommes pas attardé plus longtemps sur cette
recherche car nous avions besoin de commencer à réfléchir plus en profondeur sur le sujet de la
transformation en synthétiseur numérique. Par la suite vous verrez le détail de chaques parties.

4
1er partie

Comme vous pouvez le voir cette partie nous sert à faire des réglages secondaires, mais d’abord il y a une
différence entre cette image et notre synthétiseur, nous ne possédons pas les 3 boutons du bas ils sont
remplacés par un potentiomètre qui nous permet de régler la tonalité note à note. Ensuite nous avons un
commutateur « d » qui nous permet d’augmenter ou de diminuer d’une octave (c’est-à-dire 8 notes de +
ou de – par rapport à celle de base), et pour finir nous avons le commutateur « a » qui génère un bruit
Blanc ou Rose. Le bruit blanc est un son qui a la même intensité, il n’y a pas de pics, le bruit rose est
similaire mais on abaisse la puissance sonore de 3db à chaque octave. Pour les comparer le bruit blanc
serait comme un sifflement « ssssssss » tandis que le bruit rose serait plus un soufflement « ffffffffff ».
Pour l’oreille humain le bruit rose peut paraitre plus agréable.

5
2ème partie

Ici nous avons notre 1er VCO c’est lui qui va nous permettre de faire du son grâce au clavier. Tout d’abord
nous devons choisir sa fréquence, ensuite nous devons choisir si nous l’envoyons au clavier ou si l’on s’en
sert pour moduler le VOC-2. Nous pouvons aussi choisir si notre signal sera de forme carrée c’est-à-dire
qu’il va sauter entre 2 notes différentes ou de forme sinusoïdale c’est-à-dire qu’il va osciller entre 2 notes
différentes.

6
3ème partie

Notre 2ème VCO se manipule comme le premier, dans un premier temps nous devons commencer par
l’accorder grâce à 2 potentiomètres qui vont régler la tonalité + ou – précisément. Ensuite nous avons le
choix de le synchroniser avec le VCO-1 ou non. Comme nous ne disposons pas de pédale nous laisserons
le commutateur « h » dans la position LFO, de plus nous pouvons régler l’ADSR grâce à la partie 6 qui est
présenté ci-dessous.

7
4ème partie

Cette partie est essentiel au fonctionnement du synthétiseur Arp Odyssey (un peu comme toutes les
autres), c’est elle qui va s’occuper du LFO (Low frequency oscillator). Le LFO est un oscillateur analogique
dont la particularité est d’atteindre des fréquences inaudibles, il est cependant utilisé en musique pour
modifier un autre son, on peut aussi régler ses paramètres comme, sa fréquence, son amplitude, sa forme
d’onde.

8
5ème partie

9
Cette partie est compliquée je ne l’ai pas très bien compris, cependant je sais que l’on peut régler le filtre
(passe bas) pour laisser passer certaines fréquences et un filtre passe haut pour changer le son. Ensuite
nous pouvons régler le timbre du synthétiseur grâce au VCF (Voltage controlled filter) qui est utilisé sur
des instruments analogiques c’est un filtre fréquentiel dont la fréquence de coupure dépend de la tension
d’entrée. Ensuite nous avons tous les commutateurs qui nous servent à choisir la forme d’onde des VCO,
la source du filtre, et de choisir l’ADSR (Attack Decay Sustain Release) ou l’AR (Attack Release)

6ème partie

Pour finir nous avons la dernière partie qui permet de régler L’AR ou L’ADSR suivant nos choix fait
auparavant et de les envoyer aux différents éléments du synthétiseur.

10
Conception des cartes

PTA4543-
MFP221N TLV1543CN CD54AC153 MFP223P
2015DPB103

Convertisseur
Potentiomètre
Potentiomètre Interrupteur Analogique- Multiplexeur Interrupteur
rotatif
Numérique (CAN).
10KΩ 2 Positions 8 entrées 3 Positions
10kΩ
10 entrées

Découpage du synthétiseur en 3 plaques

Etant donné que nous avons une version plus ancienne du synthétiseur nous n’avons pas les trois
boutons, il y a, à la place un potentiomètre rotatifs.

11
Nous avons pu réaliser que la première plaque à cause de problèmes technique liée à l’imprimante. Les
cartes ont été conçues sur le logiciel EasyEDA

Nous avons aussi créé une shield pour la carte FPGA qui sert de sortie finale et de support pour un
composant (le MFP223P).

12
COMPOSANT
Switch / Multiplexer

Comme dit précédemment pour activer certains modules de notre synthétiseur nous utilisons
des switches.

Pour pouvoir récupérer l’information de leur état nous utilisons un multiplexer.


Pour rappeler un multiplexer est un composant avec une sortie, n adresses et 2𝑛 entrées. Cela nous
permet de pouvoir voire les états de plusieurs switches sur une broche ce qui nous fait donc économiser
des pins de la carte FPGA.

13
Pour ce faire nous avons utilisé le composant CD54AC153 qui est une fusion de 2 multiplexer.
En effet, ce composant possède 8 entrées pour les switches, 2 entrées d’adresses et 2 sorties.
Les deux multiplexer sont contrôlé par les même entrées adresses mais on peut les différencier car ils
sont tous les deux des sorties différentes et il y a aussi une entrée pour chacun des multiplexer pour
désactiver leur sorties (nous n’utiliserons pas cette fonctionnalité).

14
Entrées adresses
Entrée désactivation
1er multiplexer

Entrées des données


Sortie 1er
1er multiplexer
multiplexer
(switches)

Entrée désactivation
2ème multiplexer

Entrées des données


Sortie 2ème
2ème multiplexer
multiplexer
(switches)

Pour pouvoir voir l’état des switches, on interroge chacun des switches un par un très rapidement
(50Mhz).

Fiches techniques composants\cd54ac153.pdf

15
Potentiomètre / Convertisseur Analogique Numérique
Les Potentiomètres servent à faire des réglages sur différend modules.
Pour traiter l’information des potentiomètres nous avons besoin d’utiliser un convertisseur analogique
numérique car notre carte FPGA ne traite que des données numériques binaire.
Pour se faire nous utilisons un TLV1543CN qui est un convertisseur analogique numérique.

Fonctionnement

Ce composant fonctionne au rythme d’une horloge de 125 𝑘𝐻𝑧. Nous avons choisi cette valeur car il nous
fallait une valeur d’horloge suffisamment élevé pour que ce soit instantané à l’échelle humaine et pas
trop élevé pour ne pas utiliser trop de puissance de calcul.

Ce composant fonctionne en tram, chaque trame commence quand le Chip Select (𝐶𝑆) passe à 1) et
̅̅̅̅ est l’inverse de 𝐶𝑆). Quand une trame commence l’horloge
s’arrête quand le Chip Select repasse à 0 (𝐶𝑆
se met en marche.

La première chose à faire est d’écrire l’adresse, c’est-à-dire dire au composant la valeur de qu’elle
potentiomètre nous voulons convertir en sachant que nous pouvons brancher au maximum 11
potentiomètres à ce composant. C’est pour quoi l’adressage se fait sur 4 bits au début de la trame en
commençant par le bit de point fort et en finissant par le bit de point faible. A chaque front montant de
l’horloge, le composant lie un bit d’adresse et à chaque front descendant nous lui envoyons la valeur du
bit suivant.

Le Data Out est se la conversion de la valeur du potentiomètre que nous avions désigné à la trame
précédente. Nous récupérons les données de cette trame au front montant de l’horloge car il change au
front descendant. C’est valeur sont ensuite stocké dans un tableau que nous réutiliserons plus tard.
Le Data Out est composé de 10 bits car le composant échantillonne la valeur du potentiomètre est 10 bits
3.3
nous permet d’avoir une précision à 0.0032V près (𝑉𝑚𝑎𝑥𝑝𝑜𝑡 = 3.3𝑣 => 1024 = 0.0032𝑣 ).

Fiches techniques composants\TLV1543 ADC SPI 10bits 11 voies.pdf

16
Convertisseur Numérique Analogique (DAC)

Notre carte FPGA reçois et envoie les données de façon binaire, or pour créer du son il nous faut des
signaux analogiques. Pour se faire nous avons utilisé un convertisseur analogique numérique appelé DAC
qui est le composant MCP4922.

Fonctionnement

Comme pour Convertisseur Analogique Numérique, le DAC fonctionne avec des trames.
Nous avons donc un Chip Select (𝐶𝑆) que l’on fait passer à 1 quand on veut commençais une trame.
En même temp, l’horloge se met en marche et nous commençons à envoyer des informations.
Se composant un échantillonnage de 12bits, se qui est très précis mais si l’on veut économiser de la
puissance de calcul pour certain programme nous pouvons mettre les premiers bits de pois faible à 0 (le
signal ne montera pas jusqu’à sa valeur maximale mais on ne remarquera pas la différence que se soit sur
l’oscilloscope ou à l’écoute.

Nous écrivons au front descendant de l’horloge car le composant lie sur le front montant.
Au début SDI (les données envoyer) est à 1 est cela pendant 4 coups d’horloge. Ensuite nous envoyons un
après l’autre les bit à convertir en commencent par le bit de pois fort et en finissant par le bit de pois
faible. Ensuite le Chip select passe à 0 est nous attendons un peut pour commençait une nouvelle trame
(nous avons décidé arbitrairement d’attendre 7 coups d’horloges).
Pour finir, le composant nous donne le signal analogique avec comme valeur maximum 3.3V et comme
valeur minimum 0V.

Fiches techniques composants\MCP4902 double DAC SPI.pdf

17
PROGRAMME

Low Frequency Oscillator (LFO)


Le LFO est un signal qui nous permet de faire varier la hauteur des notes. Cela permet de créer de créer
des boucles où la note se répète ou de faire varier la note pendant un certain temp.

Low Frequency Oscillator carré


Ce signal est le plus simple à créer, c’est juste un signal carré qui va varier en fréquence de 5 à 50hz.
Pour ce programme nous avons juste à inversé une variable au rythme d’une horloge qui varie en fonction
des potentiomètres.

Low Frequency Oscillator sinusoïdal


Ce signal est un signal sinusoïdal qui varie de 5 à 50hz.

Pour créer le signal sinusoïdal nous avons calculer 64 valeurs numérique d’un sinus sur Excel que nous
avons ensuite copier dans le programme et que nous avons convertis en valeur binaire sur 8 bits. Nous
avons ensuite envoyé c’est valeur au DAC pour qui reconvertie ces valeurs en valeur analogique. Comme
le DAC demande un mot de 12 bits nous avons mis les 4 bits de poids faible à 0 se qui nous permet
d’économiser des éléments logiques. Le DAC convertis ces valeurs au rythme d’une horloge qui varie
grâce à un potentiomètre de 5 à 50hz.

ADSR
L’ADSR (Attack Decay Sustain Release) est un signal qui nous permet de régler le son et la durée d’un son
d’une touche de piano, c’est une enveloppe sonore. L’ADSR se compose de 4 parties Attack, Decay,
Substain et Release. Chacune des durées de ces parties pourra être modifiée grâce aux potentiomètres

18
❖ Attack : qui est le temp de monter du signal jusqu’à son amplitude maximum. Ce temp
commence quand on enfonce une touche du piano.
❖ Decay : représente le temp de décroisses au niveau de maintien.
❖ Substain : représente le niveau de la durée et le niveau de la note.
❖ Release : est le temp nécessaire pour passer de son niveau de maintien au niveau zéro.

Valeurs
potentiomètres Génération des horloges
Attack Decay Substain Release

Fréquence des Signal de la variable de l’ADSR Reconstitution du signal


horloges envoyer bit par bit de l’ADSR
ADSR
Génération de l’ADSR
sur une variable de 12 bits

DAC
Carte FPGA
MCP4922

Dans notre carte FPGA nous avons donc recréer ce signal : nous avons créé dans notre programme une
variable constitué de 12 bits (nous avons choisis 12 car le DAC peut échantillonner un signal sur 12 bits
maximum et que cela nous permet d’avoir une grande précision). Cette variable que nous avons appelée
signalADSR reproduit le signal de l’ADSR en s’incrémente et se décrémentent au rythme de plusieurs
horloge. Quand notre variable reproduit le signal, elle passe par plusieurs phases de l’ADSR : Attack,
Decay, Substain, Release. Nous avons créé 4 variable binaire qui porte le nom : Attack, Decay, Substain,
Release qui se mette à 1 quand la variable signalADSR est en train de reproduire leur partie se qui nous
permet de s’avoir dans qu’elle partit nous sommes. Cette information est utilisée pour régler l’horloge de
chaque une des parties de l’ADSR se qui nous permet de régler la durée de chaque une des parties de
l’ADSR.

Le risque est donc que notre variable ne s’incrémente ou décrémente trop vite et que la fréquence
d’échantillonnage ne soit trop petite. C’est pourquoi nous avons pris une fréquence d’échantillonnage le
plus grand possible : 50MHz pour toujours au moins vérifier le critère de Shannon, même si nous sommes
toujours au-dessus du critère de Shannon car nous n’avons pas besoin d’avoir des fréquences trop élevées
puisque nous travaillons dans le domaine de l’audible et de la musique et que les fréquences les plus
élevées pour des notes de musique von jusqu’à 6Khz.

19
L’Attack Release (AR)
L’attaque Release est une dérivée du mode ADSR (Attack Delay Substain Release), sauf que nous enlevons
le delay qui sert à descendre un peu après le pique de l’attaque et le Substain qui permet de tenir la note.
Nous allons donc obtenir la courbe suivante :

Pour obtenir cela ce n’est évidemment pas très compliqué il suffisait de reprendre le code fait
précédemment pour obtenir l’ADSR et supprimer les parties du Delay et du Substain.

VCO1

Le VCO1 est signal qui gère la fréquence générale du synthétiseur. Il permet de moduler le son en changeant
de fréquence est en modifiant l’enveloppe du signal.

Les fonctions du VCO1 devront être réalisées en VHDL. La fréquence de base sera régulée à l'aide de 2
potentiomètres, le Frequency Coarse pour un réglage large et le Frequency Fine pour un réglage fin. Une fois
reliée au dac la fréquence du son devra être comprise entre 20 𝐻𝑧 et 2 𝑘𝐻𝑧. Cette plage sera donc réglée
par le Frequency Coarse, puis le Frequency Fine ajoutera de 0.2 à 20 𝐻𝑧 à la valeur du Frequency Coarse.

20
Pour le changement d’enveloppe du signal, on utilisera un switch pour permettre au signal de passer d’une
enveloppe de signal carré à une enveloppe de signal rampe.

Le synthétiseur est constitué de 3 octaves de 12 demi-tons (touches) chacun. Pour passer d’une octave à un
autre de la gauche vers la droite il faut diviser par deux la fréquence de base. Cette fréquence est réglée à
l’aide de deux potentiomètres :
- Le Frequency Coarse réglant la fréquence entre 20 et 2000ℎ𝑧, cette fréquence correspond à celle
de la touche la plus aigüe du clavier (tout à gauche)
- Le Frequency fine ajuste la fréquence de plus 0,2 à 20ℎ𝑧
Le VCO1 étant une fonction de modulation du son, il a donc aussi une fonction permettant de changer
l’enveloppe du signal qui modifie le son entendu pour une même fréquence.

Réalisation
L’horloge générale du VCO1
Afin de réaliser le VCO nous allons utiliser un signal carré de 400𝑀𝐻𝑧. L’utilisation d’un signal de si haute
fréquence est justifiée. Dans le code qui constitue le VCO1, nous réalisons plusieurs divisions d’entier. Les
valeurs sont donc approximées par des nombres rationnels, donc si on choisit de travailler avec une haute
fréquence, 400𝑀𝐻𝑧 ici, nos approximations seront d’autant meilleures. Nous utilisons ce signal car la carte
FPGA DE10Lite peut travailler à un maximum de 500𝑀𝐻𝑧 . Afin d’obtenir une telle horloge pour notre
projet, nous avons donc intégrer un PLL multiplicatrice de fréquence, en VHDL, dans le code (Cf Annexe n°3).

Déterminer la fréquence jouée


Pour déterminer la fréquence jouée, deux paramètres rentrent en compte. Le premier, la fréquence
générale du synthétiseur, s’il joue des notes plus dans les graves ou plus dans les aiguës, et le deuxième, la
fréquence déterminée par la touche jouée. C’est pourquoi nous avons besoin de passer par deux étapes
d’entre la fréquence d’entrée, 400𝑀𝐻𝑧 et la fréquence
de sortie 2𝑘𝐻𝑧

La fréquence déterminée par la touche


Afin de réaliser les calculs on commence par le signal souhaité, on utilisera comme référence la fréquence
maximal, donc 2𝑘𝐻𝑧 en sortie du synthétiseur, car on sait que les notes suivantes sont échelonnées de
demi-ton en demi-ton. Pour descendre d’un demi-ton il faut diviser la fréquence du demi-ton précèdent par
12
√2 = 1.0594. Pour réaliser les calculs on a pris le cas où le signal serait une rampe, car une rampe signifie
un compteur, donc pour créer un signal carré de même fréquence, il suffirait de faire changer d’état à chaque
début de rampe et dès que la rampe atteint 𝑉𝑚𝑎𝑥/2.
- Une rampe est constituée de 256 valeurs (un octet), on approximera à 250 le nombre de valeur
pour grandement simplifier les calculs par la suite. Si la rampe est à 2𝑘𝐻𝑧, les valeurs de la rampe
sont incrémentées à 2 ∗ 250 = 500𝑘𝐻𝑧. Cela nous donne donc la fréquence maximale de l’horloge
de la rampe
- L’horloge de la rampe dépend elle de l’horloge de base, qui au maximum sera de 5𝑀𝐻𝑧. Donc afin
d’obtenir 500𝑘𝐻𝑧, on doit diviser par 10 l’horloge de base pour obtenir l’horloge de la rampe.
10 est donc le diviseur de l’horloge de base permettant d’obtenir l’horloge de la rampe lorsque l’on appuie
sur la touche la plus aiguë du clavier. On doit donc réaliser le processus précèdent pour les autres touches
du clavier. Je l’ai donc réalisé sur un tableau Excel pour les 11 autres touches de l’octave. Étant donné le
12
facteur de √2 entre chaque touche, on obtient donc des diviseurs rationnels avec beaucoup de chiffres
après la virgule. On fait donc des arrondies à 10−2 prêt.
Avec les arrondies et les approximations, on a donc calculé l’erreur obtenue à la fin de tout le
processus de calcul, et la plage d’erreur obtenue est −0.7% < 𝐹 < 0.4%. L’erreur obtenue et donc quasi
inaudible. (Cf Annexe n°4)

21
La Fréquence déterminé par les potentiomètres
La fréquence générale du synthétiseur que l’on appellera la fréquence de base, dépend de deux
potentiomètres liés au VCO1, le Frequency Coarse et le Frequency Fine. La fréquence de base dépend de la
somme des fréquences réglées par les deux potentiomètres. Pour déterminer la fréquence en fonction des
valeurs des potentiomètres, on doit tout d’abord définir la fréquence qu’apportera chaque potentiomètre
un par un.
La valeur du Frequency Coarse est convertie par l’ADC qui renvoit des données sous 10 bits, donc 210 =
1024 valeurs. Pour notre synthétiseur nous utiliserons uniquement cent valeurs pour le Frequency Coarse
et 32 pour le Frequency Fine. Pour chaque valeur du Frequency Coarse on a 32 valeurs possible, ce qui
donne donc un grand nombre de possibilités de fréquences.
- Pour obtenir c’est cent valeurs, on convertie en binaire, à l’aide d’une fonction VHDL la valeur du
potentiomètre donné par l’ADC, 10242 = 1111111111, donc sur 10 bits, puis on reconvertie
uniquement les 7 bits de poids fort, pour obtenir la valeur qui s’approche le plus de 100, 27 = 128.
Pour les 32 valeurs du Frequency Fine on fait de même avec seulement les 5 bits de poids fort.
- En se concentrant sur le Frequency Coarse, ces cent nouvelles valeurs sont le paramètre d’un case.
On assigne donc à chaque valeur du potentiomètre une valeur qui correspond au maximum d’un
compteur. Les 28 valeurs de trop seront donc définies comme étant la valeur maximale du
compteur.
Comme pour les touches du clavier, les valeurs assignées à chaque niveau du potentiomètre sont des
maximums d’un compteur. Plus le compteur a un maximum haut, plus la fréquence du signal sera basse, et
inversement. Pendant notre projet nous avons dans un premier temps réalisé uniquement les réglages du
Frequency Coarse.
- On souhaite obtenir comme fréquence maximal 5𝑀𝐻𝑧 lorsque le potentiomètre est au maximum.
Ce qui correspond à un signal de sortie du VCO1 de 2𝑘𝐻𝑧. Le minimum étant20𝐻𝑧 , 100 fois plus
petit que la fréquence maximale, la fréquence du signal de base doit elle aussi être 100 fois plus
5𝑀ℎ𝑧
petite que la fréquence maximale, 100 = 50𝑘𝐻𝑧.
- 50𝑘𝐻𝑧 Correspond donc à la valeur 0 du Frequency Coarse, étant donné que l’on a 100 valeur, à
chaque valeur du potentiomètre, on ajoutera donc 50𝑘𝐻𝑧 à la valeur précédente pour pouvoir
obtenir 5𝑀𝐻𝑧 en valeur maximale.
- Notre signal d’entrée est de 400𝑀𝐻𝑧, Pour obtenir un signal de 50𝑘𝐻𝑧, faut donc diviser par
400𝑀𝐻𝑧
= 8000
50𝑘𝐻𝑧
Comme pour les touches du clavier, 8000 correspond au diviseur de la valeur minimal du potentiomètre.
J’ai donc réalisé les calculs pour toutes les valeurs du potentiomètre sur un tableau Excel. On réalise ensuite
le même processus pour les valeurs correspondantes pour le Frequency Fine. (Cf Annexe n°5)

Assemblage des fonctions sous format VHDL


Maintenant que nous avons calculé tous les diviseurs de fréquence, en fonction des valeurs des
potentiomètres et des touches, il faut les mettre en commun dans le code VHDL en commençant par mettre
toutes les étapes dans l’ordre.
- On assigne à chaque valeur du Frequency Coarse la valeur maximum du compteur, permettant
d’obtenir les bonnes fréquences.
- On crée ensuite un compteur qui s’incrémente de +64 à chaque coup d’horloge de l’horloge de
400𝑀𝐻𝑧, jusqu’à la valeur du maximum du compteur que l’on a choisie à l’aide des potentiomètres
Frequency Coarse et Frequency Fine, pour obtenir l’horloge de base du VCO1.
On a auparavant multiplié les maximums du compteur par 64. Cela permettra, lors de l’ajout du
Frequency Fine, de pouvoir ajouter au maximum du compteur obtenu par le Frequency Coarse, le
réglage fin du Frequency Fine.

22
Nous avons ici les valeurs correspondante au maximum du compteur donné par le Frequency
Coarse :
➢ NOIR : le numéro de la valeur, de 0 à 99
➢ JAUNE : la fréquence voulue, de 50𝑘𝐻𝑧 à 5𝑀𝐻𝑧
➢ BLEU : diviseur de 400𝑀𝐻𝑧 pour obtenir la fréquence voulue
➢ ROUGE : diviseur multiplié par 64

Sachant que nous devons pouvoir insérer 32 valeurs pour le réglage fin de la fréquence. Si, par
exemple, nous avions utilisé les diviseurs BLEU, la différence de fréquence entre les valeurs 15 et
16 serait : 500 − 470.5 = 29.5
29.5
Donc la valeur à ajouter au maximum du compteur serait : = 0.92
32
Or notre code ne peut fonctionner qu’avec des entiers. Donc cette valeur serait approximée à 1 et
certaines valeurs du réglage fin serait confondues car leur approximation donnerait le même entier.
De plus on peut remarquer que plus on prend une grande fréquence, plus la différence entre deux
diviseurs est petite. Les mêmes calculs pour les valeurs 16 et 17 :

470.5 − 444.5 = 26
26
= 0.81
32

Maintenant, si on multiplie par 64 les valeurs des maximums, l’écart entre deux valeurs de
fréquence est lui aussi multiplier par 64, pour les valeurs 15 et 16 :
500 ∗ 64 − 470.5 ∗ 64 = 32000 − 30112 = 1888
1888
= 59
32

Cette fois ci, le réglage fin de la fréquence ajoute 59, un entier, au maximum donné par le réglage
large.
Pour 16 et 17 :
470.5 ∗ 64 − 444.5 ∗ 64 = 1664
1664
= 52
32

Afin de prévoir une erreur que l’on rencontre régulièrement, on a divisé les maximums de compteur
par 2. Pour créer notre signal d’horloge, on fait changer d’état notre signal final à chaque fois que
l’on arrive à un maximum donc pour avoir une période complète il faut atteindre deux fois le
maximum. Mais nos calculs sont prévus pour travailler avec des périodes complètes, donc notre
signal final est deux fois trop lent. Pour remédier à notre problème, on divise par deux les
maximums, ce qui multiplie par deux la fréquence et nous donne donc celle souhaitée.

Lors de la création de l’horloge de base, nous utilisons un compteur qui incrémente de 64 en 64 à


chaque coup d’une autre horloge. Ensuite à chaque fois que nous incrémentons le compteur, nous

23
vérifions que cette nouvelle valeur est supérieure ou égale au maximum du compteur prédéfinie
par les deux potentiomètres de réglage de fréquence.
Lorsque la valeur est supérieure au maximum, cela ralentit la fréquence du signal de sorti, car il y a
un coup d’horloge en trop. Afin que la fréquence moyenne du signal de sorti soit équivalente à la
fréquence que l’on a réglée, nous réutilisons la valeur supérieure au maximum du compteur comme
nouvelle valeur de départ du compteur. (Cf Annexe n°6-7)

- Une fois que l’on a obtenu notre signal d’horloge de base du VCO1, on appuie sur la touche que
l’on souhaite à laquelle on a assigné le Maximum de l’horloge de rampe du VCO1 avec les calculs
réalisés précédemment. Les Maximums que l’on a calculés sont divisés par deux pour les mêmes
raisons que l'étape précédente, lorsque l'on arrive à un maximum on ne fait que changer l'état d'un
signal, on ne fait pas apparaître une période entière. Puis on les multiplie par 100 afin d'avoir des
nombres entiers pour que le logiciel puisse travailler. Donc lors de l’incrémentation du compteur
on incrémente par 100 et non pas par 1
Comme pour l’étape précédente, on réalise le même procédé lors des phases de compteur afin
que la fréquence de l’horloge soit la plus exacte possible

- Avec cette nouvelle horloge, on crée le signal final de sortie du VCO1, qui est soit un signal rampe
soit un signal carré en fonction d’un switch.
➢ Pour le signal rampe : à chaque coup d’horloge on incrémente une variable jusqu’à 250,
puis on réinitialise cette valeur à 0 et on recommence
250
➢ Pour le signal carré : lorsque la variable précédente atteint 2 = 125, on fait prendre la
valeur 250 à une deuxième variable, puis lorsque la premier variable atteint 250, la
deuxième variable prend la valeur 0.

- On envoie ensuite l’un des deux signaux de sortie, carré ou rampe, du VCO1 que l’on a au préalable
converti en binaire, au DAC afin de l’envoyer à l’amplificateur.

24

Vous aimerez peut-être aussi