Acquisition NI-USB
Transcription
Acquisition NI-USB
Travaux Pratiques d'Automatique - Annexes 1 ANNEXE 1 DESCRIPTION DU BOITIER D'ENTREE-SORTIES ADUSB I - SPECIFICATIONS Le boîtier d'entrées-sorties ADUSB est un ensemble construit autour du module NI USB6009 de National Instruments. Ce module à fonctions multiples permet de coupler un processus analogique ou logique à un PC, avec une mise en place très simple (branchement sur le port USB de l'ordinateur et installation des logiciels). Son emploi est adapté à des travaux de laboratoire; pour un usage industriel, il faudrait compléter la structure par des interfaces électroniques appropriés (amplification et isolation des signaux). Fig 1. - Boîtier Entrées-Sorties ADUSB USTL Fig 2. - Le module NI USB6009 Entrées analogiques Le module possède 8 entrées analogiques multiplexées, d'impédance d'entrée 144 KΩ. La gamme de tension des entrées est [-10V,+10V] . La protection des entrées permet d'appliquer jusque 35V sans destruction. Le coffret USTL intègre des amplificateurs-suiveurs afin d'obtenir une impédance d'entrée très élevée et une absence de courant d'entrée (source d'erreur de mesure sur le module de base). Le signal amplifié est appliqué à un échantillonneur-bloqueur pour le maintenir constant pendant la conversion analogique-numérique puis au convertisseur. Ce dernier est un modèle 14 bits; la résolution des acquisitions est de 2,5mV . L'erreur totale annoncée le constructeur est de 15mV à 25°C. La vitesse de conversion est bridée par le Bus USB. En effet, la cadence des requêtes USB (demande+réponse) ne dépasse pas 8KHz, une requête pouvant demander jusqu'à 8 voies. La vitesse maximale de conversion est limitée par le convertisseur lui-même à 48KHz. Copyright - USTL - Laboratoire LAGIS - Pierre BONNET Travaux Pratiques d'Automatique - Annexes 2 Sorties Analogiques Le module possède deux convertisseurs D/A 12 bits indépendants. Un amplificateur du type ampli opérationnel ramène l'impédance de sortie à 50 Ω (valeur considérée comme nulle pour la plupart des applications). La gamme de sortie est [0,+5v] pour les deux convertisseurs; la fréquence de rafraîchissement est de 150Hz maximum. Le coffret USTL décale (bipolar offset) et amplifie les deux sorties du module pour obtenir une dynamique de [-10V,+10V]. Entrées-sorties logiques Le module ADUSB possède 12 entrées-sorties logiques compatibles TTL (logique 5V), répartie en deux groupes: le port 0 avec 8 bits et un port 1 avec 4 bits. Lorsqu'un bit de port est utilisé en sortie, la fonction est du type collecteur ouvert (sortance très faible au niveau 1). Au démarrage, les ports sont programmés en sortie (collecteur ouvert inactif , état logique 1). Ces entrées-sorties sont accessibles sous forme d'un seul mot de 12 bits par concaténation de Port0 et Port1, en logique directe (un "1" logique correspond à 5V sur la borne). Pour une utilisation en milieu industriel, il est nécessaire de prévoir des interfaces complémentaires pour isoler les E/S du calculateur et pour adapter les niveaux (relais de sortie par exemple) . Entrées-sorties relatives au temps Une entrée "trigger" permet de synchroniser les acquisitions sur un signal externe 0-5V (générateur BF par exemple). La carte est équipée d'un compteur/temporisateur. Cette fonction n'est pas exploitée dans la version actuelle de la librairie ADUSB. II - PROGRAMMATION SOUS MATLAB L'ensemble des fonctions Matlab du boîtier ADUSB est rassemblée dans une fonction unique nommée adusb. Le premier paramètre passé dans cette fonction indique la sous-fonction utilisée. Initialisation de la carte Syntaxes: adusb( 'init' ) ; adusb( 'init_USTL' ) ; adusb( 'init' , 'DEV5' ) ; adusb( 'init_USTL' , 'DEV3') ; Description: La sous-fonction adusb( 'init' ) [ou adusb( 'init_USTL' ) pour les boîtiers USTL] charge en mémoire la bibliothèque de fonctions (opération assez lente), recherche le premier module disponible dont le nom commence par 'DEV...' (nom par défaut des modules) et initialise le module (mise à zéro des sorties analogiques, mise à un des sorties logiques). Le module peut être précisé dans la commande init . Les commandes d'écriture ou de lecture se font par référence implicite au module détecté lors de l'initialisation. Le logiciel ne permet pas la commande de plusieurs modules dans une application. Acquisition des entrées digitales Syntaxe: a = adusb( 'digital_in' ) ; Description: La sous-fonction adusb('digital_in') lit la valeur des bits des deux ports et retourne les 12 bits dans une variable Matlab. L’entrée digitale, exprimée sous forme d’un entier peut prendre des valeurs comprises entre 0 et 2047. Copyright - USTL - Laboratoire LAGIS - Pierre BONNET Travaux Pratiques d'Automatique - Annexes 3 Ecriture d'une ou plusieurs sorties digitales Syntaxe: adusb('digital_out' , x ) Description: La sous-fonction adusb('digital_out' , x ) écrit les bits des Port0 et Port1, exprimée sous forme d’un entier x compris entre 0 et 2047. L'écriture d'un "1" en sortie ayant pour objet de désactiver le collecteur ouvert, cette sortie pourra être utilisée comme entrée. Exemple : pcmes('digital_out' , 15 ) ; active les 4 bits de poids faible Lecture d'une entrée analogique Syntaxes: x = adusb( 'analog_in' , voie ) ; x = adusb( 'analog_in', n°voie , front_trigger ) ; X = adusb('analog_in' , n°_première voie , nombre_voies ) ; X = adusb('analog_in' , n°_première voie , nombre_voies, front_trigger ) ; Description: La sous-fonction adusb( 'analog_in' , n°voie ) lit la valeur de l'entrée analogique désignée par le n°voie et l'exprime sous forme d'un grandeur comprise entre -10V et 10V . La valeur x retournée est scalaire. Il est possible de faire de plusieurs voies simultanément, ce qui améliore la cadence d'acquisition. La valeur retournée est un vecteur ligne . L'acquisition peut être synchronisée par l'entrée digitale Trigger de la plaquette (signal 0-5V) avec déclenchement sur front montant ( front_trigger = 'rising' ou 'R') ou sur front descendant ( front_trigger = 'falling' ou 'F'). Cette fonction sert à l'acquisition d'une suite de mesures avec cadencement par un générateur externe. Exemples : x = adusb ('analog_in' , 0 ); X = adusb('analog_in', 4,3) ; y = adusb('analog_in' , 7 , 'falling') acquisition sur la voie 0 acquisition simultanée des entrées 4, 5 et 6 acquisition sur voie 7 avec déclenchement par l'entrée Trigger sur front descendant Ecriture d'une sortie analogique Syntaxes: adusb('analog_out' , valeur_voie , n°voie ) ; adusb('analog_out' , [ valeur_voie1 ; valeur_voie2 ] ) ; Description: La sous-fonction adusb('analog_out' , valeur , n°voie ) écrit la valeur de la sortie analogique n°0 ou n°1 exprimée sous forme d'un grandeur comprise entre 0 et 5V (sortie directe du module NI) [ou entre -10V et +10V sur leboîtier USTL] Lorsque la valeur est fournie sous forme d'un vecteur de dimension 2, l'écriture sur les deux voies est simultanée. Une erreur est signalée pour des valeurs hors limites . Exemple : adusb('analog_out' , 3 , 1 ) ; adusb('analog_out' , [ 3 ; 1 ] ) ; met la sortie 1 à 3V met la sortie 0 à 3V et la sortie 1 à 1V Copyright - USTL - Laboratoire LAGIS - Pierre BONNET Travaux Pratiques d'Automatique - Annexes 4 Programme exemple Acquisition de 100 valeurs sur les voies 0 et 1 avec cadencement de 0.1s sans erreur cumulée de timing (les incertitudes de timing sont liées au fonctionnement de Matlab sous Windows en mode utilisateur) : Initialisations i=1 t_ini =heure_cpu i ème acquisition des entrées autres traitements heure_cpu = t_ini + i*pas ? i=i+1 i = i_max ? fin acquisition et traitements clear all; delta_t = 0.1; adusb('init_USTL'); t_ini = cputime ; t_wait = 0; X = zeros( 100 , 2 ); for i = 1 : 100 ; X( i, : ) = adusb('analog_in' , 0 , 2 ); t_acqu(i) = cputime - t_ini; while t_wait < i*delta_t t_wait= cputime - t_ini; end; end plot (t_acqu, X( : , 1 ) , t_acqu , X( : , 2 ) ) %initialisation du boîtier version USTL %instant initial %array declaration (increase speed computation) %analog input of channel 0 &1 %real time value is stored for plotting % waiting loop % wait for time = i*delta_t % end of acquisition loop % plot of datas Veuillez consulter l'aide en ligne de la fonction adusb pour les mises à jour et correction d'erreurs (faire "help adusb" sur Matlab) Copyright - USTL - Laboratoire LAGIS - Pierre BONNET Travaux Pratiques d'Automatique - Annexes 5 III - UTILISATION SOUS SIMULINK Les fonctionnalités du boîtier ADUSB sont directement accessibles sous Simulink grâce à une bibliothèque de modules complémentaires dénommée "ES ADUSB", directement visible depuis le navigateur de Simulink. Les blocs permettent de réaliser une application HIL (Hardware In the Loop) temps-réel. Fig 3. - La bibliothèque complémentaire ADUSB Initialisation de la carte Le module d'initialisation ne possède ni entrée ni sortie ; le seul paramètre est le choix du type de sortie analogique (0-5V pour le module NI ou -10V+10V pour le boîtier USTL) . Son fonctionnement est automatique: lors du lancement de la simulation (simulation start) , la fonction est exécutée une fois . Un compte-rendu textuel est donné dans la fenêtre de commande de Matlab (reconnaissance du module ou absence). Lecture d'une ou plusieurs entrées analogiques Le module permet d'acquérir les valeurs des voies analogiques 0 à 7 du module ADUSB. La valeur est retournée sous forme d'un vecteur (à démultiplexer pour un usage individuel des signaux). Le paramétrage se fait par dialogue (double-clic sur la boite). Ecriture d'une ou plusieurs sorties analogiques Le module permet de transformer un signal numérique Simulink en signal physique sur le boîtier ADUSB. Il est possible de sortir un vecteur à 2 composantes (sortie simultanée sur les deux voies analogiques). Attention : les signaux doivent être strictement bornés entre 0 et 5V , tout dépassement provoquant une erreur d'exécution. Fig 4. - Ecran de paramétrage des fonctions A/D et D/A Copyright - USTL - Laboratoire LAGIS - Pierre BONNET Travaux Pratiques d'Automatique - Annexes 6 Simulation temps-réel Par défaut, Simulink exécute les fonctions d'un schéma cycliquement avec incrémentation du temps apparent à chaque boucle. L'incrément de temps ou step est défini par Simulink pour donner le résultat de simulation le plus efficace possible. Pour commander un processus, il est impératif de définir un pas d'exécution fixe (au moins égal au temps nécessaire à l'exécution des entrées/sorties physiques et du calcul). Pour cela, paramétrer l'écran Simulation/parameters en pas fixe avec un pas suffisant : Fig 5. - Ecran de paramétrage de la simulation (Matlab7) Pour une exécution temps-réel, il faut de plus vérifier que le temps de cycle correspond physiquement à l'horloge du PC. Cette fonctionnalité est apportée par le module Timer RT Timer qu'il suffit d'insérer dans le schéma. Son fonctionnement est automatique : il provoque une attente jusqu'à ce que l'incrément de temps soit écoulé. Il ne demande aucun paramétrage par défaut. Fig 6. - Paramétrage du module Temps-réel Fig 7. - Exemple d'application HIL temps-réel Copyright - USTL - Laboratoire LAGIS - Pierre BONNET