Vous êtes sur la page 1sur 30

GENIE ELECTRIQUE

2 EME ANNEE CYCLE INGENIEUR


RAPPORT DE PROJET

MODULE : VHDL & Circuit programmables FPGA

Projet5 : CONTROLE D’UN MOTEUR PAS A PAS 4 PHASES


(DIRECTION & POSITION & VITESSE)

Réalisé par : Encadré par :


- M. BEN-AKKA Zakariae - Pr. BEKKAY Hajji
- M. SAID Ayoub

Effectué au sein du :
L’école nationale des sciences appliquées d’Oujda

Année universitaire 2021-2022


Table de matière

1 Introduction ......................................................................................................................... 1
2 Spécifications de conception de laboratoire........................................................................ 2
2.1 Fonctionnement du driver L298N ............................................................................... 3
3 Contrôle du moteur pas-a-pas : la vitesse & la position ..................................................... 4
3.1 Contrôle de la vitesse du moteur pas-a-pas ................................................................. 5
3.1.1 Bloc du démultiplexeur de 1 vers 4 « Demux1_4_SP »....................................... 7
3.1.2 Blocs des diviseurs de fréquence ......................................................................... 7
3.1.3 Bloc de multiplexeur de 4 vers 1 « Mux4_1_SP » ............................................... 9
1.1.4 Test du bloc du contrôle de la vitesse (Simulation) .................................................. 9
3.2 Contrôle de la position du moteur pas-a-pas ............................................................. 10
3.2.1 Bloc du démultiplexeur de 1 vers 4 « Demux1_4_CP » .................................... 12
3.2.2 Blocs du contrôle de position ............................................................................. 13
3.3 Bloc de diviseur de fréquence par 2 .......................................................................... 16
3.4 Bloc du multiplexeur de 2 vers 1 « Mux2_1_TO » ................................................... 17
3.5 Bloc de contrôle du moteur pas-a-pas « stepper_motor_full » .................................. 18
4 Teste pratique et simulation du programme total ............................................................. 20
4.1 La configuration des entrées et des sorties ................................................................ 20
4.2 Première expérience pratique du control de vitesse .................................................. 22
4.2.1 Première expérience de simulation du control de vitesse................................... 23
4.3 Deuxième expérience pratique du control de position .............................................. 24
4.3.1 Deuxième expérience de simulation du control de position............................... 25
5 Conclusion ........................................................................................................................ 26
Liste des figures

Figure 1: Vue en coupe du moteur pas à pas .............................................................................. 1


Figure 2: Schéma fonctionnel du contrôleur de moteur pas à pas.............................................. 2
Figure 3: Le driver L298N ......................................................................................................... 3
Figure 4: Le diagramme logique complet du programme qui contrôle un moteur pas-a-pas .... 4
Figure 5: Le programme total qui contrôle la vitesse et la position du moteur .......................... 5
Figure 6:Le digramme logique du bloc de contrôle de la vitesse ............................................... 6
Figure 7: Le programme complet du bloc de contrôle de la vitesse........................................... 6
Figure 8: Le programme du bloc « Demux1_4_SP »................................................................. 7
Figure 9: Un module de diviseur de fréquence de nHz avec 1Hz<n<1kHz ............................... 7
Figure 10: Le programme du bloc « Fre_Div » ......................................................................... 8
Figure 11: Le programme du bloc « Mux4_1_SP » ................................................................... 9
Figure 12:Le choix du signal de sortie de 1Hz ........................................................................... 9
Figure 13:Le choix du signal de sortie de 10Hz ....................................................................... 10
Figure 14:Le diagramme logique du bloc global du contrôle de position................................ 11
Figure 15:Le programme complet du bloc de contrôle de position ......................................... 12
Figure 16:Le programme du bloc « Demux1_4_CP » ............................................................. 13
Figure 17: Contrôle les nombres des fronts montant d’un signal d’horloge ............................ 13
Figure 18: visualisation des signaux à l’aide de logiciel ModelSim ........................................ 14
Figure 19 : visualisation des signaux à l’aide de logiciel ModelSim ....................................... 14
Figure 20:Le programme du bloc « Contrôle_de_position » ................................................... 15
Figure 21: Le programme du bloc « Mux4_1_CP » ................................................................ 16
Figure 22:Le programme du diviseur de fréquence par 2 ........................................................ 17
Figure 23: Le programme du multiplexeur (2 vers 1) .............................................................. 18
Figure 24:Code VHDL pour le moteur pas à pas fonctionnant au pas complet ....................... 19
Figure 25: FSM pour moteur pas à pas avec contrôle de direction ......................................... 19
Figure 26: La configuration des entrées et des sorties ............................................................. 20
Figure 27: La configuration des entrées et des sorties sur la carte FPGA................................ 21
Figure 28: Test du programme (Contrôle de la vitesse) ........................................................... 22
Figure 29: visualisation des signaux d’entrées et de sorties de ce premier test ....................... 23
Figure 30: Test du programme (Contrôle de position) ............................................................. 24
Figure 31: visualisation des signaux d’entrées et de sorties du deuxième test......................... 25
Liste des tableaux

