Electronique > Réalisations > Générateurs > Générateur audio 021x - Pro

Dernière mise à jour : 09/08/2026

Présentation

Ce générateur audio basé sur un microcontrôleur permet de produire un signal sinus de fréquence fondamentale définie au moment de la programmation du microcontrôleur et non modifiable, avec 1 à 40 harmoniques correspondantes (raies H2 à H41) dont les amplitudes sont ajustables indépendement les unes des autres en utilisation (après programmation). 
   
gene_audio_021a_pcb_3d_front
   
La fréquence de la fondamentale est fixée ici à 100 Hz. La première harmonique H2 se situe donc à 200 Hz et l'harmonique H41 se situe à 4,1 kHz. La fréquence de restitution des échantillons est fixée à 50 kHz, ce qui facilite le filtrage au-delà de 10 kHz (valeur au-delà de laquelle on ne souhaite pas avoir trop de résidus).

Ce générateur a été étudié sur une base de PIC 16 bits 24FJ64GA108, mais le logiciel pourrait tout à fait être adapté à un autre type de microcontrôleur (PIC32 ou ESP32 par exemple). La conversion numérique analogique se fait avec une résolution de 16 bits, à l'aide d'un DAC parallèle 16-bits ou d'un DAC série 16-bits.

   

Avertissements

Logiciel écrit, simulé avec succès avec PIC24FJ64GA108 et PIC24FJ32GA002 (sans écran LCD pour le PIC24FJ32GA002 cause nombre de broches insuffisant), mais pas encore testé sur prototype réel.

   

Schéma 021x

Générateur audio construit autour d'un PIC24, même base matérielle que le générateur audio 021a.
   
gene_audio_021x
   
Résolution verticale et résolution temporelle
La résolution temporelle (fréquence de restitution des échantillons) a été fixée à 50 kHz, valeur suffisament éloignée de la dernière raie harmonique à produire (H41 à 4,1 kHz). La résolution verticale est de 16 bits, que le DAC employé soit de type parallèle ou série.

En haut, DAC 16 bits parallèle - En bas, DAC 16 bits série :
gene_audio_021x_graph_par-16b_ser-16b_001a
   

