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

Dernière mise à jour : 07/06/2026

Présentation

Les générateurs audio présentés ici permettent de produire et de mélanger plusieurs sources audio de forme sinusoïdale, afin de produire un signal non-sinusoïdal particulier, à la demande.
   
gene_audio_021a_pcb_3d_front
   
Deux générateurs ont été étudiés :
- Schéma 021a : avec PIC 16 bits 24FJ64GA108
- Schéma 021b : avec PIC 32 bits 32MZ2048EFG100

On peut penser que les performances du montage avec PIC32 sont supérieures à celles permises par le montage avec PIC24 ;) - 

   

Avertissements

- Circuit avec PIC24 : logiciel écrit, simulé avec succès mais pas encore testé avec prototype réel.
- Circuit avec PIC32 : logiciel écrit, non simulé, tests en cours avec prototype équipé d'un PIC32MZ2048EFG100.

   

Principe de fonctionnement

Le principe de fonctionnement repose sur la synthèse numérique directe (DDS). Plusieurs signaux sont créés (synthétisés) en mémoire vive, les échantillons correspondants à ces signaux sont placés dans des tableaux et additionnés en temps réel avant d'aboutir à un convertisseur numérique analogique (DAC, Digital to Analog Convertor). 

La fréquence et l'amplitude de chacun des générateurs peuvent être ajustées par l'utilisateur :
- Fréquence : entre 1 Hz et 20 kHz, par pas de 1 Hz
- Amplitude : entre 0% et 100%, en 256 niveaux

Le nombre de générateurs pouvant être activés simultanément dépend de la fréquence Fs de restitution des échantillons, du PIC utilisé et du DAC utilisé (DAC parallèle ou DAC série) :

Fs Nb de générateurs
avec PIC24
et DAC parallèle
Nb de générateurs
avec PIC24
et DAC série
Nb de générateurs
avec PIC32
et DAC parallèle
Nb de générateurs
avec PIC32
et DAC série
128 kHz 1 - 2 1
96 kHz 2 - 4 2
64 kHz 3 1 8 4
48 kHz 4 3 12 6
32 kHz 8 6 16 8
 
La résolution globale des signaux (et donc la pureté spectrale) dépend :
- du nombre de valeurs stockées dans la table d'échantillons (2048 valeurs pour le PIC24, 4096 pour le PIC32)
- de la résolution d'amplitude de cette même table d'échantillons (ici 16 bits) - Nota 1
- de la fréquence Fs de restitution des échantillons (entre 32 kHz et 128 kHz) - Nota 2
- de la fréquence attribuée à chacun des générateurs - Nota 3
- de la résolution et qualité générale des DAC (16 bits ou 12 bits)
- de la qualité du routage du PCB (cohabitation numérique et analogique)

Nota 1 - La résolution globale (après mixage des signaux) est toujours de 16 bits, mais la résolution réelle de chaque signal est liée au nombre de générateurs en service. Afin d'éviter toute distorsion excessive du signal de sortie par écrêtage, les signaux sont atténués avant leur mixage quand le nombre de générateurs est supérieur à 1 (résolution effective de 16 bits pour 1 générateur en service, de 15 bits pour 2 générateurs, de 14 bits pour 4 générateurs, de 13 bits pour 8 générateurs).
Nota 2 - Quand la fréquence de restitution Fs est plus élevée, la période qui sépare deux échantillons est plus courte et on dispose de moins de temps pour effectuer calculs et transfert de données. Un DAC parallèle demande moins de temps processeur (bien pour la rapidité) mais en revanche il demande un nombre plus élevé de fils de liaison (16 fils ou plus pour le DAC parallèle, contre 3 seulement pour le DAC série).
Nota 3 - Plus la fréquence des générateurs est élevée et plus le taux de distorsion augmente.

Dans le cas présent, la pureté spectrale des signaux n'atteint pas celle des générateurs DDS du commerce, ni même celle des circuits intégrés spécialisés de type AD9833, AD9834 ou encore AD9102 ou AD9106. Ce projet répond toutefois à la demande initiale qui était de disposer simultanément de plusieurs signaux sinus (pas de triangle ni carré ni abritraire AWG) avec une résolution correcte (raies harmoniques indésirables 40 dB en-dessous des raies utiles).

  

Choix des DAC

Trois DAC différents ont été testés :
- DAC 16 bits parallèle : meilleure solution pour le montage avec PIC24
- DAC 16 bits série SPI : possible pour le montage avec PIC24, mais avec un nombre moindre de générateurs
- DAC 12 bits parallèle : OK pour montages avec PIC24 et PIC32, en acceptant une baisse de la qualité des signaux délivrés

