11_TP6_commande Mcc Mpap Fpga Intéréssant

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