La répartition des raies fondamentale et harmoniques se fait de la même manière dans les deux cas (parallèle et série), mais la répartition spectrale du bruit de fond dépend du type de convertisseur et du filtre passe-bas employé en aval (pour l'exemple, j'ai placé un filtre d'ordre 4 pour le DAC parallèle et un filtre d'ordre 1 pour le DAC série - c'est forcément moins bien pour ce dernier).

Le temps requis pour transmettre chaque échantillon au DAC dépend de son type et de ses caractéristiques intrinsèques. D'une manière générale, les DAC de type parallèle requièrent plus de broches de liaison, mais sont plus rapides que les DAC de type série. Dans le cas qui nous concerne ici avec les DAC sélectionnés, le temps requis est de 0,2 us en mode parallèle et de 7 us en mode série (horloge série 4 MHz). On peut donc en théorie pousser un peu la fréquence de restitution des échantillons au-delà de 50 kHz, au moins à 100 kHz pour le DAC parallèle.
   
Principe de fonctionnement

Contrairement au principe de fonctionnement qui repose sur la synthèse numérique directe (DDS) utilisée dans mon générateur audio 021, une méthode beaucoup plus simple a pu être mise en oeuvre ici, parce que la fréquence fondamentale est fixe et ne peut pas être modifiée. Comme il fallait tout de même pouvoir modifier l'amplitude de chacune des raies fondamentale et harmoniques, il était exclu de faire appel à une simple et unique table d'échantillons (lookup table) codée en dur. Pour cette raison, un tableau dynamique a été implémenté et ce tableau est automatique reconstruit à chaque modification de l'amplitude de la fréquence fondamentale ou de celle d'une raie harmonique. 

Avantages

Inconvénients


Remarque : durant la reconstruction du tableau, le signal de sortie délivré par le générateur est stoppé sur la sortie DAC série mais perdure sur la sortie DAC parallèle. Une LED (Buzy) s'allume tant que les calculs de reconstruction de l'onde ne sont pas terminés et que la forme d'onde délivrée n'est pas définitivement mise à jour.
   
Nombre maximal de raies et amplitude des raies
Le nombre maximal de générateurs a été fixé ici à 41 (1 fondamentale + 40 harmoniques). L'amplitude de chacun de ces générateurs peut être ajustée individuellement entre 0.000000 (-inf) et 1.000000 (0 dBFS).
   
gene_audio_021x_disp_001a gene_audio_021x_disp_001b gene_audio_021x_disp_001c gene_audio_021x_disp_001d

3 modes d'affichage sont proposés :

gene_audio_021x_disp_003z gene_audio_021x_disp_003y gene_audio_021x_disp_003x
gene_audio_021x_disp_003a gene_audio_021x_disp_003b gene_audio_021x_disp_003c

Il convient dans la mesure du possible d'adopter des valeurs d'amplitude des raies telles que leur somme n'occasionne pas de dépassement du 0 dBFS. En effet, dans le cas où deux générateurs sont activés et que tous deux sont réglés à la valeur 1.000 (0 dBFS), le signal de sortie pourra présenter une crête à +6 dBFS. Comme il peut être fastidieux de définir manuellement les niveaux à adopter pour ne pas subir ce dépassement du 0 dBFS (surtout avec un nombre élevé de raies activées), une fonction de contrôle automatique du niveau global a été prévue. Ce réglage automatique permet de travailler sur des niveaux initiaux qui dépassent la valeur de 0 dBFS sans provoquer de saturation sur le signal final délivré par le générateur audio. La marge de sécurité est de plusieurs dizaines de dB.

Valeurs remarquables
Les valeurs d'amplitude suivantes peuvent servir de point de départ :

1.000000 0.0 dBFS Niveau maximal
0.500000 -6 dBFS 1/2 du niveau maximal
0.250000 -12 dBFS 1/4 du niveau maximal
0.100000 -20 dBFS 1/10 du niveau maximal
0.050000 -26 dBFS 1/20 du niveau maximal
0.010000 -40 dBFS 1/100 du niveau maximal
0.001000 -60 dBFS 1/1000 du niveau maximal
0.000100 -80 dBFS 1/10000 du niveau maximal
0.000000 -inf rien

Remarque : bien que des valeurs de 0.000010 (-100 dBFS) ou 0.000001 (-120 dBFS) puissent être choisies, le niveau effectif correspondant dans la réalité sera noyé dans le bruit de fond après la troncature des bits de poids faible requise pour passer de la résolution interne de 32 bits à une résolution finale de 16 bits. Il faut considérer ici que programmer une valeur inférieure à -80 dBFS n'est ni "raisonnable" ni pertinent pour une sortie en 16 bits (alors que cela le serait peut-être pour une sortie en 24 bits).
   
Contrôle automatique du niveau global

Comme le nombre de raies pouvant être activées simultanément est élevée et que l'amplitude maximale de chacune correspond à 1.000 pour 0 dBFS, il peut arriver que la somme de toutes les raies occasionne des crêtes dépassant la valeur de 0 dBFS, ce qui à coup sûr occasionne une distorsion plus ou moins élevée du signal de sortie. Pour éviter ce risque, un mécanisme de réduction automatique du niveau est activé si les amplitudes cumulées de la fondamentale et des harmoniques dépasse les capacités du système. Cet ajustement automatique opère en réduisant l'amplitude du signal par paliers successifs de -6 dB, jusqu'à ce que le signal final tienne dans la plage numérique 0-65535 (16 bits) et ne dépasse donc pas la valeur de 0 dBFS. 

Bien entendu, cela n'est possible qu'en effectuant un mixage des différentes raies avec une résolution supérieure à 16 bits, ce qui est le cas ici puisque le moteur de mélange travaille sur 32 bits.

Remarque : le mélange étant effectué en 32 bits alors que le microcontrôleur est un modèle 16 bits explique en grande partie le temps requis pour les calculs - un microcontrôleur 32 bits serait bien entendu plus approprié.

L'exemple suivant montre un cas de figure où le signal crête atteint (après mixage des raies) la valeur de +6,4 dB. Une réduction automatique de -6 dB s'avère insuffisante et donc une seconde réduction automatique de -6 dB est opérée à la suite de la première (réduction totale de -12 dB).
   
gene_audio_021x_disp_002a gene_audio_021x_disp_002b gene_audio_021x_disp_002c
   
L'utilisateur qui est conscient des risques peut au besoin désactiver cette fonction automatique grâce au cavalier JP1.
   
Quelques exemples de configurations...
Dans les graphes qui suivent (matériel PIC24 et DAC parallèle 16 bits) et pour une fréquence de restitution des échantillons de 50 kHz, on voit que la fréquence fondamentale est de 100 Hz et que les harmoniques peuvent monter jusqu'au 41è rang (de H2 à 200 Hz jusqu'à H41 à 4,1 kHz). La sortie analogique est filtrée avec un passe-bas d'ordre 4 (24 dB/oct). En fonction des besoins, un filtre de pente plus raide peut bien sûr être adopté.

   
Fs = 50 kHz, 1 générateur (fondamentale 100 Hz, aucune harmonique) 
Fondamentale seule, harmoniques paires et impaires d'amplitude 0.0 :
gene_audio_021x_graph_50k_42v_c

   

