Projet Flopy
Pilotage d’un banc de caractérisation de microélectronique par un Raspberry Pi

Version du 7 novembre 2014


PIC

FIGURE 1: Toile de l’artiste Chahine ABBAS.


Table des matières

1 Introduction générale
2 Contexte scientifique
 2.1 Le test "sous pointes"
 2.2 Affranchissement des vibrations
 2.3 Le LSBB
3 Une première caractérisation : mémoire non volatile
 3.1 Présentation générale
  3.1.1 Principe de fonctionnement
  3.1.2 Courants de fuite
 3.2 Technique de la grille flottante utilisée
  3.2.1 Le dispositif
  3.2.2 Protocole de mesure
4 Premiers résultats
 4.1 Tremblement de Terre à Barcelonnette : observation de l’immunité au bruit de vibration
  4.1.1 Robustesse vis à vis du bruit électrique
  4.1.2 Exemple de caractéristique If(V G)
5 Mise en place de la plateforme expérimentale : annexe technique
 5.1 Contraintes
 5.2 Le système de mesure
  5.2.1 Présentation du matériel de mesure
  5.2.2 Le script : quel langage pour quel système d’exploitation ?
  5.2.3 L’unité centrale et ses périphériques
  5.2.4 L’onduleur
 5.3 Installation des logiciels
  5.3.1 Python
  5.3.2 Installation du vvmlinuz-3.10-3-rpi sur le Raspberry
  5.3.3 Installation linux-gpib sous Raspbian
  5.3.4 Installation du firmware des câbles Agilent 82357 (A et B)
  5.3.5 Redémarrage du câble
 5.4 Configuration des instruments
 5.5 Les scripts Python
 5.6 Résolution des problèmes (bugs) logiciels
  5.6.1 Temps d’attente entre deux instruction sur la ligne gpib
  5.6.2 Réglage du timeout
  5.6.3 Consolider les scripts
 5.7 Problème matériel : Câble 82357 A versus câble 82357 B

1 Introduction générale

Le but de ce projet est de monter un démonstrateur de banc de caractérisation de dispositifs microélectroniques (voire nano électronique) dans un environnement à très faible bruit. L’idée initiale était de minimiser le coût financier en utilisant du matériel d’occasion, précis mais inusité.
Nous avons, dans un premier temps, caractérisé un dispositif particulier qui est caractéristique des mémoires non volatiles à grille flottante telles que les mémoires Flash. Ce dispositif nous a été mis à dispostion grâcieusement par la société STMicroelectronics site de Rousset.
Certains résultats de mesures ont été publiés. L’expérience est toujours en cours ; elle pourrait durer plusieurs mois (voire années).
Ce document est une présentation scientifique et technique du banc expérimental. Il a une vocation avant tout pédagogique, en particulier sur l’utilisation du Raspberry Pi comme contrôleur principal d’un banc de caractérisation.
Ce document présente tout d’abord les particularités du test sous pointes et la nécessité de s’afranchir des vibrations. Le site particulier du LSBB est ensuite présenté. Le principe de l’expérience basée sur la grille flottante est alors détaillé. Quelques résultats sont ensuite exposés. La dernière partie, la plus technique, tente de donner le plus possibles de détails informatiques et programatiques sur l’installation, la configuration, et l’utilisation des logiciels utilisés sur le Raspberry Pi.

2 Contexte scientifique

2.1 Le test "sous pointes"

Les composants microélectroniques sont fabriqués classiquement sur des galettes (appelés "wafers") de silicium, de forme ronde. Ceux ci peuvent être testés et caractérisés électriquement avant d’être conditionnés de façon individuelle pour leur utilisation commerciale. Pour cela, le wafer est posé sur une plate-forme stable - le probeur - équipée d’une binoculaire grossissante (un gros microscope), généralement posée sur une plaque de marbre lourde, permettant une relativement bonne isolation aux vibrations. Sur le probeur sont installés des positionneurs micrométriques qui soutiennent des pointes métalliques fines (tout à fait comparables à des aiguilles à coudre) qui permettent de venir prendre le contact électriques sur les dispositifs à caractériser. Les zones de contact électrique sur le wafer (ce que l’on appelle les "pads") sont constitués de dépôt métallique fin d’une surface approximativement comprise autour de 10μm × 10μm ; alors que le bout des pointes est de taille de l’ordre de quelques micromètres. La figure 2 propose deux photos de cet équipement. A gauche, un gros plan du probeur, avec en premier plan les positionneurs micrométriques maintenant les pointes sur le wafer (partie irisée), la partie noire supérieure étant la binoculaire vue de profil et à droite une photo prise à la binoculaire, montrant les pointes juste au dessus des pads d’une surface de l’ordre de 100μm2.


PIC   PIC


FIGURE 2: Photos d’un wafer posé sur un probeur : à gauche, vue d’ensemble sur laquelle on aperçoit les positionneurs micrométriques, posés sur le bâtis métallique au premier plan, desquels partent les pointes qui touchent le wafer (zone réfléchissante irisée du bas) et à droite une vue des pads et des pointes juste avant qu’elles ne soient posées, au travers la binoculaire. Source des photos [8, 3]


2.2 Affranchissement des vibrations

La plupart du temps ces tests sont effectués dans un environnement de laboratoire standard. Les temps de caractérisation sont de l’ordre de quelques minutes pour les plus courts à quelques heures pour les plus longs. La finesse des pointes et la petite taille des pads imposent que le probeur ne vibre pas, afin que le contact mécanique entre les pointes et les pads soit assuré. Quand les pointes sont posées, il faut donc veiller à ne pas trop s’agiter autour du probeur : éviter les passages fréquents faisant vibrer le sol, les courants d’air, de claquer les portes, etc... Lorsque la caractérisation est très longue (plusieurs jours), il devient très difficile d’assurer cette stabilité dans un environnement de travail collectif non adapté à ces contraintes. Il faut alors utiliser des tables sur coussin d’air, dont le niveau est stabilisé automatiquement, ce qui alourdit très considérablement l’infrastructure expérimentale, avec des compresseurs, des systèmes de tuyauteries, etc... Une solution intuitive est d’installer alors ce genre d’expériences dans un endroit naturellement isolé de passages de personnels trop fréquents et de vibrations parasites quelconques : par exemple une grotte souterraine. Le Laboratoire Sous-Terrain à Bas Bruit situé à Rustrel dans le Vaucluse (France) est le lieu idéal pour cela.

2.3 Le LSBB

Issu de la reconversion récente de l’ancien poste de conduite de tir no1 de la force de dissuasion nucléaire française, le Laboratoire Souterrain à Bas Bruit de Rustrel Pays d’Apt est un ensemble de galeries subhorizontales creusé dans le massif rocheux de la Grande Montagne, en bordure Sud du plateau d’Albion. L’ensemble des galeries possède une longueur d’environ 3,7 km, sous une couverture rocheuse variant de 30 à 519 m compte-tenu de la topographie en surface. Outre le positionnement particulier de cet ouvrage dans le massif du Luberon qui lui confère naturellement un rôle d’observatoire majeur pour la géophysique et l’hydrogéologie, ses galeries enfouies et blindées forment un environnement particulièrement bien isolé vis à vis des radiations, des ondes électromagnétiques ainsi que des vibrations parasites liées au vent, aux activités humaines, etc... Ce site, inscrit au Patrimoine comme lieu de témoignage historique de la guerre froide, est un un lieu de premier choix pour monter des bancs expérimentaux qui ont besoin de "calme" pour fonctionner. La figure 2.3 propose une vue tridimensionnelle du système de galeries dans la montagne. La croix verte désigne l’endroit choisi pour placer notre banc de caractérisation. Il se situe donc à 2 km de l’entrée du tunnel, et à plusieurs centaines de mètres sous le somment de la montagne.