Tableau 1: Entrées et sorties pour Controller le moteur pas à pas ............................................. 2


Tableau 2: Choix de signal d’horloge en fonction de l’adresse de donnée ................................ 7
Tableau 3: Les données de chaque bloc de diviseur de fréquence ............................................. 8
Tableau 4: Choix de signal d’horloge en fonction de l’adresse de donnée ................................ 9
Tableau 5:Les positions en fonction aux nombres des pas ...................................................... 10
Tableau 6: Choix de signal d’entrée en fonction de l’adresse de donnée ................................ 12
Tableau 7:Les données de chaque bloc de contrôle de position .............................................. 14
Tableau 8: Choix de signal d’horloge en fonction de l’adresse de donnée .............................. 15
Tableau 9: Le choix du signale d’horloge en fonction de l’adresse de donnée........................ 17
1 Introduction
Contrairement aux moteurs ordinaires, qui tournent en continu lorsque l'alimentation est
appliquée, les moteurs pas à pas sont des dispositifs qui tournent d'un nombre spécifique de
degrés pour chaque "pas" appliqué. Les moteurs pas à pas sont largement utilisés dans les
applications nécessitant un positionnement précis telles que la robotique, les lecteurs de disque,
les imprimantes, les horloges et les montres, l'automatisation d'usine et les machines. Ces
moteurs peuvent tourner dans les deux sens et leur vitesse peut être contrôlée.
Notre moteur pas à pas se comporte principalement de deux parties : le rotor à aimant permanent
(technologie hybride) et le stator bobiné (4 paires de pôles). Une vue en coupe transversale du
moteur est illustrée à la figure xx.

Figure 1: Vue en coupe du moteur pas à pas

Les bobines du stator bobiné sont appelées enroulements de commande. La rotation des moteurs
est contrôlée en activant/désactivant le courant à travers les enroulements de commande.
Normalement, les enroulements de commande sont excités par des transistors de commande.
Les moteurs pas à pas sont classés en trois types de moteurs pas à pas : les moteurs à réluctance
variable (VRM), les moteurs à aimants permanents (PM) et les moteurs hybrides (HM).

1
2 Spécifications de conception de laboratoire
L'objectif de ce laboratoire est de contrôler la position et la vitesse d'un moteur pas à pas en
utilisant la technologie FPGA. Le matériel du contrôleur de moteur pas à pas nécessite les
composants suivants : le moteur pas à pas pour convertir les informations numériques en
mouvement mécanique, un circuit générateur de séquence de phases pour générer des entrées
synchronisées de manière appropriée vers le moteur pas à pas (cette partie sera conçue ici dans
le DE2-70 Altéra FPGA) , et un circuit de commande pour fournir des niveaux de tension et de
courant appropriés au moteur pas à pas, comme illustré à la figure xx.

Figure 2: Schéma fonctionnel du contrôleur de moteur pas à pas

