Projet multidisciplinaire
4ième année Génie Physique
Commande d’un capteur de champ magnétique par microcontrôleur CAN
Benjamin Mestre
Michel Roussel
Tuteurs : M. Marc Respaud (INSA)
M. Rémi Planes (UPS)
Remerciements
Ce projet s’est déroulé tout au long de l’année et s’inscris dans une démarche dans notre futur travail d’ingénieur.
Ce rapport présente dans sa globalité l’avancé du projet, son but.
Nous tenons à remercier nos tuteurs Marc Respaud et Rémi Planes pour nous avoir encadré au cours et aussi pour leur disponibilité et leur conseils qui nous ont bien aidé dans l’avancé du projet.
Nous tenons à remercier aussi le département Génie Mécanique et notamment Bruno Castanié et Ali pour leur coopération en vue de positionner l’ensemble capteur et microcontrôleur dans l’enceinte du bras robotisé. Finalement dans le but de ne pas alourdir le robot et risquer d’abimer le moteur nous avons préféré rallonger les fils plutôt que de construire un support pour imbriquer le tout. Le fait de rallonger les fils ne diminue en rien le signal et la rapidité d’acquisition contrairement à ce que nous pensions avant.
Sommaire
I. Description du projet
I.1. But du projet
I.2. Prise en main du projet
II. Matériel employé
II.1. Inventaire détaillé
II.1.a. Le capteur de champ magnétique
II.1.b. Le capteur de température et d’humidité
II.1.c. La plaquette de liaison
II.1.d. Le microcontrôleur
II.1.e. Autre matériel
II.2. Les branchements
III. Travail réalisé
III.1. Développement du projet
III.1.a Actualisation de la partie du programme gérant le capteur de champ magnétique.
III.1.b Conversion vers Labview
III.2. Phase de tests
IV. Bilan du projet
IV.1. Bilan technique
IV.2. Bilan pédagogique
V. Annexes
I. Description du projet
I.1. But du projet
Notre projet est en relation avec l’université Paul Sabatier et vise à créer une série de Travaux Pratiques au sein de l’IUP d’Instrumentation. Nos deux tuteurs M. Respaud et M. Planes sont en charge de ces Travaux Pratiques et souhaitent la mise en place d’une Interface Homme Machine pour commander un microcontrôleur pour que les étudiants de l’IUP puissent se former. Ce microcontrôleur est relié à un capteur qui va mesurer le champ magnétique, ce qui donne un côté ludique et utile à ces Travaux pratiques.
Projet en relation avec un autre binôme
Notre projet est en relation avec un autre binôme de 4 GP Richard Yune et Matthieu Joly qui doivent piloter via un programme et une interface en Labview un bras robotisé se déplaçant sur trois axes. Notre capteur de champ magnétique sera placé sur ce bras et pourra ainsi aller mesure des champs crées par une bobine dans un certains volume.
Tout l’intérêt de notre projet sur le plan purement gestion, était de travailler en relation avec ce binôme et leur tuteur pour pouvoir mettre en commun nos deux manipulations.
I.2. Prise en main du projet
Pendant deux années consécutives deux binômes de 4 GP ont commencé et avancé le projet. Nous avions pour but de poursuivre celui-ci et dans l’idéal de pouvoir le finir. Au début nous avions donc une partie du code de programmation sous CVI concernant le pilotage du capteur via le microcontrôleur CAN.
Il nous a fallu dans un premier temps reprendre le travail déjà réalisé par les deux binômes et notamment lire et comprendre le code mis en œuvre. Celui-ci n’était pas encore fini et ne permettait pas l’acquisition d’une mesure viable.
Nous avons donc repris ce code afin de comprendre quelles erreurs menaient à ces résultats. On a bien sûr rajouté des parties à ce code en vue de l’améliorer.
Relecture du programme
Cette relecture du code nous a permis de comprendre plus facilement de quoi il était question dans ce projet. On a en effet pu suivre les différentes parties du programme et leurs actions sur le microcontrôleur. L’interface IHM en CVI avait déjà été commencée par les 2 binômes précédents. Cette interface nous a montré la séparation entre le travail que doit réaliser l’utilisateur sur l’ordinateur pour piloter le microcontrôleur et le code en C qu’il faut rentrer dans celui-ci pour commander le capteur. Ces deux phases de la programmation permettront d’acquérir directement les mesures réalisées par le capteur sur l’interface de l’ordinateur.
On s’est vite rendu compte que le programme était incomplet bien que toutes les bases de celui-ci aient été codées.
II. Matériel utilisé
II.1. Inventaire détaillé
Pour mener notre projet à bien nous avons à notre disposition un certain nombre d’appareils dont nous allons faire l’inventaire et le détail de leurs caractéristiques. Tout ce matériel était déjà présent du fait des autres binômes et l’on n’a jamais eu d’appareils à acheter.
II.1.a. Le capteur de champs magnétique
Le capteur est un Xensor Integration XEN-1200 qui mesure le champ magnétique selon 3 axes. Ce capteur est basé sur le principe de mesure par effet hall et les 3 sondes qui le composent mesurent le champ magnétique suivant les 3 directions de l’espace. Ces sondes sont reliées à un amplificateur opérationnel qui amplifie le signal de sortie pour être ensuite envoyé vers la plaquette et le microcontrôleur. Ce capteur est alimenté en +5V. On peut voir sur la figure ci-dessous les photos ci-dessous symbolisant les broches du capteur qui sera branché sur la plaquette.
Figure 1. Vue de dessus et de dessous du capteur
On voit bien les 3 sondes sur la vue de dessus, avec les différentes pistes et la vue de dessous avec les câbles correspondants. Les pistes sont détaillées sur la figure suivante.
Figure 2. Schéma représentant les broches avec leur fonction associée.
II.1.b. Le capteur de température et d’humidité
Ce capteur est un Sensirion SHT15, il mesure l’humidité relative grâce à un capteur capacitif. La mesure de température se fait à l’aide d’un transistor CMOS à base de Si.
Ce capteur doit être alimenté directement à partir de la plaquette, donc sur 5V.
A gauche : Figure 3. Schéma et détails des pins du capteur de température et d’humidité
Ci-dessous : Figure 4. Chronogramme d’une mesure du capteur
Les formules ci-dessous permettent au capteur de calculer l’humidité relative et la température de l’environnement contenant le dispositif. Ces mesures ne peuvent pas être effectuées en parallèle d’une acquisition de champ magnétique car les 2 capteurs de champ et de température ne peuvent être branchés sur la plaquette en même temps. En effet ils utilisent les mêmes voix pour échanger avec le microcontrôleur.
II.1.c. La plaquette de liaison
Son rôle est simplement de relier le capteur au microcontrôleur. En effet le capteur possède des câbles bananes et un BNC et le microcontrôleur possède uniquement des pins somme entrées et sorties.
On trouve sur cette plaquette l’alimentation en +5V et la masse 0V du capteur. L’entrée MRST et la sortie SCLK pour le dialogue entre le capteur et le microcontrôleur. Ces deux voies permettent au micro de contrôler le capteur. Les connections CC0 et CC5 utilisées pour le Data Valid et le Chip Select. Les voies CC1 et CC2 servent à la ligne Data et CLK lors de l’utilisation du capteur de température, humidité. Pour finir la dernière connexion est le Pout0 la sortie de la PWM0 servant d’horloge au capteur.
II.1.d. Le microcontrôleur
Le microcontrôleur de type Infineon C167 est un microcontrôleur possédant de nombreux périphériques embarqués tels que des convertisseurs analogique numérique, des interfaces UART (RS232, SPI), des PWMs, …, il permet de faire la liaison entre la plaquette reliée au capteur XEN-1200 et l’ordinateur.
Dans ce microcontrôleur on trouve un circuit électronique dans lequel réside le microprocesseur. Le microcontrôleur est alimenté avec un adaptateur secteur qui fournit du +12V, en sortie la liaison entre celui-ci et l’ordinateur est de type RS-232 et la sortie avec les pins reliée à la paquette permet d’alimenter et de commander le capteur.
Sur le boîtier du micro, on a un interrupteur marche/arrêt, un bouton avec position programme/ « run » pour soit programmer la mémoire interne du microcontrôleur ou lui demander l’exécution du dernier programme qui a été chargé en mémoire. Un bouton Reset qui permet de réinitialiser l’exécution et les registres du microcontrôleur. Il existe aussi des DELs à titre d’information qui permettent à l’utilisateur de savoir ce que fait le micro avec le capteur (mesure, programmation…) et de vérifier le bon déroulement des opérations.
Figure 5. Le détail des pins associé au microcontrôleur
II.1.e. Autre matériel
En plus de ce matériel inhérent et essentiel au projet, nous avions à notre disposition différents appareils nous permettant de faire des tests dont voici la liste :
-
des câbles pour faire les liaisons
-
les ordinateurs présents en salle d’instrumentation du Génie Physique munis du logiciel LabWindows CVI, d’un compilateur de langage C et du logiciel National Instruments Labview.
-
un oscilloscope
-
un aimant étalon pour le capteur
-
les datasheets des 2 capteurs et du microcontrôleur
-
un câble série RS232 pour la liaison microcontrôleur/PC
-
les rapports des 2 binômes qui nous ont précédés
Le logiciel CVI et le langage C nous permettent de piloter l’ensemble en vue d’acquérir des mesures. Nous avons aussi utilisé le logiciel Labview car l’autre binôme avec le programme du contrôle du bras travaille sur Labview et donc il était important de réunir nos deux programmes en un seul pour simplifier l’interface aux utilisateurs finaux pour plus de visibilité et de simplicité d’utilisation.
A titre indicatif voici une photo du bras robotisé concernant le projet du binôme Richard Yune et Matthieu Joly.
Figure 6. Photo du bras robotisé à l’université Paul Sabatier
II.2. Branchements du dispositif
On relie tout d’abord le microcontrôleur à l’ordinateur par l’intermédiaire du câble série RS-232, et la sortie de la plaquette avec le câble multi-pins sur la sortie du microcontrôleur. On réalise ensuite les branchements entre le capteur de champ magnétique et la plaquette comme montrés sur la figure ci-dessous.
Figure 7. Photo de la plaquette avec le capteur de champ magnétique connecté
On a bien la broche de la masse pour le 0V, l’alimentation en +5V, le Data Valid en CC0 (câble blanc), le SDO sur MRST et le SCLK en SCLK pour l’échange de commande entre le capteur et le micro, le Chip Select en CC5 et enfin le BNC représentant l’horloge CLK sur le Pout 0. Remarquons que l’on pourrait aussi brancher ce dernier sur la sortie Pout 1, 2 ou 3 en modifiant légèrement le programme mais des tests ont montré que ces dernières ne s’initialise pas bien malgré les paramètres que nous leur envoyons.
Une fois le câblage réalisé, on met en marche le microcontrôleur et l’on peut lancer les étapes de communication sur l’interface CVI.
Il est important de bien respecter ce montage et pour plus de sécurité il est bon d’observer le capteur après l’avoir branché et mis en marche le microcontrôleur, pour ne pas que celui-ci surchauffe et grille, ce qui nous est déjà arrivé.
Voici à titre indicatif les branchements correspondants au capteur d’humidité et de température, que nous avons très peu utilisé au cours de notre projet, mais qu’il est bon de rappeler en cas d’utilisation de ce rapport comme notice d’utilisation de la chaine de mesure.
Figure 8. Photo du capteur d’humidité et de température relié à la plaquette
Tout comme le capteur précédant, on relie la broche GND au 0V de la plaquette, le câble d’alimentation VCC au +5V, le Data sur le CC1 et l’horloge CLK au CC2.
III. Travail réalisé
III.1. Développement du projet
Comme nous avons pu le voir dans la partie parlant du matériel, nos capteurs se connectent sur l’ordinateur par l’intermédiaire d’un microcontrôleur. Ce système nécessite donc la cohabitation de 2 programmes s’exécutant en parallèle, permettant ainsi la commande des capteurs et la récupération des mesures par l’intermédiaire du microcontrôleur.
Le premier programme réalisé sous CVI, gère l’interface avec l’opérateur et le traitement des données sur l’ordinateur, et le deuxième s’exécutant sur le microcontrôleur qui commande les capteurs et renvoie les mesures vers l’ordinateur. Ces deux programmes ont été développés parallèlement car leur interaction est la base de toute la chaine de mesure.
III.1.a Actualisation de la partie de programme gérant le capteur de champ magnétique
Comme nous l’avons déjà explicité dans les objectifs de ce projet, notre tache principale était la correction des programmes en vue d’obtenir une mesure de champ magnétique stable et cohérente. Pour ce faire nous avons donc repris les programmes qui avaient déjà été développés par les deux binômes précédents. Mais sachant que les mesures n’étaient pas correctes à la fin du précédent projet nous avons aussi décidé de relire les différentes notices pour bien comprendre le fonctionnement de toutes les fonctions utilisées et pouvoir diagnostiquer la source du problème.
Une fois cette analyse réalisée nous avons recodé la partie du One.c gérant la mesure de champ magnétique. En effet certaines parties du code nous avaient paru être écrite d’une façon étrange qui aurait pu être la source des problèmes rencontrés.
Le traitement des données dans le gsf_project.c avant l’affichage du résultat de la mesure a lui aussi été recodé pour la partie champ magnétique et modifié pour tout le reste. En effet pour facilité l’adaptation en DLL de toutes les fonctions présentes dans les Callback ces dernières ont été regroupées dans un fichier fonctions.c ce qui a nécessité de les retravailler un peu.
Objectif
|
fonction.c
|
Description de role de ces fonctions
|
Envoie et récupération
|
decoupage
|
Sépare un mot de 16 bits en deux octets et les envoie
|
de données
|
collage
|
Récupère deux octets envoyés par le microcontrôleur et les réassemble
|
Gestion de la communi-
|
Demarrage_RS_232
|
Démarre la communication série
|
cation RS 232
|
Stop_RS_232
|
Ferme le port de communication RS 232
|
Gestion de PWM
|
Reglage_PWM
|
Règle une PWM en signal symétrique ou asymétrique, avec une période H ou
|
|
|
H/64 et un pourcentage de temps haut réglable
|
|
Demarrage_PWM
|
Permet de démarrer les PWM précédemment réglées
|
Gestion des convertisseurs
|
Reglage_CAN
|
Valide les paramètres de conversion pour le CAN
|
analogique numérique
|
Demarrage_CAN
|
Démarre la conversion
|
|
Arret_CAN
|
Arrêt de la conversion
|
Gestion de la mesure de
|
Mesure_Champ
|
Réalise une mesure de champ magnétique en mode monocoup ou permanent
|
champ magnétique
|
Arret_Mesure_Champ
|
Arrête la mesure du champ
|
|
Demarrage_Capteur
|
Démarre le capteur de champ
|
|
Boussole_2D
|
Mode boussole 2D
|
Gestion de la mesure de
|
Init_Capteur
|
Initialise les capteurs
|
température/humidité
|
Mesure_Temp
|
Réalise une mesure de température
|
|
Mesure_Humi
|
Réalise une mesure d'humidité
|
|
Lecture_Statut
|
Lecture du registre de statut
|
Figure 9. Liste des fonctions présentes dans la bibliothèque de fonctions utilisée par le programme CVI
Deux types de mesures sont toujours disponibles, l’une dite « monocoup » permettant de réaliser une mesure tridimensionnelle du champ et l’autre « permanent » qui réalise cette même mesure mais en continu. Dans le deux cas les mesures suivant chaque direction s’affichent. Suite à l’une de nos réunions avec nos tuteurs une option boussole 2D et une autre de « moyennage » ont été ajoutées au programme.
III.1.b. Conversion vers Labview
L’autre objectif de notre projet une fois les mesures obtenues sous CVI correctes était de réaliser une jonction avec le projet du binôme Joly, Yune qui travaillaient de leur coté sur le contrôle d’un bras robotisé en Labview. Cette mise en commun permettrait alors de réaliser un système de mesure capable de cartographier un champ magnétique de manière tridimensionnelle.
Toutefois cette mise en commun est soumise a une exigence forte qui est que le code de la partie mesure et traitement des données reste en C car nos tuteurs pensent Labview beaucoup moins fiable et sûr. C’est pourquoi l’an dernier déjà le binôme qui nous a précédé a commencé à étudier le problème. Leur conclusion était que l’utilisation de DLL était le seul moyen d’exécuter du code en langage C sous Labview. Cependant elles avaient aussi conclus que pour la communication il serait plus facile de recréer les fonctions en Labview.
De notre coté après quelques expériences avec les DLL nous avons décidé d’utiliser cette méthode sur toutes les fonctions et non uniquement sur celles manipulant des données. La séparation que nous avions mise en place entre les Callback et les fonctions qui s’exécutaient à l’intérieur a pour cela été d’une grande aide. En effet il nous a simplement fallu repérer tous les endroits où ces fonctions faisaient appel à des éléments de l’interface et à les modifier. Effet on peut aisément remplacer un GetCtrlVal de CVI qui permet de récupérer une donnée de l’interface par un passage par valeur dans une fonction en C. Pour ce qui est des valeurs que l’on calcule et que l’on veut donc renvoyer vers l’interface on utilise en CVI le SetCtrlVal qui sera ici remplacé par un passage par pointeur dans notre fonction en C de la DLL.
Ce système s’est révélé très efficace et puissant car l’adaptation est au final assez rapide. Cependant notre première version du programme en Labview s’est montrée peut efficace car très lente lors de son exécution. Cette lenteur venait de l’appel permanent à notre DLL. En effet dans cette première version c’était à la DLL de définir quelles étaient les actions à réaliser en fonction de l’appui sur les différents boutons de la face avant. Après avoir réalisé que cette manière de structurer notre programme le rendait très lent et donc inexploitable nous avons révisé notre jugement et recommencé une nouvelle version qui laissait cette fois le soin de traiter les actions en face avant à une partie de code en Labview.
A partir de ce constat trois versions différentes du programme ont été crées pour permettre une mise en commun plus facile quelque soit la méthode de gestion des événements en face avant choisie par l’autre binôme. La première version utilise la structure événement de Labview pour gérer toutes les interactions avec la face avant et définir les actions à mettre en place. La troisième utilise le concept de machine à états dont les états sont générés par la position dans un tableau des différentes valeurs que peuvent prendre les boutons. La deuxième version est en quelque sorte un mélange entre les deux autres car elle utilise une conception en machine à état mais dont les différents états sont générés par un structure événement.
Ces trois versions se sont au final montrées fonctionnelles et nous permettent d’obtenir des mesures identiques à celles relevées sous CVI. On peut espérer grâce à elles avoir simplifié le travail de mise en commun de l’IHM qui n’a pu être réalisé cette année par manque de temps.
Les modifications nécessaires sur le capteur et la carte électronique de connexion n’ont pas non plus pu être réalisé cette année par manque de temps. Cependant il est acquis que le microcontrôleur et la carte de branchement devant être installé assez loin du bras de nouveaux câbles devront être installés sur le capteur. Ces câbles de 2 mètres devront être blindés pour ceux qui font transiter l’information. De plus, il a aussi été arrêté qu’une nouvelle carte électronique simplifiée serait réalisée permettant de réduire l’espace requis pour l’installation du système et réduisant au minimum les risques d’erreur lors de la connexion du capteur.
III.2. Phase de tests
Lors des différentes modifications que nous avons fait subir aux différents programmes nous avons tenu à faire des expériences pour vérifier le bon fonctionnement de nos modifications. Cependant au début du projet aucun changement du One.c ne donnait de résultat concluant. Nous avons donc pensé que notre capteur était défaillant mais après en avoir changé les résultats attendus n’étaient toujours pas présents. Nous avons donc continué les tests ainsi en changeant à chaque fois un élément différent sans obtenir d’amélioration. C’est finalement lors d’une de nos réunions avec nos tuteurs, en cherchant ensemble que nous nous sommes aperçu qu’en réalité notre One.c refusé de se compiler car il manquait un fichier. A l’occasion de ces tests nous avons aussi constaté des problèmes de paramétrage des PWM du microcontrôleur, en effet ce dernier est capable de générer 4 PWMs mais lorsqu’on essaie de les régler de manière identique alors seule la première est bien configurée.
Une fois le problème de compilation corrigé nous avons pu vérifier le bon fonctionnement de notre programme et commencer à effectuer des mesures de champ magnétique. Ici nous avons d’abord vérifié que notre capteur donné une valeur dans le bon ordre de grandeur pour le champ magnétique terrestre environ 47µT. La deuxième vérification que nous avons effectuée était de vérifier qu’en présence d’un aimant la valeur du champ augmentait et que lors du retournement de l’aimant la valeur du champ changeait de signe.
Une fois que nous avons était sûr que le capteur et le programme étaient fonctionnels nous avons voulu vérifié que nos mesures étaient fiables. Pour cela nous disposions d’un kit d’évaluation créé par le fabriquant du capteur et de leur propre logiciel de mesure. On comparant nos mesures aux leurs on peut remarquer un léger biais, quelques μT, entre elles. Il est cependant difficile de conclure sur la nature de ce biais car il est difficile d’être sur que les capteurs étaient bien exactement dans la même position lors de la mesure sachant que leurs supports sont de tailles différentes.
IV. Bilan du projet
Notre planning prévisionnel s’axé autour de 5 étapes aboutissant sur 4 livrables. Le diagramme de Gantt ci-dessous représente ce planning.
Figure 10. Diagramme de Gantt mis à jour en fin de projet
Les zones bleues représentent les étapes qui ont été réalisées et terminées
Les zones jaunes représentent des parties qui n’ont pu être finies par manque de temps ou annulé car finalement inutiles.
La zone verte représente un ajout qui a été réalisé par rapport au cahier des charges de départ.
IV.1. Bilan technique
Dostları ilə paylaş: |