PIC

FIGURE 3: Vue "tridimensionnelle" du système de galeries du LSBB. La croix verte désigne la salle dans laquelle notre banc de mesure est installé, dans l’ancienne salle du groupe électrogène de secours de la capsule de commande du tir nucléaire. C’est l’un des endroits les plus profondément enfouis du site.


L’idée initiale du projet était donc de monter un démonstrateur sur une expérience de microélectronique nécessitant de conserver les pointes au contact pendant plusieurs mois, avec le minimum d’intervention physique et une quasi-complète prise de contrôle à distance du banc de mesure.

Forts de plusieurs années d’expérience dans les études de fiabilité des mémoires non volatiles à grille flottante [7511610], il nous a paru évident que la première étude exploratoire de la faisabilité d’un banc de test microélectronique dans l’environnement protégé du LSBB devait se faire sur ce dispositif clé de la microélectronique.

3 Une première caractérisation : mémoire non volatile

3.1 Présentation générale

3.1.1 Principe de fonctionnement

Le dispositif mémoire non volatile électrique élémentaire classique consiste en une structure de Transistor Métal Oxyde Semi-conducteur (TMOS) dans laquelle une deuxième grille (généralement en polysilicium dopée N) est intercalée entre la grille de contrôle et l’oxyde du canal. Cette deuxième grille est isolée de la grille de contrôle par un empilement de diélectrique à double grille. Une présentation exhaustive ainsi qu’historique de ce dispositif se trouve dans [124]. La grille située entre le substrat et la grille de contrôle est appelée grille flottante puisque son potentiel électrique n’est jamais fixée par l’opérateur (il est flottant). Une illustration de ce dispositif est présentée sur la figure 4, avec une photo prise par Microscopie Electronique à Balayage (MEB).


PIC

FIGURE 4: Cliché MEB d’un cellule Flash - Source : [11].



Sur la photo, le substrat de silicium apparaît en noir en bas, juste au dessus, la partie grise très fine est l’oxyde de silicium fin. Pour fixer une idée des tailles, son épaisseur est de l’ordre de la dizaine de nanomètres (10-8 mètre). La partie claire au dessus est la grille flottante, puis la partie sombre encore au dessus est l’oxyde épais. Enfin surplombant le tout, on observe la grille de contrôle (partie claire tout au dessus).

Le principe de fonctionnement électrique du dispositif consiste à moduler la tension de seuil, V T , de la structure TMOS par l’apport ou le retrait de charges électriques dans la grille flottante. La modulation de la tension de seuil V T en fonction de la quantité de charges électriques, Qgf injectées dans la grille obéit à la relation classique ([11]) :

          Q
VT = VT0- --gf
           Cp
(1)

où Cp désigne la capacité électrique vue entre la grille flottante et la grille de contrôle, Qgf désigne la quantité de charges stockée dans la grille flottante, et V T 0 la tension de seuil de la cellule vierge (grille flottante vide de charge).

La figure 5 propose un schéma de la structure ainsi qu’un diagramme caractéristique (courant-tension) illustrant la modulation de la tension de seuil du transistor selon la quantité de charges injectées dans la grille flottante.


PIC

FIGURE 5: Schéma de fonctionnement d’une cellule mémoire non volatile à grille flottante. A gauche, un schéma du dispositif élémentaire ou transistor d’état, à droite, illustration des caractéristiques courant de drain en fonction de la tension de grille flottante selon l’état de charge de cette dernière.



Dans la structure classique d’une mémoire non volatile à grille flottante, c’est l’état de déséquilibre électrostatique de cette dernière qui assure l’effet mémoire. C’est à dire que pour que l’état du point mémoire soit considéré comme non volatile, il est nécessaire que cet état de déséquilibre puisse perdurer : la charge ne doit pas s’échapper de la grille flottante lorsque la structure n’est plus polarisée. Les isolants (les différentes épaisseurs d’oxydes) encapsulant la grille flottante ne doivent donc pas laisser passer les charges électriques. D’un autre côté, pour obtenir cet état de déséquilibre, il faut injecter ou retirer des charges dans la grille flottante dans un processus (on parle d’opération d’écriture ou d’effacement) qui soit reproductible et stable. Ceci se fait par un jeu de polarisation (qui dépend fortement de la technologie de la cellule), qui permet de faire transiter les charges électriques depuis le substrat (ou le drain) vers la grille flottante, via l’oxyde fin. Ce dernier possède donc un rôle essentiel et cependant dual : bloquer le transport de charges quand la cellule est programmée dans un état logique et assurer le transport de charges lors des phases de programmation. Durant ces phases le transport de charges se fait par un processus intimement quantique : l’effet tunnel[12]. C’est pourquoi cet oxyde fin est parfois nommé "oxyde tunnel".

3.1.2 Courants de fuite

En l’absence de polarisation de la cellule, lorsque la grille flottante est chargée, l’état de déséquilibre électrostatique est condamné à disparaître dans le temps. Les charges de la grille flottante vont donc relaxer, en sortant de la grille flottante via les oxydes. En l’absence de polarisation, les champs électriques dans les oxydes d’isolation sont de faible amplitude. Les courants de fuite sont, par essence, faibles, impossibles à mesurer de façon directe à l’échelle d’une seule cellule. En effet, une analyse rapide d’ordre de grandeur de la relation (1) montre que la quantité de charges dans une grille flottante est de l’ordre de 104e, où e désigne la charge élémentaire. Ainsi si l’intégralité de cette charge était perdue en 3 heures, il faudrait pouvoir mesurer un courant correspondant au passage d’un électron à la seconde soit 10-19A. Une cellule mémoire standard est conçue pour retenir l’information (c’est à dire ces charges) pendant une durée minimale de 10 ans pour une utilisation "normale". Ce temps est qualifié de "temps de rétention" de la cellule. Bien évidemment, lors de la sollicitation d’une cellule (cycle d’écriture et d’effacement), l’oxyde est détérioré petit à petit par le passage des charges. Ainsi sa capacité à retenir les charges lorsque la cellule n’est plus polarisé s’amenuise avec l’usure. La caractérisation de la fuite de charges au travers l’oxyde est donc un point essentiel de l’étude de fiabilité de ces dispositifs.
Il existe plusieurs stratégies différentes pour extraire quantitativement le courant de fuite à partir de mesures expérimentales. Cependant, il convient d’ajouter que ces courants sont expérimentalement délicats à caractériser. Cette étape est pourtant indispensable à la compréhension puis à la modélisation des phénomènes responsables des fuites. En particulier c’est bien la nature du/des courant(s) de fuite qui donne une indication sur la nature des phénomènes de fuite.

3.2 Technique de la grille flottante utilisée

3.2.1 Le dispositif

La technique dite de la grille flottante ("floating gate" d’acronyme FG) a été développée depuis de nombreuses années afin de mesurer des courants très faibles - généralement d’un niveau tel qu’ils ne sont pas mesurables directement avec un ampèremètre. Ici, nous utilisons une structure fabriquée par STMicroélectronics Rousset, permettant de caractériser l’oxyde fin d’une capacité MOS, identique à celle utilisée dans les mémoires non volatiles électriques (type flash). L’idée ici est de monitorer, quasiment en tant réel la charge d’une capacité, grâce à un transistor placé à côté. La figure 6 présente un schéma de la structure (sur la gauche) ainsi que le schéma électrique équivalent (sur la droite).


