
Pour vérifier le bon fonctionnement du générateur, nous avons écrit
un environnement de simulation (appelé testbench dans le jargon des HDL). Ce n'est pas un testbench à proprement parler, car il ne vérifie pas
automatiquement que la sortie du générateur SSPWM est correcte. Il se contente juste de fournir quelques valeurs en entrée, et de générer des chronogrammes (trace.vcd).
A charge de l'utilisateur de regarder les chronogrammes (Modelsim, gtkWave, ...) et de vérifier qu'ils sont corrects.
Dans ce fichier, la génération des chronogrammes est commentée, car ce qui nous intéresse vraiment est décrit plus bas...
Voici un bout des chronogrammes de la simulation du testbench par défaut (rapport cyclique val=128, soit 50%) :
On vérifie bien que le rapport cyclique est constant (50%), et que la période varie de très-peu à beaucoup !
Cependant, il est intéressant de vérifier l'impact des paramètres period_min et period_range
sur le spectre du signal obtenu. Pour cela, le testbench effectue trois tests, avec trois valeurs différentes du paramètres period_range, les autres paramètres restant fixés. Il sort la valeur de out à chaque cycle d'horloge dans un fichier séparé pour chaque test (test1.dat, test2.dat et test3.dat).
Ces fichiers sont ensuite passés dans un programme (transvec) qui se charge de calculer le spectre du signal PWM par FFT. Le spectre peut ensuite être affiché grâce à GnuPlot.
Pour simplifier la vie, un Makefile se charge de tout. Il suffit d'appeller "make" et les opérations suivantes sont effectuées :
Pour que cela fonctionne, il faut bien entendu que GnuPlot et Cver soient installés, et disposer d'un compilateur C et la bibliothèque fftw3.
Voici quelques résultats, pour différentes valeurs d'horloge système. On a pris un rapport cyclique de 50%, une fréquence PWM maximale d'environ 40kHz, et une minimum d'environ 7kHz. Cliquez sur les images pour les agrandir.
| Horloge 10MHz | Horloge 25MHz | Horloge 40MHz | Horloge 100MHz |
On peut constater qu'il ne sert à rien d'avoir un range trop grand. Cela vient du fait que les nombres aléatoire choisis sont uniformément distribués, et déterminent non pas une fréquence mais une période. On a donc une plus grande concentration de fréquences possibles dans la partie basse du spectre due à l'hyperbole (T=1/f).
On peut constater aussi qu'il vaut mieux utiliser une horloge de base d'au moins 25MHz. Et qu'avec un range d'environ 6, on obtient bien un spectre bien plus plat et étalé...