Remarque : le PIC24 utilisé ici ne dispose pas des ressources matérielles suffisantes pour permettre en même temps le mélange de plusieurs sources audio et le transfert des échantillons par un bus SPI, si la fréquence de restitution des échantillons est supérieure ou égale à 64 kHz.

   

Schéma 021a

Générateur audio construit autour d'un PIC24.
   
gene_audio_021a
   
Les graphes suivants donnent une idée des possibilités et performances offertes par le circuit avec PIC24 et DAC parallèle 16 bits. La sortie analogique est filtrée avec un passe-bas d'ordre 4 (24 dB/oct), on peut bien sûr obtenir mieux avec un filtre de pente plus raide.

Fs = 32 kHz, 8 générateurs :
gene_audio_021_graph_32k_8v

Fs = 48 kHz, 6 générateurs :
gene_audio_021_graph_48k_6v

Fs = 64 kHz, 4 générateurs :
gene_audio_021_graph_64k_4v

Fs = 96 kHz, 2 générateurs :
gene_audio_021_graph_96k_2v

Fs = 128 kHz, 1 générateur :
gene_audio_021_graph_128k_1v
-

   

Schéma 021b

Générateur audio construit autour d'un PIC32.
   
gene_audio_021b
   
Les resources du PIC32 sont plus étendues que celles du PIC24, aussi est-il plus facile d'obtenir de meilleurs performances avec le PIC32. Deux possibilités nous sont offertes :
- soit on augmente le nombre de générateurs audio en conservant la même fréquence de restitution des échantillons,
- soit on conserve le nombre de générateurs et on augmente la fréquence de restitution des échantillons.
Dans le second cas, attention avec les DAC série (SPI ou autre) : la vitesse d'horloge du bus série doit pouvoir suivre la cadence !

Pour les premiers tests, utilisation d'un convertisseur N/A maison, le convertisseur N/A 003 (pas très précis, mais suffisant pour valider le fonctionnement général).

   

Prototype(s)

Aucun prototype réalisé avec le PIC24, prototype réalisé pour tests avec le PIC32.
   
gene_audio_021b_proto_rm_001a gene_audio_021b_proto_rm_001b
   
Remarque : les broches utilisées pour la programmation du PIC en ICSP étant câblées sur les lignes PGED1/RB0 et PGEC1/RB1 sur mon circuit imprimé prototype PIC32MZ, j'ai dans un premier temps effectué les tests avec mon DAC parallèle 16 bits sans raccorder les deux bits de poids faible (B0 sur RB0 et B1 sur RB1). Cela engendrait bien sûr une très légère distorsion suplémentaire, mais rien de méchant à cette étape... (distorsion de toute façon impossible à visualiser sur un oscilloscope de faible résolution verticale tel que celui utilisé ici).
   
Mesure de fréquences

configuration en 32 kHz : fréquence restitution échantillons mesurée = 31,97 kHz (écart 0.09%)
configuration en 48 kHz : fréquence restitution échantillons mesurée = 47,98 kHz (écart 0.04%)
configuration en 64 kHz : fréquence restitution échantillons mesurée = 63,89 kHz (écart 0.1%)
configuration en 96 kHz : fréquence restitution échantillons mesurée = 95,87 KHz (écart 0.1%)
configuration en 128 kHz : fréquence restitution échantillons mesurée = 127,5 KHz (écart 0.3%)
configuration en 256 kHz : fréquence restitution échantillons mesurée = 254 KHz (écart 0.7%)

L'écart observé entre valeurs théoriques et valeurs réelles est lié à plusieurs causes :
- choix de la valeur de comptage du timer utilisé pour les interruptions, valeurs parfois non entières (par exemple 666,66)
- précision de la fréquence de base (quartz non vérifié)
- précision du fréquencemètre utilisé

Je précise que pour cette application la précision de l'horloge importe peu, puisqu'aucune synchronisation ne doit être assurée avec un autre appareil. Mais je précise également que bien entendu, la fréquence des signaux délivrés est affectée avec le même "taux d'erreur" (la demande initiale était de disposer d'une précision de la fréquence synthétisée de 1% maximum).

   

Circuits imprimés (PCB)

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

    

Historique

07/06/2026
- Ajout photos prototype générateur 021b avec PIC32.

03/05/2026
- Première mise à disposition.