Vous êtes sur la page 1sur 6

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 Fig 2. - Le module NI USB6009

Entrées analogiques
La carte 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 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
La carte 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.

Entrées-sorties logiques
Le boîtier 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 le 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
Syntaxe:
adusb( 'init' ) ;
Description:
La sous-fonction adusb( 'init' ) charge en mémoire la bibliothèque de fonctions
(opération assez lente), recherche le premier module disponible et initialise le module
(mise à zéro des sorties analogiques, mise à un des sorties logiques).
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.
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

Copyright - USTL - Laboratoire LAGIS - Pierre BONNET


Travaux Pratiques d'Automatique - Annexes 3
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 ); acquisition sur la voie 0
X = adusb('analog_in', 4,3) ; acquisition simultanée des entrées 4, 5 et 6
y = adusb('analog_in' , 7 , 'falling') 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 .
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 ) ; met la sortie 1 à 3V
adusb('analog_out' , [ 3 ; 1 ] ) ; 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'); %initialisation de la carte
t_ini = cputime ; %instant initial
t_wait = 0;
for i = 1 : 100 ; %analog input of channel 0 &1
X( i, : ) = adusb('analog_in' , 0,2);
t_acqu(i) = cputime - t_ini; %precise time value is stored for plotting

while t_wait < i*delta_t % waiting loop


t_wait= cputime - t_ini;
end; % wait for time = i*delta_t
end % end of acquisition loop
plot (t_acqu, X( : , 1) , t_acqu , X( : , 2) ) % 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 modules 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 ni paramètres(pas de câblage à
prévoir, pas de double-clic sur le module) . 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 et module d'exécution temps-réel

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
Function. Son fonctionnement est automatique : il provoque une attente jusqu'à ce que
l'incrément de temps soit écoulé. Il ne demande aucun paramétrage ni câblage: la valeur du
step est directement transmise à ce module. Attention: ne pas modifier les règles de priorité
d'exécution de Simulink définie dans ce module (accessibles par double-clic); un choix à
priorité trop élevée peut amener à perdre toute reprise en main du PC (seule possibilité:
arrêt par coupure du secteur et pertes de toutes les données courantes!)

Copyright - USTL - Laboratoire LAGIS - Pierre BONNET