Et si vous construisiez votre générateur de signaux ? Instructions et conseils de construction d'un générateur de signaux simple et performant à l'aide d'un AD9851. Les thèmes de l'adaptation des modules, de la théorie du fonctionnement et du logiciel sont tous abordés dans cet article sur la construction d'un générateur de signaux DDS bricolé.  

Dans sa gamme de CI, Analog Devices propose des générateurs de signaux DDS (en anglais Direct Digital synthesis, soit synthèse numérique directe). Ces CI ne fonctionnent pas seuls : ils nécessitent des circuits externes pour l'initialisation, le réglage de la fréquence ainsi qu'un fitre passe-bas. AliExpress propose des modules complets, comprenant la puce AD, le filtre et d'autres composants, à un prix très compétitif. Le minigénérateur de signaux décrit ci-après, utilise un module à puce AD9851. Il produit un signal sinusoïdal de fréquence comprise entre 1 Hz et 70 MHz. Le comparateur de la puce, compare le signal de sortie sinusoïdal à une tension continue réglable et produit ainsi une onde carrée de rapport cyclique réglable. L'ajout d'un codeur rotatif, d'un afficheur et d'un petit µprocesseur en fait un générateur de signaux complet.

Qu'a-t-il dans le ventre ?

Le signal est produit par synthèse numérique directe (DDS). C'est un oscillateur à commande numérique (en anglais NCO = numerically controlled oscillator) qui produit une onde sinusoïdale numérique à l'aide d'une table de correspondance (LUT = lookup table). Un convertisseur numérique/analogique (CN/A, en anglais DAC) la transforme en signal analogique. La fiche technique de l'AD9851 fournit des informations détaillées. La figure 1 montre le module avec l'AD9851. Pour qu'il entre dans le boîtier choisi, la LED a été ôtée et un coin du module coupé. On a aussi ôté le potentiomètre de réglage de la tension continue d'entrée du comparateur : celle-ci est produite par un CA/N (en anglais ADC) intégré au µcontrôleur de commande du module.

Figure 1. Module AD9851

L' AD9851 se contrôle selon deux modes : parallèle ou série. Il faut plus de huit fils en mode parallèle contre quatre fils en mode série, nous avons donc retenu le mode série pour l'initialisation et la sélection de la fréquence. Les signaux de " chargement série " (ainsi nommés dans la fiche technique) sont illustrés à la figure 2. Le 4e signal réinitialise l'appareil. Un µcontrôleur fournit ces signaux via le périphérique SPI (en anglais Serial Parallel Interface) intégré. Un codeur rotatif permet de faire varier la fréquence. En outre, un petit écran affiche la fréquence instantanée. Un générateur de signaux DDS ne produit pas de signaux sinusoïdaux purs - le signal de sortie contient de multiples harmoniques de la fréquence d'échantillonnage.

