- Démarrer le logiciel « Labview» .
- Ouvir un nouveau VI (Virtuel Instrument) vide.
Deux fenêtres vierges apparaissent à l’écran : une face avant (de fond gris) et un diagramme (de fond blanc) .
Nota: Pour passer d'une fenêtre à l'autre , utiliser le raccourci clavier "ctrl + E" .
Un clic droit de souris sur chaque fenêtre permet de faire apparaître les outils graphiques nécessaires à la description de celles-ci.
Chacune de ces fenêtres est composée de :
• une barre de titre, contenant le titre du VI. L’extension Diagramme indique que la fenêtre considérée est le diagramme. La fenêtre dont la barre de titre est en caractère gras indique que celle-ci a le contrôle, c’est à dire que c’est à elle que s’adressent les informations provenant du clavier ou de la souris. On donne le contrôle à une fenêtre en cliquant sur cette fenêtre.
• une barre de menus déroulants. Ceux-ci permettent de gérer la sauvegarde des programmes, de gérer les différentes fenêtres, etc.
• une barre d'outils d'exécution/édition (cf. figure ci dessous). Celle-ci se retrouve dans chacune des fenêtres et permet de lancer l'exécution d'un VI, de l'arrêter, etc.. Cependant on ne retrouve les icônes de déboggage que dans la fenêtre diagramme.
Nota: Les fenêtres de LabVIEW sont généralement des fenêtres fugitives, c’est à dire qu’elle n’existent que le temps de la manipulation désirée. Cependant on peut rendre leur affichage permanent en cliquant sur la punaise qui se trouve en haut à gauche de ces fenêtres.
Les clics droits sur les deux fenêtres précédentes permettent de faire apparaître les menus de création, à savoir :
La face avant
Le diagramme
Réalisation d'un programme effectuant la somme :
Faire apparaître l'aide contextuelle par un "ctrl + H".
Après un clic droit sur la la face avant :
- Cliquer sur commandes numériques puis placer (en les faisant glisser) deux commandes numériques
- Cliquer sur indicateurs numériques puis placer (en le faisant glisser) un indicateur numérique.
- Double cliquer sur les noms "Numérique i" pour les changer en "a", "b" et "c=a+b"
Après un "ctrl + E" et un clic droit sur le diagramme :
- Cliquer sur Mathématique / numérique
puis placer un opérateur additionner
entre les deux icônes de commande a, b et l'icône de l'indicateur (résultat) c= a+ b.
- Placer votre souris sur le côté droit des icônes de commande, puis cliquer gauche à l'apparition de la bobine de fil, et relier ces icônes sur les deux entrées du noeud additionner. Faire de même entre la sortie de ce noeud et l'indicateur c = a+ b .
La face avant
Le diagramme
Si nous souhaitons que le calcul se fasse toujours pour différentes valeurs de a et b, et pas seulement une fois au démarrage du programme, il est primordial de placer ce programme graphique dans une boucle "tant que". Ainsi, il se fera jusqu'à ce que nous lui donnions une commande "stop"
Après un clic droit sur le diagramme :
- Cliquer sur programmation / structures
puis sélectionner Boucle While
et définir (à l'aide dela souris) un cadre englobant la totalité des éléments se trouvant sur le diagramme.
La boucle s'exécute jusqu'à que la condition booléenne stop
soit vraie . On va donc rajouter une commande Stop
sur la face avant. Pour cela:
- Placer la souris près de l'icône
et faire un clic droit . Sélectionner 'Créer une commande'. Un bouton de commande booléen apparaît et se câble directement au bouton indicateur stop .
- Revenir sur la face avant pour vérifier l'ajout de la commande stop .
La face avant
Le diagramme
Pour information, ci-dessous vous avez la légende du code couleur utilisé pour les différents traits du diagramme :
Exécution du programme effectuant la somme :
- Sur la face avant, lancer le programme
et simuler son bon déroulement en plaçant des nombres dans les cases correspondantes aux commandes a et b .
Les structures sont des noeuds qui contrôlent le flux d'exécution d'un diagramme comme les structures de contrôle le font dans un langage conventionnel de programmation. L'icône de chacune des structures LabVIEW est une boîte redimensionnable entourée d'une bordure distinctive
De manière à expliquer l'intérêt de chaque structure, les exemples d'illustration de chaque structure qui vont suivre , utilisent des boutons placés sur la face avant . Ces boutons peuvent être paramétrés de manière à obtenir des comportements différents mécaniquement et électriquement ( transmission de la valeur booléenne ) . Pour tester ces comportements :
- Placer un bouton rectangulaire sur une face avant ainsi qu'une led
( voyant ) . Cabler sur le diagramme ces deux éléments ensemble . Revenir sur la face avant et par un clic droit sur le bouton rectangulaire , sélectionner dans les fenêtres qui apparaîssent Propriétés puis l'onglet Opération . Tester après sélection du fonctionnement continu :
les differents comportements ( mécanique et variable ) du bouton .
Commentaires et Algorithme du programme |
||
While
'Tant que' |
|
|
![]() |
||
Séquence
|
|
|
![]() |
||
Boucle condition
|
|
|
![]() |
||
For
|
|
|
![]() |
||
Evènement
|
|
|
![]() |
Création d'un programme Labview permettant de gérer l'affichage de la rotation d'un potentiomètre
En application directe de ce chapitre sur les structures , il s'agit de créer un programme permettant d'afficher la rotation d'un potentiomètre
sur l'écran du PC ( en degrés ). Ce potentiomètre sera connecté au port Ai 0 du boitier DAQ NI 6009 et sera alimenté à 5V par ce même boitier.
L'utilisation d'un boitier DAQ nécessite d'utiliser les fonctions DAQmx présentes dans le menu suivant du diagramme ( clic droit) :
L'architecture du programme de base pour dialoguer avec le boitier DAQ est le suivant:
Il faut bien-sûr adapter ce programme à chaque cas de figure . Dans le cas de notre potentiomètre l'entrée est analogique, ainsi que son traitement . Lors de la création de la voie analogique de lecture du potentiomètre ,
il faut sélectionner le mode RSE
![]()
- A partir des explications précédentes , créer un programme permettant d'afficher la rotation en degrés du potentiomètre .
- Câbler le boitier NI 6009 à l'ordinateur ainsi que le potentiomètre sur les ports appropriés . Vérifier la bonne marche de votre programme
Nota: Dans ce programme, il n'est pas défini de base de temps . Le temps d'exécution de la boucle est inconnu .
Notions de base sur les tableaux
Un tableau est une collection ordonnée d'objets de même type. Il peut être à une (tableau 1D) ou à plusieurs dimensions (tableau ND) et contenir jusqu'à
objets par dimension dans la limite de la mémoire disponible. Dans LabVIEW, les tableaux peuvent être de tout type excepté des tableaux de tableaux, des tableaux de graphes ou des tableaux de graphes déroulants. Chaque objet du tableau est accédé par son ou ses indices. Pour les tableaux 1D, cet indice est compris entre 0 et N-1, N étant le nombre d'objets contenus dans le tableau ou encore sa taille ou sa longueur.
![]() |
Pour les tableaux 2D, chaque objet est accédé par deux indices : son indice de ligne compris entre 0 et N-1, N étant le nombre de lignes du tableau et son indice de colonnes compris entre 0 et M-1, M étant le nombre de colonnes du tableau.
Exemple de création d'un tableau 2D
Création de tableau
- Faites un clic droit sur la face avant et selectionner le menu Moderne/Tableau,m.../Tableau
- Glisser cette icône sur la face avant .
. A ce stade, on vient de créer le tableau en tant que conteneur
, il faut maintenant préciser le type de données que va contenir le tableau .
- Sélectionner une commande numérique, et faites la glisser à l'intérieur du conteneur tableau
.
Nota: Le tableau en face avant peut contenir des commandes de type booléen comme des interrupteurs ou des LED, voir encore des structures plus complexes comme les waveform
- Saisir les données en étirant le tableau de façon à obtenir 3 lignes et 2 colonnes en exploitant les poignées des 3 zones. Remplir le tableau et changer l'étiquette en tab2D
Faites glisser votre curseur sur la zone 1 en bleu, étirer vers le bas pour obtenir 2 dimensions
Faites de même avec la zone 2 en orange, étirer vers le bas pour obtenir 3 lignes, étirer vers la droite pour obtenir 2 colonnes
La zone 3 (en jaune) règle la taille de chaque élément
Opérations ( fonctions ) sur les tableaux
Fonction taille:
Elle retourne la taille du tableau. Pour un tableau à plusieurs dimensions, elle retourne la taille de chaque dimension; pour un tableau à 1 dimension, elle retourne le nombre d'éléments.
Exemple:
Face avant DiagrammeIl faut bien sûr étirer le tableau tab 1D taille afin de visualiser les 2 éléments que celui-ci contient :
- 3 pour 3 lignes sur l'indice 0 du tableau 1D
- 2 pour 2 colonnes sur l'indice 1 du tableau 1D
Câblez le tableau tab2D ci-dessus à la fonction taille, créez un indicateur à la sortie de la fonction taille et le nommer tab 1D Taille.
A noter sur le diagramme
- le fil double de couleur orange qui identifie un tableau 2D composé de réels
- le fil bleu épais qui identifie un tableau 1D composé d'entiers
Fonction indexer :
Elle permet d'extraire du tableau cablé : 1 dimension pour un tableau 2D ou un élément pour un tableau 1D ou 2D.
Exemple d'extraction d'une ligne du tableau précédent :
Face avant DiagrammeLe résultat obtenu montre bien que l'on a extrait la deuxième ligne
L'aide avancée (ctrl+H) précise que, si l'on donne uniquement un indice pour la ligne d'un tableau 2D, alors l'indice colonne est désactivé, et la fonction retournera un tableau 1D correspondant à toute la ligne n° 1 (qui est la deuxième, puisque l'on numérote à partir de 0)
L'épaisseur du trait montre bien un tableau 2D en entrée, et un tableau 1D en sortie).
Pour extraire un élément sur la ligne 1, colonne 0:
Que donne cette connexion?
Solution
Fonction construire un tableau :
Elle permet de construire un tableau et elle s'étend verticalement de manière à fixer le nombre d'entrées.
Un clic droit sur la partie droite de la fonction permet de définir si la sortie doit on non concaténer les entrées. Concaténer signifie "mettre bout à bout" : quand on concatène un tableau 1D de n éléments avec un scalaire seul, on obtient un tableau avec n+1 éléments, sinon on obtient un tableau 2D avec une ligne de n éléments et une ligne avec un seul élément.
Exemple pour tester différentes combinaisons :
Face avant Diagramme
La première fonction met bout à bout le tableau 1D de n éléments qui comportera en sortie 2n éléments.
La deuxième insère en plus entre les deux un scalaire.
La troisième génère à la sortie un tableau 2D avec 2 lignes de n éléments identiques.
Fonction initialiser :
Lorsqu'un traitement (via une boucle par exemple) va remplir les éléments d'un tableau, il est parfois nécessaire d'initialiser le tableau de façon à le déclarer avant que le traitement ne commence.
La fonction INITIALISER permet en outre de fixer le nombre de dimensions, ou encore de donner à tous les éléments une valeur par défaut.
Exemple sur lequel on initialise un tableau à 2 dimensions, 2 lignes de 3 colonnes avec la valeur 20 :
Face avant DiagrammeExemple sur un registre à décalage avec remplissage d'un tableau par une variable aléatoire
Face avant Diagramme
- Explicitez la création du tableau indicé par
ci-dessous:
Solution
Pour valider les acquis:
- Ouvrir le TP sur les Tableaux / séquence
ainsi que la trame du fichier Labview correspondant :
Notions de base sur les graphiques
Les graphes f(n) ou f(t) ne tracent que des fonctions d'une seule variable dont les points sont régulièrement distribués sur l'axe des abscisses comme des fonctions à base de temps. Les graphes XY sont des objets de graphiques Cartésiens d'usage général, utilisables dans le tracé de fonctions à plusieurs variables telles que les formes circulaires ou les courbes paramétrées. Les deux graphes peuvent afficher n'importe quel nombre de tracés et accepter de nombreux types de données. Cela minimise le nombre de manipulations des données avant leur affichage
Graphe de type f(n) ou f(t)
Tracé d'une seul graphe:
Les graphes f(n) et f(t) acceptent deux types de données : le tableau 1D de valeurs et le cluster de valeurs.
Exemple du tracé des valeurs d'un tableau en fonction de l'indice :
Face avant Diagramme
LabVIEW interprète les valeurs du tableau 1D comme les ordonnées des points du graphe et incrémente les abscisses (en commençant en x = 0) de 1
Il est possible de tracer l'évolution d'une variable, non pas rentrée initialement sous forme de tableau comme dans le cas précédent ; mais générée par un programme Labview ou enregistrée par l'intermédiaire d'une carte d'acquisition ( DAQ )
Exemples de génération par Labview:
Axe X : X initial = 0.0, delta X = 1.0 (par défaut)
Le graphe trace l'évolution de la variable aléatoire pour 100 valeurs espacées d'un pas de 1 par défaut ( avec i variant de 0 à 99 par pas de 1 )
Axe X : X initial= 3, delta X = 0.5 (défini par l’utilisateur)
Le graphe trace l'évolution de la variable aléatoire , pour un nombre de valeurs identiques au cas précédent . Dans ce cas, on a toutefois la possibilité ( grâce à l'assemblage d'un cluster ), de fixer la valeur initiale ainsi que le pas entre chaque valeur .
Dans le cas d'une boucle cadencée ( ou boucle possédant un temporisateur
), l'abscisse peut représenter le temps écoulé . On a donc la possibilité de tracer l'évolution d'une variable en fonction du temps : f(t)
Exemples:
Dans les deux cas de figure précédents, il faut attendre la fin de boucle avant de tracer l'évolution de la fonction . On peut remédier à ce problème de la manière suivante:
Il est aussi possible d'afficher plusieurs courbes sur le même graphique:
Tracé multigraphe:
Graphe de type XY
- Modifier les deux programmes précédents de manière à obtenir un tracé en continu et non pas un tracé à la fin des 10 boucles.
Pour valider les acquis:
- Ouvrir le TP sur le tracé d'une tension provenant d'un potentiomètre
![]()
Notions de bases des clusters
Nous allons travailler sur l’exemple d’un cercle pour être concret. Si on veut le tracer, on a besoin des coordonnées de son centre, de son rayon, de sa couleur et savoir s’il est visible. Cela fait 5 variables donc 5 fils, soit beaucoup de connexions pour faire passer ces informations.
Un cluster (qui peut se traduire par grappe en français) est un regroupement de variables, qui ne sont pas forcément du même type. Ainsi on passe d’un ensemble de fils à un seul, comme si on les encapsulait.
![]() ![]() |
![]() |
![]() |
Pour le construire, il suffit de déposer un cluster vide (palette tableau matrice et cluster) sur la face avant, puis de remplir ce cadre avec les variables désirées.
Pour analyser le contenu du cluster, on peut utiliser la fonction désassembler (de la palette cluster et variant), mais dans ce cas l’ordre dans lequel a été construit le cluster est important. Sur l’exemple ci-dessous, on note que le booléen a été placé le premier dans le cluster. On peut modifier cet ordre en faisant un clic droit sur le bord du cadre et en choisissant Ordonner les commandes dans le cluster
![]() |
Cela reste néanmoins peu clair, et il vaut mieux utiliser la fonction désassembler par nom.
![]() |
Pour vous familiariser avec les clusters, a partir du diagramme précédent, placer la fonction assembler et la connecter de la manière suivante:
![]() |
Faites ensuite un clic droit sur la sortie de la fonction assembler et choisissez créer un indicateur. Testez ensuite le programme.
On peut préférer la fonction assembler par nom, mais celle-ci a besoin d’un modèle pour connaître les noms à utiliser. Pour cela, câblez le fil de votre cluster sur la partie supérieure de la fonction assembler par nom. Vous pouvez choisir ensuite choisir les variables destination à utiliser en cliquant d'abord sur la case destination concernée puis sur le nom souhaité qui apparaît en proposition. Testez ces fonctionnalités.
nota: Sur la face avant, la variable couleur peut apparaître sous la forme d'un code numérique dans le cluster ; cercle2 . Pour faire apparaître la couleur , faire un clic droit sur la case correspondante et sélectionner les menus : Remplacer/ Moderne/Numérique /boite de couleur encadrée
![]() |
![]() |
Le fait de devoir recâbler toutes les variables parait lourd. En fait, si vous utilisez la connexion supérieure de la fonction assembler par nom, vous fournissez par défaut les valeurs de cette liaison. Seules les valeurs modifiées manuellement seront changées. Par exemple, les 2 schémas présentés ci-dessous réalisent la même opération : recopie de toutes les valeurs, sauf le booléen qui est inversé.
![]() |
![]() |
Si vous voulez fixer des valeurs par défaut, c’est très simple : faites un clic droit sur la commande cercle et créez une constante. Reliez cette constante au centre de la fonction assembler par nom, et modifiez ensuite uniquement les valeurs qui vous intéressent.
- Réalisez ce programme et expliquez ce qu’il fait :
![]() |
Notion de graphisme
Nous allons maintenant tracer un disque (cercle rempli ). Pour cela, déposer une image sur votre face avant (Moderne-> Palette graphe -> Palette commandes -> image2D). Agrandissez-la suffisamment pour qu’elle soit bien visible ( 10cm x 10cm) . A présent, sur le diagramme, ajoutez dans votre programme la fonction construire un cercle (palette Programmation -> Graphisme et son -> Fonctions sur les images -> Tracer un cercle)
- Faites un clic droit pour créer une constante image vide sur l’entrée correspondante.
- Maintenant, en utilisant l’aide (ctrl-h), complétez votre programme pour qu’il trace un disque dont les caractéristiques sont données par un cluster .
Nota: Attention, les coordonnées du centre de votre disque sont à fournir sous forme de cluster !
- Testez votre programme. Modifiez les valeurs de x , y du rayon, de la couleur.
- Repérer à partir d'essais, l’origine O ainsi que le système d'axes X,Y .
On rajoute maintenant au cluster la commande booléenne « Visible ? » . Le disque ne doit être tracé que si cette variable est vraie .
- Complétez votre programme en conséquence. Quelles sont les structures à rajouter ?
Tableau de cluster
Un seul disque, ce n’est pas suffisant. Vous allez maintenant créer un tableau de cluster de cercles . Procédez comme d’habitude, en plaçant votre cluster dans un tableau vide. Modifiez alors votre programme pour qu’il trace tous les disques du tableau.
Nota: Chaque VI Fonctions sur les images enchaîne ses instructions graphiques aux instructions graphiques câblées à l'entrée image et renvoie les instructions graphiques concaténées dans la sortie nouvelle image.
- Complétez votre programme en conséquence.
- En cliquant sur le lien suivant,
vous pourrez percevoir l'intérêt du travail qui vient d'être effectué et son application possible en robotique:
Présentation des compteurs
Les compteurs reçoivent et fournissent des signaux, de niveau TTL (Transistor-Transistor Logic), sous forme d'impulsions dont les valeurs des niveaux sont 0V pour le niveau bas (Low) et 5V pour le niveau haut (High).
Les compteurs sont conçus en premier lieu pour compter les transitions (front : edge) d'un signal source TTL . On peut cependant les utiliser pour :
- générer des impulsions carrées TTL utilisées comme signal d'horloge ou comme déclencheur dans des applications DAQ.
- mesurer la largeur d'impulsions de signaux TTL.
- mesurer la fréquence / période d'un signal TTL .
- compter un nombre de transitions de signaux TTL (fronts) ou un temps écoulé.
- diviser la fréquence de signaux TTL.Constitution d'une voie de comptage:
Elle comprend:
* une broche d'entrée SOURCE pour le signal source* une broche d'entrée GATE pour le signal de validation du comptage
* une broche de sortie OUT du signal de sortie programmé
* un registre de comptage/décomptage (Counter Register).
Types d'association Source / Gate
Typiquement, un compteur compte les transitions du signal appliqué à l'entrée SOURCE. La programmation de la voie autorise le compteur à compter les transitions montantes (bas vers haut RISING ) ou descendantes (haut vers bas) du signal de l'entrée SOURCE. Pour chaque front compté, la voie incrémente ou décrémente le registre interne de comptage. La valeur courante du registre interne reflète toujours le nombre de fronts vus du signal d'entrée par les compteurs qui fonctionnent en incrément.
Nota: Pour les compteurs qui fonctionnent en décrément , ce contenu reflète le nombre de fronts qui restent à recevoir avant d'atteindre 0. La lecture du registre interne de comptage ne modifie pas sa valeur courante.
L'entrée GATE contrôle le début, la suspension et l'arrêt de l'activité de comptage de la voie. Les niveaux ou les fronts de cette entrée valident ou inhibent le comptage. Cette entrée a quatre modes de fonctionnement : front montant, front descendant, niveau haut et niveau bas.Déclaration d'utilisation d'un compteur sous Labview:
- Après un clic droit sur le diagramme, sélectionner une voie physique
- Cliquer droit sur l'icône voie physique
et sélectionner " Filtrage du nom d'E/S...."
- Sélectionner le type de voie physique" Entrée compteur "
Il s'agit ensuite de configurer cette voie de comptage . Nous allons prendre comme application , la lecture d'un encodeur angulaire possédant 500 fentes par tour . Matériellement, cet encodeur sera lié par sa voie A à une entrée DAQ( Data acquisition )
de type source et par sa voie B à une entrée DAQ de type Gate ( ou Aux le cas échéant ) . Cliquer sur l'icône suivante
pour voir un exemple de liaison entre trois encodeurs et une carte DAQ 6602
- Choisir dans le menu déroulant de la voie physique
une voie autorisée par votre DAQ à laquelle vous connecterez votre voie A d'encodeur .
- Sélectionner le menu principal de configuration des cartes DAQ et cliquer sur l'icône polymorphe " voie virtuelle "
Nota: une tâche est une entité plus globale que la voie . Elle peut être constituée de plusieurs voies .
- Sélectionner dans le menu déroulant situé sous cette icône: " entrée compteur " puis " encodeur angulaire "
- Sélectionner et placer une icône Démarrer
sur votre diagramme .
Nota: Cette icône valide , lors de l'exécution du programme,le fonctionnement de cette voie .
- Relier ensuite les différents éléments de la manière suivante:
Nota: Indiquer le nombre d'impulsions par tours du codeur ( Clic droit au niveau de l'entrée "impulsion par révolution" de l'icône , puis dans le menu déroulant se présentant, choisir l'option "créer " puis "constante " ).
Le travail réalisé jusqu'ici permet de configurer la partie matérielle de la carte DAQ ( Si celle-ci le permet ) . La configuration est majoritairement faite par défaut . Il faut maintenant traiter les informations en provenance de la carte DAQ au niveau d'un programme . La fréquence maximale de bouclage au niveau d'un programme Labview tournant sur Windows est de 1 KHz . La carte DAQ ,par contre, travaille à des fréquences d'acquisition nettement plus importantes. Elle enregistre ses informations dans un BUFFER circulaire
dans lequel le programme vient chercher ( à fréquence moindre ) les informations dont il a besoin. La suite du programme fait donc appel à une boucle cadencée:
- Sélectionner sur le diagramme ( clic droit ) la structure " boucle cadencée "
- Développer cette boucle sur le diagramme . Par un clic droit au niveau du paramètre "dt", créer une constante de 1 ms . Cabler la sortie de l'icône Démarrer
à la structure . Par un clic droit au niveau du bouton d'arrêt
de la structure , créer une commande "stop"
La boucle cadencée à 1 ms est opérationnelle. Il s'agit de lire le registre de comptage et d'afficher sa valeur courante dans un indicateur qui sera placé sur la face avant
- Sélectionner le menu principal de configuration des cartes DAQ
et cliquer sur l'icône polymorphe Lire
. Placer cette icône dans la boucle cadencée ,sélectionner dans le menu déroulant situé sous cette icône: " compteur " , " échantillon unique " et " U32 " . La relier ensuite suivant la figure suivante:
Application à l'encoder oak 128 fentes
Le boitier NI 6009 en notre possession ne possède pas de compteurs . La lecture du nombre d'incréments en provenance de l'encoder peut poser problème si la fréquence de rotation de celui-ci est importante . En effet, dans ce cas, la lecture des incréments est réalisée par une boucle cadencée au maximum à 1 Khz ( soft ) et non pas par une configuration matérielle de la carte DAQ ( hard ) . On va supposer dans toute la suite de l'étude que cette vitesse de rotation de l'encoder est réduite .
- Déterminer la vitesse de rotation maximale du codeur compatible avec une boucle cadencée à 1 Khz.
Le codeur en votre possession possède 4 fils .
* Deux de ces fils concernent l'alimentation électrique du codeur . Le codeur est généralement alimenté sous une tension continue de 5 V sur l'une de ses bornes et à 0 V sur l'autre borne d'alimentation .
* Les deux autres fils sont les deux voies différentiées en quadrature ( déphasage d'un quart de période ) notées A et B . Les signaux en provenance de chaque voie prennent soit la valeur minimale ( 0 v ) soit la valeur maximale ( 5V ) . Ils sont donc considérés comme des entrées TOR ( 0 ou 1 ) par la partie traitement ( microcontrôleur par exemple ) . Une partie du chronogramme délivré sur ces deux voies s'apparente à
Le rôle de la partie traitement est double . D'une part , celle-ci doit comptabiliser un nombre d'impulsions ( nombre de fronts montants ) qui lui permettra ensuite en fonction du nombre de fentes par tour du codeur de déterminer l'angle dont celui-ci a tourné ; d'autre part, elle doit rendre compte du sens de rotation du codeur .
Le traitement proposé dans cette application s'inspire d'un algorithme élaboré dans les années 1980 au sein de la société LOGITECH ( pour les souris d'ordinateur ) . En voici la teneur:
1ère étape: Mémorisation à un instant t sur deux bits de la valeur binaire des voies A et B . On note ce nombre binaire : AB
2nd étape : Inversion par la partie traitement du nombre binaire AB en nombre BA mais que l'on note à présent : CD
3ème étape: Nouvelle acquisition à t+∆ t de la nouvelle valeur binaire des voies A et B . On note ce nouveau nombre binaire AB
4ème étape: Opération booléenne ( ou exclusif ) sur les deux nombre binaires AB et CD
5ème étape : En fonction du résultat de cette opération, la partie traitement incrémente : +1 ( sens de rotation positif de l'encodeur ) , décrémente : -1 ( sens de rotation négatif de l'encodeur ), ou garde en l'état : 0 la valeur d'un compteur noté : countenco
Remarque : La valeur ∆ t est très importante car elle conditionne la justesse du nombre exact d'impulsions comptabilisées par la partie traitement . Dans le cas d'une scrutation trop lente de l'état des voies A et B, ou du fait d'une vitesse de défilement trop importante des voies A et B, devant les détecteurs assurant la scrutation, la partie traitement peut le cas échéant réaliser un mauvais décompte du nombre réel d'impulsions passant devant les détecteurs.
On souhaite réaliser les tableaux de Karnaugh relatifs aux sorties +1 , -1 , 0 en fonction de l'état des entrées constituées par les nombres binaires AB etCD. De manière à réduire le nombre de ces tableaux et en vérifiant qu'il n'y a pas de superposition de l'état des sorties pour une combinaison donnée des entrées, on réalisera un unique tableau de karnaugh pour ces différentes sorties +1, -1 , 0. On notera dans les différentes cases du tableau soit +1, -1 0 ou une croix si le cas est impossible .
- En analysant le chronogramme proposé ci-dessous, compléter sur le document réponse
le tableau de Karnaugh relatif aux sorties +1, -1 , 0 pour différentes combinaisons possibles matériellement des nombres binaires AB et CD.
Le nombre binaire AB est obtenu par configuration du boitier NI 6009 en lecture de ses ports numériques P0 1 et P0 2 et mémorisé dans une boucle cadencée sous forme d'un nombre binaire
Valeur binaire du nombre stockée par Labview:
0 0 0 0 0 0 A BLe nombre CD est obtenu dans cette même boucle par permutation du nombre binaire AB obtenu lors d'une mémorisation antérieure sur la boucle .
0 0 0 0 0 0 A B
0 0 0 0 0 0 C D
- Après avoir replacé sur le second tableau du document réponse les croix ( cas irréalisables ) apparaissant sur le premier tableau, compléter celui-ci en réalisant l'opération booléenne " ou exclusif "sur AB et CD :
Le résultat étant mémorisé sous forme d'octet
0 0 0 0 0 0 ? ?
Nota: On notera dans les différentes cases du tableau la valeur numérique de l'opération précédente sous forme numérique décimale ( valeurs 0, 1, 2, .... ) .
- En comparant les deux tableaux, Expliquer de quelle manière on peut gérer le compteur d'impulsions ?
- En se basant sur l'étude précédente, déduire le nombre d'impulsions délivrées par le codeur ( dans le sens positif ) pour un tour complet de ce dernier?
Création du programme Labview permettant de gérer l'encoder oak 128 fentes
La trame du programme est déjà définie:
. Les voies physiques de scrutation sont imposées: ports p01 et p02 ( lignes 1 et 2 ) du boitier NI 6009:
Nota: vérifier de numéro du device ( dev ) présent sur votre PC . Changer le cas échéant celui-ci.
La lecture des voies est enregistrée sous forme d'un tableau 1D de booléens .
Nota: la première voie est stockée à l'indice 0 de ce tableau
On demande :
A partir de l'étude précédente :
- A partir de l'étude précédente, compléter le programme permettant l'affichage du nombre d'impulsions délivrées par l'encoder .
- Câbler le boitier NI 6009 à l'ordinateur ainsi que l'encoder sur les ports appropriés . Vérifier la bonne marche de votre programme
Nota: Dans ce programme, il n'est pas défini de base de temps . Le temps d'exécution de la boucle est inconnu .
Présentation de l'étude :
On se propose dans cette activité de réaliser la commande en position et en vitesse d'un moteur pas à pas . Le programme de commande est réalisé sous Labview. La carte DAQ est un boitier USB NI 6009 de chez National instruments ( NI ) . Le préactionneur utilisé est un pont en H . Le diagramme topo fonctionnel du dispositif est le suivant:
![]() |
La documentation technique sur tous ces éléments se trouve sous les onglets ci-dessous:
Diodes LED
Il n’est plus besoin à ce jour d’expliquer à quoi sert une LED ou DEL (Diode Emitting Light) ou littérairement : Diode à Emission de Lumière. On en trouve sur tous les appareils électroniques, du walkman au lave-linge.
Présentation
Comme une diode, la LED classique, comprend une Cathode et une Anode
Son boîtier translucide sera soit incolore soit de couleur. Quant à leurs formes on en trouve des cylindriques, carrées, triangulaires, rectangulaires, leurs faces avant peuvent êtres plates ou bombées. Leurs tailles aussi sont variables <1mm, 1,8mm, 3mm, 5mm, 8mm, 10mm….
L'anode correspond à la patte positive + et la cathode à la borne négative - . Ce composant est donc polarisé ( attention au branchement !!)
Elles sont de différentes couleurs, les plus classiques étant : Rouge, vert, jaune, orange, depuis peu on trouve des bleues et des blanches.
Emploi
Elles sont généralement employées comme témoins de contrôle, très utiles pour réaliser des TCO, on les emploie également pour les signaux, les feux de fin de convois, les animations de ville, (feux tricolores, gyrophares, balisage, simulation de soudure à l’arc….).
Modèles spéciaux
LED bicolores : Verte et rouge, (dans le même boîtier). Le changement de couleur s’effectuant par inversion des polarités. (deux pattes).
LED Tricolores : Verte, rouge et orangée, (dans le même boîtier). Le changement de couleur étant fonction de l’alimentation des trois pattes.
LED multicolores ou " arc en ciel " : Elles comportent 4 anodes et 2 cathodes alimentant 4 diodes . Ce qui permet d’obtenir toute une palette de couleurs.
LED clignotantes : Branchées comme une simple LED elles clignotent à une fréquence d’environ 3Hz.
LED infra rouges ou photo émettrices : Placées dans nos télécommandes elles transmettent les ordres à nos chers appareils.
LED haute luminosité : Leur corps translucide éclaire fortement.
Branchement
Nous allons voir le branchement d’une LED classique à une seule jonction.
La LED étant polarisée, on veillera en courant continu à respecter son branchement. En cas d’inversion elle ne s’allumera pas, mais il ne faut pas néanmoins dépasser sa tension inverse qui pourrait la faire claquer.
L’anode reliée au + étant repérable par la plus longue patte, un méplat sur le corps de la LED indique la cathode - , (petite patte).
Pour fonctionner une LED doit être alimentée sous une tension de 1,6V à 1,8V à ses bornes, le courant la parcourant doit être limité afin d’éviter son claquage. C’est pour cette raison qu’une résistance est toujours placée en série dans son alimentation.
Ce courant peut être de 2mA pour des LED dites à faible consommation, mais est en général de l’ordre de 10mA, 20mA pour les plus gourmandes.
En cas de doute on procèdera graduellement.
Exemple : Prenons le cas d’une LED alimentée en 12V continu.
Nous choisirons une tension de 1,6V pour un courant de 10mA
![]()
Nous choisirons donc 1000 Ohms ou 1 Kilohm qui est la valeur standard la plus approchante.
Particularité
Selon leurs couleurs les LED ont des consommations légèrement différentes, (les LED rouges sont les plus sobres), il faut pour cela ajuster leur résistanceafin d’obtenir l’éclairement souhaité.
Il est de même déconseillé pour la même raison de brancher en parallèle des LED de couleurs différentes. Parfois des LED de même couleurs posent problèmes. On préfèrera le montage série, le courant sera celui d’une diode (10mA), par contre on retranchera autant de fois la tension (1,6V) qu’il y a de LED en série.
En courant alternatif une LED clignotera à la fréquence du courant, en 50Hz elle paraîtra être allumée en permanence.
En modélisme on ne les emploiera que sous des tensions inférieures à 24V.
Etude du pont en H ( préactionneur )
L'alimentation de chaque pont en H est Vp= 12V . Le schéma ci-dessous reprend un des deux ponts en H du composant L298 se trouvant sur la carte moteurs ( voir l'onglet concerné ci-dessus ) . On retrouve sur ce pont les variables :
* IN1 et IN2 qui seront des entrées de commande TOR ( 0 ou 5 V ) . ( IN3 et IN4 pour l'autre pont )
* OUT1 et OUT2 qui sont les sorties du pont considéré correspondant aux bornes ROT1 et ROT2 du premier pont et qui doivent être connectées au moteur ( respectivement OUT3 et OUT4 pour ELV1 et ELV2 sur l'autre pont )
* EN A ( enable A ) qui est l'entrée de validation pour le premier pont ( EN B pour le second pont )
- Compléter sur le document réponse
le tableau des états bloqués ( B ) ou saturés ( S ) des transistors Q1, Q2, Q3, Q4 du pont en fonction des entrées EN A, IN2 et IN1 . Indiquer également en fonction de ces mêmes entrées la valeur de la tension ( en fonction de Vp ) présente aux bornes du moteur: OUT1- OUT2
EN A IN2 IN1 Q1 Q2 Q3 Q4 Tension OUT1- OUT2 0 X X 1 0 0 1 0 1 1 1 1 1 1 0
Etude du moteur bipolaire
Le moteur pas à pas en votre possession est un moteur bipolaire à aimants permanents ( voir les onglets 'ressources techniques ' et ' ressources pédagogiques ') . La documentation technique indique que ce moteur possède un pas de 7,5°.
L'animation ci-dessous représente un exemple en coupe de moteur bipolaire
* Les enroulements du stator sont successivement alimentés et les polarités dans chaque enroulement sont aussi successivement modifiées .
* Les deux enroulements scindés définissent deux paires de pôles ( 1, 1' ) et ( 2,2') et le sens du courant dans l'enroulement correspondant définit les polarités des pôles.
* Des paires d'aimants permanents sont régulièrements répartis sur le rotor .
- En supposant que le moteur en votre possession fonctionne suivant le principe précédent, déterminer le nombre de paires d'aimants ( Nord / Sud ) que doit posséder le rotor de notre moteur si le pas est de 7,5°
On souhaite alimenter les deux phases du moteur par un double pont en H alimenté par une tension commune Vp . Une des deux phases du moteur étant liée aux sorties OUT1 , OUT2 du premier pont et l'autre phase aux sorties OUT3 , OUT4 du second pont .
- En vous aidant de l'étude précédente du pont en H, compléter le tableau suivant relatif aux entrées IN4, IN3 , IN2, IN1, EN B, EN A et aux tensions résultantes OUT3- OUT4 et OUT1 - OUT2 ( fonctions de Vp ) du double pont en H et qui permettent la mise en rotation du moteur dans un sens de rotation:
EN B IN4 IN3 EN A IN2 IN1 OUT3 - OUT4 OUT1 - OUT2 0 X X 0 X X 1 0 0 1 0 1 1 1 1 1 1 1
- Reprendre le tableau précédent et y indiquer les valeurs binaires des entrées IN4, IN3 , IN2, IN1, EN B, EN A et des tensions résultantes OUT3- OUT4 et OUT1 - OUT2 permettant une rotation élémentaire d'un demi-pas.
EN B |
IN4 |
IN3 |
EN A |
IN2 |
IN1 |
OUT3 - OUT4 |
OUT1 - OUT2 |
0 |
X |
X |
0 |
X |
X |
||
1 |
0 |
0 |
1 |
0 |
1 |
||
1 |
1 |
||||||
1 |
1 |
||||||
1 |
1 |
||||||
1 |
1 |
||||||
1 |
1 |
||||||
1 |
1 |
||||||
1 |
1 |
- Le tableau précédent comporte une séquence de 8 états différents des entrées IN4, IN3 , IN2, IN1 . Déterminer le nombre de fois que ce tableau doit être décrit pour effectuer un tour complet de l'arbre du moteur ?
Programmation sous Labview
Le moteur pas à pas peut être commandé en position et en vitesse. Dans les deux cas de figure, il est nécessaire d'utiliser une source d'énergie, un préactionneur et une électronique de commande . On utilisera dans notre cas de figure:
* Une alimentation stabilisée 12v
* Une carte moteurs possédant deux ponts en H ( L298 )
* Un PC équipé du logiciel Labview
* Une carte d'acquisition ( DAQ ): NI USB 6009
Etude de la commande en position
On souhaite réaliser un tour complet de l'arbre du moteur en commande pas entier et en commande demi-pas . Le cahier des charges est le suivant:
* Le lancement de la rotation du moteur sera lié à un bouton poussoir
présent sur la Face avant de l'écran de contrôle construit sous Labview; ce qui aura pour effet de valider ou non les entrées EN B, EN A des deux ponts en H .
* Les entrées IN4, IN3 , IN2, IN1 seront cablées sur les ports P0.3 , P0.2 , P0.1 , P0.0 du boitier NI 6009
* Les entrées EN B, EN A des deux ponts en H sont déja liées ensemble sur la carte moteur et seront connectées au port P0.04 du boitier NI 6009
* La consigne angulaire de l'angle dont doit tourner l'arbre du moteur est imposée par un potentiomètre monotour
connecté au port AI.0 du boitier NI 6009. On aura soin de configurer la voie virtuelle en référence commune Gnd : RSE ( Referenced Single Entry )
- Pour la commande en pas, sachant que les entrées IN4, IN3 , IN2, IN1 seront cablées sur les ports P0.3 , P0.2 , P0.1 , P0.0 du boitier NI 6009, compléter la valeur décimale que doit prendre la variable port P0 (stockée sous forme d'octet et ayant comme bit de poids le plus faible : IN1) pour les différents états des tableaux suivant:
Commande en pas:
IN4 IN3 IN2 IN1 Valeur décimale de port P0 0 0 0 1Commande en demi-pas:
IN4 IN3 IN2 IN1 Valeur décimale de port P0 0 0 0 1
- Réaliser le programme labview: commande moteur pas à pas NI 6009.vi
possédant la face avant présentée ci-dessous et gérant la rotation pas à pas du moteur à une vitesse constante de 15°/s .
- Réaliser le cablâge et vérifier le fonctionnement du moteur en position .
Nota: * Lors de l'expérimentation, ne pas oublier de cabler la masse (GND ) du pont en H à la masse ( GND ) du boitier NI 6009 !!
* On remarquera qu'une fois en position, le moteur n'est plus alimenté . Il ne peut donc résister à des actions mécaniques externes . Le cas échéant, il faudrait modifier le programme de manière à garder la validation des entrées EN B, EN A une fois le moteur en position. Il y a risque de surchauffe dans ce cas.
- Modifier le programme précédent de manière à faire fonctionner le moteur en demi-pas à une vitesse constante de 15°/s . De plus, on souhaite ajouter une LED
qui doit s'allumer ou s'éteindre en fonction de l'état du bouton poussoir de la face avant . Elle sera connectée au port P0.05 du boitier NI 6009
- Vérifier le fonctionnement du moteur .
Etude de la commande en vitesse
On souhaite à présent commander le moteur pas à pas en vitesse . Le potentiomètre monotour sera utilisé dans ce cas pour imposer la consigne de vitesse . On garde la programmation du moteur en demi-pas . On demande de :
- Modifier le programme précédent de manière à commander grâce au potentiomètre monotour, une consigne de vitesse pouvant varier de 0 d°/s à 180 °/s . La modification de vitesse doit pouvoir être réalisée à tout moment du fonctionnement du moteur . Afficher sur le diagramme XY la vitesse du moteur
Présentation de l'étude :
On se propose dans cette activité de réaliser la commande en position et en vitesse d'un moteur CC . Le programme de commande est réalisé sous Labview.
* La carte DAQ est un boitier USB NI 6009 de chez National instruments ( NI ) .
* Le signal PWM alimentant le hacheur sera généré par un PIC 18F4455 présent sur l'ECIO40 .
* Le préactionneur utilisé est un pont en H .
* Le capteur de position/vitesse est un codeur numérique incrémental oak de 128 fentes
* L'actionneur est un motoréducteur Maxon RE36 de 70 w / 48 volts possédant un étage de réduction 246:1
Le diagramme topo fonctionnel du dispositif est le suivant:
La documentation technique sur tous ces éléments se trouve sous les onglets ci-dessous:
Le codeur incrémental: Oak / Grigsby Rotary Encoder - 128 Pulse/rev – TTL Compatible Encoder
Caractéristiques :
* Brand rotary encoder
* Manufacturer: Oak / Grigsby
* Model: 91Q128-43-00110
* 2 channel full quadrature encoding
* 128 pulses per revolution - 512 total changes of state per revolution
* Compatible with TTL logic - VCC = 5V
* Output: 2-bit gray code – Channel A leading Channel B by 90 degrees in clockwise rotation
* Power consumption: 250 mW maximum
* 1" square body with a sealed enclosure
* 1/4" diameter stainless steel shaft, .4" long
* Sealed sleeve bearing
* Weight: 1.1 oz.
* 4" cable terminated with a 4 pin female plug
* For encoder specification sheet, please click this LINK (PDF - 1.04 MB)
Les microcontrôleurs ECIO28 et 40
Il y a actuellement, dans la lignée des PICmicro, plusieurs microcontrôleurs à port USB intégré sur la puce, en particulier le 18F4455 à 40 ou à 44 broches et le 18F2455 à 28 broches.
Ces PICmicro sont chargés d'un bout de logiciel appelé « chargeur d’amorce » (bootloader) . Ce logiciel réside dans le microcontrôleur à USB et lui permet de charger un programme via le câble USB. Les PICmicro disposent de plus d' un oscillateur à 4 MHz et d' un bouton poussoir de mise à zéro .
Pour l’alimentation, on a le choix : soit aller chercher du 5 V sur un appareil extérieur ou utiliser celui du port USB du PC. Une remarque toutefois à propos de cette seconde option : nul ne peut vous assurer de disposer de plus de 100 mA sur le port USB, tout dépend du nombre d’appareils qui y sont déjà raccordés. Mais dans la plupart des cas, on peut espérer en tirer envi- ron 250 mA.
Le schéma du circuit ECIO40P, avec son PIC18F4455 à 44 broches, est présenté sur la figure ci-dessous . La LED D1 indique si le câble USB est branché, tandis que les cavaliers d’alimentation permettent de choisir d’où viendra le courant, du PC ou d’une source extérieure. Le circuit (ECIO28P) de la plus petite puce (28 broches) en est fort semblable, il compte simplement moins de lignes d’E/S (entrées/sorties, comme Input/Output). . ECIO veut dire : E/S à volonté. (Easy Control I/O)
Les détails du chargeur d'amorce
Le logiciel du chargeur d’amorce pour un système comme ECIO est à la fois simple et efficace. Le même interrupteur permet la mise à zéromais est aussi utilisé pour la programmation. Le logiciel a été pensé de manière à ce qu’une action sur le bouton de mise à zéro force le logiciel à vérifier si le câble USB est branché. Si c’est le cas, le chargeur d’amorce exécute un programme de chargement qui permet au PC de communiquer avec le PIC pour lui envoyer un nouveau programme. Si la liaison USB est absente, le chargeur d’amorce passe la main au programme utilisateur
Il existe de plus une application sous Windows qui permet d’envoyer du code hexadécimal au microcontrôleur ( figure précedente ). Cle logiciel d’application ECIO est disponible en cinq langues principales : anglais, français, néerlandais espagnol et allemand. Il permet de trouver un fichier hexadécimal sur l’ordinateur et de le charger dans l 'ECIO.
- Le brochage
Le signal PWM ne pouvant être généré par le boitier USB NI 6009, on génèrera par programmation sous Labview une grandeur analogique sur la sortie analogique A0 0 du boitier NI 6009 comprise entre 0 et 5V pour un rapport cyclique compris entre 0 et 1 .
Ce signal analogique provenant du boitier NI 6009 sera échantillonné au niveau de l'ECIO 40 sur le port A0 sous forme d'entier ( sur 10 bits ) et servira à générer le signal PWM sur le port C2 de ce même ECIO 40 . Le progamme de l'ECIO 40 est déjà réalisé sous FLOWCODE 4 :
La commande du moteur sera réalisée sous forme de trapèze de vitesse:
On suppose que l'on impose
ainsi que l'accélération
.
- Déterminer dans ces conditions les expressions de
et de
sur le document réponse
sachant que l'on impose une consigne de rotation angulaire de sortie de
La programmation sous Laview de cette commande en trapèze peut être réalisée grâce au module SoftMotion de labview:
L'architecture type de déclaration et paramétrage de trajectoire que NI softMotion permet de créer se présente sous la forme suivante:
Nota:
* Il est possible de cliquer
directement sur les noeuds du diagramme précédent de manière à faire appparaître le descriptif des opérations réalisées.
* Un axe correspond à un moteur .
* Une coordonnée correspond à un vecteur mutidimentionnel dont chaque composante est constituée par un axe ( par exemple, pour le robot delta, il faut 3 axes pour définir la coordonnée qui constitue alors le CDG de la plateforme terminale à déplacer ).
* A la fin d'exécution de la boucle, il sera nécessaire de supprimer la trajectoire en utilisant l'icône suivante se trouvant sous NI softMotion:
La commande en position du moteur nécessite d'autre part de déclarer l'utilisation:
D'une sortie analogique comprise entre 0 et 5v , envoyée sur un port AN d'un PIC et destinée à servir de consigne de rapport cyclique sur ce même PIC ( Sa sortie PWM étant liée au pont en H )
D'une sortie numérique commandant l'Enable du pont en H
D'une entrée numérique groupée sur 2 bits du port P0 et permettant de compter le nombres d'impulsions de l'encoder par lecture des voies A et B de celui-ci.
D'un PID numérique ayant pour entrées la position imposée ainsi que la position issue de l'encoder . Le PID doit générer un nombre compris entre 0 et 5 qui sera envoyé via la sortie analogique présentée ci-dessus, en consigne de rapport cyclique sur le PIC .
Le PID présenté ci-dessus est à placer dans la boucle cadencée et se trouve dans le menu:
Au regard de la faible vitesse de rotation de l'encoder, le programme de lecture de sa rotation réalisée lors de la 6ème activité reste valide . Cette partie de programme est fournie sous le lien suivant:
- Réaliser à partir de la trame fournie, le programme labview: moteur cc.vi
permettant de réaliser l'asservissement en position du moteur CC sur une commande en trapèze de vitesse..