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