Commande PWM D un moteur 1
Commande PWM d un moteur 1) But La modulation de largeur d impulsion permet de faire varier la vitesse d un moteur. On souhaite Réaliser grâce à un composant programmable du type FPGA une modulation de largeur d impulsion MLI ou PWM (pulse width modulation). La forme de l onde sera très simple et non optimisée pour réduire le taux d harmonique 2) Objectifs L étudiant devra être capable : - D élaborer un programme en langage VHDL afin de permettre une commande en PWM d un moteur. - De mettre en œuvre les dispositifs de test 3) Pré-requis - Cours sur le langage VHDL. 4) Schéma de câblage Vivado Câble USB FPGA ZYNQ Micro-usb host Carte ZYBO MCC + capteur M +9V Module PMOD HB5 2
5) Questions préliminaires (analyse fonctionnelle) TPTESTVHDL2017 06/05/2017 5.1) Quel nom est donné au montage permettant la conversion de l énergie pour le moteur (module PMODHB5 document annexe 1). 5.2) Quel type de capteur de vitesse ou de position est utilisé (document annexe 1). Donnez le principe de ce type de capteur 5.2) Donnez document réponse N 1 le rôle des broches du module PMODHB5. On souhaite analyser en langage VHDL La logique de commande permettant de piloter le moteur (bloc commande_0). Le schéma est le suivant : Le package IP commande permet de piloter le moteur. L entrée en1 permet de valider la rotation et l entrée sens permet de choisir le sens de rotation du moteur. On a indiqué le gisement des broches pour les connecteurs d extension de la carte zybo. 3
Le package IP dectsens permet de détecter le sens de rotation du moteur grâce aux signaux SA et SB du capteur de vitesse. 6) Partie N 1 : Réalisation du package IP commande et dectsens 6.1) On donne document annexe N 2 le code VHDL du package IP commande. A partir de ce code complétez les chronogrammes document réponse N 2 6.2) On donne document annexe N 3 le code VHDL du package IP dectsens. A partir de ce code, déterminez la fonction numérique réalisée par ce code. 6.3) Réalisez le câblage de la carte zybo du moteur et du module PMODHB5. 6.3) Ouvrir le projet moteur.xpr et réalisez sous vivado le bloc design page précédente. Synthétisez et programmez la carte zybo. 6.4) Vérifiez le fonctionnement de l ensemble. La vitesse du moteur reste constante, la valeur moyenne imposée aux bornes du moteur est proche de 9V. On souhaiter moduler la valeur moyenne aux bornes du moteur en utilisant le principe de la modulation de largeur d impulsion. On suppose que les perturbations sur l axe du moteur peuvent être négligées. Le schéma ci-dessous nous permettre de réaliser la modulation de largeur d impulsion 4
Le bus consigne permet de régler la largeur de l impulsion du signal sortie du package IP commande. Consigne (1) (0) Rapport cyclique du signal sortie 0 0 0% 0 1 25% 1 0 50% 1 1 75% 7) Partie N 2 : Réalisation de la commande PWM Ouvrir le projet moteur1.xpr et le bloc design du projet. Le package IP resetmli est un compteur naturel 8bits qui possède une entrée de reset asynchrone active au 0 logique. La sortie SRAZ sera au 1 logique lorsque le compteur atteindra la valeur de 254 et 255. Dans tous les autres cas la sortie SRAZ sera au 0 logique. Le compteur déclenchera sur un front montant de l entrée clk. 7.1) Réalisez le package IP resetmli en fournissant le code VHDL de ce package. La dernière étape est la réalisation du package IP MLI. On donne le code partiel du code VHDL (document réponse N 3). La partie de code à compléter doit respecter les fonctionnalités suivantes : Le mot consigne sera formée de la façon suivante : 7(MSB) 6 5 4 3 2 1 0(LSB) consigne cons(1) cons(0) 0 0 0 0 0 0 La partie suivante du code doit permettre d élaborer la commande de la sortie outdec en respectant l algorithme suivant : 5
Si (contenu du compteur <= consigne) alors outcde 1 ; Sinon outcde 0 ; Fin si ; contenu du compteur contenu du compteur + 1 ; 7.2) En respectant les contraintes précédentes, complétez le document réponse N 3. Réalisez le package IP du bloc MLI. Validez par la simulation le package IP MLI 7.3) Complétez le bloc design (voir page N 4), synthétisez par la suite notre FPGA et programmez le. Vérifiez le bon fonctionnement du système. 7.4) Relevez les signaux de SA, SB, sortie en faisant varier la consigne, relevez le déphasage entre SA et SB lorsque l on change le sens de rotation du moteur. 6
Document réponse N 1 Nom de la broche Rôle DIR EN SA SB M+ M- 7
Document réponse N 2 cdesens t sens 1 enable etatcde 0 cde senable 8
Document réponse N 3 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.std_logic_unsigned.all; --use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.Numeric_std.all; entity MLI is Port ( finmli : in STD_LOGIC; RAZ: in STD_LOGIC; clk : in STD_LOGIC; cons : in STD_LOGIC_VECTOR(1 downto 0); outcde : out STD_LOGIC); end MLI; architecture Behavioral of MLI is signal consigne : STD_LOGIC_VECTOR(7 downto 0); begin mli : process(clk,finmli,raz) variable comptage : integer range 0 to 255; begin if(raz='0') then comptage:=0;outcde<='0'; elsif(finmli='1') then comptage:=0;outcde<='0'; elsif (clk'event and clk='1') then end if; end process mli; end Behavioral; 9
Document annexe N 1 10
11
12
13
14
Document annexe N 2 Commande.vhd library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.std_logic_unsigned.all; use IEEE.Numeric_std.all; entity commande is Port ( cde : in STD_LOGIC; cdesens : in STD_LOGIC; enable : in STD_LOGIC; senable : out STD_LOGIC; sens : out STD_LOGIC); end commande; architecture Behavioral of commande is signal etatsens: bit; signal etatcde: bit; begin commande : process(cdesens,enable) begin if (cdesens'event and cdesens='1') then if (etatsens='0') then etatsens<='1'; else etatsens<='0'; sens<='0'; end if; end if; if (enable'event and enable='1') then if (etatcde='0') then etatcde<='1'; else etatcde<='0'; end if; end if; end process commande; senable<='1' when ((etatcde='1') and (cde='1')) else '0'; end Behavioral; sens<='1'; 15
Document annexe N 3 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.std_logic_unsigned.all; use IEEE.Numeric_std.all; entity detcsens is Port ( INSA : in STD_LOGIC; INSB : in STD_LOGIC; detsens : out STD_LOGIC); end detcsens; architecture Behavioral of detcsens is begin commande : process(insa) begin if (INSA'event and INSA='1') then if (INSB='0') then detsens<='1'; dectsens.vhd else detsens<='0'; end if; end if; end process commande; end Behavioral; 16
17
18