Fs = 50 kHz, 2 générateurs (fondamentale 100 Hz et harmonique H03) 
Fondamentale amplitude 0.9 + harmonique impaire H03 d'amplitude 0.2 :
gene_audio_021x_graph_50k_2v

   

Fs = 50 kHz, 42 générateurs (100 Hz + H3..H41, harmoniques impaires seulement) 
Fondamentale, harmoniques paires d'amplitude 0.0, harmoniques impaires d'amplitude décroissante en 1/(n²) :
gene_audio_021x_graph_50k_42v_b

   

Fs = 50 kHz, 20 générateurs (100 Hz + H2..H20, harmoniques paires et impaires
Fondamentale, harmoniques paires et impaires d'amplitude égale :
gene_audio_021x_graph_50k_20v

   

Fs = 50 kHz, 41 générateurs (100 Hz + H2..H41, harmoniques paires et impaires
Fondamentale, harmoniques paires et impaires d'amplitude égale :
gene_audio_021x_graph_50k_41v

   

Fs = 50 kHz, 17 générateurs (100 Hz + H2..H17, harmoniques paires et impaires
Fondamentale, harmoniques paires et impaires d'amplitude décroissante de -6 dB en -6 dB :
gene_audio_021x_graph_50k_17v

   

Fs = 50 kHz, 21 générateurs (100 Hz + H3..H41, harmoniques impaires seulement) 
Fondamentale, harmoniques paires d'amplitude 0.0, harmoniques impaires d'amplitude décroissante en 1/(n*Pi) :
gene_audio_021x_graph_50k_42v

   

Affichage OLED

Un écran OLED, pilotable par une liaison série I2C (dans le cas présent I2C2), permet d'avoir un aperçu de l'onde sous sa forme temporelle (oscilloscope) et spectrale (raies fondamentale et harmoniques). 
   
gene_audio_021x_oled_001a gene_audio_021x_oled_001b gene_audio_021x_oled_001c gene_audio_021x_oled_001d
   
Ici, j'ai choisi un écran OLED équipé d'un contrôleur SSD1306 et de dimensions modestes (128x64 pixels) très répendu et bon marché. Si le rendu de cet écran est assez grossier, il permet néanmoins d'avoir une bonne idée de l'onde actuellement délivrée par le générateur. L'amplitude des raies spectrales se fait sur une échelle log (dB), sans indication numérique (cause manque de place).

   

Sauvegarde des données utilisateur

Les valeurs d'amplitude données aux diverses raies peuvent être sauvegardées dans une EEprom externe et être rappelées à tout moment. Trois méthodes de sauvegarde sont possibles :
Nota 1 - La mémoire utilisée ici est une 25AA1024 de 1024 kb (128 kO) et l'enregistrement des données s'effectue par paquets (par pages) de 64,128 ou 256 octets.

gene_audio_021x_disp_004a gene_audio_021x_disp_004b

La sélection du numéro de preset s'effectue avec les boutons SelUp ou SelDown. La pression du bouton ENTER engendre la sauvegarde des valeurs en cours dans le preset actuellement sélectionné. La pression du bouton EXIT provoque le rappel des valeurs enregistrées dans le preset actuellement sélectionné (les valeurs d'amplitude en cours sont remplacées/perdues).

Dans la version actuelle, seuls 4 presets ont été prévus.

   

Prototype(s)

Aucun prototype réalisé à ce jour par mes soins.

   

Circuit imprimé (PCB)

Non réalisé par mes soins. Vue 3D uniquement pour aperçu des composants utilisés.

    

Historique

09/08/2026
- Ajout écran OLED pour affichage forme d'onde (oscilloscope et composition spectrale).
- Ajout sauvegarde configuration utilisateur (presets) dans mémoire externe 1 Mb (25AA1024).
- Désormais, il est possible de désactiver le système d'ajustement automatique du niveau de sortie général (au risque bien sûr de voir apparaître une éventuelle distorsion).
- Désormais, le convertisseur 16 bits parallèle et le convertisseur 16 bits série peuvent être tous deux utilisés simultanément.
- Désormais, le générateur continue de délivrer un signal durant la période de reconstruction du tableau de valeur de l'amplitude de chaque raie, et on peut voir l'évolution de la forme d'onde au fil de l'eau (sur la sortie DAC parallèle uniquement).

02/08/2026
- Première mise à disposition.