MC-ENSL1 - Projet B

Transcription

MC-ENSL1 - Projet B
IUT Créteil-Vitry / GEII 2A / Projet / Sujet B
Dept GEII
MC-ENSL1
Année universitaire 2012-2013 - Durée : 3 x 3 heures
J. VILLEMEJANE - [email protected]
Générateur PWM de signaux triphasés
Objectifs
– Réaliser l’architecture d’un générateur de signaux triphasés PWM (Pulse Width Modulation) pour
la commande en fréquence d’un moteur synchrone a , à l’aide d’un composant programmable de
type FPGA.
– Signaux sinusoidaux triphasés
– Fréquence variable (0,5 à 10 Hz, par pas de 0,5 Hz)
– Affichage multiplexé pour la fréquence
a. Les notions d’électrotechnique rapportées dans ce sujet de projet sont incomplètes (moteur triphasé et onduleur
de tension). Elles ne sont là qu’à titre de rappel pour la suite du projet. Reportez vous à votre cours d’électrotechnique
pour avoir plus de détails.
Consignes
– Chaque module devra être réalisé dans un fichier séparé.
– Chaque module devra être validé par l’enseignant.
– L’ensemble des modules devra être fourni à la fin de la dernière séance à l’enseignant.
Autres remarques
– vous n’aurez pas à votre disposition de moteur synchrone pour l’essai. Vous devrez alors utiliser
les entrées-sorties disponibles sur la carte de développement :
– les sorties PWM seront visualisées sur 3 LED ;
– la sélection de la fréquence se fera par deux bouton-poussoirs (un pour augmenter l’autre pour
diminuer la fréquence) ;
– l’affichage de la fréquence se fera sur l’afficheur 7 segments.
1. Moteur synchrone (simplifié)
Les moteurs synchrones sont composés d’un rotor et d’un stator.
Le rotor est l’élément tournant. Il est soit constitué d’un aimant
permanent, soit d’un enroulement (bobine) permettant de créer un
champ magnétique constant.
Le stator est généralement fixe. Il est composé de 3 enroulements
(ou multiple de 3) permettant de générer des champs magnétiques par
l’application d’un courant. Ces enroulements sont disposés de telle
façon que l’angle entre chacun d’entre eux fasse 120˚. Ainsi, en appliquant des tensions triphasées, on génère un champ magnétique tournant entraînant le rotor.
Le rotor tourne alors à la vitesse de ce champ tournant, d’où le
nom de moteur synchrone.
Figure 1 – Source : Wikipedia - Machine synchrone
IUT Créteil-Vitry / GEII 2A / Projet / Sujet B
IUT Créteil - GEII - MC-ENSL1
2. Commande en fréquence d’un moteur triphasé
La source de tension la plus simple à mettre en oeuvre pour alimenter un moteur synchrone est le réseau
ErDF. La plupart des moteurs triphasés ont des tensions et courants nominaux adaptés à ce réseau. Cependant,
il n’est pas possible de contrôler la vitesse de rotation, le réseau ErDF ayant une fréquence fixe de 50 Hz. La
vitesse est alors fixe.
Afin de pouvoir modifier la vitesse de rotation
d’une machine tournante, il faut utiliser un système
permettant de modifier la fréquence des courants sinusoïdaux injectés au niveau du stator.
L’une des structures les plus utilisées pour cela
est l’association d’un onduleur de tension, d’un redressement non contrôlé et d’un filtre capacitif (voir
figure ci-contre).
Les onduleurs de tension sont des structures toutou-rien (TOR). En effet, en fonction de la valeur de
commande des différents transistors, les tensions U,
Figure 2 – Source : Journal InterSections - Juin 1998 - Schneider
V et W ne peuvent valoir que E2 , 0 ou − E2 .
Il est donc impossible d’appliquer directement un signal sinusoïdal aux bornes de la machine synchrone
par ce procédé.
Cependant, les moteurs ont des constantes de temps de réponse qui sont très grandes (de l’ordre de
la seconde) face à une sollicitation électrique. Ce phénomène est lié à la partie mécanique du moteur ayant
généralement une grande inertie.
3. Modulation de largeur d’impulsion (MLI ou PWM)
La modulation de largeur d’impulsions consiste à commander les
transistors de manière à délivrer au moteur une suite d’impulsions d’amplitude fixe (positives ou négatives) et modulées en largeur. Ainsi, après
filtrage (naturel) par le moteur (si les signaux appliqués sont suffisamment rapides), ce dernier ne verra que la composante moyenne et non les
impulsions.
La méthode la plus simple pour générer de tels signaux consiste à
générer une onde sinusoïdale de référence par phase (dont l’amplitude
et la fréquence représentent la tension de sortie) et une onde de modulation de fréquence élevée de forme triangulaire ou en dent de scie.
Les transistors de puissance sont alors commandés aux instants d’intersection de ces 2 ondes. Ces instants sont déterminés par des comparateurs (voir figure ci-contre).
Dans le monde numérique, on peut également utiliser ce même prinFigure
3
–
Source
: cipe. On générera un compteur qui remplacera le signal en dent de scie
www.motionsystemdesign.com - Octobre 2000
de la modulation. La valeur de ce compteur sera alors comparé à un
signal numérique de référence. En fonction du résultat, la sortie prendra la valeur logique ’0’ ou ’1’.
Le signal de référence peut par exemple être stocké dans une ROM (générateur à ROM). En fonction de
la vitesse de lecture de cette ROM, on pourra alors faire varier la fréquence du signal de référence et donc la
fréquence de rotation du moteur relié à l’onduleur.
–2–
IUT Créteil-Vitry / GEII 2A / Projet / Sujet B
IUT Créteil - GEII - MC-ENSL1
4. Principe de la PWM
Dans un premier temps, nous allons mettre en place les modules de base d’une commande MLI, à savoir
un comparateur et un compteur.
Afin d’avoir une résolution suffisante sur les échantillons de référence, nous utiliserons des échantillons
codés sur 8 bits.
4.1. Comparateur 8 bits
Le comparateur numérique devra alors comparer deux valeurs A et B codés sur 8 bits chacune. Sa sortie
sera active lorsque A sera supérieur à B.
MODULE 1
Décrire un comparateur à 2 entrées de 8 bits chacune et une sortie dans un module nommé
comp8bits.
4.2. Compteur générique
Le signal de modulation de la MLI sera réalisé à l’aide d’un compteur 8 bits, s’incrémentant sur un signal
d’horloge (CLK).
L’intéret du VHDL est de pouvoir créer des modules réutilisables facilement sans réécriture du code. Les
compteurs, en particulier, sont très souvent utilisés, mais pas nécessairement en mode 8 bits.
Nous allons ici créer un module générique en VHDL permettant de spécifier le nombre de sorties souhaité
sur le compteur (voir exemple d’un module générique en annexe).
MODULE 2
1. Tracer l’évolution de la valeur du compteur 8 bits en fonction de l’horloge d’entrée.
2. Quelle est la fréquence du signal de modulation ( f MOD ) par rapport à la fréquence du signal
d’horloge ( fCLK ) ?
3. Décrire en VHDL un compteur générique dont le nombre de sorties est paramétrable par un
entier. La valeur par défaut sera de 8. Le module sera nommé cptNbits.
4.3. Diviseur de fréquence
On souhaite avoir une fréquence de modulation de 10 kHz. La carte d’étude fonctionne à une fréquence
de 50 MHz.
MODULE 3
1. Quelle fréquence ( fCPT ) doit-on appliquer en entrée du compteur précédent (8 bits) pour obtenir une modulation à 10 kHz ?
2. Quelle est alors la valeur de division à donner à ce diviseur de fréquence ?
3. Décrire en VHDL un diviseur de fréquence permettant d’obtenir les caractéristiques citées
précédemment. Le module sera nommé divfreq.
4.4. Système de base
On peut à présent associer l’ensemble des modules pour constituer la base d’un système MLI.
Des interrupteurs seront utilisés pour réaliser la seconde entrée du comparateur. Une LED sera utilisée pour
visualiser la sortie du système.
–3–
IUT Créteil-Vitry / GEII 2A / Projet / Sujet B
IUT Créteil - GEII - MC-ENSL1
MODULE 4
1. Faire le schéma du système complet, en précisant le nom et la taille de chacun des signaux
d’entrée et de sortie des modules.
2. Dans un module nommé systeme, mettre en place le système de base en VHDL.
3. Tester votre description VHDL sur la carte d’étude.
5. Générateur à ROM
On souhaite à présent générer un signal sinusoïdal à une fréquence déterminée en sortie du système précédent. Il faut donc trouver un moyen de faire varier l’entrée de référence selon un motif sinusoïdal à une
fréquence donnée.
Pour cela, nous allons numériser une période d’une sinusoide et la stocker dans une ROM. En fonction
de la fréquence de balayage des différentes adresses de cette ROM, on pourra alors reconstituer un signal de
référence sinusoïdal.
5.1. Echantillons en ROM
Dans le cadre de ce projet, nous allons découper la période de la sinusoide en 32 échantillons différents,
soit 25 échantillons. Chacun d’entre eux devra avoir une taille de 8 bits pour pouvoir etre comparé au signal de
modulation.
Un exemple de réalisation d’une ROM est donné en annexe.
MODULE 5
1. Combien de fils de données sont nécessaires pour réaliser la ROM contenant le motif sinusoïdal souhaité ?
2. Combien de fils d’adresse sont nécessaires pour réaliser la ROM contenant le motif sinusoïdal
souhaité ?
3. Quelle capacité aura cette ROM ?
4. Décrire en VHDL une ROM pouvant accueillir 32 échantillons de 8 bits chacun et donner les
valeurs de chacun des échantillons. Le module sera nommé rom5v8.
5.2. Compteur 5 bits
Afin de pouvoir parcourir l’ensemble des échantillons de la ROM (les différentes adresses), nous allons
mettre en place un compteur. La fréquence d’entrée de ce compteur déterminera la fréquence de sortie du
signal.
MODULE 6
1. Tracer l’évolution de la valeur de sortie de la ROM en fonction de l’horloge d’entrée de ce
compteur.
2. Quelle est la fréquence du signal de référence ( fREF ) par rapport à la fréquence du signal
d’horloge de ce compteur ( fCLK_REF ) ?
3. Doit-on réécrire un tel compteur ? Justifier.
–4–
IUT Créteil-Vitry / GEII 2A / Projet / Sujet B
IUT Créteil - GEII - MC-ENSL1
5.3. Diviseur de fréquence
MODULE 7
1. Quelle fréquence ( fREF ) doit-on appliquer en entrée du compteur 5 bits pour obtenir un signal
de sortie sinusoidal à 1 Hz ?
2. Quelle horloge peut-on mettre en entrée de ce diviseur ?
3. Quelle est alors la valeur de division à donner à ce diviseur de fréquence ?
4. Décrire en VHDL un diviseur de fréquence permettant d’obtenir les caractéristiques citées
précédemment. Le module sera nommé divfreqmae.
5.4. Générateur de sinus
On peut une nouvelle fois associer l’ensemble des modules pour constituer la base d’un générateur à ROM.
Une LED sera utilisée pour visualiser la sortie du système. Le signal de sortie sera également reporté sur la
sortie B2 du FPGA.
MODULE 8
1. Faire le schéma du système complet, en précisant le nom et la taille de chacun des signaux
d’entrée et de sortie des modules.
2. Modifier le module nommé systeme et mettre en place le générateur à ROM en VHDL.
3. Tester votre description VHDL sur la carte d’étude.
4. Controler également la sortie de votre système (B2) à l’aide d’un oscilloscope. Obtient-on un
signal sinusoidal ?
6. Modification de la fréquence
On souhaite à présent pouvoir régler la fréquence du signal de sortie, sans modifier la fréquence du signal
de modulation. Pour cela, nous allons rendre le diviseur de fréquence divfreqmae paramétrable à partir d’une
valeur numérique.
6.1. Diviseur de fréquence paramétrable
La fréquence doit etre configurable entre 0,5 et 10 Hz par pas de 0,5 Hz.
MODULE 9
1. Quelle est la fréquence du signal de sortie ( fREF ) par rapport à la fréquence de sortie du
diviseur divfreqmae ( fCLK_REF ) ? (voir paragraphe 5.2)
2. Quelle est la fréquence de l’horloge placée en entrée de ce diviseur de fréquence ?
3. Faire un tableau pour l’ensemble des valeurs de fréquences souhaitées et calculer les valeurs
de divisions associées.
4. Quel principe peut-on utiliser pour stocker ces valeurs ?
5. Décrire ce système en VHDL (en modifiant le module divfreqmae).
6. Tester votre application, en insérant les nouveaux modules dans le module principal systeme.
La valeur de la fréquence sera sélectionnée à l’aide de 5 interrupteurs. La sortie du diviseur de
fréquence sera reportée sur la broche C6 du FPGA, pour pouvoir la visualiser à l’oscilloscope.
–5–
IUT Créteil-Vitry / GEII 2A / Projet / Sujet B
IUT Créteil - GEII - MC-ENSL1
6.2. Gestion des bouton-poussoirs
Le changement de la fréquence de sortie doit maintenant s’éffectuer à l’aide de 2 boutons-poussoirs : l’un
pour augmenter par pas de 0,5 Hz (plus), l’autre pour diminuer par pas de 0,5 Hz (moins).
Les boutons-poussoirs étant des systèmes mécaniques, ils sont le siège de phénomènes physiques appelés
rebonds. Pour les éviter, il suffit de réaliser un détecteur de front montant ayant une période de rafraichissement
supérieure à 10 ms.
Nous allons donc mettre en place une machine à état (simple) permettant de détecter un front montant sur
le bouton-poussoir plus ou le bouton-poussoir moins et d’incrémenter ou décrémenter un compteur (correspondant au numéro des lignes du tableau précédent).
MODULE 10
1. Faire le diagramme d’état de la machine à état précédente.
2. Pour quel état doit-on incrémenter le compteur ? Pour quel état doit-on le décrémenter ?
3. Quelles sont les valeurs minimales et maximales de ce compteur ?
4. Décrire ce système en VHDL. Le module sera nommé maefreq.
5. Tester votre application, en insérant les nouveaux modules dans le module principal systeme.
La sortie du diviseur de fréquence sera reportée sur la broche C6 du FPGA, pour pouvoir la
visualiser à l’oscilloscope.
7. Affichage de la fréquence
Pour afficher la fréquence, nous réutiliserons l’affichage multiplexé réalisé lors des séances de TP. Nous
l’incluerons comme nouveau module dans ce projet.
Afin de pouvoir afficher les bonnes valeurs, il est nécessaire de réaliser un décodeur ayant en entrée la valeur
sortant de la machine à état précédente et en sortie les 4 données sur 4 bits permettant d’afficher les dizaines,
unités et dixièmes de la valeur de fréquence.
MODULE 11
1. Importer les fichiers sources correspondant à l’afficheur 7 segments multiplexé.
2. Décrire le décodeur pour l’affichage dans un module nommé decodeur.
3. Tester votre application, en insérant les nouveaux modules dans le module principal systeme.
8. Signaux triphasés
On souhaite à présent pouvoir générer des signaux triphasés.
MODULE 12
En vous inspirant des précédents modules et en vous aidant de l’annexe concernant la bibliothèque
IEEE.MATH_REAL, faire une ROM paramétrable (angle de déphasage) contenant des signaux sinusoidaux auto-générés.
Tester ensuite l’application complète.
–6–
IUT Créteil-Vitry / GEII 2A / Projet / Sujet B
IUT Créteil - GEII - MC-ENSL1
Annexes
Généricité
Décalaration d’un composant additionneur générique (N représentant le nombre de bits de l’additionneur
- valeur par défaut de 8).
component ADD
generic (
N : p o s i t i v e range 0 t o 16 := 8 ) ;
port (
A : i n s t d _ l o g i c _ v e c t o r (N−1 downto 0 ) ;
B : i n s t d _ l o g i c _ v e c t o r (N−1 downto 0 ) ;
S : o u t s t d _ l o g i c _ v e c t o r (N−1 downto 0 ) ) ;
end component ;
Instanciation au niveau de l’architecture d’un système
inst_ADD : ADD
g e n e r i c map (N= >12)
p o r t map (A=>OP1 , B=>OP2 , S=>S ) ;
Conversion de types
– integer to_integer(unsigned) : convertit un entier non signé en une valeur entière
– unsigned to_unsigned(integer) : convertit une valeur entière en un entier non signé
– std_logic_vector std_logic_vector(unsigned, N) : convertit un entier non signé vers un vecteur binaire
de N bits
– unsigned unsigned(std_logic_vector) : convertit un vecteur binaire en un entier non signé
Librairie IEEE.MATH_REAL
– integer natural(real) : convertit un réel en un entier
– real ceil(real) : arrondit un réel sans conversion de type
– real real(integer) : transforme une variable entière en un réel
– real sin(real) : donne la valeur du sinus donné en radians
– MATH_PI : valeur de PI
Exemple d’une conversion d’un entier vers un reel
s i g n a l i : i n t e g e r range 0 t o 1 5 ;
s i g n a l r : r e a l range 0 . 0 t o 1 5 . 0 ;
r <= REAL( i ) ;
–7–
IUT Créteil-Vitry / GEII 2A / Projet / Sujet B
IUT Créteil - GEII - MC-ENSL1
Réalisation d’une ROM
Réalisation d’une ROM de capacité 16 x 8 bits (4 fils d’adressage et 8 fils de données)
l i b r a r y IEEE ;
u s e IEEE . STD_LOGIC_1164 . ALL;
u s e IEEE . STD_LOGIC_UNSIGNED . ALL;
u s e IEEE . NUMERIC_STD . ALL;
u s e IEEE . MATH_REAL . ALL;
e n t i t y rom5v8 i s
P o r t ( a d r e s s e : i n STD_LOGIC_VECTOR ( 3 downto 0 ) ;
d a t a : o u t STD_LOGIC_VECTOR ( 7 downto 0 ) ) ;
end rom5v8 ;
a r c h i t e c t u r e B e h a v i o r a l o f rom5v8 i s
s u b t y p e v a l e u r i s i n t e g e r range 0 t o 2 5 5 ;
t y p e rom i s a r r a y ( i n t e g e r range 0 t o 1 5 ) o f v a l e u r ;
s i g n a l r o m s i n : rom ;
begin
−− r e m p l i s s a g e a v e c l e s 16 p r e m i e r s e n t i e r s
l o o p 1 : f o r i IN 0 TO 15 GENERATE
r o m s i n ( i ) <= i ;
END GENERATE l o o p 1 ;
d a t a <= s t d _ l o g i c _ v e c t o r ( t o _ u n s i g n e d (
romsin ( t o _ i n t e g e r ( unsigned ( a d r e s s e ) ) ) , 8 ) ) ;
end B e h a v i o r a l ;
Il est également possible de remplir la mémoire de la façon suivante :
s i g n a l r o m s i n : rom = { 0 , 2 , 1 4 5 , 1 0 0 , 4 5 , 5 8 , 5 0 , 8 0 ,
3 , 154 , 201 , 20 , 24 , 56 , 70 , 10};
–8–