Académique Documents
Professionnel Documents
Culture Documents
Tutoriel La commande de moteurs pas pas l'aide d'outils de saisie de donnes sur PC
1.0 Introduction
l arrive souvent que les processus de saisie de donnes impliquent divers types de commandes d'appareils. Cependant, les logiciels de saisie de donnes les plus courants n'incluent pas de pilotes de commande d'appareils ou de dispositifs en option qui soient polyvalents. L'utilisateur doit alors mettre au point l'interface de commande en fonction de l'application qu'il veut raliser. Cet article dcrit deux mthodes mises au point la Florida Institute of Technology permettant de piloter un moteur pas pas en employant la trousse de saisie de donnes trs connue LabVIEW 5.0 et un port parallle ou un port d'E/S numriques courant d'une carte de saisie de donnes. La premire mthode utilise un port d'E/S numriques d'un module de saisie de donnes SCXI-1200 de la socit National Instrument. L'autre mthode emploie le mme logiciel, mais en compilant le code source externe (en C++), et pilote le moteur partir d'un port parallle. On peut utiliser le code source employ dans la deuxime mthode pour piloter le moteur de faon autonome, sans passer ni par une carte ni par un logiciel de saisie de donnes. Avec l'aide du module de conversion dcrit dans cet article, on peut commander la majorit des moteurs pas pas d'usage courant avec seulement deux fils de signaux numriques et un fil pour la masse.
par
The use of LabVIEW is on the increase in universities and industries especially for data acquisition and process control. Frequently, there is a need to develop LabVIEW application software to work with foreign hardware, like a Slo-Syn stepper motor. Unfortunately, simple and clear procedures to develop motion control routines are not easily available. This paper describes a method developed to control a stepper motor using the LabVIEW 5.0 software and the National Instrument SCXI data acquisition system.
On peut utiliser tout langage de programmation, tel le BASIC ou le C, ou un logiciel de saisie de donnes, avec des E/S numriques, pour piloter le moteur.
LabVIEW est de plus en plus utilis dans les mondes universitaire et industriel, particulirement pour la saisie de donnes et le contrle de procds. Rgulirement, des applications LabVIEW doivent tre dveloppes pour travailler avec du matriel tranger tel un moteur pas--pas Slo-Syn. Malheureusement, il n'existe pas de procdures simples et claires pour dvelopper ces routines de gestion de mouvement. Cet article dcrit une mthode pour contrler un moteur pas--pas en utilisant le logiciel LabVIEW version 5.0 et le systme de saisie de donnes SCXI de National Instrument.
achemin chacune des bobines (un moteur typique compte deux paires de bobines). Les sections qui suivent dcrivent en dtail le cblage, les signaux et le code du programme.
Module de conversion LPT1 LPT2 Moteur pas pas Figure 1: Schma gnral de la commande de positionnement Deux fils de signaux numriques et un fil de masse sont branchs au module de conversion. Un des fils de signaux numriques commande l'avancement et l'autre, le sens de rotation. Le module de conversion capte le signal en provenance du port de communication et le convertit en un squencement de signaux alimentant les bobines du moteur pour le faire avancer. Le signal la sortie du module de conversion est
On a utilis les broches no2 (data 1), no9 (data 8) et no20 (masse) du port LPT1 (378 hexa) pour envoyer les signaux au module de conversion. La broche no2 commande l'avancement du moteur et la broche no9 dtermine son sens de rotation. On doit noter que n'importe quelle combinaison de deux broches entre la no2 et la no9 peut servir commander le moteur. Le tableau 2 donne un exemple de la dsignation des broches du port parallle. On emploie ici la squence suivante. Les tats 1 et 0 (la broche no2 au niveau haut et la broche no9 au niveau bas) initialisent un pas en avant (c'est--dire dans le sens horaire).
IEEE Canadian Review - Summer / t 1999
Les tats 1 et 1 (les broches no2 et no9 au niveau haut) initialisent un pas en arrire (dans le sens anti-horaire). Les tats 0 et 0 (les broches no2 et no9 au niveau bas) suivis par les tats 1-0 ou 1-0 excutent le pas.
De la mme faon, la squence des deux instructions suivantes actionne le moteur d'un pas dans le sens inverse (anti-horaire). La premire instruction inverse le sens de rotation et la deuxime active la bascule et achemine un signal au moteur. _outp(0x378, 255);reprsentation binaire de 255 =1111111 _outp(0x378, 0);reprsentation binaire de 0 =00000000
Ainsi les deux instructions suivantes envoient les signaux au port LPT1 et font avancer le moteur d'un pas (typiquement 1,8 ). Notons que la commande " '_outp( )' " n'est valide qu'en Visual C++ de Microsoft. Les autres compilateurs peuvent employer une commande diffrente. _outp(0x378, 1); reprsentation binaire de 1 = 00000001 _outp(0x378, 0); reprsentation binaire de 0 = 00000000 La premire instruction met le bit 1 au niveau haut, les autres bits (du bit 2 au bit 8) tant au niveau bas. La seconde instruction met tous les bits zro. La squence de ces deux instructions force la bascule changer d'tat, ce qui fait avancer le moteur d'un pas.
Tableau 2: Branchement et dsignation des broches de l'interface parallle un PC d'IBM (Hall, 1991)
No de broche 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Signal STROBE DATA 1 DATA 2 DATA 3 DATA 4 DATA 5 DATA 6 DATA 7 DATA 8 ACKNLG BUSY PE SLCT AOTO FEED XT NC 0V CHASIS GND NC GND - Masse Masse Masse Masse Masse Masse Masse Description du signal Impulsion STROBE lecture des donnes Sens du signal IN/OUT
Ces signaux dsignent respectivement l'information des bits 1 8 des donnes parallles. IN/OUT Chaque signal est au niveau " haut " quand la donne est un " 1 " logique et au niveau " bas " IN/OUT quand la donne est un " 0 " logique. IN/OUT IN/OUT IN/OUT IN/OUT IN/OUT IN/OUT Un niveau " bas " signale que la donne a t reue et que l'imprimante est prte recevoir OUT d'autres donnes. Un niveau " haut " signale que l'imprimante n'est pas en mesure de recevoir des donnes. Un niveau " haut " signale qu'il n'y a plus de papier dans l'imprimante. Ce signal indique que l'imprimante est slectionne. Quand ce signal est " bas ", l'imprimante fait un saut de ligne aprs impression. non utilis Niveau logique 0 Masse de l'imprimante non utilis Masse OUT OUT OUT IN 2
Le moteur pas pas peut galement fonctionner en mode demi-pas (0,9 ). Ce mode ncessite cependant une squence de commutation additionnelle et une circuiterie diffrente du module de conversion. De plus, ce mode rduit le couple de retenue du moteur. Dans le cadre de la prsente application, seul l'incrment plein pas (1,8 ) est utilis.
B H A G
2
SW1
8
SW2
1 7 3 C 5
E D F
4
SW3
6
SW4
Figure 3: Schma des connections des bobines d'un moteur pas pas Le tableau 3 nous indique la squence de commutation requise pour faire avancer le moteur d'un pas. Le pas type est de 1,8 , ce qui implique que 200 pas sont ncessaires pour faire un tour complet, soit une rotation de 360 . Pour actionner le moteur dans le sens inverse, on intervertit la squence de commutation (c'est--dire 4, 3, 2, 1).
+12V
4
10k 10k
14 d 4 6 3
SET
12
1 2 14070
Q
330
14013
K CLR Q
330
s d g
7 d
5 2 8 6 14070
SET
Q
330
s d g
K CLR Q
14013
330
470
470
1000mf
11
Code Interface Node (CIN) " (nud d'interface avec le code) est employe pour lier, destination de LabVIEW [3,4], le code externe crit dans un langage de programmation classique. LabVIEW fait appel au code excutable quand le nud s'excute, transfrant les donnes d'entre partir du corps principal du programme vers le code excutable, et retourne les donnes venant du code excutable vers le corps principal. On peut compiler le code en oprations monothread ou multithread. Seuls les compilateurs suivants peuvent servir crer un CIN. Le compilateur Visual C++ de Microsoft Le compilateur C de Symantec Le compilateur C/386 de Watcom dans l'environnement Windows 3.1
4.
Au dpart, le CIN a une seule paire de bornes (un terminal d'entre et un de sortie). On peut ajouter des bornes en faisant glisser avec la souris le coin infrieur gauche ou droit de l'icne ou en slectionnant la fonction " Add Parameter " partir du menu droulant de la borne CIN (en cliquant avec le bouton droit sur les bornes de paramtres) (figure 6).
Le code externe en C++ charg dans le CIN de LabVIEW est simplifi afin de minimiser les chances de blocage du programme lors de l'excution du code du CIN. Ce code du CIN n'accomplit qu'un pas la fois et retourne au VI de la commande de positionnement. Ce pas quivaut une rotation de 1,8 . Pour raliser une srie de pas, on appelle le CIN le nombre de fois qu'il faut. En insrant la boucle d'attente dans le VI de commande du positionnement, on peut rgler la vitesse des pas suivants. L'inconvnient de cette mthode de commande est que la vitesse du moteur varie avec la vitesse du processeur. Cet tat de chose peut tre amlior en plaant la structure des boucles (selon de nombre de pas excuter) dans le code source en C.
Figure 6 : Icne de CIN avec entres et sorties multiples 5. Brancher les bornes aux panneaux de commande et de voyants (figure 7).
Figure 7 : Icne de CIN avec ses bornes 6. Slectionner " Create .C File " partir du menu droulant (cliquer sur l'icne avec le bouton droit). Le nom que l'on veut donner au fichier sera alors demand (filename.c format). Taper le nom de fichier du code source et l'enregistrer. Ce fichier enregistr renferme le code en C suivant. /* * Fichier source du CIN */ #include "extcode.h" CIN MgErr CINRun(float64 *Input_1, int16 *Input_2, uInt16 *Input_3); CIN MgErr CINRun(float64 *Input_1, int16 *Input_2, uInt16 *Input_3) { /* TAPER VOTRE CODE ICI */ return noErr; }
2. 3.
Il faut prendre note que les tiquettes (c'est--dire Input 1, Output 1, etc.) et leur format de donne (c'est--dire double DBL, entier I6, etc.) crits sur les boutons de commande et sur les voyants deviennent les noms de variables et les format de donnes du code en C. De plus, l'nonc " #include "extcode.h " doit tre le premier fichier d'en-tte. Les fichiers d'en-tte additionnels tel " math.h " et " stdio.h " doivent suivre ce premier fichier
4
VI de commande de moteur par Computer le port parallle de l'ordinateur (LabVIEW 5.0) (LabVIEW 5.0)
Module de conversion
Translation Module
Stepper Motor
Figure 4 : Schma de l'emploi du port parallle pour commander un moteur pas pas 7. Insrer le code en C que vous avez crit dans le code en C gnr par LabVIEW (o il est crit /* TAPER VOTRE CODE ICI */). S'assurer que les noms et les types des variables concordent avec ceux des variables dclares. Par exemple, nous aurions pour le cas prsent : Code en C pour la commande du moteur pas pas /* * Fichier source du CIN */ #include "extcode.h" #include <conio.h> #include <stdio.h> #include <stdlib.h> CIN MgErr CINRun(int16 *var1); CIN MgErr CINRun(int16 *var1) { { _outp(0x378, *var1); _outp(0x378, 0); } return noErr; } 8. Crer un fichier " make " en utilisant un diteur de texte (Notepad, Word, Wordpad, etc.) et l'enregistrer sous le mme nom de fichier que le code source en C, mais avec l'extension .mak. Le fichier " make " doit renfermer les quatre lignes qui suivent. Name = name of C file without extension Type = CIN CINTOOLSDIR = path to cintools directory !include<$(CINTOOLSDIR)\ntlvsb.mak> Par exemple, nous aurions dans le cas prsent : Fichier 'make' pour la commande du moteur pas pas name = step type = CIN cintoolsdir = c:\labview\cintools !include <$(cintoolsdir)\ntlvsb.mak> Le chemin d'accs vers le rpertoire cintools se trouve (sous Windows 95) dans " C:\ProgramFiles\National Instruments\LabVIEW\Cintools ". 9. Avant de compiler le code source, s'assurer que le code source en C et le fichier " make " se trouvent dans le mme rpertoire (sinon le compilateur gnrera un ficher .exe au lieu d'un fichier .lsb). le fichier est ouvert, le programme affiche deux botes de dialogue avec mise en garde. Le premier message dit : " Ce fichier " make " n'a pas t gnr par Developer Studio ". la question " Souhaitez-vous poursuivre? ", rpondre " Oui ". Puis la seconde bote de dialogue propose le type d'environnement dans lequel on veut fonctionner (le choix propos par dfaut est Win32). S'assurer que Win32 est slectionn et cliquer sur "OK". 11. Slectionner " Build filename.exe file " partir du menu droulant en Visual C++ de Microsoft. Le programme excute les instructions contenues dans le fichier " make " et cre le fichier filename.lsb au lieu de filename.exe. Si le fichier .lsb est gnr sans erreur, la fentre d'tat met le rapport suivant : ------------ Configuration: Filename - Win 32 Debug -----------Microsoft (R) Program Maintenance Utility version 1.62.7022 Copyright (C) Microsoft Corp 1988-1997. All rights reserved. filename.c Microsoft (R) 32-Bit Incremental Linker Version 5.00.7022 Copyright (C) Microsoft Corp 1992-1997. All rights reserved. LabVIEW resource file, type 'CIN', name 'filename.lsb', created properly. Filename.exe - 0 erreur(s), 0 mise(s) en garde
o filename est le nom du code source en C ou du fichier " make " compil. Le fichier .lsb doit se trouver dans le rpertoire o se trouve le code source en C et les fichiers " make ". 12. partir du schma du VI LabVIEW, (tape 3), cliquer avec le bouton droit sur l'icne du CIN et slectionner " Load Code Resources " (Charger les ressources du code). La bote de dialogue affiche le chemin d'accs aux fichiers .lsb que vous voulez charger. Slectionner le fichier et cliquer sur " Open ". 13. Le code source est maintenant charg l'intrieur de l'icne du CIN et est prt excuter la tche. Une fois le code charg, il deviendra une icne autonome et excutable, c'est--dire qu'il n'aura pas besoin d'un code source en C ou d'un fichier " make ". Quand ce VI est enregistr (avec son icne de CIN) il peut tre appel partir d'autres VI. Un sous-VI LabVIEW, appel Commande de Moteur.vi est maintenant prt piloter le moteur pas pas par l'intermdiaire d'un port parallle. La figure 8 nous prsente son schma du panneau de commande et son schma-bloc.
10. Ouvrir le fichier " make " dans le Visual C++ de Microsoft. Quand
Un sous VI LabVIEW, appel DIO Motor Control (one step).vi (Commande de moteur par E/S numriques [pas unitaire]) a t conu pour piloter un moteur pas pas. La figure 10 nous prsente son schma de panneau de commande et son schma-bloc.
5.0 Sommaire
Cet article traite des mthodes de commande d'un moteur pas pas par l'intermdiaire d'un port parallle et du module SCXI de la socit National Instrument. L'utilisation du module de conversion, qui y est dcrit, permet de piloter un moteur pas pas en se servant de langages de programmation ou de logiciels de saisie de donnes classiques. Il s'agit d'une faon conomique d'laborer un prototype de systme de commande/saisie de donnes. De plus, le logiciel de saisie de donnes, qui est capable de compiler des codes de programmation classiques (tel le Code Interface Node [CIN] de LabVIEW), permet d'incorporer la routine de commande de positionnement dans la fonction de saisie de donnes. La procdure est explique ici en dtail pour la routine de commande crite en C++. On peut appliquer cette procdure n'importe quelle routine de commande de positionnement, comme le dplacement d'une sonde, la rotation d'un modle, etc.
6.0 Remerciements
Les auteurs sont trs reconnaissants M. Dan Simpson de son assistance dans le laboratoire.
7.0 Rfrences
[1]. Hall, Douglas V., "Microprocessors and Interfacing: Programming and Hardware", McGraw-Hill, 2e diton, 1991. [2]. National Instruments, "LabView Code Interface Reference Manual", National Instruments, dition de janvier 1998, no de pice 320539D-01. [3]. National Instruments, "LabView User Manuel", National Instruments, dition de janvier 1998, no de pice 320999D-01. [4]. National Instruments, "C Programming Reference Manual", National Instruments, dition de janvier 1998, no de pice 321296B-01.
DIO Port = Port d'E/S numriques DGND = Masse des signaux numriques
DIO Port PA-0 PA-7 DGND
Module de
Translation Module conversion
SCXI 1200
Figure 9: Schma montrant l'emploi du SCXI-1200 pour commander un moteur pas pas
True Rotation
- Vrai - Rotation
digital device (1) digital channel Mode (T: Free Step) Motor Speed (40) task ID out
= appareil numrique (1) = canal numrique = Mode (T: avancement libre) = Vitesse du moteur (40) = sortie d'identification de la
Panneau de commande
digital device Motor Speed (40) Rotation digital channel task ID out port width (8) Mode (T: Free Step) Angle On: Free Step = dispositif numrique = Vitesse du moteur (40) = Rotation = canal numrique = sortie d'identification de la tche = Nbre de bits du port = Mode (T: avancement libre) = Angle = En: avancement libre
Figure 10: Panneau de commande et schma-bloc de la sous-VI LabVIEW pour la commande par SCXI de moteur pas pas