Ce montage consiste à réaliser une carte d’interface USB avec une interface graphique réalisée avec LABVIEW à base de microcontrôleur PIC18F4550 pour commander des sorties numériques et acquérir des entrées numériques et analogiques via le convertisseur du PIC.
Cette carte interface proposé par notre cher ami CHEDLI BOU THAALAB, nécessite deux programmes : un coté PIC18F4550 édité avec Mikropascal et l'autre côté PC réalisé avec Labview.
Nous allons commencer par un tutorial sur l’USB dans Labview ;
1. Introduction
Ce
tutorial constitue un point de départ dans l'utilisation de NI-VISA
pour communiquer avec un matériel USB. Toutefois, il ne s'agit pas d'une
introduction à l'architecture USB ni aux différents protocoles utilisés
dans les communications par USB. Après lecture de ce tutorial, vous
serez capable d'installer un matériel USB et d'utiliser NI-VISA pour
communiquer avec ce matériel, en ayant assimilé le fonctionnement du
protocole de communication.
2. Connaissances de base sur l'USB et sur VISA
VISA
est une API (interface de programmation d'applications) haut niveau
utilisée pour communiquer avec les bus d'instrumentation. Elle est
indépendante de la plate-forme, du bus et de l'environnement. Autrement
dit, la même API est utilisée pour créer un programme de communication
avec un matériel USB grâce à LabVIEW sur une machine sous Windows.
L'USB
est un bus de communication basé messages. Cela signifie qu'un PC et un
matériel USB communiquent par envoi de commandes et de données sur le
bus sous forme de données textuelles ou binaires.
Chaque
matériel USB possède son propre jeu de commandes. Les fonctions NI-VISA
d'écriture et de lecture permettent d'envoyer et de lire ces commandes.
Vous pouvez obtenir les commandes de votre instrument en contactant son
constructeur ou créer vos propres commandes.
NI-VISA
supporte les communications par USB à partir de la version 3.0. Deux
classes de ressources VISA sont supportées : USB INSTR et USB RAW.
Les
matériels USB conformes au protocole USB de classe test et mesure
(USBTMC) utilisent les ressources de classe USB INSTR. Les matériels
USBTMC sont conformes à un protocole que la classe de ressources VISA
USB INSTR peut comprendre. Pour communiquer avec un matériel USBTMC,
aucune configuration n'est nécessaire.
Tout instrument USB autre que ceux qui sont spécifiquement conformes à la spécification USBTMC est un instrument USB RAW.
Pour
en savoir plus sur l'API NI-VISA, consultez l'Aide NI-VISA. Ce document
est inclus avec NI-VISA et peut être obtenu en suivant le lien suivant.
3. Configuration de NI-VISA pour le contrôle d'un bus USB
Ce
paragraphe parcourt les étapes de configuration d'un matériel USB RAW
pour son contrôle par NI-VISA 3.0 à partir d'un ordinateur sous Windows.
Pour un matériel compatible USBTMC, connectez le matériel et passez
directement au paragraphe 4.
À
ce stade, NI-VISA doit être déjà installé sur l'ordinateur et le
matériel USB ne doit pas être connecté. De plus, le driver du matériel
USB ne doit pas être installé. Trois étapes sont nécessaires pour
configurer un matériel USB pour utiliser NI-VISA :
- Création d'un fichier INF grâce à l'Assistant de développement de drivers (DDW).
- Installation du fichier INF et du matériel USB grâce au fichier INF.
- Test du matériel avec NI-VISA Interactive Control.
Tout
au long de ce tutorial, on utilise un boîtier NI DAQPad-6020E installé
sur un système Windows XP, comme exemple de matériel USB. Comme ce
tutorial est destiné à expliquer la configuration d'un matériel USB
générique, les spécifications détaillées du DAQPad-6020E ne sont pas
traitées ici. Rappelez-vous que NI-DAQ est le seul driver supporté pour
contrôler un DAQPad-6020E.
3.1. Création d'un fichier INF grâce à l'Assistant de développement de drivers (DDW)
Avant
d'utiliser NI-VISA, il faut indiquer à Windows de l'utiliser en tant
que driver par défaut du matériel. Dans l'environnement Windows, ceci
est réalisable avec un fichier ".INF". Le driver NI-VISA 3.0 (et
supérieur) inclut l'Assistant VISA Driver Development Wizard (DDW), qui
permet de créer un fichier INF pour le matériel USB.
Pour
ouvrir DDW, sélectionnez Démarrage»Tous les programmes»National
Instruments»VISA»VISA Driver Developer Wizard. La Figure n°1 montre
l'écran d'ouverture.
Figure n°1. Écran de sélection du bus matériel de l'Assistant VISA DDW
Cet
assistant peut être utilisé afin de créer un fichier INF destiné à un
matériel PXI/PCI, USB ou IEEE 1394. Pour la création d'un driver de
matériel USB, cliquez sur USB puis sur Next. La fenêtre des informations
de base du matériel de VISA DDW s'ouvre, comme indiqué à la Figure n°2.
Figure n°2. Écran des informations de base sur le matériel de VISA DDW
À
cette étape, vous devez connaître l'identifiant (ID) du fournisseur USB
et l'ID du produit, pour l'instrument USB. Ces nombres identifient le
matériel USB pour son installation et son ciblage, afin de pouvoir
communiquer avec lui. Selon la spécification USB, ces deux identifiants
sont des nombres hexadécimaux 16 bits et doivent être fournis par le
fabricant du matériel.
Si
vous ne connaissez pas l'ID du fournisseur USB ni celui du produit, il
est possible de les obtenir en connectant le matériel à l'ordinateur et
en laissant ce dernier reconnaître le nouveau matériel.
Annulez
l'assistant de recherche de nouveau matériel s'il démarre. Ouvrez le
gestionnaire de périphériques matériels à partir du panneau de
configuration et trouvez votre matériel dans la liste, habituellement
dans la zone "Contrôleurs de bus USB". Un point d'exclamation jaune peut
être affiché pour indiquer qu'il s'agit d'un matériel inconnu.
Double-cliquez sur le matériel pour ouvrir sa fenêtre de propriétés.
Sélectionnez l'onglet Détails et vérifiez que le "Numéro
d'identification de l'instance du périphérique" soit indiqué dans la
liste déroulante des attributs. Une chaîne de caractères similaire à
celle de la Figure n°3 doit être affichée. Les quatre caractères à
droite de "VID_" et de "PID_" sont respectivement l'ID du fournisseur et
l'ID du produit. Notez ces caractères pour votre matériel, fermez le
Gestionnaire de périphériques et déconnectez le matériel de
l'ordinateur. Une autre solution consiste à contacter le fournisseur du
matériel pour obtenir ces informations.
Figure n°3. ID du fournisseur et ID du produit, à partir du gestionnaire de périphériques
Pour
le DAQPad-6020E, l'ID du fournisseur est 0x3923 et l'ID du produit est
0x12C0. Si votre matériel n'est pas un NI DAQPad-6020E, ces identifiants
sont différents.
Remarque : avant d'utiliser l'Assistant DDW, vérifiez que le matériel soit déconnecté de l'ordinateur.
Saisissez
l'ID du fournisseur, l'ID du produit, le nom du fabricant et le nom du
modèle pour votre matériel dans les champs correspondants.
Cliquez sur Next. La fenêtre de propriétés des fichiers de sortie est affichée comme indiqué à la Figure n°4.
Figure n°4. Écran des propriétés des fichiers de sortie de VISA DDW
Le
préfixe d'instrument USB est tout simplement un descripteur destiné à
identifier les fichiers utilisés pour ce matériel. Saisissez un préfixe
d'instrument USB, sélectionnez le répertoire souhaité dans lequel placer
ces fichiers, puis cliquez sur Next. La fenêtre suivante présente les
options d'installation. Par défaut, le choix propose d'installer les
informations d'installation pour le système d'exploitation et constitue
souvent la meilleure option. Une fois cette option sélectionnée, cliquez
sur Finish pour quitter l'assistant. Le fichier INF est créé dans le
répertoire de sortie spécifié à l'écran précédent.
3.2. Installation des fichiers INF et du matériel USB
L'installation
des fichiers INF est différente pour chaque version de Windows. Lorsque
l'Assistant DDW crée un fichier INF, les instructions d'installation
sont incluses dans une en-tête au début du fichier INF. Comme les
fichiers INF sont des fichiers texte ASCII, ils peuvent être lus par
n'importe quel éditeur de texte tel que Bloc-notes. Pour en savoir plus
sur l'installation d'un fichier INF, ouvrez les fichiers INF dans un
éditeur de textes et suivez les instructions situées au début du
fichier. Ce tutorial suppose que l'on utilise Windows XP.
Copiez
le fichier INF dans le répertoire INF. Sous Windows XP, l'adresse de ce
répertoire est habituellement C:WINDOWSINF. Ce répertoire peut être
caché, ce qui nécessite éventuellement de modifier les options des
dossiers pour visualiser les fichiers cachés.
Cliquez
avec le bouton droit sur le fichier INF dans C:WINDOWSINF puis cliquez
sur Installer. Ce processus crée un fichier PNF pour le matériel. Le
matériel USB est maintenant prêt à être installé.
Connectez
le matériel USB. Parce qu'un matériel USB est enfichable à chaud (Hot
Plug), Windows doit pouvoir le détecter et l'Assistant d'ajout d'un
nouveau matériel doit démarrer automatiquement dès qu'il est connecté au
port USB. Suivez les instructions sur l'écran de l'assistant. Lorsqu'on
demande de sélectionner un driver pour ce matériel, parcourez
l'arborescence jusqu'au répertoire INF et sélectionnez le fichier INF
créé grâce à l'Assistant DDW.
Remarque
: dans certains cas, Windows peut avoir déjà associé un driver par
défaut au matériel USB. Alors, Windows cherchera d'abord à installer ce
driver. Une fois le matériel USB connecté et Windows ayant installé le
driver par défaut, cliquez avec le bouton droit sur Poste de travail et
sélectionnez Propriétés. Dans la fenêtre Propriétés système,
sélectionnez l'onglet Matériel et cliquez sur le Gestionnaire de
périphériques. Une fois celui-ci ouvert, développez l'arborescence
"Périphériques d'interface utilisateur (HID)". Puis trouvez quelle
instance de "Périphérique d'interface utilisateur" (illustrée à la
Figure n°5) correspond à votre matériel USB en cliquant avec le bouton
droit, en sélectionnant Propriétés et en vérifiant l'onglet Détails pour
les ID du fournisseur et du produit correspondants.
Figure n°5. Propriétés de l'instance du périphérique d'interface utilisateur USB
Une fois trouvée, cliquez sur elle avec le bouton droit puis sur Mettre à jour le pilote, comme illustré à la Figure n°6.
Figure n°6. Mise à jour du driver pour votre matériel USB
Sur
le premier écran, sélectionnez "Non, pas maintenant/Installer à partir
d'une liste ou d'un emplacement spécifié (utilisateurs expérimentés)",
puis cliquez sur Suivant. Sur le deuxième écran, sélectionnez "Installer
à partir d'une liste ou d'un emplacement spécifié (utilisateurs
expérimentés)", puis cliquez sur Suivant. Sur le troisième écran,
sélectionnez "Ne pas rechercher. Je vais choisir
le
pilote à installer." Le quatrième écran ressemble à celui de la Figure
n°7 où le pilote mis en surbrillance est celui que vous avez créé.
Sélectionnez ce driver, puis cliquez sur Suivant. Lorsque le driver a
terminé son installation, cliquez sur Terminé.
Figure n°7. Sélection du driver VISA pour votre matériel USB
4. Test des communications avec VISA Interactive Control
Ouvrir
Measurement & Automation Explorer (MAX). Sélectionnez
Outils»Rafraîchir pour réactualiser la vue. Le matériel USB doit
figurer sur la liste en tant que matériel USB sous Matériels et
interfaces, comme illustré à la Figure n°8. Le matériel USB est
désormais installé et configuré pour utiliser NI-VISA.
Si
vous sélectionnez le matériel USB, les informations sur le matériel
sont affichées dans la fenêtre Paramètres USB. Depuis cette fenêtre, les
informations telles que l'ID du fournisseur, le code du modèle et le
numéro de série du matériel sont accessibles.
Figure n°8. Matériel USB vu dans MAX
Afin
de communiquer avec le matériel grâce à VISA, utilisez le descripteur
d'instrument VISA pour votre matériel. Le format du descripteur
d'instrument pour un matériel USB INSTR est le suivant : USB[carte]:: ID
du fournisseur:: code de modèle:: numéro de série[:: numéro de
l'interface USB]::INSTR. Le format du descripteur d'instrument pour un
matériel USB RAW est le suivant :
USB[carte]:: ID du fournisseur:: code de modèle:: numéro de série[:: numéro de l'interface USB]::RAW.
Selon
la spécification USBTMC, tous les matériels USBTMC doivent posséder un
numéro de série. Certains matériels USB RAW peuvent ne pas avoir de
numéro de série. Dans ce cas, NI-VISA assigne automatiquement un numéro
de série VISA spécifique pour ce matériel. Le format de ce numéro de
série est NI-VISA-#, où # est un nombre généré automatiquement.
Certains
matériels USB ont plusieurs interfaces, de même qu'un matériel PCI peut
avoir plusieurs fonctions. Si votre matériel ne supporte qu'une seule
interface, il n'est pas nécessaire d'inclure un numéro d'interface USB.
Le
DAQPad-6020E utilise la classe RAW, le code du fournisseur et celui du
modèle sont respectivement 0x3923 et 0x12C0. Pour le DAQPad-6020E, le
descripteur de l'instrument est USB0::0x3923::0x12C0::00B50DAE::RAW.
Afin
de tester les communications avec ce matériel, ouvrez MAX. Sélectionnez
Outils»NI-VISA»VISA Interactive Control. Une fenêtre similaire à celle
de la Figure n°9 doit s'ouvrir.
Figure n°9. VISA Interactive Control
Le
programme VISA Interactive Control (VISAIC) est un utilitaire qui sert à
communiquer facilement avec n'importe quelle ressource VISA. Après la
configuration du matériel USB pour l'utilisation de VISA, il devrait
apparaître sur la liste dans la catégorie USB. Double-cliquez sur le
matériel pour ouvrir une session VISA sur le matériel. Une fenêtre
similaire à celle de la Figure n°10 doit
s'ouvrir.
Figure n°10. Session VISA ouverte par VISA Interactive Control
En
ouvrant une session VISA avec VISAIC, les onglets Template et Property
Node (Set) sont automatiquement sélectionnés. Pour lire une propriété,
sélectionnez l'onglet Property Node (Get) et sélectionnez la propriété
souhaitée, puis cliquez sur Execute. La valeur actuelle de la propriété
spécifiée dans la zone Attribute Name est affichée dans l'indicateur
Current Value. Sur la Figure n°10, la propriété Resource Name a été lue.
Pour
en savoir plus sur l'utilisation de VISAIC, consultez le document de
Developer Zone : VISA Interactive Control (VISAIC). Pour en savoir plus
sur l'API NI-VISA, consultez l'Aide NI-VISA. Leurs liens figurent à la
fin de ce tutorial. Afin d'obtenir une liste de commandes valides pour
votre instrument USB, contactez le fournisseur de votre instrument.
Utilisation de NI-VISA pour communiquer avec un matériel USB
Ce
paragraphe décrit comment communiquer avec un matériel USB en utilisant
NI-VISA 3.0 et version supérieure. Rappelez-vous qu'il existe deux
classes de matériels USB. La méthode de communication dépend de la
classe de votre matériel.
Classe USB INSTR (USBTMC)
Les
matériels conformes à la Classe USB Test et mesure (USBTMC) utilisent
la classe NI-VISA USB INSTR. Ces matériels utilisent un style de
communication 488.2. Pour ces matériels, il est possible d'utiliser
simplement les fonctions VISA Open, Close, Read et Write de la même
manière que pour communiquer avec des instruments GPIB.
La
Figure n°11 illustre un VI LabVIEW qui communique avec un matériel
USBTMC. Dans cet exemple, une session VISA est ouverte vers un matériel
USB. Une commande est écrite vers le matériel et la réponse est lue en
retour. La commande spécifique envoyée ici est la requête
d'identification du matériel. Vérifiez auprès du fournisseur de votre
matériel quel est le jeu de commandes. À la fin des communications, la
session VISA est fermée.
Figure n°11. Exemple de diagramme LabVIEW USBTMC
Classe USB RAW
Communiquer
avec la classe USB RAW est plus compliqué parce que chaque matériel
peut utiliser son propre protocole de communication. Contactez le
fournisseur de votre matériel pour en savoir plus sur son protocole de
communication.
L'USB
communique grâce à quatre types de canaux ou de points de terminaison :
de commande, en bloc, d'interruption et isochrone. Chaque type de canal
transfère un type différent d'informations.
De
plus, les points de terminaison peuvent être de n'importe quel type.
Pensez au point de terminaison d'un socket de communication. Pour en
savoir plus sur l'architecture USB, consultez la spécification USB à
partir du lien ci-dessous.
NI-VISA
supporte trois types de canaux USB : de commande, en bloc et
d'interruption. Lorsque NI-VISA détecte un instrument USB, il balaye
automatiquement l'instrument pour trouver le point de terminaison le
plus bas pour chaque type.
Lorsque
VISA le détecte, il assigne cette valeur à l'attribut VISA approprié.
Les points de terminaison d'entrée et de sortie en bloc sont stockés
dans les attributs VI_ATTR_USB_BULK_IN_PIPE et
VI_ATTR_USB_BULK_OUT_PIPE, respectivement. Le point de terminaison
d'entrée d'interruption est stocké dans l'attribut
VI_ATTR_USB_INTR_IN_PIPE. Une valeur de -1 indique qu'un matériel USB ne
supporte pas ce type de canal. Pour le canal de commande, seul le point
de terminaison zéro est supporté. Si vous utilisez l'API C, la fonction
viSetAttribute permettra de modifier les points de terminaison. En
LabVIEW, utilisez le noeud de propriétés VISA et la fonction VISA Write.
NI-VISA
inclut quatre fonctions destinées à transférer des données via des
canaux USB. Avant de pouvoir communiquer avec le matériel grâce à ces
fonctions, il est nécessaire de paramétrer le protocole de communication
en utilisant les attributs USB VISA. La liste suivante décrit les
fonctions disponibles.
Utilisez les fonctions VISA USB Control In et VISA USB Control Out pour transférer des données par un canal de commande.
Pour transférer des données par un canal en bloc, utilisez les fonctions VISA Read et VISA Write.
Avec
LabVIEW, VISA inclut une fonction supplémentaire à utiliser avec le
canal d'interruption : VISA Get USB Interrupt Data. Dans l'API C, la
même action peut être réalisée en accédant aux attributs
VI_ATTR_USB_RECV_INTR_SIZE et VI_ATTR_USB_RECV_INTR_DATA de l'objet
événement VI_EVENT_USB_INTR. Consultez l'Aide NI-VISA pour en savoir
plus sur les événements
VISA.
Programme du PIC;
L'USB
a le désavantage d'obliger l'utilisation de composants particuliers.
Dans notre application, nous aurons recours au microcontrôleur 18F4550
de Microchip, une puce simple à programmer (en mikropaskal) et munie de
tous les composants hardware nécessaire à la communication sur port USB.
Le schéma de la mise en place du composant reste très simple:
Figure 12: Carte de communication USB Labview
Au
centre du schéma, nous retrouvons le PIC18F4550, celui-ci est cadencé
par un quartz à 20MHz. Nous avons aussi câblé sur ce schéma 4 entrées
analogiques: AN0, AN1, AN2, AN3, AN4 et AN5. Sur les broches Rd0 à RD7
nous plaçons des leds qui nous servirons pour notre application. Le port
B reste inutilisé pour notre article mais nous plaçons la possibilité
d'étendre les fonctionnalités de la carte en installant des borniers.
Les capacités C1 et C2 sont de 22pf. Attention de ne pas se tromper pour le connecteur USB. Il s'agit d'un connecteur femelle de Type B. Pour la connecter au PC, j'utilise un cordon d'imprimante A vers B, le même que les cordons HP.
Routage:
Programmation du PIC18F4550:
Créer
un nouveau projet pour PIC18F4550, en fixant la fréquence de l'horloge
du PIC (pas la fréquence de résonance du quartz, mais la fréquence en
sortie du PLL fournie par le tableau ci-après).
Ensuite,
il faut configurer le comportement du PIC en remplissant ses fusibles.
Les fusibles sont différents registres du PIC qui fixent le type
d'oscillateur, la vitesse de l'horloge interne, l'état du watchdog...
Pour
ce faire, Mikropaskal fournit une interface graphique qui simplifie la
configuration du PIC (Project -> Edit Project). Pour que l'interface
HID fonctionne correctement, il faut respecter quelques règles:
Activer le régulateur de tension USB
Assurer une fréquence d'hologe de 4MHz en sortie de la PLL
Utiliser la sortie de la PLL comme horlog USB
Mikropascal
fournis un ensemble de librairies facilitant la mise en place du
protocole HID. Voici les étapes clé de la programmation de l'interface:
Générer le Descripteur de l'interface:
- Lancer l'utilitaire HID Terminal de Mikropascal (Tools -> HID Terminal)
- Onglet Descriptor
- Compléter les informations propres à votre interface
- Enregistrer le descripteur pour Mikropascal dans le dossier de votre projet
· Importer le descripteur dans votre projet: « uses USBdsc; »
· Initialiser le module HID: HID-Enable(&ReadBuf, &WriteBuf);
· Pour lire des informations: while (HID_Read() = 0); uu par interruption
· Pour écrire des informations: HID_Write();
Pour
envoyer votre programme sur l'interface; il vous faut utiliser un
programmateur de PIC. J'utilise un programmateur USB. Ensuite il faut
importer le fichier .hex qui à été généré par Mikropascal et programmer
le PIC avec. La procédure diffère selon le programmateur.
Poure
tester la communication HID, vous pouvez utiliser le HID Terminal
fournis par Mikropascal Personnellemet, j'utilise Labview, un
environnement de programmation graphique développé par National
Instrument, qui offre une grande compatibilité avec la plupart des
protocoles de communications.
Voivi
un exemple simple de commucication HID pernettant de piloter la
luminosité des LEDs de l'interface et lire l’entrée analogique
Téléchargement :
Carte électronique + Routage
Programme Mikropascal
Interface LABVIEW + Driver
Documentation sur l'USB
Liens et sources:
www.ni.com
Aide NI-VISA