Dernière mise à jour :
26/07/2026
Présentation
Ce générateur est capable de délivrer des signaux
audio carré et sinusoïdal avec une
fréquence stabilisée par quartz et ajustable au centième de hertz près (résolution de 0,01 Hz),
sur une
plage allant de 20 Hz
à 20 kHz.
Ce montage basé sur un microcontrôleur
PIC18F46K22 permet
de
choisir la fréquence du signal de sortie (carré et sinus) par le biais de
boutons-poussoirs et d'un écran LCD. Pour ceux qui n'ont que faire de
la sortie sinus et d'une résolution à 0,01 Hz, voir la version
simplifiée
générateur
audio 008 qui n'offre qu'une sortie signal carré et dispose
d'un réglage de fréquence au hertz près.
Avertissements
- Le projet présenté ici s'appuie sur les travaux de Bob Ammerman et Roman Black publiés sur le site de RomanBlack, précisément dans la section High resolution frequency. La précision de la fréquence "moyennée dans le temps" est très bonne, mais l'instabilité de phase (jitter)
augmente au fur et à mesure qu'on monte dans les hautes fréquences. Les
"performances du signal carré" sont identiques à celles du Générateur
audio 008.
- La
fréquence réelle du signal délivré par le PIC dépend étroitement de la
précision du quartz utilisé pour l'horloge du PIC. Si la fréquence
réelle d'oscillation du quartz est de 15,999900 MHz au lieu de
16,000000 MHz, alors une fréquence programmée à 1000,00 Hz donnera en
réalité un signal de fréquence égale à 999,99 Hz. Contre-mesures possibles exposées en fin d'article.
- Aucun réglage du niveau de sortie n'a été prévu dans cette version, ni pour la sortie carré ni pour la sortie sinus.
Schéma
Le montage est construit autour d'un PIC, composant
programmable
nécessitant un logiciel interne pour rendre un quelconque service (par
chance, une version allégée LE du programme vous est proposé gracieusement à la fin de cet
article).
Notons tout de suite la présence des trois sous-ensembles suivants :
- MCU
PIC18F46K22
avec afficheur LCD et boutons-poussoirs - cette section permet
simplement à l'utilisateur de spécifier la fréquence du signal audio de
sortie (aussi bien carrée que sinus). C'est ce même PIC
qui délivre un signal carré dont la fréquence est précise au
dizième de hertz près.
- PLL 74HCT4046
- cette section permet d'obtenir une fréquence 50 fois supérieure à la
fréquence du signal audio délivré par le PIC. Ce signal de fréquence
élevée constitue la fréquence de travail (de découpage) du filtre
LTC1067 qui complète l'ensemble.
- Filtre LTC1067
- ce filtre programmable, configuré ici en filtre passe-bande étroit,
permet d'atténuer fortement les harmoniques du signal audio de forme
carrée, en vue de ne conserver que la composante fondamentale
et
donc de s'approcher d'un signal sinusoïdal.
Principe général de fonctionnement
Un signal carré de fréquence F (fréquence désirée par
l'utilisateur) ajustable à 0,01 Hz près, est délivré par le PIC. Ce
signal est dirigé :
- vers l'entrée
analogique d'un filtre à capacités commutées monté en filtre
passe-bande étroit.
- vers une PLL qui permet de multiplier la fréquence F par 50 (taux de
multiplication fixe)
Le
signal de fréquence F*50 est orienté vers l'entrée d'horloge
du filtre à capacités commutées. Le signal carré de fréquence F ressort
filtré (harmoniques atténuées) ce qui lui permet de
ressembler à
une sinusoïde.
Par exemple, pour obtenir un signal sinus de 1 kHz en sortie
du
filtre, on doit appliquer un signal carré de 1 kHz sur la
broche
d'entrée analogique du filtre (pin 8) et un signal carré de
fréquence 50 kHz sur la broche d'entrée d'horloge du
filtre (pin 16). Avec un signal d'horloge de
50 kHz (requis pour un signal audio utile de 1 kHz), la réponse en
fréquence du filtre est celle visible sur le
graphe du centre ci-après :
Filtre passe-bande
centré sur 1 kHz : le signal carré entrant (1 kHz) ressort du filtre avec une
forme sinusoïdale
Rappelons
qu'un signal carré (de rapport cyclique 50%) ne possède que des
harmoniques d'ordre impaire (H3, H5, H7, etc).
Dans l'exemple précédent
avec un signal utile de 1 kHz, la réjection de la première harmonique
du signal carré (H3 = 3 kHz) est de -70 dB (taux d'atténuation
d'environ 3000) et la: seconde harmonique du
signal carré (H5 = 5 kHz) est de -80 dB (taux d'atténuation de 10000).
Les harmoniques suivantes (H7, H9, etc) sont encore plus atténuées.
Pour
produire un signal sinus à d'autres fréquences, un
calcul simple nous montre que la fréquence d'horloge doit être de 1 kHz
pour centrer le filtre sur un sinus de 20 Hz (20 Hz * 50) et qu'elle
doit être de 1 MHz pour centrer le filtre sur un sinus de 20 kHz (20
kHz * 50).
Remarques
:
- Le filtre LTC1067-50 configuré ici en filtre passe-bande
pourrait également être configuré en filtre passe-bas.
L'important est de laisser passer la raie correspondant à la
fréquence fondamentale et d'atténuer le plus possible les
raies harmoniques de
rang supérieur.
- L'atténuation apportée sur les premières harmoniques (H3 et
H5) est assez marquée, mais pas suffisament tout de même pour offrir un
signal de très grande pureté spectrale. L'avantage du circuit présenté
ici réside
davantage dans le mode de filtrage "automatiquement centré sur la
fréquence désirée" que dans les performances. Ceci dit, le résultat est
très convenable !
Section PIC (18F46K22)
Si j'ai choisi ce PIC, c'est parce qu'il répond parfaitement au besoin que je me suis fixé.
Son
oscillateur qui travaille à 16 MHz (Fosc interne de 4 MHz)
suffit
pour produire le signal basse fréquence très précis dans la bande
20 Hz à 20 kHz, et le nombre de broches
d'entrées/sorties
permet de raccorder un afficheur LCD classique et plusieurs
boutons-poussoirs. On attribue à ce PIC les deux rôles suivants :
- génération d'un signal carré périodique de fréquence comprise entre
20 Hz et 20 kHz (
Nota 1)
- réglage et affichage de la fréquence sur un écran LCD 2x16 ou 2x20 caractères
Nota 1 - La
fréquence du signal carré délivré par le PIC peut en réalité descendre
à 0,01 Hz (période de 100 secondes) tout en conservant la même précision, mais la PLL n'accroche
plus ou mal en-dessous de 10 Hz et le signal sinus n'est plus exploitable (même
en modifiant la valeur des composants de la PLL, la constante de temps
de la boucle serait trop grande et la fréquence serait de ce fait très
instable).
Méthode de réglage de la fréquence
Pour cette réalisation, j'avais au moins deux possibilités pour régler
la fréquence à la valeur désirée :
-
soit avec seulement 4 boutons pour se déplacer dans la valeur de la
fréquence affichée sur l'écran LCD et incrémenter ou décrémenter le
chiffre sélectionné
- soit avec une paire de boutons pour les unités, une autre
paire pour les dizaines, une pour les centaines, etc...
Préférant disposer de beaucoup de boutons-poussoirs pour un accès plus direct, j'ai opté
pour la seconde solution (cette façon de faire impose bien sûr un nombre plus élevé de lignes d'entrée/sortie sur le PIC).
- SW0 = Shift (rôle primaire ou secondaire des boutons-poussoirs SW1 à SW12)
- SW1 = Preset #1 (sauvegarde par pression longue et rappel par pression brève)
- SW2 = Preset #2 (sauvegarde par pression longue et rappel par pression brève)
- SW1+SW2 = Preset #0 (valeur utilisée lors de la mise sous tension)
- SW3 = incrément fraction (+0,1 Hz si SW0 relâché ou +0,01 Hz si SW0 pressé)
- SW4 = décrément fraction (-0,1 Hz si SW0 relâché ou -0,01 Hz si SW0 pressé)
- SW5 = incrément unités (+1 Hz)
- SW6 = décrément unités (-1 Hz)
- SW7 = incrément milliers (+1000 Hz)
- SW8 = décrément milliers (-1000 Hz)
- SW9 = incrément centaines (+100 Hz)
- SW10 = décrément centaines (-100 Hz)
- SW11 = incrément dizaines (+10 Hz)
- SW12 = décrément dizaines (-10 Hz)
La
fréquence min est de 20,00 Hz et la fréquence max est de 20,00 kHz. Si
l'incrément ou le décrément demandé fait sortir la fréquence actuelle
de cette plage, la demande n'est pas prise en compte. Par exemple, si
la fréquence en cours est 19200 Hz et que vous pressez le
bouton-poussoir SW7 (incrément milliers) alors il ne se passe rien.
Autre exemple : si la fréquence en cours est 27 Hz et que vous pressez
le bouton-poussoir SW12 (décrément dizaines) là encore il ne se passe
rien.
Pour
les deux boutons-poussoirs de presets SW1 et SW2, une pression brève
est caractérisée par une durée de pression supérieure à 100 ms et
inférieure à 1 seconde. Une pression longue quant à elle est
caractérisée par une durée de pression supérieure à 3 secondes.
Une pression simultanée sur SW1 et SW2 pendant au moins 3 secondes provoque
la sauvegarde de la valeur de fréquence en cours, valeur qui sera
rappelée lors de la prochaine mise sous tension. Une pression simultanée
sur SW1 et SW2 pendant au moins 100 ms et moins de 1
seconde provoque le rappel de la fréquence de démarrage (ce qui
évite un arrêt/marche pour revenir à cette configuration).
Section PLL (74HCT4046)
Le 74HCT4046
(version TTL du célèbre circuit CMOS CD4046) est utilisé ici pour
multiplier la fréquence du signal délivré par le PIC. J'ai choisi cette
solution pour la simple raison que le PIC utilisé ici est un modèle 8
bits dont il est difficile de tirer un signal à 1 MHz avec la
méthode employée (bien sûr, ce même PIC en serait tout-à-fait capable
si on ne lui demandait que cela, et à condition de pousser sa fréquence
d'horloge à 64 MHz). L'avantage de cette approche avec PLL externe est
qu'elle m'a fait perdre plusieurs heures pour arriver à faire
fonctionner correctement ladite PLL dans la plage de fréquence 1 kHz
(pour signal sinus de 20 Hz) à
1 MHz (pour signal sinus de 20 kHz).
Eh oui, j'aime perdre du temps quand il s'agit d'apprendre.
Choix des composants de la PLL
Il y a ici deux ensembles de composants dont les valeurs sont
critiques pour le bon fonctionnement de la PLL :
- composants qui déterminent la plage de capture et d'accrochage (R1,
R2 et C1)
- composants qui constituent le filtre de boucle qui restitue
la tension continue de commande du VCO (R3, R4, C2 et C3).
Remarque
: pour parfaire l'accrochage de la PLL, la valeur du condensateur C1
est automatiquement ajustée par mise en ou hors service des
condensateurs C1B et C1C, en fonction de la fréquence de sortie
demandée (uniquement dans la version Pro).
Multiplicateur de fréquence 50x
La multiplication
par 50 de la fréquence du signal audio est assurée par la PLL, grâce au
diviseur de fréquence réalisé avec U4 (compteur programmable câblé pour
une division par 25) et U5 (bascule D montée en diviseur par 2). Le
diviseur par 2 (U5) nécessaire ici pour disposer d'un signal carré
de rapport cyclique 50% permet en même temps d'obtenir le facteur de division souhaité, à savoir 1:50.
Le fonctionnement est simple : on utilise
le VCO intégré au 74HCT4046 pour délivrer le signal d'horloge requis
par le filtre LTC1067. Ce signal en
sortie du VCO doit posséder une fréquence comprise entre 1 kHz et 1 MHz
(1 kHz pour signal audio de sortie 20 Hz et 1 MHz pour signal
audio de sortie 20 kHz). Le comparateur de phase de la PLL reçoit deux
signaux carrés qui doivent avoir la même fréquence (tout sera fait pour que cette condition soit remplie) :
- signal carré provenant du PIC (sortie LFsq) pouvant évoluer entre 20 Hz et 20 kHz
- signal carré provenant de la sortie du diviseur de fréquence par 50, lui aussi évoluant entre 20 Hz et 20 kHz
Si
la fréquence de sortie du VCO une fois divisée par 50 (PhCompIn) est
différente de celle délivrée par le PIC (LFsq), alors la tension de
commande du VCO (VCO_In) augmente ou diminue pour corriger
automatiquement la dérive. Cette tension de commande est obtenue par un
filtrage passe-bas en sortie du comparateur de phase (PC2OUT, broche 13
du 74HCT4046).
Section Filtre (LTC1067)
Préambule : le circuit LTC1067 existe en deux versions : LTC1067 (Fclk
= F*100) et LTC1067-50 (Fclk = F*50).
Le
circuit intégré LTC1067 - que j'ai déjà utilisé dans un projet pro -
s'avère redoutablement efficace, dommage qu'il coûte si cher. Ce
composant permet de réaliser un filtre passe-bande ou passe-bas assez
facilement, si pour un résultat similaire on le compare à la panoplie
de composants à mettre en oeuvre pour un système basé sur
des AOP. La broche 16 (CLK) reçoit un signal d'horloge dont la
fréquence doit être de 50x la fréquence centrale du filtre passe-bande
pour le LTC1067
-50
(modèle que
j'ai choisi), cette fréquence d'horloge doit être de 100x la fréquence
centrale du filtre passe-bande pour le LTC1067.
Evolutions futures possibles
Comme
dit en section Avertissements, la
fréquence réelle du signal délivré par le PIC dépend de la
fréquence réelle du quartz utilisé pour l'horloge du PIC. On sait que
le quartz permet une grande stabilité de fréquence, mais la fréquence
réelle d'oscillation peut légèrement différer de celle qu'il est censé
produire. L'idéal ici n'est pas d'avoir un quartz "parfait", mais
de connaître sa fréquence réelle d'oscillation. Le logigiel du PIC
s'appuie en effet sur la fréquence "supposée" du quartz pour produire
le signal à la fréquence désirée. Pour corriger tout écart de fréquence
du quartz, je vois deux solutions :
-
solution #1
: utiliser un signal de référence 1 pps (1 Hz) provenant d'un récepteur
GPS ou autre source de référence de laboratoire pour effectuer en
interne (par le PIC lui-même, au démarrage ou après un certain temps de
chauffe) une mesure de fréquence réelle du quartz et utiliser cette
valeur lue en remplacement de la fréquence "supposée".
-
solution #2 : permettre à tout moment l'ajustement de la fréquence "supposée", sans référence externe.
Actuellement,
la fréquence réelle d'oscillation est mesurée avec deux fréquencemètres
différents et la valeur moyennée des deux mesures est utilisée pour
coder en dur la fréquence utilisée par le timer 2. Dans les deux cas, il ne faut pas oublier que la fréquence du quartz dépend aussi de la température ambiante. Une
solution au top consiste à utiliser un oscillateur thermostaté et
ultra-précis... mais bien évidement, le coût de revient du système s'en
ressent ! Ceci dit, rien ne vous interdit de construire vous même
un oscillateur thermostaté en enfermant un oscillateur à quartz dans
une petite enceinte chauffée par un transistor de puissance, avec une
thermistance pour l'asservissement en température.
Logiciel du PIC
Le logiciel est disponible en deux versions : Pro et LE.
Dans
la version Pro, la
résolution du réglage de la fréquence est de 0,01 Hz et la PLL accroche plus vite aux fréquences extrèmes.
Dans
la version LE, la résolution du réglage de la fréquence est de 1 Hz et les presets sont inactifs.
Pro - Logiciel complet non
disponible en libre service
LE -
Generateur audio
008b - 18F46K22 - Version V1.0 du 25/07/2026
Si
vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à
utiliser, merci de consulter la page PIC - Sources.
Historique
26/07/2026
- Première mise à disposition.