PIC

FIGURE 6: A gauche schéma du dispositif de grille flottante, à droite schéma électrique équivalent. Le code de couleur permet de relier les dispositifs réels aux schémas électriques.


Une capacité MOS (en vert sur la figure 6 ), dont l’oxyde est identique à celui des mémoires non volatiles (même épaisseur, même procédé de fabrication) et de "grande" surface - par grande il faut entendre par rapport à la taille d’une cellule mémoire - est implantée dans le substrat du wafer. Son électrode supérieure est mise en contact électrique avec la grille d’un transistor adjacent. Il est important de remarquer que cette mise en contact est faite par construction, lors de la fabrication du wafer par métallisation.

3.2.2 Protocole de mesure

A l’instant initial de l’expérience, l’électrode de la capacité est chargée par une pointe polarisée (à quelques volts). Cette pointe est retirée rapidement, laissant l’électrode commune au transistor et à la capacité flottantes d’un point de vue du potentiel électrique, puisque ce dernier n’est plus imposée par l’extérieur mais simplement par la quantités de charges présentes dans l’électrode. Ainsi la grille du transistor est bien flottante ! La tension V G de la grille du transistor est commune à l’électrode de la capacité. En polarisant faiblement le drain (D) du transistor par rapport à sa source (S) (tension V D parfaitement connue), un courant de drain (IDS) apparaît et il est mesuré par l’ampèremètre (A). Le transistor étant parfaitement caractérisé, la mesure de ce courant permet de remonter au potentiel V G de la grille. La connaissance de la caractéristique capacité-tension de la capacité (la courbe C(V )) permet alors de remonter à la charge QFG de la capacité (l’hypothèse est faite que l’électrode de la capacité est bien plus grande que celle de la grille du transistor, ainsi toutes les charges sont sur la capacité). Si la capacité était parfaite, les charges ne s’évaderaient pas de l’électrode et cette charge devrait rester constante au fil du temps. Comme l’oxyde de la capacité n’est pas idéal (peut même le dégrader avant de lancer l’expérience), il peut laisser passer des charges électriques au cours du temps. Le courant de fuite If est alors défini comme la dérivée de QFG au cours du temps, prise en valeur absolue pour avoir un courant positif.

    |      |
I = ||dQF-G-||
 f  |  dt  |
(2)

Une présentation algorithmique du protocole de mesure est présenté sur la figure 7. Un dernière représentation souvent intéressante est de finalement tracer If en fonction de V G, car on peut alors sur un même graphe mettre les mesures directes des courants tunnel pour les fortes tensions et les mesures indirectes extraites par la technique de la grille flottante


PIC

FIGURE 7: Algorithme du processus de mesure.


Quelques remarques concernant l’appareillage de mesure sont à mettre en exergue ici. Premièrement, pour faire cette expérience, il n’est besoin sur le principe que d’un ampèremètre précis, d’une alimentation précise permettant de connaître réellement la tension délivrée sur le drain (et pas uniquement la tension de commande). En effet, si la tension V D dérive un peu dans le temps, il est nécessaire de corriger cette dérive pour extraire V G et pour cela il est nécessaire de connaître V D le plus précisément possible. Secondement, pour la mesure préliminaire de la caractéristique capacité-tension, un capacimètre de précision peut être nécessaire si le fabricant ne fournit pas la caractéristique C(V ). Troisièmement, la caractéristique du transistor IDS(V G,V T ) doit être mesurée juste avant l’expérience. En effet, la façon dont les pointes sont posée sur les pads peuvent légèrement affecter la mesure. Comme le transistor est utilisé dans une gamme de polarisation où la sensibilité entre V G et IDS est très importante, il vaut mieux que la caractéristique du transistor soit faite dans les conditions de contact les plus proches possibles de celles de la mesure de la grille flottante.

4 Premiers résultats

4.1 Tremblement de Terre à Barcelonnette : observation de l’immunité au bruit de vibration

Les premières mesures reproduites ici ont été publiés dans [9]. La figure 8 montrent les toutes premières mesures de courant effectuées. Il se trouve que pendant les mesures il y a eu un tremblement de terre très significatif à Barcelonnette (Alpes de Hautes -Provence). Nous reproduisons, ici, donc les premières mesures effectuées au printemps 2014 avec un zoom sur le jour du tremblement de terre.


PIC PIC

FIGURE 8: Premières mesures directes du courant de drain (ordonnées) en fonction du temps (minutes) en vue générale et zoom le jour du tremblement de terre. Les trois couleurs de courbes désignent les trois mesures successives opérées, les barres verticales vertes désignent un changement de jour.


On observe sur ces courbes plusieurs moments de vibrations du signal, à haute fréquence. l’échantillonnage en temps est insuffisant pour caractériser ce bruit. La figure zoommée sur le jour du tremblement de terre montre clairement que la vibration mécanique n’a pas eu d’influence sur la mesure (alors que tous les sismographes du LSBB) ont ressenti la vibration). Pour être exploitées, ces mesures nécessiteraient d’être filtrées pour en extraire ces fluctuations importantes en ordre de grandeur. Nous avons préféré travailler sur la cause de ce bruit pour le supprimer des mesures. Le point essentiel de l’immunité observée vis à vis du tremblement de terre est que le bruit est très certainement lié au protocole même de mesure et non à des vibrations mécaniques.

4.1.1 Robustesse vis à vis du bruit électrique

Après avoir fait plusieurs essais, nous sommes arrivés à la conclusion que ce bruit venait des oscillations de la tension de service EDF, couplées à une base de temps d’intégration de la mesure (le courant est mesuré en valeur moyenne sur une temps d’intégration) trop court. Nous avons donc, d’une part, placé le banc sous onduleur (qui permet d’une part de garantir l’alimentation électrique en cas de micro-coupure mais surtout de lisser les variations de courant de service EDF) et d’autre part, nous avons réglé les temps d’intégrations de mesure du courant à 2 secondes. Les résultats de mesures obtenues sont présentés sur la figure 9


PIC

FIGURE 9: Exemple de mesures directes du courant de drain (ordonnées) en fonction du temps (minutes) avec onduleur et long temps d’intégration.


A l’heure où ce document est produit, l’expérience tourne sans interventions depuis début juillet 2014, c’est à dire depuis 3 mois. Seules sont à déplorer quelques "trous" dans les mesures, dus à des coupures de courant plus longues que le temps de maintien de l’onduleur. Nous ne pouvons pour le moment produire dans un document public des mesures non publiées en revue spécialisée ou en conférence.

4.1.2 Exemple de caractéristique If(V G)

Nous proposons enfin sur la figure 10 la caractéristique I(V G) de cette capacité. Cette caractéristique a été établie en 2 séries de mesures. La première série a été faite à l’IM2NPt sur une station analyseur de paramètres de semi-conducteur Agilent 4156 puis sur une station Agilent B1500, pour les tensions V G élevées (supérieures à 3V ). Cette série mesure le courant tunnel direct au travers l’oxyde, pour des tensions "importantes" qui s’apparente au courant de programmation de la cellule mémoire. La résolution des appareils de mesure ne permet pas de mesurer directement un courant inférieur à 10-14 - 10-15 A. L’autre série de mesures est issu de la structure de la grille flottante, effectuée en mai 2014.