Serial load signals (Source: AD9851)
Figure 2. Signaux de chargement série. (Source : Caractéristiques de l'AD9851)

Aperçu du schéma de câblage

La figure 3 illustre le schéma de principe. Comme un petit nombre d'E/S est nécessaire, le µcontrôleur Microchip PIC18F04Q41 à 14 broches suffit. Il contrôle le module DDS par quatre sorties, lit le codeur rotatif par trois entrées et commande l'affichage via le bus I2 C, par deux autres sorties. La tension CC de sortie est produite sur la broche 11.

Les broches restantes sont : 1 & 14 pour l'alimentation et 12 & 13 pour la programmation. On peut programmer le PIC18F04Q41 avec un PICkit 4, PICkit 5, ICD 4, ICD 5 ou MPLAB Snap. Les versions antérieures de ces outils sont incompatibles avec ce PIC. Le processeur a été programmé avant montage sur la carte imprimée (CI). Il reste possible de programmer le processeur in situ en soudant des fils à ses broches de programmation, fils que l'on dessoudera après programmation. L'alimentation de 5 V est fournie par un connecteur USB.

Schematic diagram of the DDS signal generator.
Figure 3. Schéma du générateur DDS.

Le PIC18F04Q41 appartient à une nouvelle série de PIC dont les modules d'E/S série pour SPI et I2 C bénéficient d'améliorations. Notre application en profite bien. Le module SPI dispose d'un tampon de registre de sortie, ce qui permet de produire les 40 bits requis pour le signal de sortie série en un seul flux continu. Ce signal série, est cadencé à 16 MHz, ce qui permet de changer la fréquence de sortie du générateur en moins de 3 µs. En outre, configurer le module I2 C est plus aisé qu'auparavant. La fréquence instantanée du signal produit s'affiche sur un petit écran OLED de 0,91″, contrôlé par un bus I2 C cadencé à 400 kHz.

 

Je m'abonne
Abonnez-vous à la balise thématique test&mesure pour être averti dès qu'une information relative à ce sujet sera publiée par Elektor !

Modification des paramètres

Un appui sur le poussoir du codeur déplace le curseur (trait de soulignement) de gauche à droite, et revient à gauche une fois le bord droit atteint. Tourner le codeur augmente/diminue le nombre en dessous et à gauche du décodeur. Cela permet de couvrir rapidement toute la gamme de 1 Hz à 70 MHz. Si le nombre affiché change, un signal est envoyé au module DDS, afin que la fréquence de sortie reflète la nouvelle valeur.

Comme indiqué ci-dessus, la tension CC renvoyée à l'entrée du comparateur du module est produite par un CN/A interne du µcontrôleur. Pour modifier cette tension, appuyer sur le poussoir du codeur pendant environ 2 s et le relâcher dès que l'écran affiche un nombre à trois chiffres. La tension se règle alors en 256 pas en tournant le codeur jusqu'à obtenir le rapport cyclique d'onde carrée désiré. Un nouvel appui de plus de 2 s, ramène l'écran à l'affichage de la fréquence. L' EEPROM interne du PIC conserve la tension continue sélectionnée.

Construction

Le circuit n'utilise que quelques composants. Nous avons conçu une petite carte imprimée (CI) pour que le tout tienne dans un petit boîtier Strapubox, de dimensions 50×50×20 mm3. Les signaux sortent sur deux connecteurs SMA. Il n'y avait pas assez de place pour des BNC. Comme on peut le voir (fig. 4a, 4b et 4c) nous avons plié à 180˚ les broches des connecteurs du codeur pour les souder à la CI. Les broches sont fragiles : opérer délicatement.

The PCB
Figure 4: Générateur de signaux DDS (PCB): Face avant de la CI, avec l'écran (a); Arrière de la CI, sans module DDS (b); et Arrière de la CI avec module DDS installé (c).

L'une des vis de fixation de la CI au boîtier est masquée par le module DDS. Ce dernier a donc été rendu enfichable. Nous avions ici un problème d'espace : le boîtier ne mesure que 20 mm de haut. Un connecteur femelle à profil ultra bas avec broches à profil bas, a permis de limiter la hauteur à une valeur compatible. Le µprocesseur n'est disponible qu'en boîtier SMD. Les trois capacités et le connecteur USB sont aussi des CMS, ce qui a simplifié l'implantation.

DDS components list

Microprogramme

Le µprogramme a été écrit en assembleur. Il n'occupe que 13 % de la mémoire de programme du processeur. On configure d'abord les ports, puis deux cellules logiques configurables (CLC) en bascules de détection des transitions positives causées par la rotation du codeur. Ensuite, le timer2 est configuré pour fournir un délai de 10 ms d'élimination des rebonds du commutateur, et le timer4 pour fournir un délai d'environ 100 ms. Ce dernier est nécessaire après l'initialisation de l'afficheur OLED. Après initialisation du CN/A fournissant la tension continue du comparateur, on configure le module de bus I2C pour communiquer avec l'écran OLED à une fréquence de 400 kHz, et enfin le module SPI qui contrôle le module DDS. Ensuite on initialise, l'écran, le module DDS et les interruptions.

Des interruptions gèrent tout le programme. La partie programme est uniquement constituée de NOP (instructions nulles). Le processeur ne fait qu'attendre les interruptions. La routine de service d'interruption du poussoir déplace le curseur vers la droite. Si l'interrupteur reste enfoncé, la valeur de sortie du CNA s'affiche comme vu ci-dessus. Si la bascule du 2e CLC change d'état, la 2e routine de service d'interruption s'exécute. L'état de la sortie du CLC indique s'il faut incrémenter ou décrémenter la valeur de fréquence affichée. Après affichage de la nouvelle valeur, on calcule et transmet les octets de contrôle du module DDS et le processeur — attend de nouveau une interruption.


Note de l'éditeur : L'article "Un générateur de signaux DDS simple" (230695-04) paraît dans Elektor mai/juin 2024.


À propos de l'auteur

Passionné d'électronique dès l'âge de 12 ans, Willem den Hollander possède une maîtrise en ingénierie électronique et a travaillé 37 ans en recherche et développement dans l'électronique grand public. Son quarté gagnant : alimentations, circuits numériques, logique programmable et µprocesseurs . Plusieurs de ses projets ont été publiés dans Elektor.


Je m'abonne
Abonnez-vous à la balise thématique DIY electronics pour être averti dès qu'une information relative à ce sujet sera publiée par Elektor !