Upload
amanitaamallah
View
215
Download
0
Embed Size (px)
Citation preview
8/10/2019 11_TP6_commande Mcc Mpap Fpga Intrssant
1/10
Denis Rabast 1/10 IUFM Aix Marseille
Commande de moteurs courant continu et pas pas parFPGA
Lobjectif de cette sance est de commander un moteur courant continu puis un moteur pas paspar lassociation de la carte de dveloppement DE2 et dune carte auxiliaire intgrant les circuits depuissances.A travers la synthse de ces projets, nous nous familiariserons avec la notion de machine dtat.
1 Descriptif de la carte auxiliaire
Nous utilisons pour notre carte auxiliaire un circuit L298, au sein duquel sont implants deux ponts enH, associ la logique de commande, comme lindique la structure interne de ce circuit sur la figuresuivante :
Comme on peut le noter sur la figure prcdente, les diodes de puissance ne sont pas intgres dansle L298, il faut les ajouter sur la carte, comme le montre la figure suivante. Il est alors possible decommander deux moteurs courant continu (sortie OUT1-OUT2 ou bien OUT3-OUT4) ou un moteurpas pas bipolaire deux phases (les deux phases tant connecte respectivement en OUT1-OUT2 etOUT3-OUT4).
8/10/2019 11_TP6_commande Mcc Mpap Fpga Intrssant
2/10
8/10/2019 11_TP6_commande Mcc Mpap Fpga Intrssant
3/10
8/10/2019 11_TP6_commande Mcc Mpap Fpga Intrssant
4/10
Commande de moteur courant continu et pas pas par FPGA
Denis Rabast 4/10 IUFM Aix Marseille
Le bloc BP_IMP a pour rle de convertir le NL0 de dure alatoire, obtenu lors de lappui sur lesboutons poussoir BP1 et BP2, en signaux au NL1 de dure 20 ns (soit une priode de lhorloge 50MHz).Le bloc BP_IMP peut tre vu comme un dtecteur de front descendant.
Comme on peut le voir sur le schma gnral associ au programme, les diffrents boutons poussoirssont associs des DEL, afin den visualiser lappui.
3.2 Mise en uvreOuvrir un nouveau projet dans Quartus.Proposer un programme VHDL permettant de synthtiser les blocs div_50 et MLI ; simuler lessolutions obtenues.Etudier la syntaxe VHDL du bloc BP_IMP donn en annexe et dans le dossier ressource ressources/TP_Quartus/TP6_mcc_pap/mcc et simuler le fonctionnement du programme.Synthtiser le squenceur Seq laide de lutilitaire de Quartus (voir le cours sur les machinesdtat) et simuler le rsultat.Regrouper ces sous ensembles dans un schma gnral, compiler le projet et programmer le FPGAsans alimenter la carte auxiliaire et vrifier loscilloscope que le fonctionnement est bien celuiattendu.
Connecter le moteur et lalimentation suivant le protocole indiqu au chapitre 2, et tester lefonctionnement.En cas de problmes, on trouvera des exemples de solutions dans le dossier ressource et en annexe.
4 Mise en uvre de la commande dun pas pas
4.1 Descriptif du programmeLe programme implant dans le FPGA de la carte DE2 est associ au schma suivant :
H C_OUTS
div_1s
inst2
VCCH INPUT
VCCRST INPUT
VCCSens INPUT
VCCP_demiP INPUT
P_demiP
Sens
RSTLED_RSTOUTPUT
LED_SENSOUTPUT
LED_p_demipOUTPUT
SEG[6..0]OUTPUT
PH[3..0]OUTPUT
ENAOUTPUT
ENBOUTPUT
VCC
PIN_N2
PIN_G26
PIN_N23
PIN_W26
PIN_AE22
PIN_W19
PIN_AA20
PIN_N24
PIN_K25
PIN_M19
PIN_M23
PIN_R24
PIN_R20
PIN_AF10
PIN_AB12
PIN_V13
PIN_V14
PIN_AC12
PIN_AD11
PIN_AE11
BCD[3..0] SEG[6..0]
DECODEUR
inst1
C_EN
clock
C_EN
reset
S
P
PH[3..0]
ETAT[3..0]
SEQ
inst
C_EN
Le bloc div_1s nous gnre un signal dhorloge de priode 1 secondes, en divisant par 50 millionslhorloge 50 MHz de la carte DE2.Cette horloge dune seconde va commander un squenceur, permettant au moteur de fonctionnerdans un sens ou dans lautre suivant que le bouton poussoir reli lentre Sens est appuy ounon, et en mode pas entiers une phase ou en mode demi-pas suivant que le bouton poussoirassoci lentre P_demiP est appuy ou non.La sortie PH[3..0] du squenceur envoie les signaux adquat sur les entres In1 In4 du circuitL298, suivant les chronogrammes reprsents ci-dessous :
8/10/2019 11_TP6_commande Mcc Mpap Fpga Intrssant
5/10
8/10/2019 11_TP6_commande Mcc Mpap Fpga Intrssant
6/10
8/10/2019 11_TP6_commande Mcc Mpap Fpga Intrssant
7/10
Commande de moteur courant continu et pas pas par FPGA
Denis Rabast 7/10 IUFM Aix Marseille
Annexe 2 : Programmes associs la commande dun moteur courant continu
Block BP_IMP : dtecteur de front descendant
LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all;--les paquetages std_logic_1164 et std_logic_unsigned de la bibliothque ieee--permettent respectivement l'utilisation du type std_logic et l'addition avec ce type
-- chaque appui sur les boutons poussoirs (NL0 sur la carte DE2),-- les sorties correspondantes gnre une impulsion unique--d'un seul coup d'horloge (dtection du front descendant)
ENTITY bp_imp IS
port ( H : IN STD_LOGIC;BP1, BP2 : IN STD_LOGIC;IMP_BP1, IMP_BP2 : OUT STD_LOGIC);
END bp_imp;
ARCHITECTURE arch OF bp_imp IS
SIGNAL BP10, BP11, BP20, BP21 : STD_LOGIC;
BEGIN-- chaque front d'horloge, le niveau de l'entre BPx est affect BPx0-- au coup d'horloge suivant BPx0 est affecte BPx1
-- une fonction ET entre BPx0 et le complmentaire de BPx1 permet de dtecter le front descendantsur BPx
PROCESS (H)BEGIN
IF (H'EVENT AND H = '1') THENBP10
8/10/2019 11_TP6_commande Mcc Mpap Fpga Intrssant
8/10
Commande de moteur courant continu et pas pas par FPGA
Denis Rabast 8/10 IUFM Aix Marseille
--pour notre application on souhaite un signal environ 256*20 kHz--il faut donc diviser par 10, ce qui ncessite 4 bits pour X
ENTITY div_50 ISport ( H : IN STD_LOGIC;
C_OUT : OUT STD_LOGIC;S : OUT STD_LOGIC);
END div_50;
ARCHITECTURE archdiv OF div_50 IS
SIGNAL X : STD_LOGIC_VECTOR (3 downto 0);CONSTANT M : INTEGER :=10 ;
BEGINPROCESS (H)BEGIN
--compteur modulo MIF (H'EVENT AND H = '1') THENIF X >= M-1 THEN X '0');--mise 0 de tous les bits de XELSE X
8/10/2019 11_TP6_commande Mcc Mpap Fpga Intrssant
9/10
Commande de moteur courant continu et pas pas par FPGA
Denis Rabast 9/10 IUFM Aix Marseille
BEGINPROCESS (H)BEGIN
--compteur modulo MIF (H'EVENT AND H = '1') THEN
IF C_EN='1' thenIF X >= M-1 THEN X '0');--mise 0 de tous les bits de XELSE X
8/10/2019 11_TP6_commande Mcc Mpap Fpga Intrssant
10/10
Commande de moteur courant continu et pas pas par FPGA
Denis Rabast 10/10 IUFM Aix Marseille
BEGIN--compteur modulo M
IF (H'EVENT AND H = '1') THENIF X >= M-1 THEN X '0');--mise 0 de tous les bits de X
ELSE X