PIC

FIGURE 10: Caractéristique If en fonction de V G en échelle logarithmique pour la capacité. La légende explicite les séries de mesures ayant permis la construction de cette caractéristique.


Autour de V G de l’ordre de 6,5 V, on observe une bonne continuité dans les caractéristiques extraites, ce qui est un élément confirmant un protocole d’extraction du courant de fuite correct. Pour V G < 5,7V, on observe une différence entre les deux caractéristiques. Nous sommes ici à la limite de résolution de mesure de l’analyseur de paramètre (I ~ 10-15 A). On observe que la méthode de la grille flottante permet de gagner pratiquement deux décades en résolution.

5 Mise en place de la plateforme expérimentale : annexe technique

Ce paragraphe constitue l’annexe technique du banc expérimental. On y trouve toutes les étapes essentielles d’installation du noyau linux adéquat pour faire fonctionner un RaspberryPi avec un câble (plus exactement un contrôleur convertisseur) usb-gpib du type Agilent 82357 (A ou B). Nous revenons sur le choix éventuellement possible entre ces deux câbles dans la dernière section5.6 (la modèle A n’étant plus vendu neuf).

5.1 Contraintes

Le choix du matériel de ce banc se retrouve réduit du fait des différentes contraintes matérielles. La première est que le but de ce projet est de faire un démonstrateur qui se doit d’être léger, robuste et bon marché. De fait nous avons utilisé du matériel déjà éprouvé et bien connu de nous. Nous avons récupéré un ancien probeur inutilisé, puis nous avons opté pour un multimètre et une alimentation bien éprouvés l’un et l’autre. Les capacimètres de précision étant des appareils plutôt chers dont le besoin dans l’expérience n’est que très ponctuel (une fois au début de l’expérience), nous avons caractérisé la capacité dans la salle de caractérisation de l’IM2NP-Equipe Mémoires. La seconde contrainte est la position du site géographique du banc. D’une part, le LSBB est loin des sites des laboratoires mais de plus, pour y conserver le niveau de bruit le plus faible possible, les expérimentateurs essayent d’entrer dans les galeries le moins souvent possible. Ainsi toutes les expériences montées dans ce site doivent être soit pilotées, soit complètement autonomes. Nous avons choisi de commander la mesure de façon cyclique. Un protocole de commande (appelé script) allume l’alimentation V D, voir figure 7, mesure le courant IDS, éteint la tension V D et attend un temps fixé avant de recommencer ce cycle. Le fait d’éteindre la tension de drain entre deux mesures évite de polariser en permanence le transistor, ce qui peut l’endommager. Nous avons donc besoin d’une alimentation stabilisée, commandable à distance, d’un multimètre (ampèremètre) commandable aussi à distance et d’un ordinateur qui aura la tâche d’éxécuter les scripts de commande (les ordres à donner aux appareils), d’enregistrer les mesures et d’être interrogeable à distance.

5.2 Le système de mesure


PICPIC

FIGURE 11: A gauche une photo de face du multimètre DMM4050 de chez tektronik, à droite une photo de face de l’alimentation stabilisée pilotable Agilent 3136 A.


Le protocle de pilotage des appareils par l’ordinateur est le protocole GPIB. Nous avons opté pour ce système pour deux raisons. La première est historique : le savoir-faire expérimental de l’équipe Mémoires de l’IM2NP (un bon nombre d’expériences sont pilotées par ce système). La seconde raison est une raison technique de connectivité. Le système gpib permet la mise en série de plusieurs appareils (au maximum jusque 15 ! !), sur un seul bus. Les autres systèmes acceptables pour les appareils (usb, rs232) nécessitent des hubs, ce qui cause souvent des problèmes dans la communication. Nous avons essayé de piloter le multimètre par le protocole rs232 ; tout simplement infernal.

5.2.1 Présentation du matériel de mesure

Le multilètre utilisé est le modèle DMM4050 de chez Tektronik (voir figure 11). Il est utilisable sur ces deux faces (les caractéristiques des signaux face arrière et avant ne sont pas complètement identiques). Il possède plusieurs ports de communication en face arrière dont le fameux port GPIB. L’alimentation stabilisée est une agilent 3631 A (voir figure 11). Elle possède un bus gpib en face arrière. Ces deux appareils sont reliés par un bus simple GPIB. Le conrôleur GPIB (le cerveau des appareils) se situe dans le câble de liaison avec l’ordinateur de commande. Ce câble est donc un convertisseur usb-gpib (usb côté PC, gpib côté appareil). Historiquement ce contrôleur se trouvait sur des cartes filles enfichées dans la carte mère du PC (connection SCI par exemple). De nos jous, il faut passer par ce câble. Cet appareillage est délicat : il en existe de plusieurs qualité. Nous avons utilisé un "vieux câble", très fiable, le Agilent 82357 A plus commercialisé malheureusment. La nouvelle version Agilent 82357 B nous a posé quelques soucis (voir la section dédiée aux bugs : la plus importante du site.)

5.2.2 Le script : quel langage pour quel système d’exploitation ?

Pour que cette installation fonctionne, il suffit d’avoir le driver (pilote logiciel) convenable pour la câble usb-gpib uniquement. En effet c’est le contôleur gpib du câble qui dialogue avec les appareils. Le PC lui ne "voit" que le câble ; il ne voit pas les instruments directement. Bien évidemment, nous avons fait plusieurs essais sous plusieurs OS.
Pour l’installation des logiciels, Windows est de loin le plus aisé à utiliser. En effet, le câble usb-gpib Agilent 82357 est vendu avec uniquement les drivers pour Windows. D’autre part, les deux appareils de mesure sont livrés avec des petits logiciels de pilotage à distance, généralement basés sur Labview et avec la plateforme NI-VISA. Pour la première installation et les premiers essais basiques, le système Windows a l’intérêt de la facilité et de la rapidité.
Evidemment, dès que l’on veut compliquer un peu la configuration, mettre des options dans la mesure, etc... il devient nécessaire de reprendre la main en finesse sur les scripts de mesures. Pour plusieurs raisons (financières, compétences techniques, possibilités d’échange des fichiers, compatibilité entre utilisateurs différents), nous avons décidé de passer les scripts de commande de la mesure sous le langage libre, participatif et gratuit Python 2.7. Pour obtenir un système administrable aisément à distance, une distribution Linux semble l’OS de choix. Enfin, pour minimiser le coût, le bruit de vibration et l’encombrement, nous avons opté pour un tout petit ordinateur le Raspberry Pi.

5.2.3 L’unité centrale et ses périphériques

Ce mini-ordinateur est composé d’un proceseur ARM, d’une mémoire vive de 512 Mo, d’une carte réseau et de deux ports usb (c’est le modèle B). Le revendeur français kubii propose plusieurs versions de l’appareil et différents périphériques compatibles. Cet aspect est important car cette machine est limitée en alimentation électrique et il peut y avoir des soucis de compatibilité entre des matériels usb et le Raspberry. Il est donc essentiel d’avoir un conseil averti professionnel au moment de l’achat.
Le PC est donc composé :