L'architecture numérique du contrôleur est conçue sur une plate-forme du logiciel Altéra
Quartus II utilisant le langage de description du matériel à très haute vitesse (VHDL). Au niveau
supérieur, ce contrôleur prend comme entrées le mode de fonctionnement (L’entrée C), le sens
de déplacement (L’entrée dir), la vitesse (L’entrée A) et la position (L’entrée D) et la commande
de position (L’entrée B) plus rapide du moteur et génère quatre signaux de sortie (Q0, Q1, Q2,
Q3) utilisés pour commuter les transistors qui sont utilisés pour piloter le moteur (voir tableau
xx).
Signal Direction Description
RESET Entrée Réinitialise la position du moteur à la position de référence initiale.
Clk_50M Entrée Signal d’horloge
Dir Entrée Si Dir=1, le moteur tourne dans le sens horaire sinon il tourne dans le sens
antihoraire.
A[1:0] Entrée C'est l'adresse de donnée du multiplexeur de 4 vers 1 et du demultiplexeur de 1
vers 4, son role est permet de selectionner le signal d'horloge souhaité
D[1:0] Entrée C'est l'adresse de donnée du multiplexeur de 4 vers 1 et du demultiplexeur de 1
vers 4, son role est permet de selectionner la position souhaité
B Entrée C’est un bouton poussoire, on envoyer une impulsion pour forcer le moteur de
tourner a une position precisé (en fontion de l'adresse de donnée D)
C Entrée Il permet de choisir le mode de fonctionnement
Q[3:0] Sortie 4-bit output of the device that goes to the MOSFET driver circuit.
Tableau 1: Entrées et sorties pour Controller le moteur pas à pas

2
2.1 Fonctionnement du driver L298N
L'un des moyens les plus simples et les moins coûteux pour contrôler les moteurs pas à pas est
d'interfacer le pilote du moteur L298N avec la carte FPGA. Il peut contrôler à la fois la vitesse
et la direction de rotation de n'importe quel moteur pas à pas bipolaire

Figure 3: Le driver L298N

-La broche VCC alimente le moteur. L’alimentation de ce dernier peut varier entre 5 et 35V.
N'oubliez pas que si le cavalier 5V-EN est en place, la tension d’alimentation doit être
augmentée de 2V par rapport à la tension réelle requise par le moteur, cela afin d'obtenir une
vitesse maximale du moteur.
-La broche 5V alimente les circuits logiques de commutation à l'intérieur du circuit intégré
L298N. Si le cavalier 5V-EN est en place, cette broche agit comme une sortie et peut être
utilisée pour alimenter la carte FPGA. Si le cavalier 5V-EN est retiré, vous devez le connecter
à la broche 5V sur la carte FPGA.
- Les broches ENA et ENB sont utilisées pour contrôler la vitesse du moteur.
- Les broches IN1, IN2, IN3 et IN4 sont utilisées pour contrôler la direction et la rotation du
moteur pas à pas.
- Les broches OUT1 et OUT2 sont connectées à la bobine A.
- Les broches OUT3 et OUT4 sont connectées à la bobine B.

3
3 Contrôle du moteur pas-a-pas : la vitesse & la position
Le but de ce laboratoire est de concevoir un contrôleur à base du langage VHDL permettant de
contrôler le moteur pas à pas en position et en vitesse. Cette architecture permettra de
fonctionner le moteur dans différents modes, à savoir : mode pas à pas, couple maximum ou
demi-pas. Une fois la phase de simulation est terminée, l’architecteur est implémenté sur la
carte FPGA afin de valider son fonctionnement.
Le programme complet « Control_Stepper_Motor » qui contrôle un moteur pas-a-pas, se
compose de 5 blocs sont :
- Bloc de Speed_Control
- Bloc de Controle_position
- Bloc de Div_par_2
- Bloc de Mux2_1_TO
- Bloc de stepper_motor_full
On a assemblé ces blocs en utilisant la description structurelle, comme représente la figure xx
suivante.

Figure 4: Le diagramme logique complet du programme qui contrôle un moteur pas-a-pas

4
La figure 4 ci-après illustre le programme complet qui nous permet de contrôle la vitesse et la
position du moteur pas-a-pas.

Figure 5: Le programme total qui contrôle la vitesse et la position du moteur

3.1 Contrôle de la vitesse du moteur pas-a-pas


Dans cette partie du contrôle de la vitesse, il voudrait de contrôler le signal de l’horloge (le
signale clk), c’est-à-dire, pour chaque vitesse souhaitée (tr/n×s) admet une fréquence spécifique
de signale d’horloge. La fréquence d’horloge de notre carte de type DE2-70 Altéra FPGA est
de 50Mhz. Alors que cette valeur de fréquence est hors de la plage de fonctionnement du driver
(L298N) car elle dépasse la fréquence maximum de commutation des transistors. C’est pour
cela, nous allons utiliser 4 blocs de diviseurs de fréquence qui seront implémenté dans le bloc
de contrôle de la vitesse du moteur appelé « Speed_Control ». Il contient 6 blocs sont :
- Bloc de Demux1_4_SP
- Bloc de Fre_Div
- Bloc de Fre_Div_1
- Bloc de Fre_Div_2
- Bloc de Fre_Div_3
- Bloc de Mux4_1_SP
Pour ce travail, nous allons contrôler notre moteur pas-a-pas par quatre vitesses différentes
(tr/400s, tr/40s, tr/4s et tr/0.8s), à l’aide des diviseurs de fréquence, comme illustre le
diagramme logique de la figure xx ci-après.

5
Figure 6:Le digramme logique du bloc de contrôle de la vitesse

On a utilisé la description structurelle pour écrire le programme complet du bloc de contrôle


de vitesse, qui contient des components de chaque bloc, qui sont représenté dans les figures
précédentes.
La figure ci-après illustrée le programme complet du contrôle de vitesse :

Figure 7: Le programme complet du bloc de contrôle de la vitesse

6
3.1.1 Bloc du démultiplexeur de 1 vers 4 « Demux1_4_SP »
On a créé ce bloc, pour associer le signal d’horloge qui est généré par la carte DE2-70 Altéra
FPGA, vers une entrée de l’un des blocs des diviseurs de fréquences en fonction de l’adresse
de donnée « A » codée sur deux bites.
Entrée du (Demux1_4_SP) Adresse de donnée (A) Sortie du (Demux1_4_SP)

00 Vers (Fre_Div)

Clk_50MHZ 01 Vers (Fre_Div_1)


10 Vers (Fre_Div_2)

11 Vers (Fre_Div_3)
Tableau 2: Choix de signal d’horloge en fonction de l’adresse de donnée

La figure 8 suivante représente le programme de démultiplexeur de 1 vers 4 du bloc


« Demux1_4_SP » :

Figure 8: Le programme du bloc « Demux1_4_SP »

3.1.2 Blocs des diviseurs de fréquence


Le bloc de diviseur de fréquence est nécessaire pour produire un signal d'horloge ralenti afin de
piloter le moteur à une vitesse appropriée, il accepte en entrée un signal d’horloge de 50MHz
fourni par la carte FPGE et délivre un signal de nHz, dans notre cas : 1Hz <n< 1kHz.

Figure 9: Un module de diviseur de fréquence de nHz avec 1Hz<n<1kHz

7
Le tableau suivant représente les données de chaque bloc de diviseur de fréquence utilisée
pour piloter le moteur pas-a-pas.
Bloc Entrée N Vitesse Sortie
Fre_Div Clk_50M 25000000 tr/400s Clk_1Hz
Fre_Div_1 Clk_50M 2500000 tr/40s Clk_10Hz
Fre_Div_2 Clk_50M 250000 tr/4s Clk_100Hz
Fre_Div_3 Clk_50M 50000 tr/0.8s Clk_500Hz
Tableau 3: Les données de chaque bloc de diviseur de fréquence

La figure 10 ci-après illustre le programme du premier bloc de diviseur de fréquence


« Fre_Div » :

Figure 10: Le programme du bloc « Fre_Div »

8
3.1.3 Bloc de multiplexeur de 4 vers 1 « Mux4_1_SP »
Pour le dernier bloc « Mux4_1_SP », c’est un multiplexeur de 4 vers 1, il nous permet de
choisir le signale d’horloge souhaitait en fonction de la valeur de l’adresse de donnée « A ».
Entrée Adresse de donnée A Sortie
Clk_1Hz 00
Clk_10Hz 01 Clk_OUT
Clk_100Hz 10
Clk_500Hz 11
Tableau 4: Choix de signal d’horloge en fonction de l’adresse de donnée

La figure suivante représente le programme de notre multiplexeur utilisé.

Figure 11: Le programme du bloc « Mux4_1_SP »

1.1.4 Test du bloc du contrôle de la vitesse (Simulation)


3.1.3.1 Premier test (A=00)
La figure suivante illustre le bien fonctionnement de notre bloc du contrôle de la vitesse avec
la commande de l’adresse de donnée A=00, qui nous donne à la sortie un signal d’horloge de
1Hz.

Figure 12:Le choix du signal de sortie de 1Hz

9
3.1.3.2 Deuxième test (A=01)
La figure suivante représente le bien fonctionnement de notre bloc du contrôle de la vitesse
avec la commande de l’adresse de donnée A=01, qui nous donne à la sortie d’horloge de 10Hz.

Figure 13:Le choix du signal de sortie de 10Hz

3.2 Contrôle de la position du moteur pas-a-pas


Ce programme qui contrôle la position du moteur « Controle_position », admet 6 blocs sont :
- Bloc de Demux1_4_CP
- Bloc de Contrôle_de_position
- Bloc de Contrôle_de_position_1
- Bloc de Contrôle_de_position_2
- Bloc de Contrôle_de_position_3
- Bloc de Mux4_1_CP
Dans cette partie du contrôle de position, nous avons contrôlé quatre positions (45°,90°,180° et
360°), avec notre type de moteur tourne avec 1.8° pour un pas complet. Par exemple pour que
le moteur tourne par 45°, il a besoin de 45/1.8 = 25 pas complet.
Positions Nombres des pas
45° 25
90° 50
180° 100
360° 200
Tableau 5:Les positions en fonction aux nombres des pas

Pour chaque pas complet du moteur, correspond au front-montant du signal d’horloge d’entrée,
d’où pour contrôler le moteur par exemple à 45°, alors on a besoin de 25 front-montant.

10
La figure ci-dessous représente le diagramme logique du bloc global du contrôle de position :

Figure 14:Le diagramme logique du bloc global du contrôle de position

On a utilisé la description structurelle pour écrire le programme complet du bloc de contrôle de


position, qui admet des components de chaque bloc, que nous avons représenté dans les figures
précédentes.

11
La figure ci-après illustrée le programme complet du contrôle de position :

Figure 15:Le programme complet du bloc de contrôle de position

3.2.1 Bloc du démultiplexeur de 1 vers 4 « Demux1_4_CP »


Ce bloc est un démultiplexeur de 1 vers 4, l’entrée de ce bloc est un bouton poussoir « B », si
B=1 cela signifier que le moteur doit tourner à une position de n degré, avec n est choisie par
l’adresse de donnée, comme illustre le tableau suivant.

Entrée du (Demux1_4_CP) Adresse de donnée (D) Sortie du (Demux1_4_CP)

00 Contrôle_de_position
(n=45°)
B 01 Contrôle_de_position_1
(Bouton poussoir) (n=90°)
10 Contrôle_de_position_2
(n=180°)
11 Contrôle_de_position_3
(n=360°)
Tableau 6: Choix de signal d’entrée en fonction de l’adresse de donnée

12
Le premier bloc qui port l’entité de « Demux1_4_CP », est un démultiplexeur de 1 vers 4, la
figure suivante représente le programme de ce bloc.

Figure 16:Le programme du bloc « Demux1_4_CP »

3.2.2 Blocs du contrôle de position


Le bloc du contrôle de position est nécessaire pour produire un signal d'horloge qui contient
des nombres des fronts montent fini (n fronts montent < = > n pas du moteur <= > n ×
1.8°)

Figure 17: Contrôle les nombres des fronts montant d’un signal d’horloge

La figure ci-dessous montre le fonctionnement du bloc de Controle_de_position, qui compte


un nombre des fronts montant spécifique (nombre de pas). Mais à la sortie de ce bloc, la

13
fréquence du signal est divisée sur 2, car le process est exécuté à chaque front montant
d’horloge.
Le tableau suivant représente les données de chaque bloc de Contrôle de position utilisée pour
contrôle les positions du moteur pas-a-pas.
Bloc Entrée P Nombre Degré Sortie
des pas
Controle_de_position Clk_OUT 50 25 45° Clk_25_P
Controle_de_position_1 Clk_OUT 100 50 90° Clk_50_P1
Controle_de_position_2 Clk_OUT 200 100 180° Clk_100_P2
Controle_de_position_3 Clk_OUT 400 200 360° Clk_200_P3
Tableau 7:Les données de chaque bloc de contrôle de position

3.2.2.1 Bloc du contrôle de position (premier cas D = 00)


Pour le premier cas on a donné à l’adresse de donnée D la valeur 00, donc c’est le moteur doit
tourner 45° (d’après le tableau xx), la figure ci-dessous montre la visualisation des signaux
d’entrée et sortie de bloc de position sous logiciel ModelSim

Figure 18: visualisation des signaux à l’aide de logiciel ModelSim

D’après les figures 18 on observe que lorsqu’on a envoyé une impulsion par le bouton poussoir,
le signal de sortie laisse passer seulement les 25 fronts montants et bloquée les autres pour que
le moteur puisse tourner une de 45° et s’arrêtera, afin de s’attendre la prochaine commande de
bouton poussoir
3.2.2.2 Bloc du contrôle de position (premier cas D = 01)
Pour le premier cas on a donné à l’adresse de donnée D la valeur 01, donc c’est le moteur doit
tourner 90° (d’après le tableau 7), la figure ci-dessous montre la visualisation des signaux
d’entrée et sortie de bloc de position sous logiciel ModelSim

Figure 19 : visualisation des signaux à l’aide de logiciel ModelSim

D’après les figures 19 on observe que lorsqu’on a envoyé une impulsion par le bouton poussoir,
le signal de sortie laisse passer seulement les 25 fronts montants et bloquée les autres pour que
le moteur puisse tourner une de 90° et s’arrêtera, afin de s’attendre la prochaine commande de
bouton poussoir

14
3.2.2.3 Le programme du bloc « Controle_de_position »

Figure 20:Le programme du bloc « Contrôle_de_position »

1.2.3 Bloc du multiplexeur de 4 vers 1 « Mux4_1_CP »


Le bloc « Mux4_1_CP », c’est un multiplexeur de 4 vers 1, il nous permet de choisir le signale
d’horloge souhaité (qui contient des nombres des fronts montant spécifique) en fonction de la
valeur de l’adresse de donnée « D ».
Le tableau suivant représente le fonctionnement du bloc « Mux4_1_CP »
Entrée Adresse de donnée D Sortie
Clk_25_P 00
Clk_50_P1 01 Clk_OUT_CP
Clk_100_P2 10
Clk_200_P3 11
Tableau 8: Choix de signal d’horloge en fonction de l’adresse de donnée

15
La figure suivante représente le programme de notre multiplexeur utilisé.

Figure 21: Le programme du bloc « Mux4_1_CP »

3.3 Bloc de diviseur de fréquence par 2


Pour faire tourner le moteur à une vitesse V, nous devons générer un signal à la sortie du bloc
« Speed_Control » de fréquence qui égale à 2 * F (fréquence qui correspond à la vitesse V).
Cela parce que ce signal sera l’entrée du bloc « Control_position », et à la sortie de ce dernier,
nous aurons un signal avec une fréquence divisé par 2 (2*F/2 = F) comme on a vu dans le
paragraphe précédent. Donc, à la fin nous aurons contrôlé la position du moteur avec la vitesse
désirée.
Dans le mode de fonctionnement normal, ou on ne contrôle pas la position, nous divisons le
signal de sortie de bloc « Speed_Control » par 2 en utilisant le bloc de diviseur de fréquence
par 2.

16
La figure suivante représente le programme du diviseur de fréquence par 2 :

Figure 22:Le programme du diviseur de fréquence par 2

3.4 Bloc du multiplexeur de 2 vers 1 « Mux2_1_TO »


Ce bloc nous permet de choisir le signal d’horloge souhaiter, à l’aide d’une adresse de donnée
« C ».
Adresse de donnée (C) Signale d’horloge

C=0 clk_OUT_CP : signale d’horloge de la sortie


du bloc Controle_position

C=1 clk_OUT_SP : signale d’horloge de la sortie


du bloc Speed Control

Tableau 9: Le choix du signale d’horloge en fonction de l’adresse de donnée

17
La figure suivante illustre le programme de ce multiplexeur :

Figure 23: Le programme du multiplexeur (2 vers 1)

3.5 Bloc de contrôle du moteur pas-a-pas « stepper_motor_full »


Un moteur pas à pas bipolaire n'a que des bobines sator à huit pôles et quatre fils, comme illustré
à la Fig. xx. Les pas de rotation sont contrôlés par l'excitation sur chacune des bobines qui suit.
Le contrôleur de moteur, conçu en FPGA, doit fournir la séquence appropriée de quatre phases
pour faire tourner le moteur le plus raide.

Pour un mode de fonctionnement pas à pas complet, le contrôleur de moteur génère les
séquences suivantes 1010, 0110, 0101, 1001 pour faire tourner le moteur.

Le code VHDL indiqué dans la liste xx contrôle la direction du moteur pas à pas fonctionnant
en excitation monophasée. Le FSM garantit que la séquence correcte est suivie pour alimenter
la bobine. Le sens de rotation est modifié en changeant la séquence d'alimentation de la bobine
et la séquence générée est 1010, 0110, 0101 et 1001.

La figure xx montre la machine à états (FSM) pour le moteur pas à pas, où chaque état est
dessiné dans un cercle, et des arcs entre les états étiquetés avec les combinaisons d'entrée qui
provoquent des transitions d'un état à un autre. Avec dir=1, le moteur pas à pas tournera dans
le sens des aiguilles d'une montre. Avec dir=0, le sens sera dans le sens antihoraire.

18
Figure 24:Code VHDL pour le moteur pas à pas fonctionnant au pas complet

Figure 25: FSM pour moteur pas à pas avec contrôle de direction

19
La figure 25 montre le programme VHDL pour un moteur pas à pas 4 bits avec contrôle de
direction. Les entrées sont clk, reset et dir et la sortie est un vecteur Q de 4 bits, signaux définis
dans le tableau 1. La state_machine est définie avec quatre valeurs : S0, S1, S2, S3. Le signal
interne est déclaré comme TYPE : state_machine et se verra attribuer des valeurs dans le groupe
d'attribution CASE.
Comme on peut le voir dans l'instruction de processus (ligne 13-34), lorsque le signal « reset »
est égal à 1, l'ensemble de la machine à états finis (FSM) est réinitialisé à l'état S0 et le signal
du moteur est initialisé avec « 1010 ». D'autre part, lorsque le signal de « reset » n'est pas activé,
le front montant de l'horloge d'entrée est pris en compte pour parcourir le FSM dans les états
suivants et produire les signaux de sortie nécessaires. Lorsque le front montant de l'horloge est
détecté et que le signal de direction "dir" est haut, le FSM passe aux états suivants et le moteur
tourne dans le sens des aiguilles d'une montre. Sinon, le signal Dir est bas, le moteur tourne
dans le sens antihoraire.
La figure 28 montre les résultats de la simulation pour un moteur pas à pas fonctionnant au pas
complet (1,8°). Lorsque la réinitialisation (réinitialisation) est élevée, le FSM du moteur pas à
pas reste dans l'état de réinitialisation (S0). Lorsque la réinitialisation (reset) passe à l'état bas,
alors la transition d'état a lieu dans un sens selon le signal de commande de direction « dir ».
Lorsque le signal dir est élevé, le contrôleur de moteur pas à pas produira les signaux de sortie
appropriés pour faire tourner le moteur dans le sens des aiguilles d'une montre. La figure xx
montre également que la machine d'état effectue sa transition en sens inverse lorsque ledit signal
est abaissé.

4 Teste pratique et simulation du programme total


4.1 La configuration des entrées et des sorties
Apres la compilation du programme, à l’aide du logiciel Quartus, il reste d’implémenter le
programme vers la carte Altéra DE2-70 FPGA, La figure suivante représente la configuration
des entrées et des sorties du programme total « Control_Stepper_Motor ».

Figure 26: La configuration des entrées et des sorties

20
La figure ci-après illustre la configuration des entrées et des sorties sur la carte DE20-70
Altéra FPGA.

Figure 27: La configuration des entrées et des sorties sur la carte FPGA

21
4.2 Première expérience pratique du control de vitesse
Enfin, selon le mode de sélectionné (vitesse si C=1, Position si C=0) et le sens de rotation
choisi (dir=1 ou 0), le moteur pas à pas a été entraîné jusqu'à une vitesse et une position
souhaitée démontrant le bon fonctionnement du contrôleur conçu dans la plate-forme FPGA.
La figure ci-dessous montre le test que nous avons effectué :

Figure 28: Test du programme (Contrôle de la vitesse)

Dans ce test du programme, on a sélectionné le mode de contrôle de la vitesse, nous avons


entrainé le moteur sous une vitesse de tr/40s et il tourne dans le sens horaire.

22
4.2.1 Première expérience de simulation du control de vitesse
La figure illustre la visualisation des signaux d’entrées et sorties du programme total (nous
avons injecté les mêmes données de premier expérience) sous le logiciel ModelSim.

Figure 29: visualisation des signaux d’entrées et de sorties de ce premier test

D’après la figure 29 on observe que notre choix des entrées est compatible avec les résultats
que nous avons trouvés en sorite. C.-à-d. notre schéma de machine à état (figure xx), a été bien
fonctionné avec la condition de dir = 1. Le choix de l’adresse de donnée de speed A =01 nous
permet de choisir le signal d’horloge de 10Hz. Et puisque on a sélectionné le mode de vitesse
(C = 1), le signal d’horloge de la sortie sélectionné par le bloc « Mux2_1_TO », est celui du
signal d’horloge de la sortie du bloc « Speed_Control ».

23
4.3 Deuxième expérience pratique du control de position
La figure suivante représente le test que nous avons effectué :

Figure 30: Test du programme (Contrôle de position)

Dans ce test du programme, on a sélectionné le mode de contrôle de position, nous avons


entrainé le moteur sous une vitesse de tr/0.8s et il tourne dans le sens antihoraire avec une
position de 45°.

24
4.3.1 Deuxième expérience de simulation du control de position
La figure illustre la visualisation des signaux d’entrées et sorties du programme total (nous
avons injecté les mêmes données de deuxième expérience) sous le logiciel ModelSim.

Figure 31: visualisation des signaux d’entrées et de sorties du deuxième test

D’après les figures xx on observe que notre choix des entrées est compatible avec les résultats
que nous avons trouvés en sorite. C.-à-d. notre schéma de machine à état (figure xx), à été bien
fonctionné avec la condition de dir = 0. Le choix de l’adresse de donnée A =11 nous permet de
choisir le signal d’horloge de 500Hz. Le choix de l’adresse de donnée de la position D = 00
permet au moteur de tourner avec un angle de 45° puis il s’arrête. Et puisque on a sélectionné
le mode de position (C = 0), le signal d’horloge de la sortie sélectionné par le bloc
« Mux2_1_TO », est celui du signal d’horloge de la sortie du bloc « Control_position ».

25
5 Conclusion
Ce projet est une nouvelle expérience pour nous, surtout au niveau du travail en binôme, et il
nous permet de savoir le bon sens et découvrir de prêt le métier d’ingénieur en génie électrique,
Le choix de ce projet a été très cohérent avec notre formation.
Pendant la période de ce projet, nous avons pu acquérir de nouvelles compétences. Non
seulement le langage VHDL et la visualisation des signaux à l’aide du logiciel ModelSim, mais
aussi humaines. Nous avons également compris l’importance du travail collectif dans l’atteinte
des objectifs professionnels, et le rôle de la bonne organisation dans la gestion du projet.
A la fin de ce projet tous des objectifs assignés dans le cahier des charges ont été atteints,
notamment tous ceux qui concernent le contrôle de la vitesse et la position du moteur pas à pas.
Ce projet a été l’occasion de valoriser mes connaissances techniques, et de développer une
vision pratique.

26

Vous aimerez peut-être aussi