اﻟﺟﻣـﮭورﯾــﺔ اﻟﺟزاﺋرﯾــﺔ اﻟدﯾﻣﻘراطﯾــﺔ اﻟﺷﻌﺑﯾــﺔ REPUBLIQUE ALGERIENNE DEMOCRATIQUE ET POPULAIRE وزارة اﻟﺗﻌﻠﯾــم اﻟﻌﺎﻟــﻲ و اﻟﺑﺣــث اﻟﻌﻠﻣـﻲ MINISTERE DE L’ENSEIGNEMENT SUPERIEUR ET DE LA RECHERCHE SCIENTIFIQUE 1 ﺟﺎﻣﻌـــــــﺔ ﻗﺳﻧطﯾﻧـــــــــﺔ UNIVERSITE CONSTANTINE I ﻛﻠـﯾــﺔ ﻋﻠوم اﻟﺗﻛﻧوﻟوﺟﯾﺎ FACULTE DES SCIENCES DE LA TECHNOLOGIE DEPARTEMENT : ELECTROTECHNIQUE اﻟﻛﺗروﺗﻘﻧﻲ: ﻗﺴﻢ ……………………………………………………………………….…………………………………………………………… … N° d’ordre : …. Série : …. Mémoire Présenté en vue de l’obtention du Diplôme de Master en Electrotechnique Option Electrotechnique Thème DECODEUR DE VITESSE A L’AIDE D’ARDUINO Présenté par: BOUCHOUKH FAYSSAL Encadreur: DR. MEHAZZEM FATEH Promotion 2013/2014 Dédicace A ma très chère mère. A mon très cher père. A mes frères et à mes sœurs. A tous mes amis, surtout Amine, Abderrahim Djeddi, Najib, Boubaker. A tous ceux qui ont partagé mes tous les beaux moments pendant cinq ans. Je dédie ce mémoire Fayssal i Remerciements Avant tout nous remercions ALLAH le tout puissant qui nous a donné La force et la volonté pour qu’on puisse accomplir ce travail. Après, j'adressé mes vifs remerciements à : Mr A. Khezzar chef de laboratoire D’Electrotechnique de Constantine (LEC), qui m’aider et suivi l’élaboration de ce mémoire. Il est toujours disponible pour répondre à mes questions. Tout mon respect et ma profonde reconnaissance. Nous remercions particulièrement notre encadreur Dr F. Mehazzem, pour son dévouement exceptionnel, sa précieuse directive et son suivi constant. Nous tenons également à remercier le président et les membres du jury pour nous avoir fait l’honneur d’évaluer ce travail. Que tous les professeurs ayant contribué à notre formation trouvent ici notre profonde reconnaissance. ii Sommaire Dédicace ………….…………………..………………………...................................................................................i Remerciements ………………………………………………………………………………………….……………….…….ii Liste des figures et tableaux …...…………………………………………………………………..iii Introduction générale …………………………………………………….…………………………1 CHAPITRE I Présentation d’une carte arduino I.1. Introduction ………………………...…………………………..…………….……...4 I.2. L’arduino UNO ………………………….………………………………………….………4 I.2.1. Dimensions et organisation ……………………….……………………………...……5 I.2.2. Alimentation …………………………………………………….……………….........5 I.2.3 Mémoire ……………………………………………………………………….……….6 I.2.2. Horloge ……………………….………………………………………...…..……..7 I.2.3.2. Entrées et sorties ………………….…………………………………….……...….7 I.2.4. Communication ……………………………………………………………....………..8 I.2.5. Programmation ………………………………………………………………….……..9 I.2.5.1. Reset automatique ….………………………………………………………...……9 I.2.5.2. Protection de surintensité USB ….…………………………………………...……9 I.3. Présentation de l’Espace de développement Intégré (EDI) Arduino ………………...…...…9 I.3.1. Description de la barre des boutons …………………………………………….........11 I.3.2. Description de la structure d’un programme ……………………………...………....11 I.4. Conclusion ………………………………………………………….……………...….…..12 CHAPITRE II Capteur de Vitesse II.1. Introduction …………………………………………………………………...……..……14 II.2. Le codeur incrémental ……………….…………………………………………………...14 II.2.1. Principe du codeur incrémental ………………….……………………….……….……15 II.2.2. Caractéristique principales d'un codeur incrémental ……………….….…....................16 iii II.2.3 Raccordement d’un codeur incrémental …………………………..…………..…..…….16 II.2.3.1. A une moteur électrique ………….……………………………...……………….16 II.2.3.2. A une carte arduino ..……………………………………………………...…..….17 II.2.4. Calcul de la fréquence de sortie (f) des impulsions du codeur …………......………….17 II.2.5. Les principaux avantages et inconvénients de codeur incrémental …………...……….18 II.2.5.1. Les avantages …………………………..…………………………………………18 II.2.5.2. Les Inconvénients ………….………………………………………………..……18 II.2.6. Principaux types d’unités de traitement utilisées dans l’industrie et le codeur qui leur sont généralement associés ……………………………………………………………....….19 II.3. Carte Dspace 1104 ………………………………………………………….…………....19 II.3.1. Présentation …………………………………………………………….……….......19 II.3.2. Processeur Maitre PPC ……………….……………………….…………...…….....20 II.3.3. Processeur esclave DSP …………………………….………………….……...……20 II.3.4. Contrôleur d’interruption ………………………..…………………….……...…….20 II.3.5. Mémoires ………………………………………………………………….…...…...21 II.3.6. Temporisateurs ………………………………………………………………….…..21 II.4. Conclusion ..…………………..…………………………………….…….……………...21 CHAPITRE III Partie expérimentale III.1. Introduction ………………………………………………………………………...……23 III.2. Présentation du banc d’essai …………………………………………………………….23 III.3. Rôle des différentes parties de la chaine d’acquisition ..………...……………………...24 III.3.1. Carte Dspace ………………………………………………………………...……..24 Présentation de dSPACE ControlDesk …………………….……………..………24 III.3.2. Carte Arduino.. ……………………………………………….…………….………26 Algorithme du prétraitement………...…………………………………………….28 III.3.3. Les résultats obtenus …………………….………………………........….….……..28 Commentaires sur les résultats ……………………………………………………29 III.4. Conclusion ……………………………………………...……………………………….30 Conclusion générale ……………………………………………………….……...………………31 Bibliographe ………………………………………………………………………………………32 iii Liste des figures et tableaux Figure I.1 : Résumé des caractéristiques de la carte Arduino Uno………………………..……….4 Figure I.2 : Interface de carte Arduino Uno…………………………………………….…...……..5 Figure I.3 : Communication vers l’ordinateur……………………………………….………..……8 Figure I.4 : espace de développement intégré……………………………………………...…..…10 Figure I.5 : la structure d’un programme……………………………………….…………..…..…12 Figure II.1 : Description d’un codeur…………………………………………………...…..…….15 Figure II.2 : Codeur incrémental GI355………………………………………………….…...…..15 Figure II.3 : Le disque rotatif……………………………………………………………………..15 Figure II.4 : Diagrammes de sorties………………………………………………………...…….15 Figure II.5 : Raccordement moteur/codeur……………………………………………………….17 Figure II.6: Raccordement codeur/arduino…………………………………………………….….17 Figure III.1 : Banc d’essai………………………………………………………………….……..23 Figure III.2 : Circuit de communication ………………………………………………......….….23 Figure III.3 : interface de ControlDesk……………………………………………………….......24 Figure III.4 : Control Panel……………………………………………………………………….25 Figure III.5 : model en MATLAB………………………………………………………..……….25 Figure III.6 : Signal A et B d’un codeur…………………………………………………….……26 Figure III.7 : Signal A…………………………..…………………………………………..….…26 Figure III.8 : Algorithme de fonctionnement ……………………………………………..……. 27 Figure III.9 : la vitesse de rotation (dSPACE)……………………………..………………..……27 Figure III.10 : la vitesse de rotation (Arduino)…………………………… …………………..…28 Figure III.11 : Comparaison entre les deux vitesses…………………………………..…….....…28 Tableau II.7 : Différentes unités de traitement utilisées…………………………………...…..…19 iii INTRODUCTION GENERALE Le système Arduino est une plateforme open-source d'électronique programmée qui est basée sur une simple carte à microcontrôleur (de la famille AVR), et un logiciel, véritable environnement de développement intégré, pour écrire, compiler et transférer le programme vers la carte à microcontrôleur. Arduino peut être utilisé pour développer des objets interactifs, pouvant recevoir des entrées d'une grande variété d'interrupteurs ou de capteurs, et pouvant contrôler une grande variété de lumières, moteurs ou toutes autres sorties matérielles. Les projets Arduino peuvent être autonomes, ou bien ils peuvent communiquer avec des logiciels tournant sur votre ordinateur. Les applications dans le domaine d’entrainements des machines électriques à vitesse variable dépendent principalement de la vitesse de rotation. Cette dernière est mesurée grâce à un capteur de vitesse, qui ne nous permet pas souvent d’avoir de bons résultats avec précision. Cela est du principalement aux unités de traitement (dans ce travail, nous allons parler de la carte Dspace) utilisées dans le domaine industriel ou dans la recherche scientifique liée à la mesure de la vitesse. Afin d’améliorer la qualité de cette mesure, nous proposons dans le cadre de ce projet l’utilisation de la carte Arduino, afin de faire un prétraitement avant l’exploitation directe de la mesure issue du capteur de vitesse dans des applications d’entrainements électriques. Ce travail est structuré comme suit : Le premier chapitre, présente des généralités sur la carte Arduino, ainsi qu’une description détaillée de son fonctionnement. Le deuxième chapitre, présente le principe du codeur incrémental et son utilisation dans notre projet. 1 Le troisième chapitre, est consacré à la présentation de la réalisation. Dans un premier temps, nous allons utiliser la carte dspace pour traité les signaux délivrés par le codeur incrémental. Dans un second temps nous allons traiter les mêmes signaux au moyen d’un circuit de communication via la carte Arduino. Enfin, nous terminons ce mémoire par une conclusion générale. 2 Chapitre I Présentation d’une carte Arduino Chapitre I Présentation d’une carte Arduino I.1. Introduction Le système Arduino est une solution simple et abordable pour développer des montages électroniques numériques programmables à base de microcontrôleurs. C’est une plateforme open-source qui est basée sur une simple carte à microcontrôleur (de la famille AVR), et un logiciel, véritable environnement de développement intégré, pour écrire, compiler et transférer le programme vers la carte à microcontrôleur. Arduino peut être utilisé pour développer des applications matérielles industrielles légères ou des objets interactifs (création artistiques par exemple). Les cartes Arduino peuvent recevoir sur les broches d’entrées une très grande variété de capteurs et contrôler sur les broches de sortie une grande variété d’actionneurs (lumières, moteurs ou toutes autres sorties matériels). Les projets Arduino peuvent être autonomes, ou communiquer avec des logiciels sur un ordinateur. Les cartes électroniques peuvent être fabriquées manuellement ou bien être achetées pré assemblées ; le logiciel de développement open-source est téléchargeable gratuitement [1]. I.2. L’arduino UNO Figure I.1 : Résumé des caractéristiques de la carte Arduino Uno Microcontrôleur ATmega328 Tension d'alimentation interne 5V Tension d'alimentation externe 7 à 12V Entrées/sorties numériques 14 dont 6 sorties PWM Entrées analogiques 6 Courant max par broches E/S 40 mA Courant max sur sortie 3,3V 50mA Mémoire Flash 32 Ko Mémoire SRAM 2 Ko mémoire EEPROM 1 Ko Fréquence horloge 16 MHz 4 Chapitre I Présentation d’une carte Arduino I.2.1. Dimensions et organisation Dimensions = 68.6mm x 53.3mm La carte s'interface au PC par l'intermédiaire de sa prise USB. La carte s'alimente par le jack d'alimentation (utilisation autonome) mais peut être alimentée par l'USB (en phase de développement par exemple). Entrées/Sorties digitales 0-13 Bouton Reset Microcontrôleur ATmega328 Connecteur USB Jack d’alimentation externe Broches d’alimentations Entrées/Sorties digitales 14 -19 Entrées analogiques 0-5 5v etI.2 3.3v GND de carte Arduino Uno. Figure : Interface I.2.2. Alimentation La carte Arduino UNO peut être alimentée par l’USB ou par une alimentation externe. La source est sélectionnée automatiquement. La tension d’alimentation extérieure (hors USB) peut venir soit d’un adaptateur AC-DC ou de piles. L’adaptateur peut être connecté grâce à un ‘jack’ de 2.1mm positif au centre. Le raccordement vers un bloc de piles peut utiliser les bornes GND et VIN du connecteur d’alimentation (POWER). La carte peut fonctionner à l’aide d’une tension extérieure de 7 à 12 volts. Les broches (pins) d’alimentation sont les suivantes : VIN : La tension d’entrée positive lorsque la carte Arduino est utilisée avec une source de tension externe (à distinguer du 5V de la connexion USB ou autre source 5V régulée). Vous pouvez alimenter la carte à l’aide de cette broche, ou, si l’alimentation est fournie par le jack d’alimentation, accéder à la tension d’alimentation sur cette broche [3]. 5 Chapitre I Présentation d’une carte Arduino 5V : La tension régulée utilisée pour faire fonctionner le microcontrôleur et les autres composants de la carte (pour info : les circuits électroniques numériques nécessitent une tension d’alimentation parfaitement stable dite « tension régulée » obtenue à l’aide d’un composant appelé un régulateur et qui est intégré à la carte Arduino). Le 5V régulé fourni par cette broche peut donc provenir soit de la tension d’alimentation VIN via le régulateur de la carte, ou bien de la connexion USB (qui fournit du 5V régulé) ou de tout autre source d’alimentation régulée [3]. 3. 3V : Une alimentation de 3.3V fournie par un régulateur 3.3v LP2985 est disponible sur la carte. Ceci est intéressant pour certains circuits externes nécessitant cette tension au lieu du 5V. L’intensité maximale disponible sur cette broche est de 50mA GND : Broche de masse (ou 0V). I.2.3. Mémoire L'ATmega 328 dispose de 32 kilo-octets de mémoire de programme. Cette mémoire est de type Flash, analogue à celle que l'on trouve par exemple dans les clés USB. L'ATmega 328 contient aussi de la mémoire vive ou RAM, analogue dans son principe à la mémoire vive de vos PC, mais en beaucoup plus petite quantité puisque l'on ne dispose ici que de 2 kilo-octets (contre plusieurs Giga octets dans un PC par exemple). Cette mémoire est généralement utilisée pour les variables employées dans les programmes, pour stocker des résultats temporaires lors de calculs, etc. Elle présente la particularité de pouvoir être lue et écrite à tout instant par le microcontrôleur mais elle « oublie » son contenu dès qu'il n'est plus alimenté. L’ATmega 328 dispose également de mémoire EEPROM, acronyme qui signifie mémoire programmable et effaçable électriquement. La taille de cette EEPROM est seulement de 1 kilooctet. Cette mémoire EEPROM est une mémoire dans laquelle le microcontrôleur peut lire à tout instant. Il peut aussi y écrire et effacer son contenu, avec plus de facilité comme dans la mémoire Flash de programme, mais avec moins de facilité que dans la mémoire vive. En contrepartie, et comme c'est le cas pour la mémoire flash de programme, le contenu de l'EEPROM est conservé même lorsqu'elle n'est plus alimentée. C'est donc une mémoire qui sera utilisée pour conserver des données ou des paramètres que l'on doit pouvoir retrouver d'une utilisation à l'autre de l'Arduino [2]. 6 Chapitre I Présentation d’une carte Arduino I.2.3.1. Horloge L’horloge est pilotée par quartz et fonctionne à la fréquence de 16 MHz. Ainsi par exemple, la fonction delay(xxx), qui génère un délai de xxx ms, sait que l'horloge fonctionne à 16 MHz et fait donc automatiquement appel aux instructions nécessaires pour générer le délai que vous avez réellement demandé dans votre programme. I.2.3.2. Entrées et sorties Chacune des 14 broches numériques de la carte Uno peut être utilisée en entrée (input) ou en sortie (output), en utilisant les fonctions pinMode(), digitalWrite(), et digitalRead(). Elles fonctionnent en logique TTL (0V-5V) ; chacune pouvant fournir (source) ou recevoir un courant maximal de 40 mA et dispose si besoin est d’une résistance interne de ‘pull-up’. En outre, certaines broches ont des fonctions spécialisées [3] : Serial : broche 0 (RX) et broche1 (TX). Permet de recevoir (RX) et de transmettre (TX) des données séries TTL. Ces broches sont raccordées à leurs homologues sur le chip Atmega16U2 spécialisé dans la conversion USB-to-TTL série. Interruptions externes 2 et 3 : Ces broches peuvent être configurées pour déclencher une interruption sur une valeur LOW, sur un front montant ou descendant, ou encore sur le changement de valeur. (voir la fonction attachInterrupt() pour des détails). PWM : 3, 5, 6, 9, 10, and 11 : Output 8-bit de PWM avec la fonction analogWrite(). SPI : 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Ces broches fournissent le support de communication SPI en utilisant la ‘librairie’ spécialisée. LED : Il y a une LED repérée L connectée à la broche digitale 13. La carte Uno à 6 broches d’entrée analogiques, A0 à A5, chacune avec 10 bits de résolution (1024 valeurs différentes). Par défaut les mesures sont effectuées de la masse à 5V (valeur de référence), mais il est possible de spécifier la valeur de référence en utilisant la broche VREF et la fonction analogReference(). En outre, certaines broches ont des fonctions spécialisées : I2C : 4 (SDA) and 5 (SCL). Permettent le support du bus I2C (TWI) en utilisant le ‘library’ Wire. 7 Chapitre I Présentation d’une carte Arduino Autres broches sur la carte : AREF : Tension de référence déjà mentionnée. Reset : Permet au niveau bas (LOW de faire un reset du contrôleur. Elle est utilisée typiquement pour monter un bouton ‘reset’ aux cartes additionnelles (‘shields’) bloquant celui de la carte principale. I.2.4. Communication La carte Arduino Uno a de nombreuses possibilités de communications avec l’extérieure. L’Atmega328 possède une communication série UART TTL (5V), grâce aux broches numériques 0 (RX) et 1 (TX). Figure I.3: Communication vers l’ordinateur. Un contrôleur Atmega16U2 sur la carte, gère cette communication série vers l’USB et apparaît comme un port de communication virtuel pour le logiciel sur l’ordinateur. Le firmware de l’16U2 utilise le protocole USB, et aucun driver externe n’est nécessaire. Windows a cependant besoin d’un fichier .inf, à l’installation. Le logiciel Arduino possède un logiciel série (Telnet) intégré permettant l’envoi et la réception de texte. Les DELs RX et TX sur la carte clignoteront pour indiquer la transmission de données vers l’ordinateur. Une librairie ‘SoftwareSerial’ permet la transmission de données série à partie de chacune des broches numériques du Uno. L’Atmega328 supporte le bus I2C (TWI) et le protocole de communication synchrone maîtreesclave SPI. Le logiciel Arduino inclut un ensemble de fonctions pour mettre en œuvre l’un ou l’autre. 8 Chapitre I Présentation d’une carte Arduino I.2.5. Programmation La carte Arduino Uno peut être programmée directement avec « l’Arduino software ». L’Atmega328 sur la carte Uno est pré programmé avec un ‘bootloader’ qui permet de charger le code d’une nouvelle application sans utiliser un programmateur hardware externe. Il communique avec un ordinateur en utilisant le protocole STK500 d’ATMEL. Mais vous pouvez programmer le contrôleur de la carte en utilisant le port ICSP (In-Circuit Serial Programming). Le code source du firmware du contrôleur auxiliaire Atmega16U2 est disponible. I.2.5.1. Reset automatique Toutes les cartes Arduino actuelles sont équipées d'un poussoir de reset manuel. Un appui sur celui-ci permet donc de relancer l'exécution d'un programme si nécessaire, soit parce qu'il s'est « planté » soit tout simplement parce que l'on souhaite le faire repartir de son début. Mais il existe aussi sur les cartes Arduino une autre source de reset. Un reset automatique à la mise sous tension qui permet ainsi au programme contenu en mémoire du microcontrôleur de démarrer automatiquement dès que la carte Arduino est alimentée. I.2.5.2 Protection de surintensité USB La carte Arduino Uno possède une protection par fusible pour le port USB si un courant de plus de 500mA est demandé. La déconnexion durera tant que la source de consommation excessive n’aura pas cessé. I.3. Présentation de l’Espace de développement Intégré (EDI) Arduino Le logiciel Arduino a pour fonctions principales : de pouvoir écrire et compiler des programmes pour la carte Arduino de se connecter avec la carte Arduino pour y transférer les programmes de communiquer avec la carte Arduino Cet espace de développement intégré (EDI) dédié au langage Arduino et à la programmation des cartes Arduino comporte : 9 Chapitre I Présentation d’une carte Arduino Une BARRE DE MENUS comme pour tout logiciel une interface graphique (GUI), Une BARRE DE BOUTONS qui donne un accès direct aux fonctions essentielles du logiciel et fait toute sa simplicité d'utilisation, Un EDITEUR (à coloration syntaxique) pour écrire le code de vos programmes, avec onglets de navigation, Une ZONE DE MESSAGES qui affiche indique l'état des actions en cours, Une CONSOLE TEXTE qui affiche les messages concernant le résultat de la compilation du programme Le logiciel Arduino intègre également : Barre de menus Barre de boutons Onglets des fichiers ouverts Fenêtre d’édition des programmes Zone de messages des actions en cours Console d’affichage des messages de compilation Figure I.4: espace de développement intégré. 10 Chapitre I Présentation d’une carte Arduino Un TERMINAL SERIE (fenêtre séparée) qui permet d'afficher des messages textes reçus de la carte Arduino et d'envoyer des caractères vers la carte Arduino. Cette fonctionnalité permet une mise au point facilitée des programmes, permettant d'afficher sur l'ordinateur l'état de variables, de résultats de calculs ou de conversions analogique-numérique : un élément essentiel pour améliorer, tester et corriger ses programmes. I.3.1. Description de la barre des boutons Vérifier/compiler : Vérifie le code à la recherche d'erreur. Transférer vers la carte : Compile votre code et le transfère vers la carte Arduino. Nouveau : Crée un nouveau code (ouvre une fenêtre d'édition vide) Ouvrir : Ouvre la liste de tous les programmes dans votre "livre de programmes". Cliquer sur l'un des programmes l'ouvre dans la fenêtre courante. Enregistrer : Enregistre votre programme. Moniteur Série : Ouvre la fenêtre du moniteur (ou terminal) série. I.3.2. Description de la structure d’un programme Le langage Arduino est basé sur les langages C/C++. Un programme utilisateur Arduino est une suite d’instructions élémentaires sous forme textuelle, ligne par ligne. La carte lit puis effectue les instructions les unes après les autres, dans l’ordre défini par les lignes de code, comme lors d’une programmation classique. Cette structure se décompose en trois parties : 11 Chapitre I Présentation d’une carte Arduino Définition des constantes et variables globales Directive de compilation ; Define, Include, etc Fonction principale : VOID SETUP() Initialisation des ressources de la carte Configuration des entrées/sorties Définition de la vitesse de fonctionnement du port série, etc. Cette partie ne sera exécutée qu’une seule fois Fonction boucle : VOID LOOP() Description du fonctionnement général du programme Gestion des interactions entre les entrées/sorties Cette partie sera exécutée en boucle La structure d’un programme Arduino Doit toujours comporter les fonctions Setup( ) et loop ( ) Figure I.5: la structure d’un programme. I.4. Conclusion Arduino est un kit de développement et de prototypage très adapté pour une large gamme d’applications dans le domaine de l'électrotechnique. Cela revient à sa facilité d'utilisation, sa grande capacité à traiter l'information, et son faible cout. 12 Chapitre II Capteur de Vitesse Chapitre II Capteur de Vitesse II.1. Introduction Dans le domaine industriel, le positionnement est une information absolument nécessaire. Il ne suffit pas de connaître une position définie par un endroit prédéterminé mais plutôt la position du mobile au moment où cela est nécessaire. Le codeur rotatif est le capteur qui permet d’obtenir une position angulaire dans les machines électriques. Il offre également la possibilité du réglage de la vitesse. Le capteur ou codeur optique rotatif, introduit dans les années 1970, est aujourd’hui très répandu et remplace souvent les génératrices tachymétriques, les résolveurs et les capteurs résistifs. Le codeur optique, le plus répandu, est lié mécaniquement à un arbre qui l’entraîne. Il est constitué d’un système mécanique qui comporte un disque en verre portant des gravures opaques dont l’écartement est fonction du pas angulaire que l’on veut obtenir. Le faisceau lumineux, traversant le disque, est la plupart du temps généré par une diode électroluminescente et le faisceau modulé est capté par une photodiode ou un phototransistor. Le signal électrique recueilli, en signal carré plus facile à traiter. Il existe deux types de capteurs rotatifs : le codeur incrémental et le codeur absolu. II.2 Le codeur incrémental Le codeur incrémental est un générateur d’impulsions, il est destiné au contrôle de déplacement. Il est généralement constitué de trois pistes : deux pistes externes divisées en intervalles d’angles égaux de telle sorte que les signaux carrés obtenus soient déphasés de 90°, ce qui informe sur le sens de rotation du codeur. La troisième piste ne comporte qu’une seule fenêtre transparente dont la durée électrique est de 90°. Ce signal permet de définir un zéro de comptage et une position de référence. La résolution dépend du comptage des fronts. Elle est multipliée par deux en comptant les fronts montants et descendants d’une piste et par quatre en comptant tous les fronts des deux pistes. Le codeur incrémental présente des limites, il est sensible aux coupures de l’alimentation, il en suffit d’une pour que le codeur perde sa position réelle. Il est alors nécessaire de le réinitialiser. Il est sensible aux parasites qui peuvent être comptabilisés comme des impulsions lorsque les signaux complémentaires ne sont pas pris en compte. Une erreur de positionnement peut survenir lorsque la fréquence de comptage est élevée. Enfin, si le codeur ne fonctionne que pour une fraction de tour, cas de mouvements oscillants, le recalage par le top zéro n’est pas possible [4] [5] [6]. 14 Chapitre II Capteur de Vitesse Figure II.1: Description d’un codeur Figure II.2: Codeur incrémental GI355 II.2.1. Principe du codeur incrémental Le disque rotatif comporte au maximum trois pistes. Une ou deux pistes extérieures divisées en n intervalles d'angles égaux, alternativement opaques et transparents. Pour un tour complet de l'axe du codeur, le faisceau lumineux est interrompu n fois et délivre n signaux carrés (A et B) en quadrature. Figure II.3: Le disque rotatif Figure II.4: Diagrammes de sorties 15 Chapitre II Capteur de Vitesse Le déphasage (90° électrique) des signaux (A er B) permet de déterminer le sens de rotation : - Dans un sens, pendant le front montant du signal A, le signal B est au niveau logique zéro. - Dans l'autre sens, pendant le front montant du signal A, le signal B est au niveau logique 1. Le front montant de la voie verte se présente Le front montant de la voie rouge se présente avant celui de la voie rouge. avant celui de la voie verte. La piste extérieure (Z : top zéro) comporte une seule fenêtre transparente et délivre un seul signal par tour. Le signal Z (d'une longueur de T/4 électrique) détermine une position de référence qui permet la réinitialisation à chaque tour. Le comptage-décomptage des impulsions par l'unité de traitement permet de définir la position du mobile. II.2.2. Caractéristiques principales d'un codeur incrémental Nombre de points par tour ou nombre d'impulsions par tour. nombre de voies ou nombre de pistes (exemple: 6 pistes A, B, Z, A inv, B inv, Z inv). tension d'alimentation. vitesse maximale de rotation. II.2.3. Raccordement d’un codeur incrémental II.2.3.1 à un moteur électrique L’axe du codeur est lié mécaniquement à l’arbre de la machine qui l’entraine. Cet axe fait tourner un disque qui lui est solidaire. 16 Chapitre II Capteur de Vitesse Diode électroluminesce nte Disque gradué Phototransistor Traitement de l’information Signal MACHINE ASYNCHRONE Codeur Accouplement Figure II.5: Raccordement moteur/codeur II.2.3.2. à une carte arduino Le raccordement des sorties du codeur aux entrées de la carte arduino. Voie A on peut connaître les caractéristiques de déplacement d’un mobile et voie B permettent de déterminer le sens de rotation. Voie A Codeur Voie B Compteur d’impulsion Calcule des Caractéristique du déplacement Sens de Rotation Vitesse Fréquence Base de temps Carte arduino Figure II.6: Raccordement codeur/arduino II.2.4. Calcul de la fréquence de sortie (f) des impulsions du codeur Pour un codeur incrémental, il est indispensable de calculer la fréquence maximale d'utilisation afin de s'assurer des compatibilités des caractéristiques électriques avec les entrées du système de traitement. Le codeur incrémental fournit deux types de signaux. Les signaux d’incrémentation (A, A inv, B, B inv) et d’initialisation (Z, Z inv) peuvent être exploités. 17 Chapitre II Capteur de Vitesse Signal d’incrémentation (A) : Ce signal carré est généralement de fréquence élevée. La formule de calcul de la fréquence (f en Hz) est : avec : N= vitesse d’utilisation de l’axe entraînant (en tr/mn). et R = résolution souhaitée en période par tour (p/tr). Pour le codeur incrémental GI355 et le moteur asynchrone utilisé dans ce projet : N=1500 tr/mn R=1024 p/tr Donc la fréquence : f = 25600 Hz. II.2.5 Les principaux avantages et inconvénients de codeur incrémental II.2.5.1. Les avantages : Le codeur incrémental est de conception simple (son disque ne comporte que deux pistes) donc plus fiable et moins onéreux. Économique II.2.5.2. Les Inconvénients: II est sensible aux coupures du réseau : chaque coupure du courant peut faire perdre la position réelle du mobile à l'unité de traitement. Il faudra alors procéder à la réinitialisation du système automatisé. Il est sensible aux parasites en ligne, un parasite peut être comptabilisé par le système de traitement comme une impulsion délivrée par le codeur. Les fréquences des signaux A et B étant généralement élevées, il faudra vérifier que le système de traitement est assez rapide pour prendre en compte tous les incréments (impulsions) délivrés par le codeur. Le non comptage d’une impulsion induit une erreur de position qui ne peut être corrigée que par la lecture du « top zéro» [7] [9]. 18 Chapitre II Capteur de Vitesse II.2.6. Principaux types d’unités de traitement utilisées dans l’industrie et le codeur qui leur sont généralement associés [8] Codeur incrémental Fréquence du signal (kHz) < 200 Hz < 40 kHz > 40 kHz Unités de traitement Entrées TOR Cartes de comptage rapide ou cartes d’axes Automates programmables Commandes numériques Micro-ordinateurs Entrées parallèles Cartes spécifiques (la carte arduino) Tableau. II.7 : Différentes unités de traitement utilisées II.3. Carte Dspace 1104 La carte DS1104 joue un rôle principal dans l’étude pour contrôler les machines électriques, pour cela, nous allons donner quelques caractéristiques. II.3.1. Présentation La carte DSPACE assure les aspects logiciels et numériques de la commande, depuis l'acquisition numérique des signaux d'entrées jusqu'aux signaux (MLI/PWM) de commandes des bras de pont (signaux de sorties). La carte DS1104 contenant les éléments suivants [10]: Deux processeurs (Maitre, Esclave). Contrôleurs d’interruption. Des mémoires. Des temporisateurs. Des interfaces. 19 Chapitre II Capteur de Vitesse II.3.2. Processeur Maitre PPC L’unité principale de traitement, Motorola MPC8240, se compose : Un noyau Power PC 603 (Horloge interne à 250 MHZ). Un contrôleur d’interruption. Contrôleur synchrone de la mémoire DRAM. Plusieurs temporisateurs. Une interface PCI. Le maitre PPC contrôle les unités entrées/sorties suivantes : Unité de ADC (Analog Digital Converter) : comportant (8) convertisseurs analogique / numérique (4 en 16bits, 4 en 12 bits). Unité de DAC (Digital AnalogConverter) : comportant (8) convertisseurs numérique/ analogique (16 bits). Unité entrée / sortie numérique (20 bits). Interface d’encodeur incrémental. Interface série. II.3.3. Processeur esclave DSP Se compose un DSP (Digital Signal Processor), processeur TMS 320F240 de Texas instruments, ses caractéristiques principales sont : Fonctionnement à 25 MHz. Une mémoire utilisée pour la communication avec le maitre PPC. L’esclave DSP fournit les dispositifs entrées/sorties suivants : Unité entrée /sortie numérique de synchronisation : qui permet de générer et mesurer des signaux PWM (Pulse Width Modulation) et des signaux carrés. Unité entrée /sortie numérique. Interface Périphérique Série (SPI : Serial Peripheral Interface). II.3.4. Contrôleur d’interruption Le processeur ne peut pas traiter plusieurs informations à la fois, mais grâce aux interruptions Le processeur peut exécuter ou suspendre un programme donné selon la priorité des Interruption. 20 Chapitre II Capteur de Vitesse II.3.5. Mémoires La carte DS1104 est équipée de deux mémoires : Mémoire Global. Mémoire Flash. II.3.6. Temporisateurs Un temporisateur (Timer) est un circuit logique qui permet d’effectuer du comptage de Temps, pour la génération de signaux. La carte DS1104 est équipée de 6 temporisateurs, ils sont pilotés par l’horloge. II.4. Conclusion Dans ce chapitre nous avons présenté le mécanisme du codeur incrémental, ses différentes composantes, ses caractéristiques, ainsi que son raccordement au moteur. Nous avons présenté également la chaine d’acquisition qui vient en aval de ce codeur, et qui représente la carte Arduino, ainsi que la carte dspace 1104. 21 Chapitre III Partie expérimentale Chapitre III Partie expérimentale III.1. Introduction Dans ce chapitre, Nous traitons les signaux issus du codeur incrémental via une carte Arduino afin d’extraire la vitesse et le sens de rotation. Un prétraitement est réalisé au niveau de la carte Arduino. Le signal obtenu de cette dernière sera comparé avec le signal obtenu directement du codeur incrémental. Les résultats de cette comparaison seront obtenus via la carte Dspace 1104. III.2. Présentation du banc d’essai Notre banc d’essai est composé d’une machine asynchrone, d’un capteur de vitesse GI355, d’une carte Arduino et des circuits électroniques dédiés pour la communication entre les différents composants (codeur incrémentale, carte arduino, carte Dspace). Moteur asynchrone Codeur incrémental Carte dSPACE Figure III.1 : Banc d’essai 23 Carte arduino Chapitre III Partie expérimentale À la carte dSPACE Figure III.2 : Circuit de communication III.3. Rôle des différentes parties de la chaine d’acquisition III.3.1. Carte Dspace Nous avons choisi de mettre en place une carte Dspace 1104 afin d'offrir une meilleur robustesse. De plus, le contrôleur est entièrement programmable à partir de l’environnement Matlab/Simulink en utilisant des libraires spécifiques. L'entreprise fournit également un logiciel d'interface graphique -ControlDesk- pour commander et superviser le système en temps réel. Présentation de Dspace ControlDesk ControlDesk est un logiciel d’instrumentation et d’expérimentation qui nous permet lors de ce projet de développer des interfaces graphiques pour la commande en temps réel du système géré par le contrôleur Dspace. En effet l’interface développée nous permet à la fois d’envoyer des consignes directement au système et de visualiser les différentes grandeurs mesurées et tout cela en temps réel [10]. 24 Chapitre III Partie expérimentale Figure III. 3 : interface de ControlDesk Carte Dspace contient une entrée privée avec codeur incrémental, en plus du modèle est prêt à gérer des signaux entrants à la carte. Entre d’un codeur incrémental Entre digital pour la carte arduino Figure III.4 : Control Panel 25 Chapitre III Partie expérimentale Modèle prêt pour codeur incrémental Conversion numérique analogique Figure III.5 : model en MATLAB III.3.2. Carte Arduino Comme nous l'avons mentionné plus tôt, Le codeur incrémental fournit deux signaux carrés en quadrature, comme sur la capture ci-dessous : Figure III.6 : Signal A et B d’un codeur 26 Chapitre III Partie expérimentale Nous utilisons une signal A pour déterminer la vitesse du moteur et le signal B pour déterminer le sens de rotation, avant de traiter le signal A et B, On utilise un inverseur pour améliorer la sortie de signal de la capteur. Signal A avant d'utiliser l’inverseur Signal A après d'utiliser l’inverseur Figure III.7 : Signal A Compter le nombre d’impulsions du codeur revient à compter le nombre de fronts montants et descendants des signaux A et B représentés sur l’image ci-dessus. Mais ce n'est pas suffisant pour obtenir des valeurs précises pour la vitesse de rotation du moteur, Donc, en plus de compter le nombre d'impulsions, on a mesuré la période de ce signal, Pour ce faire, la seule méthode viable consiste à brancher les deux signaux (les deux fils sur le codeur utilisé) sur deux entrées « interruption » de la carte Arduino. Les deux autres fils (les fils d’alimentation) seront respectivement branchés sur le 5 V et sur la masse de la carte d’alimentation. Sur une carte Arduino Uno (comme sur un Arduino Mega), il y a deux lignes d’interruption (numérotées 0 et 1), qui correspondent aux broches digitales 2 et 3. L’intérêt d’une ligne d’interruption est qu’elle permet, comme son nom l’indique, d’interrompre le déroulement des calculs sur le microcontrôleur pour effectuer un traitement spécifique, en l’occurrence la mise à jour du compteur d’impulsions et mesure la période, avant de rendre la main à la boucle principale. 27 Chapitre III Partie expérimentale Algorithme du prétraitement Figure III.8 : Algorithme de fonctionnement III.3.3. Les résultats obtenus Figure III.9 : la vitesse de rotation (dSPACE) 28 Chapitre III Partie expérimentale Figure III.10 : la vitesse de rotation (Arduino) Figure III.11 : Comparaison entre les deux vitesses Commentaires sur les résultats La première courbe représente la vitesse de rotation issue directement du codeur incrémental via la carte dSPACE. La vitesse de rotation est variable et présente une bande bruitée. On peut remarquer même après l’utilisation d’un filtrage que la courbe de vitesse manque de précision. 29 Chapitre III Partie expérimentale La deuxième courbe représente la vitesse de rotation après un prétraitement via la carte arduino. La vitesse est constante et précise avec une faible variation, même sous des facteurs externes comme la vibration ou la source d’alimentation. Dans la troisième figure, on représente les deux courbes précédentes dans le même repère. III.4. Conclusion Après avoir présenté le banc d’essais de notre application, ainsi que le rôle des ces différentes parties et les résultats obtenus, on peut conclure que ces résultats ont montrés l’efficacité de l’utilisation de la carte arduino dans l’amélioration de la qualité de mesure de la vitesse par le codeur incrémental. 30 CONCLUSION GENERALE Dans le cadre de ce travail, on a présenté une nouvelle alternative pour le problème de la mauvaise qualité du signal de vitesse issue d’un codeur incrémental et exploité par une carte dspace. Cette alternative repose principalement sur l’utilisation d’une carte Arduino afin d’assurer un prétraitement adéquat. Les résultats expérimentaux ont montrés l’efficacité de cette alternative dans l’amélioration de la qualité du signal du codeur incrémental, qui représente la vitesse d’une machine asynchrone. Ce présent travail peut contribuer par l’amélioration de la qualité de mesure de la vitesse dans différentes applications liées principalement à la commande et au diagnostic des machines électriques. Par cette étude j’ai acquis une expérience qui m’a permis d’approfondir mes connaissances techniques et de me préparer à la vie professionnelle dans le domaine d’électrotechnique. 31 Bibliographie [1] http://www.mon-club-elec.fr [2] http://fr.wikipedia.org/wiki/Arduino [3] http://www.arduino.cc [4] http://stielec.ac-aix-marseille.fr/cours/abati/captvit.htm [5] Bernard Reeb - Positionnement numérique par codeur incrémental - GMP Mulhouse [6] Mr BENGMAIH - Les Capteurs [7] Philippe HOARAU - Le codeur optique Incrémental [8] Nicolas - Capteurs rotatifs [9] Amaury BOURBON Marie JOUBARD - Le codeur incrémental [10] khelifi mustapha, sekour ahmed - Etude de la carte Dspace1104 32