Pour conserver l’original du système, la carte SD a été clonée après configuration. Le Raspberry fonctionne donc sur une carte clonée. Nous conseillons l’utiliation d’une carte de classe 10, les autres semblent vraiment lentes. Nos cartes sont des Kingston 8 Go classe 10. Elles ont été fournies par le magasin Cybertek à Avignon, monteur expérimenté. Encore une fois, il est indispensable d’acheter du matériel compatible avec le Raspberry (voir le site elinux par exemple) et il vaut mieux s’adresser à des revendeurs d’expérience.

5.2.4 L’onduleur

L’ensemble du banc est électriquement protégé par un petit onduleur (d’une autonomie de quelques ampère-heures) qui a une double vocation. La première est la protection des mesures en cas de micro-coupures de courant. La seconde est que l’onduleur permet de lisser les variations de fréquences et d’amplitude de la tension de service. Ces fluctuations peuvent générer des perturbations néfastes pour des mesures fines.

5.3 Installation des logiciels

Cette partie constitue l’essentiel du rapport de stage de Master M1 (printemps 2014) de Chahine ABBAS, étudiant du Master EEA de Montpellier II. La difficulté technique majeure vient du driver du câble usb-gpib pour linux. Agilent (maintenant keysight) ne garantit pas les drivers sous linux. Il existe cependant des drivers pour différentes distributions. La plateforme (quasiment la norme maintenant) NI-VISA ne peut pas tourner sur un Raspberry ; il fonctionne uniquement sur des processeurs types386, pas sur de l’ARM. Du coup il faut installer la librairie de commandes (en fait c’est une plateforme) linux-gpib sur le Raspian qui remplace presque complètement NI-VISA. Cette librairie permet d’installer des drivers GPIB mais aussi des fonction en différents langages (Perl, Python, etc... ). Cependant sur le Raspberry, ceci nécessite tout d’abord d’installer et de démarrer sur le noyau "vmlinuz-3.10-3-rpi "sur le Raspberry. Nous proposons, ici l’ordre dans lequel les installations ont fonctionné sur le Rapberry, soit :

  1. Installation de Python et de ses modules
  2. Installation de la bonne version de vmlinuz
  3. Installation du linux-gpib
  4. Branchement et chargement du firmware du câble

5.3.1 Python

Python est installé par défaut sur la distribution Raspbian, comme sur la plupart des distributions Linux. Nous utilisons, ici, la version Python 2.7 supportant le plus de librairies nous intéressant. Pour éviter les souscis de conflits lors d’installation de distribution complète telle ANACONDA , nous avons opté pour l’installation séparée des modules. Comme le Raspberry ne sert ici que de contrôle local aux instruments, nous n’avons besoin d’aucun module autre que le linux-gpib. Cependant, pour installer simplement les modules de tracé de courbes ou de traitement mathématiques, il est possible d’utiliser le paquet setuptools qui permet une installation plus simple des modules Python.

~ $ sudo apt-get install python-setuptools

Puis les extensions voulues par la commande

~ $ sudo easy_install module souhaité

. Le seul module réellement utile dans notre distribution est iPython sans le notebook (trop lourd pour une utilisation à distance sur Raspbian).

5.3.2 Installation du vvmlinuz-3.10-3-rpi sur le Raspberry

Pour effectuer l’installation de linux-gpib sur un Raspberry deux tutoriaux magiques sont à suivre :

  1. Mise à jour de la liste des paquets linux :

    ~ $ cat /etc/apt/sources.list
    deb http : //mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi
    ~ $ sudo apt-get update
    ~ $ sudo apt-get install linux-image-rpi-rpfv
  2. Modification du fichier de démarrage "/boot/config.txt" pour démarrer sur un nouveau noyau
    1. aller dans le répertoire /boot

      ~ $ cd /boot
    2. édition du fichier de configuration par l’éditeur nano

      /boot $ sudo nano config.txt
    3. On rajoute à la fin du fichier les lignes suivantes

      kernel=vmlinuz-3.10-3-rpi
      initramfs initrd.img-3.10-3-rpi followkernel
    4. On commente les autres lignes en y plaçant des # devant, afin que la fin du fichier ressemble à ça :

      ************* SNIP ***********************
      # Set params for "raspbian debian-style kernel" boot
      #kernel=vmlinuz-3.2.0-4-rpi
      #initramfs initrd.img-3.2.0-4-rpi followkernel
      #kernel=vmlinuz-3.6-trunk-rpi
      #initramfs initrd.img-3.6-trunk-rpi followkernel
      kernel=vmlinuz-3.10-3-rpi
      initramfs initrd.img-3.10-3-rpi followkernel
      ************* SNIP ***********************
  3. Installation outils système

    /home $ sudo apt-get install linux-headers-rpi-rpfv
    /home $ sudo apt-get install build-essential texinfo texi2html libcwidget-dev tcl8.4-dev tk8.4-dev libncurses5-dev libx11-dev binutils-dev bison flex libusb-1.0-0 libusb-dev libmpfr-dev libexpat1-dev tofrodos subversion autoconf automake libtool

5.3.3 Installation linux-gpib sous Raspbian

Une succession de commandes pour charger, installer et configurer linux-gpib sans le répertoire de travail (par défaut /home/pi) sour Raspbian :

  1. Création du répertoire linux-gpib :

    ~ $ mkdir linux-gpib
    ~ $ cd linux-gpib
  2. Importation de linux-gpib dans ce répertoire :

    ~/linux-gpib $ svn checkout svn ://svn.code.sf.net/p/linux-gpib/code/trunk linux-gpib-code
  3. Construction et configuration du linux-gpib dans ce répertoire :

    ~/linux-gpib $ cd linux-gpib-code/linux-gpib/
    ~/linux-gpib/linux-gpib-code/linux-gpib $ ./bootstrap (peut être un peu long )
    ~/linux-gpib/linux-gpib-code/linux-gpib $ ./configure (peut être un peu long )
    ~/linux-gpib/linux-gpib-code/linux-gpib $ make | tee gpib-make-log
    ~/linux-gpib/linux-gpib-code/linux-gpib $ sudo make install
    ~/linux-gpib/linux-gpib-code/linux-gpib $ sudo depmod -a
    ~/linux-gpib/linux-gpib-code/linux-gpib $ sudo ldconfig

A ce stade le linux-gpib est installé. Le câble peut être installé.

5.3.4 Installation du firmware des câbles Agilent 82357 (A et B)

Pour fonctionner sur le Raspberry le câble usb Agilent 82357 (A ou B) nécessite un firmware. C’est, en fait, le logiciel qui vient s’installer dans le micro-contrôleur du câble lorsque ce dernier est alimenté donc branché sur l’ordinateur. Le fabricant garantit le fonctionnement de son câble uniquement sous windows et livre le firmware pour ce système d’exploitation uniquement.

La question importante à se poser avant d’installer un firmware sous linux, non garanti par le fabricant est de savoir si l’installation du firmware est réversible ou non. Autrement dit est ce qu’il est possible de refaire marcher un câble Agilent 82357 sous Windows, après avoir essayé de le faire fonctionner sous linux ? Nous avons la chance d’avoir plusieurs câbles à disposition : nous avons donc pu faire plusieurs essais. La conclusion est encourageante. De notre expérience, l’installation du firmware sous linux est réversible. Il suffit de débrancher le câble. L’installation du firmware dans le câble n’est pas permanente visiblement, elle n’est valable que pendant la session de travail. Après avoir débranché le câble, il est possible de le rebrancher sous une machine Windows sans problème. En fait dès que l’ordinateur est éteint ou redémarré, il faut réinstaller le firmware. Sous Windows ceci est fait de façon automatique, pas sous linux a priori.

