COMMANDE POUR UN MOTEUR PAS À PAS 27/04/06 PROJET D'ATELIER: COMMANDE POUR UN MOTEUR PAS A PAS (PHOTO) BIENKOWSKI & BEN ALAYA 1 COMMANDE POUR UN MOTEUR PAS À PAS 27/04/06 SOMMAIRE: IPRESENTATION DU CAHIER DE CHARGE IIETUDE THEORIQUE IIIREALISATION PRATIQUE ET MESURES IVCONCLUSION II Etude théorique et dimensionnement des composants Problèmes rencontrées Coût total du projet 3 IV Conclusion 24 BIENKOWSKI & BEN ALAYA 2 COMMANDE POUR UN MOTEUR PAS À PAS I- 27/04/06 PRESENTATION DU CAHIER DES CHARGES: L'objectif de ce projet est de réaliser la commande électronique d'un moteur pas à pas qui sert à entraîner deux essuies glasses. La commande conçue actionne un moteur ID31-004 ayant les caractéristiques suivantes: Angle par pas degrés Couple N.cm Inertie Rotor Kg.cm2 7.5 2.8 0.011 Resistance par phase ohms 65 Courant par phase A Nombre de Connexions 0.175 6 Le principe de la commande de ce moteur est le suivant: Le moteur utilisé est de type unipolaire à 4 phases qui nécessite une alimentation continue de +12V. Notre cahier de charge exige les fonctionnalités classiques suivantes: Balayage unique Balayage lent Balayage rapide Balayage intermittent Nous verrons plus loin le détail théorique et pratique de chacune de ces fonctions ainsi que les problèmes rencontrés lors de leur conception. On s'attardera également sur la partie commande en puissance et sa mise au point. BIENKOWSKI & BEN ALAYA 3 COMMANDE POUR UN MOTEUR PAS À PAS II- 27/04/06 ETUDE THEORIQUE ET REALISATION: 1) Schéma global de la commande La première plaque "Horloge" comprend le circuit qui génère un signal créneau de fréquence 12 Hz. Elle comporte aussi 4 interrupteurs pour actionner l'une ou l'autre des fonctions de la commande ainsi que 2 boutons poussoirs correspondant à la mise sous tension et la remise à zéro de l'ensemble du FPGA et de la plaque de commande. Le circuit logique chargé dans le FPGA génère des signaux qui alimenteront selon des équations bien précises la commande en puissance du moteur. Cette dernière transforme les niveaux haut et bas des signaux qu'elle reçoit en courants suffisants pour faire tourner le moteur. 1.1) Horloge: Notre première tâche était de concevoir une horloge 12 Hz pour le FPGA qui définira la vitesse de balayage de l'essuie glasses. En effet, pour effectuer un aller-retour, nous avons besoin de demander 24 pas au moteur (un aller-retour de 90°). Cela nous donne une vitesse de balayage de 2 secondes adaptée dans la pratique pour bien voir les différentes phases de fonctionnement. Pour ce faire on a utilisé le composant intégré LM555 en astable: Connections entre les pattes du LM555 pour avoir un fonctionnement en astable L'étude théorique du LM555 tel qu'il fonctionne en astable aboutit aux équations suivantes: T= 0,693(Ra+2*Rb)*C où T est la période du signal généré. f= 1/T = 1,44 / (Ra+2*Rb)*C . Forme des ondes d'entrée et de sortie de l’astable BIENKOWSKI & BEN ALAYA 4 COMMANDE POUR UN MOTEUR PAS À PAS 27/04/06 Les valeurs pratiques des composants que nous avons choisis sont alors: 4kOhms pour les deux résistances Ra et Rb, 10 uF pour le condensateur C relié à la patte 6 du LM555 0,01 uF pour le condensateur relié à la patte 5. Ces valeurs nous permettent d'obtenir un signal carré de période 83 ms càd 12 Hz mesuré à l'oscilloscope (CF partie pratique) Le schéma de la plaque "Horloge" finalisé est le suivant: BIENKOWSKI & BEN ALAYA 5 COMMANDE POUR UN MOTEUR PAS À PAS 1.2) 27/04/06 Plaque d’alimentation du moteur Nous savions dès le début que nous allions devoir utiliser un FPGA pour coordonner toutes les phases du moteur. Cela signifiait : des créneaux de 5 V d’amplitude, et une intensité très faible en sortie du FPGA. On a donc conçu et dessiné une plaque à base de MOSFets (transistors de puissance commandés en tension) qui se contenterait des signaux de sortie du FPGA et qui actionnerait sans encombre les phases du moteur. L’intensité qui passe dans chaque phase est donnée par le constructeur et vaut 175mA sous 12V. Nous avons donc choisi des transistors NMOS IRF-530, qui supportent une tension Drain / Source de 100V, et un courant de 10A. Ces composants sont certes largement surdimensionnés, mais c’étaient les seuls disponibles, et surtout il s’est avéré qu’ils remplissent parfaitement leur rôle d’interrupteurs. Nous avons aussi ajouté 4 diodes qui s’allument pour chaque phase en fonctionnement, ce qui permet de détecter les erreurs et de mieux appréhender le fonctionnement du système. Le schéma de cette plaque d’alimentation est celui-ci : Note : les interrupteurs sont là pour la maquette, afin de tester les transistors plus facilement ; ils sont shuntés dans la version finale. BIENKOWSKI & BEN ALAYA 6 COMMANDE POUR UN MOTEUR PAS À PAS 1.3) 27/04/06 Circuit Logique: Le Grafcet global de la partie commande montre le principe de la programmation de notre FPGA. P1, P2, P3 et P4 sont des interrupteurs correspondant chacun à une fonctionnalité demandée dans le cahier de charge. a : est le bouton de mise en route du balayage (bouton poussoir). On a également mis en place un bouton RAZ (n'apparaissant pas sur ce graphe) qui a pour rôle de mettre à 0 toutes les bascules du circuit logique et donc s'assurer du bon déroulement des différentes étapes. BIENKOWSKI & BEN ALAYA 7 COMMANDE POUR UN MOTEUR PAS À PAS 27/04/06 Le schéma global que nous avons réussi à concevoir sur MaxPlusII a l'allure suivante: Circuit définissant définissant la la vitesse vitesse du du moteur moteur selon selon le Circuit Le mode de fonctionnement mode de fonctionnement Fonction Balayage unique, Fonction Balayage unique: cœur du FPGA centre du FPGA Balayage continu Générateur d'impulsion Diviseur de fréquence pour une horloge moins rapide Fonction Balayage intermittent 1.2.1) Fonction 1: Balayage Unique: Il s'agit de la fonction principale de notre projet. Cette fonction génère à chaque impulsion sur une entrée "balay" 4 signaux de sortie reliés directement à la plaque de commande en puissance et déclenche alors un aller-retour du balai de l'essuie glasses. BIENKOWSKI & BEN ALAYA 8 COMMANDE POUR UN MOTEUR PAS À PAS 27/04/06 Cet aller-retour est composé de 24 pas, 12 pour l'aller et 12 pour le retour. Ces signaux sont codés par 4 équations (théoriques) pour les 4 sorties: T2 & T3 ne sont pas exactement les opposés de T1 & T4 mais on a du faire des modifications pour que touts les sorties soient à 0 quand il y'a pas de courant ou lorsque le balayage est fini (CF schéma suivant). Sur MAXPlusII on a le schéma ci-dessous pour les phases T1 à T4 du moteur : BIENKOWSKI & BEN ALAYA 9 COMMANDE POUR UN MOTEUR PAS À PAS 27/04/06 On insère ce circuit logique dans le schéma global de la fonction balayage unique et on l'associe à un compteur 5 bits (LPM counter) pour assurer l'enchaînement des pas du moteur et définir leur sens. D'où le schéma global: Le chronogramme obtenu en simulant de cette fonction témoigne de son bon fonctionnement : Sorties vers la puissance … … qui dépendent des états du compteur. BIENKOWSKI & BEN ALAYA 10 COMMANDE POUR UN MOTEUR PAS À PAS 27/04/06 Hmodif est l'horloge définie par le mode de fonctionnement choisi par l'utilisateur selon que le balayage est lent ou rapide. Comme tous les éléments de notre FPGA doivent être synchrones, Hmodif est injectée, quand il y en a besoin, à une entrée "clock enable" qui assure le fonctionnement des composants à une vitesse autre que l'horloge du programme. 1.2.2) Balayage intermittent: Cette fonction permet à l'utilisateur de définir un temps d'attente qu'il choisit lui-même et qui ne dépasse pas les 5s. La programmation de cette fonction était particulièrement compliquée vu qu'il faut qu'elle dépende des sorties du balayage unique. En effet, la période d'attente doit se déclencher après que le balayage soit fini. On a conçu une entrée "valid" qui fournit cette information à notre fonction, la simulation montrera le point délicat concernant l'effet de ce signal sur le déroulement des étapes. Schéma de la fonction Intermittent: Simulation pour une attente entre balayage inférieure à 5s: BIENKOWSKI & BEN ALAYA 11 COMMANDE POUR UN MOTEUR PAS À PAS 27/04/06 Deux appuis successifs sur "a" définissent le temps intermittent Période entre deux balayages égale au temps entre 2 fronts sur "a" défini par l'utilisateur Pour une période entre 2 appuis sur "a" supérieure à 5s on a: Fin balayage 5 secondes Ici on voit que les 5s ne sont pas conditionnées par la fin du balayage. On a conçu en fait un générateur d'impulsion de période 5s dans le cas où le temps défini par l'utilisateur excède celle-ci. Ceci est dû à ce que le compteur qui génère ces 5s ne reçoit pas l'impulsion "valid" définie plus haut. Cette dernière n'agit que sur le deuxième compteur (générateur d'impulsions inférieures à 5s). BIENKOWSKI & BEN ALAYA 12 COMMANDE POUR UN MOTEUR PAS À PAS III- 27/04/06 RÉALISATION PRATIQUE ET MESURES 1) La plaque d’alimentation des phases du moteur Ça a été notre première étape, avoir une plaque d’alimentation adaptée pour faire fonctionner le moteur. Elle devait laisser passer le courant sur des phases particulières (P1, P2, P3 ou P4), en fonction de la tension (0V ou 5V) qu’on appliquerait à la grille de chacun des transistors de commande utilisés (les IRF530). De plus, elle devait indiquer une phase "active" par l’allumage d’une diode correspondant. Nous avons vérifié ces deux pré-requis sur la plaque qui nous a servi pour la démonstration et effectué des mesures de consommation électrique. Voici les résultats obtenus : - Les différentes phases du moteur consomment chacune 190mA en fonctionnement sous 12V. C’est un peu plus que la valeur spécifiée par le constructeur (175mA), mais toujours en deçà des capacités des transistors (10A). - La consommation des diodes de contrôle a été fixée grâce à des résistances de 380Ω. Seule la tension Drain / Source des transistors serait susceptible de la modifier. La mesure du courant traversant une diode nous donne une valeur de 21mA, ce qui correspond à la valeur nominale d’une diode. Dans la pratique, nous avons dû faire attention aux problèmes de masse flottante, puisque les connexions T1 à T4 étaient "en l’air" au lieu du 0V lorsqu’elles ne sont pas branchées sur la carte du FPGA. Le branchement direct de ces connexions sur la carte du FPGA régla ce problème. 2) La plaque de commande et d’horloge C’est la plaque qui symbolise la commande utilisateur. Dans la réalité elle se présenterait sans l’horloge (qui serait intégrée à la plaque du FPGA) et sous la forme d’une extension située sous le volant d’une voiture par exemple. Nous y avons donc intégré 1 bouton reset (ce n’est qu’une plaque d’essai), 1 bouton simple "a" qui sert à commander le balayage intermittent, et 4 interrupteurs qui sélectionnent le mode de fonctionnement du montage (balayage unique, lent, rapide…). Il aurait certes été préférable d’utiliser un sélecteur 4 position, mais l’atelier n’en disposait pas. Concernant ces problèmes de masse flottante qui ont été évoqués plus haut, nous les avons ici retrouvés au niveau des interrupteurs. En reliant tout simplement à la masse avec une résistance de 10kΩ les sorties des interrupteurs, on avait un vrai 0V. Par contre quid de la consommation ? Car en reliant à la masse via une résistance, on y fait passer un courant de 5/10000 = 500µA (puisque le FPGA dispose à ses entrées d’une impédance infinie en théorie). Ce courant est négligeable (encore plus si on augmente la résistance). Quand à l’horloge, elle est câblée comme dans la théorie et remplit parfaitement son rôle. Les mesures à l’oscilloscope montrent certes un rapport cyclique différent de 50%, mais comme le FPGA ne se déclenche que sur les fronts, il importe juste que la fréquence soit de 12Hz (ce qui est le cas). Voici les mesures effectuées à l’oscilloscope électronique pour cette horloge : BIENKOWSKI & BEN ALAYA 13 COMMANDE POUR UN MOTEUR PAS À PAS 27/04/06 3) La plaque FPGA Nous avons utilisé tout au long de notre projet la plaque disponible qui intègre un connecteur pour la programmation, des plots d’alimentation et de masse, et où toutes les entrées/sorties du FPGA sont accessibles. L’horloge étant différente de l’horloge de base, nous avons branché la nôtre sur le plot prévu (patte 43). Les tests effectués (mesure de la durée d’un balayement) montrent que le FPGA fonctionne bien à cette fréquence. Nous n’avons pas rencontré de difficultés particulières pour programmer le FPGA ; par contre le fonctionnement de cette plaque nous a paru défaillant dans le sens où lorsqu’il était alimenté en 5V, le FPGA n’offrait en sortie qu’un niveau de 3V voire moins. Ce niveau n’étant pas suffisant pour amener les NMOS à devenir passants, notre montage global a présenté des défauts de fonctionnement (les diodes de contrôle ne s’allumaient pas et le moteur avait du mal à bouger). En augmentant la tension d’alimentation (jusqu’à 6V), nous avons réussi a avoir un comportement à peu près correct (des allers / retours ponctuels), mais jamais notre carte n’a montré un comportement suffisamment stable pour être exploitée sur le long terme. Devant ce constat, nous avons décidé de monter des résistances entre les sorties du FPGA et la masse, de peur d’avoir ici aussi affaire à des masses flottantes. Si le montage de ces résistances a amélioré le comportement de la maquette, il n’a pas résolu les problèmes des allers / retours qui ne se faisaient pas entièrement. Dans les simulations sur MaxPlus+II, le FPGA ne montre aucun disfonctionnement, ce qui suggère : - soit un problème interne au FPGA qui nous a été alloué (nous n’avons pas pu le vérifier car il ne restait pas de FPGA disponible à ce moment là), - soit un problème de conception au niveau de la sortie, et de la prise en charge des ordres du FPGA par la carte d’alimentation du moteur. Nous avons réalisé une plaque où tout est intégré (une plaque regroupant alimentation, commande, horloge et FPGA), mais nous avons manqué de temps pour la tester. Voici pour informations le schéma électrique de la plaque citée ci-dessus, qui regroupe l’ensemble du dispositif : BIENKOWSKI & BEN ALAYA 14 COMMANDE POUR UN MOTEUR PAS À PAS 27/04/06 Programmation Alimentation Contrôle Utilisateur Partie Horloge BIENKOWSKI & BEN ALAYA 15 COMMANDE POUR UN MOTEUR PAS À PAS IV- 27/04/06 Conclusion BIENKOWSKI & BEN ALAYA 16