Les commandes pour l’installation du firmware des câbles Agilent 82357 (A ou B) sont quasiment les mêmes.

  1. Dans un premier temps, on active les modules complémentaires dans le système Raspbian.

    ~ $ cd linux-gpib/linux-gpib-code/linux-gpib
    ~/linux-gpib/linux-gpib-code/linux-gpib $ sudo modprobe ./drivers/gpib/agilent_ 82357a

    A priori c’est bien dans ce répertoire qu’il faut lancer le "modprobe".

  2. On télécharge le logiciel permettant de charger le firmware dans le câble. Il s’appelle fxload. La commande de téléchargement copie directement dans le répertoire courant. Penser à bien vérifier être dans le répertoire ~/linux-gpib/linux-gpib-code/linux-gpib, sinon les explications suivantes seront décalées.

    ~/linux-gpib/linux-gpib-code/linux-gpib $ wget http ://goo.gl/1BQz90
  3. On décompresse ce fichier (par la commande efficace mais un peu pénible tar)

    ~/linux-gpib/linux-gpib-code/linux-gpib $ tar xvfz 1BQz90

    Le blog eevblog propose une autre commande pour le détarer : tar xvfz gpib_ firmware-2008-08-10.tar.gz
    Cette commande fonctionne assez mal (ne doit plus être à jour).

  4. Installation du chargeur de firmware, (peu importe le répertoire courant à priori)

    ~/linux-gpib/linux-gpib-code/linux-gpib $ sudo apt-get install fxload

    A ce stade le Raspberry est presque prêt pour faire fonctionner le câble. Il faut donc brancher le câble sur le Raspberry. Seule la LED de contrôle rouge du câble est alors allumée : READY, FAIL, ACCESS.

  5. Pour que le câble soit repéré par le Raspberry, il faut modifier le fichier /etc/gpib.conf pour y faire apparaître le type de câble :

    ~/linux-gpib/linux-gpib-code/linux-gpib $ cd /etc
    /etc $ sudo nano gpib.conf
  6. Modifier la ligne board_ type = " ? ? ?ni_ pci ? ? ?" par board_ type = "agilent_ 82357a". Le début du fichier doit ressembler alors à ça :

    /

    ***********************************************************************
    GPIB.CONF IEEE488 library config file
    –––––––––-
    copyright : (C) 2002 by Frank Mori Hess
    (C) 1994 by C.Schroeter
    email : fmhess@users.sourceforge.net
    **************************************************************************

    */
    /***************************************************************************
    *
    * Syntax :
    *
    * interface ... starts new interface board section
    * device ... device configuration
    *
    ***************************************************************************/

    /* This section configures the configurable driver characteristics
    * for an interface board, such as board address, and interrupt level.
    * minor = 0 configures /dev/gpib0, minor = 1 configures /dev/gpib1, etc.
    */

    interface {
    minor = 0 /* board index, minor = 0 uses /dev/gpib0, minor = 1 uses /dev/gpib1, etc.*/
    board_type = "agilent_82357a" /* type of interface board being used */
    name = "violet" /* optional name, allows you to get a board descriptor using ibfind()*/
    pad = 0 /* primary address of interface */
    sad = 0 /* secondary address of interface */
    timeout = T100s /* timeout for commands */
    ....

    Nous reviendrons sur ce fichier dans la section scripts Python, car on peut y configurer les appareils.

  7. Il faut maintenant identifier l’adresse du câble sur l’ensemble des ports usb du raspberry par la commande "lsusb". On se place avant dans le répertoire où le firmware est stocké : a priori c’est
    ~/linux-gpib/linux-gpib-code/linux-gpib/gpib_firmware-2008-08-10/agilent_82357a
    Dans ce document on ne représente plus cette information dans la ligne de commande du raspberry, elle est trop longue. On la notera "/...82357a $"

    /etc$ cd ~/linux-gpib/linux-gpib-code/linux-gpib/gpib_firmware-2008-08-10/agilent_82357a
    /...82357a $ lsusb
    Bus 001 Device 002 : ID 0424 : 9514 Standard Microsystems Corp.
    Bus 001 Device 001 : ID 1d6b : 0002 Linux Foundation 2.0 root hub
    Bus 001 Device 003 : ID 0424 : ec00 Standard Microsystems Corp.
    Bus 001 Device 008 : ID 0957 : 0107 Agilent Technologies, Inc.
    Bus 001 Device 005 : ID 1a40 : 0201 Terminus Technology Inc. FE 2.1 7-port Hub
    Bus 001 Device 006 : ID 0781 : 5571 SanDisk Corp.
    Bus 001 Device 007 : ID 1307 : 0165 Transcend Information, Inc. 2GB/4GB Flash Drive

    On reconnait le câble à son fabricant (Agilent). Il porte ici le numéro 008.

  8. Chargement du firmware par la commande "fxload". C’est ici que les deux câbles diffèrent un peu.
    Pour le câble 82357 B, il faut lancer la commande "fxload" deux fois. Entre ces deux commandes, l’adresse usb du câble change, il faut donc la récupérer avec la commande "lsusb" avant de relancer "fxload" avec la nouvelle adresse. La commande fxload est pleine d’options. Voici une syntaxe convenable :

    /...82357a $sudo fxload -t fx2 -D /dev/bus/usb/001/008 -I ./measat_releaseX1.8.hex

    Les voyants LED du câble peuvent alors changer d’état. L’identifiant usb du câble a changé. On le vérifie par la commande "lsusb" à nouveau.

    /...82357a $ lsusb
    Bus 001 Device 002 : ID 0424 : 9514 Standard Microsystems Corp.
    Bus 001 Device 001 : ID 1d6b : 0002 Linux Foundation 2.0 root hub
    Bus 001 Device 003 : ID 0424 : ec00 Standard Microsystems Corp.
    Bus 001 Device 009 : ID 0957 : 0107 Agilent Technologies, Inc.
    Bus 001 Device 005 : ID 1a40 : 0201 Terminus Technology Inc. FE 2.1 7-port Hub
    Bus 001 Device 006 : ID 0781 : 5571 SanDisk Corp.
    Bus 001 Device 007 : ID 1307 : 0165 Transcend Information, Inc. 2GB/4GB Flash Drive

    A priori l’identifiant doit s’incrémenter de la valeur "1". C’est ce qui se passe dans notre cas. Il peut arriver que ce soit différent. C’est ce nouvel identifiant qu’il faut invoquer dans le nouvel appel à "fxload".

    /...82357a $sudo fxload -t fx2 -D /dev/bus/usb/001/009 -I ./measat_releaseX1.8.hex

    Normalement à ce stade, les 3 LED sont allumées : READY, FAIL, ACCESS.

    Pour le câble 82357 A, de notre expérience, une seule invocation de la commande "fxload" suffit sur l’identifiant récupéré par la commande "lsusb". Ainsi si le câble possède l’identifiant 008, comme dans l’exemple du point précédent.

    /...82357a $sudo fxload -D /dev/bus/usb/001/008 -I ./82357a_fw.hex

    Normalement à ce stade, les 3 LED sont allumées : READY, FAIL, ACCESS.

  9. Il est nécessaire maintenant d’éxécuter un script automatique de configuration qui permettra à l’ordinateur de communiquer avec le câble. Ce jeux de commandes sont communes au câble A et au câble B. Dans un premier temps, il faut changer les attributs du fichier /dev/gpib0, pour que les scripts puissent écrire dedans, puis exécuter la commande /usr/local/sbin/gpib_ config :

    /...82357a $ sudo chmod 666 /dev/gpib0
    /...82357a $ sudo /usr/local/sbin/gpib_config

    Alors seule une LED de contrôle de câble est allumée : READY, FAIL, ACCESS. Ce dernier voyant clignote lors d’un accès de l’ordinateur au câble.
    A ce stade, le Raspberry peut communiquer avec le câble.

5.3.5 Redémarrage du câble

Lorsqu’il y a une panne complète (plus de courant, ou gros pépin qui nécessite l’extinction et le redémarrage du Raspberry), de notre expérience, une fois le Raspberry rallumé, il suffit de recharger le firmware dans le câble en faisant les étapes 7, 8, 9 de la section Installation du firmware. Ceci n’est pas automatique, et nous n’avons pas essayé de l’automatiser.

5.4 Configuration des instruments

Nous présentons ici quelques élements de configuration de la chaîne GPIB, pour exemple. Tout d’abord quelques lignes du fichier /etc/gpib.conf, dans lequel il est possible (mais ce n’est pas une obligation) de déclarer certaines propriétés des appareils connectés au câble.

...
interface {
minor = 0 /* board index, minor = 0 uses /dev/gpib0, minor = 1 uses /dev/gpib1, etc.*/
board_type = "agilent_82357a" /* type of interface board being used */
name = "violet" /* optional name, allows you to get a board descriptor using ibfind()*/
pad = 0 /* primary address of interface */
sad = 0 /* secondary address of interface */
timeout = T100s /* timeout for commands */
....}
...

Le premier objet "interface" est le câble. Il a, ici, pour nom "violet". La variable timeout correspond au temps au bout duquel le contrôlleur va estimer que si l’appareil sondé n’a pas donné de réponse, la requête doit être arrêtée. Pour notre configuration, nous avons mis cette valeur au maximum (100 secondes) pour tous nos appareils, puisque nos mesures sont sur une longue échelle de temps.

/* Now the device sections define the device characteristics for each device.
* These are only used if you want to open the device using ibfind() (instead
* of ibdev() )
*/
device {
minor = 0 /* minor number for interface board this device is connected to */
name = "multimeter" /* device mnemonic */
pad = 1 /* The Primary Address */
sad = 0 /* Secondary Address */
eos = 0xa /* EOS Byte */
set-reos = no /* Terminate read if EOS */
set-bin = no /* Compare EOS 8-bit */
timeout = T100s
}
...

L’objet "device" suivant est nommé "multimeter". Possédant la valeur de "pad=1", il correspond à l’appareil ayant l’adresse 1 sur la ligne gpib. Pour notre cas, cette valeur correspond à l’adresse gpib donnée au multimètre par commande locale.

...
device{
minor = 0 /* minor number for interface board this device is connected to */
name = "power_supply" /* device mnemonic */
pad = 2 /* The Primary Address */
sad = 0 /* Secondary Address */
eos = 0xa /* EOS Byte */
set-reos = no /* Terminate read if EOS */
set-bin = no /* Compare EOS 8-bit */
timeout = T100s
}
...

Il en va de même pour l’objet nommé "power_supply" qui correspond à l’adresse 2 de la ligne gpib. En l’occurence, il s’agit de l’alimentation stabilisée.

Si on ne souhaite pas utiliser le fichier /etc/gpib.conf, il faut utiliser la commande Gpib de Python, en ligne de commande. Exemple : multimetre= Gpib(0,1,timeout=15) affectera à l’objet multimètre les propriétés de l’appareil adressé1 sur la ligne gpib (le 0 étant la ligne, donc le câble) un timeout de 15 s. De notre expérience, pour une configuration matérielle ayant pour vocation de ne pas trop évoluer, il est bien plus pertinent et confortable de configurer les appareils dans le fichier /etc/gpib.conf. En effet, il peut arriver que les codes gpib "fin de ligne", "retour chariot", doivent être modifiés selon les appareils et le protocole de mesure, et il vaut vraiment mieux les fixer une fois pour toute.

5.5 Les scripts Python

Pour une lecture adéquate, penser à configurer votre machine pour que les ".py" s’ouvrent avec l’éditeur de texte de votre choix.



Nom du fichier Description


ScriptTriple.py Script principal de commande de la mesure de grille flottante
successives (3mesures à différentes tensions de drain espacées par une durée arbitraire)


Donnees.txt Données de configuration des mesures et les noms des fichiers de sortie


Carac.py Script faisant la caractéristique du transistor en V G et V D


DonneesCarac.txt Données de configuration du script Carac.py


Gestionerreur.py Définitions des fonctions prenant en compte des erreurs de transfert gpib




Nous avons été amené à écrire des fonctions gpib "robustes", c’est à dire qui arrêtent automatiquement une mesure en cas d’erreur et qui bascule sur la suivante. Le détail de cette solution est abordé dans la section suivante.

5.6 Résolution des problèmes (bugs) logiciels

Le protocole gpib est un protocole complexe dans le quel le contrôleur gpib (le micro processeur du câble en l’occurence) est de hiérarchiser les communications entre les instruments branchés sur lui. En particulier, il doit prendre en charge les erreurs de transfert (ça ressemble un peu aux soucis d’IRQ dont les plus anciens joueurs sur PC se souviennent avec émotion). Pour cela, il y a des bits d’état que l’on peut sonder. Normalement, a priori il n’y a rien à faire c’est le contôleur qui s’occupe de tout (il y a un système de protocole nommé "handschake" qui gère automatiquement cela voir ce tutoriel ou cette explication ). Mais, évidemment, tout ne se passe pas comme ça.

Nous avons eu des "bugs" dans l’éxécution des scripts. C’est à dire que le script fonctinne et puis s’arrête inopinément, sans raisons évidentes. Généralement le message d’erreur est un message "Gpib error" qui pointe vers la non réponse d’une fonction "read" ou "write". Le gros souci dans notre cas, c’est que la mesure est basée sur une boucle infinie ou quasi-infinie. Nous voulons qu’en cas d’erreur dans le processus de mesure, ce dernier ci ne soit pas arrêté, et que la boucle continue, quite à perdre quelques mesures. Nous avons résolu la plupart de ces erreurs inopinées par troies voies : deux qui consiste à empêcher l’erreur gpib de remonter jusqu’au contrôleur, sauvant ainsi la boucle ; l’autre consistant à traiter l’erreur, grâce au bit d’état prévu à cet effet, à l’intérieur même de la boucle.

5.6.1 Temps d’attente entre deux instruction sur la ligne gpib

De façon générale, le processeur du PC de commande tourne beaucoup plus vite que l’ensemble de la chaîne gpib. Lorsqu’on lance un script, le contrôleur langage (Python en l’occurence) a fini d’envoyer l’ensemble du script dans le contrôleur gpib alors que ce dernier n’a pas terminé d’éxécuter la première instruction. Du coup, il sature et s’arrête avec un message d’erreur. Dans les scripts que nous avons développés, la commande "time.sleep" est intercalée systématiquement avant et après un envoi de commande à la ligne gpib, comme sur l’exemple suivant où le temps d’attente entre deux instructions est fixé à 0,1 seconde :

...
multimetre.write(config2)
time.sleep(0.1)
alimentation.write("INST :SEL P6V")
time.sleep(0.1)
...

Quoique fort intuitive et un peu simple, cette méthode est par expérience assez fiable. Il est nécessaire cependant d’essayer les différents temps d’attente pour ne pas allonger démesurément une éxécution de script. De notre expérience, un temps d’attente en centaine de millisecondes est, le plus souvent, très suffisant.

5.6.2 Réglage du timeout

Laisser le temps aux instruments de finir leurs mesures et de communiquer avec le contrôleur nous a permis aussi de diminuer le nombre d’erreurs de communication dans le bus gpib. La variable "timeout" a été systématiquement poussée à son maximum (100 secondes). Cette valeur est compatible avec notre protocole, nous faisons de quelques mesures par heure pour les mesures les plus rapprochées à quelques mesures par jour pour les plus éloignées les unes des autres. Cette variable se règle préférentiellement dans le fichier /etc/gpib.conf. Enfin pour optimiser le dialogue entre les instruments il est recommandé de vérifier que, par défaut, les appareils branchés sur le câble sont configurés avec le même "eos" (variable qui indique la fin d’instruction).

5.6.3 Consolider les scripts

La troisième voie est d’utiliser les scripts d’état du contrôle gpib pour passer à la mesure suivante en réinitialisant le câble en cas d’erreur. C’est la philosophie des modules "ecriture" et "lecture" qui redéfinissent les fonction "read" et "write" du linux-gpib. Dans les deux fonctions ecriture et lecture, la ligne importante est "except GpibError " qui vient interrompre la tentative de lecture. Les instructions qui suivent purgent le contrôleur, le câble puis les deux appareils (alimentation et multimètre)

...
except GpibError :
print’Erreur read : bypass ?’
# Réinitialisation des appareils
   cable.interface_clear()
... ...
# Reconfiguration des appareils
   multimetre.write(config1)
   time.sleep(0.1)
...

Cette façon de faire est robuste mais pas complètement sûre et ceci pour deux raisons.

  1. De notre expérience les occurences d’erreurs gpib se produisent pendant les fonctions "read" ou "write". Or dans notre script les appareils sont reconfigurés avec ces fonctions de base. Ils ne vaut mieux pas le faire avec la fonction robuste puisqu’il faudrait que cette fonction s’appelle elle-même, ce qui pourrait amener à des boucles sans fin. Nous avons misé sur la faible probabilité de l’occurence d’une erreur juste après le processus de réinitialisation.
  2. Il faut que la ligne gpib soit encore suffisament contrôlée par le contrôleur gpib pour que les commandes de purges (clear et rst) puissent passer. Or il se trouve que ce n’est pas toujours le cas. Nous expliquons ce cas de figure dans la partie suivante.

5.7 Problème matériel : Câble 82357 A versus câble 82357 B

Un bug n’a pas pu être résolu mais nous avons réussi, pour le moment, à le circonstancier. Il survient uniquement lorsque les deux appareils (multimètre DMM4050 et alimentation Agilent 3631 A) sont branchés sur la ligne gpib avec le câble Agilent 82357 B. De façon erratique mais certaine (c’est à dire qu’on ne sait pas quand, mais ça finit toujours par arriver), le script de mesure plante malgré toutes les précautions décrites dans la section précédente en particulier l’utilisation des fonctions robustes. En fait ces dernières ne passent pas au dessus de l’erreur car les fameuses instructions de réinitialisation des appareils gpib ne peuvent pas s’éxécuter. La ligne gpib est complètement bugguée, saturée, il devient impossible de la sonder. Elle ne répond plus aux instructions simples d’identification, de clear et de reset.

Après un grand nombre d’essais (qui ne sont pas finis), voila ce que l’on peut dire de ce bug de façon synthétique. Il se produit avec la chaîne de mesure :
Ordinateur-Câble Agilent 82357B - Multimètre DMM4050 - Alimentation 3631A

  1. Il se produit sur tous les système d’exploitation essayés : XP, XP dell portable, Raspbian sur Raspberry.
  2. Il se produit sur tous les PC essayés et qui fonctionnaient : Dell Attitude, Dell station Optiplex, Raspberry.
  3. Il ne se produit pas lorsque un seul appareil est sur la ligne gpib (multimètre ou alimentation).
  4. Il ne se produit qu’avec le câble Agilent 82357B. Avec le contrôleur gpib-usb Agilent 82357A, quand une erreur survient, le câble reste toujours accessible par la ligne de commande du PC et on peut donc purger la ligne gpib.

L’intuition expérimentale nous ferait dire que c’est plutôt le branchement de l’alimentation qui amènerait à ce bug. Nous sommes en train d’essayer une nouvele alimentation (plus récente) à l’Université d’Avignon pour pallier à ce problème. Il est possible que ce bug matériel ait son origine dans la disparité chronologique des appareils. En effet la distinction principale entre les deux câbles est la compatibilité des protocoles usb : le A est usb1, le B est compatible usb2.

Pour résoudre durablement ce problème, il faudrait faire des essais avec d’autres alimentations (en cours), d’autres multimètres (nous n’en avons pas d’autres modèles) et d’autres câbles : la plus sérieuse alternative (si l’on en croit les blogs) au 82357 serait le KUSB-488B de Keythley.
Pour le court terme, l’idée est donc, dans la mesure du possible, de conserver les câbles Agilent 82357A.


Références

[1]   W. D. BROWN AND J. E. BREWER, eds., Nonvolatile semiconductor memory technology : a comprehensive guide to undertanding and using NVSM devices, Wiley - IEEE Press, 1998.

[2]   _______, eds., Nonvolatile Memory Technologies with Emphasis on Flash : A Comprehensive Guide to Understanding and Using Flash Memory Devices (IEEE Press Series on Microelectronic Systems), Wiley-IEEE Press, 2008.

[3]   P. CANET AND J. POSTEL-PELLERIN, Photographie, IM2NP, 2014.

[4]   P. CAPPELLETTI, C. GOLLA, P. OLIVO, AND E. ZANONI, Flash Memories, Kluwer Academic Publishers, 1999.

[5]   P. CHIQUET, Etude et modélisation des courants tunnel. Application aux mémoires non-volatiles., PhD thesis, Université d’Aix-Marseille, Marseille, France, Novembre 2012.

[6]   G. MICOLAU, Contribution à la modélisation de problèmes de télédétection en électromagnétisme et Fiabilité des mémoires non volatiles, vol. Marseille, Habilitation à Diriger les Recherches, juin 2011.

[7]   J. POSTEL-PELLERIN, Fiabilité des Mémoires Non-Volatiles de type Flash en architectures NOR et NAND, PhD thesis, Université de Provence, Marseille, France, 2008.

[8]   _______, Photographie, IM2NP, 2014.

[9]   J. POSTEL-PELLERIN, G. MICOLAU, P. CHIQUET, J. MELKONIAN, G. JUSTE, AND C. GINOUX, Very low tunneling current measurements using the floating-gate technique in a very low-noise environment, in 20th IMEKO TC4 International Symposium, Beneveto, Italie, septembre 2014.

[10]   J. POSTEL-PELLERIN, G. MICOLAU, R. LAFFONT, F. LALANDE, C. L. ROUX, AND J. R. RAGUET, Flash type non volatile memories,, p355-399, Nova Edition, 2011.

[11]   C. L. ROUX, Etude de la fiabilité des mémoires non volatiles à grille flottante, physique, Université de Provence, Novembre 2008.

[12]   C. TEXIER, Mécanique quantique, Dunod, 2011.