Académique Documents
Professionnel Documents
Culture Documents
Informatique Industrielle
Informatique Industrielle
! ! ! !
Mathieu POREZ Bureau C122 E-Mail : mathieu.porez@mines-nantes.fr Sylvain LANNEAU Bureau C119 E-mail : sylvain.lanneau@mines-nantes.fr
Lobjectif de ce TP est de crer un ensemble de fonctions en langage C permettant la prise en charge (cf. http://beagleboard.org/bone) dun acclromtre MEMS 3 axes de type LIS331HH (cf. https:// www.sparkfun.com/products/10345 ) mont sur un pendule simple (cf. Fig. 1) par une application embarque dans une carte de dveloppement BeagleBone.
!
1.
Dans ce TP, nous utiliserons la carte de dveloppement BeagleBone (cf. Fig. 2 et http:// beagleboard.org/bone). Cette carte est un micro-ordinateur Linux, low-cost de la taille dune carte de crdit. Elle est base sur un processeur Texas Instrument AM3359 darchitecture ARM Cortex A8
! /8 1 !
Informatique Industrielle
(cf. http://fr.wikipedia.org/wiki/Architecture_ARM) de dernire gnration. Les caractristiques principales de la carte BeagleBone (blanche) sont :
un processeur Texas Instrument AM3359 720MHZ (http://www.ti.com/product/am3359) ; 256MB de mmoire RAM DDR2 400MHZ ; le support de lUSB (Host) ; le support dEthernet ; le support des protocoles sries SPI, I2C, UART et CAN ; un GPIO (c--d General Purpose Input/Output) de 65 ports ; 6 sorties PWM, 3 compteurs quadrature (codeur incrmentale) ; 8 entres analogiques 12 bits ; embarque une distribution Linux Ubuntu.
!
Fig. 2: La carte de dveloppement BeagleBone (blanche).
Il est noter, quune version BeagleBone Black existe. Cette dernire est plus rcente et plus puissante.
! ! ! ! !
2.
- Etape 1: Notre premier programme embarqu . Lobjectif de cette tape est daborder sur un cas
simple le dveloppement et la compilation dune application en langage C pour BeagleBone.
- Etape 2: Le capteur LIS331HH. Lors de cette tape, vous serez amens dvelopper pour la
carte BeagleBone un ensemble de fonctions en langage C permettant lutilisation du capteur dans une application.
Enfin, il est conseill de lire compltement le texte du sujet pour avoir une vue d'ensemble du travail demand avant de commencer le TP.
! /8 2 !
Informatique Industrielle
Procdure
Nous allons prsent diter, porter, et compiler notre premier programme embarqu en langage C. Avant de dbuter la procdure se trouvant ci-dessous, vous devrez mettre sous tension votre carte BeagleBone et aussi la connecter au rseau Ethernet de la salle de TP.
- Crez dans le rpertoire C:\TP_2I\, un rpertoire de travail, par exemple TP4. Ce rpertoire
contiendra par la suite vos fichiers sources.
! ! ! ! !
- Crez dans votre rpertoire de travail un script make, nomm Makefile. Editez avec notepad
++ le script. Copiez et collez les commandes suivantes dans votre fichier et sauvegardez le: CC = gcc EXEC = mon_projet SRCS = mon_fichier_source.o CFLAGS = -O2 all: $(SRCS) $(CC) -o $(EXEC) $(SRCS) mon_fichier_source.o: $(CC) -o mon_fichier_source.o -c mon_fichier_source.c $(CFLAGS) clean: @rm -rf *.o @rm -rf $(EXEC)
! /8 3 !
Informatique Industrielle
!
- La carte BeagleBone ne possdant pas de moyens daffichage et de saisi, nous allons ouvrir une
session distance scurise (protocole Secure Shell ou SSH - cf. : http://fr.wikipedia.org/wiki/ Secure_Shell ). Pour ce faire, excutez le programme PuTTY (client SSH) se trouvant dans lea rpertoire Windows C:\Program
Files (x86)\PuTTY\. Dans la zone Category,
choisissez Session - Logging. Dans la zone Host Name (or IP address), tapez ladresse IP de la carte BeagleBone se trouvant sur votre paillasse (ladresse IP est celle figurant sur ltiquette colle sur la maquette). Dans la zone Port, taper 22. Choisir le protocole Protocol SSH. Une fois ces tapes ralises, cliquez sur Open (cf. Fig. 3). Une invite de commande souvre. A la question Login as:, rpondez root. A la question Pass, rpondez temppwd . Une session Linux souvre, vous tes connects la carte de dveloppement BeagleBone !
! !
rpertoire C:\Program
Files
[IP_BeagleBone] .
as:, rpondez root. A la question Pass, rpondez temppwd. A laide de la commande cd, choisir \home\ubuntu\ comme rpertoire distant. Avec la commande lcd, choisir le rpertoire
C:\TP_2I\TP4\ comme rpertoire locale. Enfin, avec la commande put -r mon_projet,
copiez le rpertoire mon_projet et son contenu se trouvant dans le rpertoire locale dans le
! !
! /8 4 !
rpertoire distant.
- Compilez votre programme sur la cible. Dans linvite de commandes ouverte par puTTY.exe,
placez-vous dans le rpertoire \home\ubuntu\mon_projet. Pour compiler votre programme, tapez:
root@beaglebone:~/mon_projet# make all
Informatique Industrielle
! Si la compilation se droule sans erreur, le programme xcutable est cr. ! - Pour excuter votre programme, dans linvite de commandes ouverte par puTTY.exe, taper: !
mon_projet root@beaglebone:~/mon_projet# ./mon_projet
! Remarques: ! !
- Il est important de noter que vous serez amens raliser cette procdure de nombreuses
reprises durant ce TP. Ainsi, il est important de la maitriser.
- De nombreuses erreurs volontaires ont t glisses dans la procdure ci-dessus. Soyez prudent et
attentif ce que vous faites !
3.2.
Travail raliser
! !
4.
Dans cette section, nous allons dcrire en quelques mots lacclromtre 3-axes utilis comme base de notre capteur intelligent que nous nous sommes proposs de dvelopper. Puis, afin dinterfacer celui-ci notre carte BeagleBone, nous nous intresserons la gestion des I/O (Input/Output) sur cette plateforme Linux. Enfin, nous dcrirons le travail effectuer.
4.1.
Le capteur LIS331HH (cf. https://www.sparkfun.com/products/10345) est un acclromtre MEMS (http://fr.wikipedia.org/wiki/Microsystme_lectromcanique) 3-axes possdant une interface de communication srie protocole i2c (cf. http://fr.wikipedia.org/wiki/I2C). Il possde une plage de mesure rglable allant de +-6g +-24g avec une frquence d'chantillonnage pouvant atteindre 1kHz et une rsolution de 16 bits par axe. Enfin, sa tension dalimentation est de 3.3V.
! /8 5 !
Informatique Industrielle
Sous linux, la gestion dun port I/O (numrique, analogique ou bus de communication srie, etc ...) s'effectue en manipulant (en criture, en lecture ...) un fichier (Tab. 1 liste les fichiers relatifs au 2 bus i2c de la carte de dveloppement BeagleBone). Pour manipuler un fichier entre/sortie, nous utiliserons les fonctions open, write, read et close comme dfinies dans le fichier header <fcntl.h>.
Id 0 1
! ! ! ! ! o: ! !
! /8 6 !
- mode spcifie le mode d'accs au priphrique: O_RDONLY ouverture en lecture seule; O_APPEND mise jour dun fichier existant; O_WRONLY ouverture en criture seule; O_RDWR ouverture en lecture et criture.
Une fois le fichier I/O ouvert, pour effectuer une lecture ou une criture dans celui-ci, nous avons notre disposition les deux fonctions suivantes:
int int read( write( int int handle, handle, void void *buffer, *buffer, int int nbyte ); nbyte );
- handle est lidentifiant du fichier sur lequel la fonction (read() ou write()) doit oprer ; - buffer est un pointeur sur un tableau de donnes ; - nbyte est le nombre doctets lire ou crire.
Informatique Industrielle
); permet de fermer le fichier identifi par
! Avant de conclure cette section, intressons nous la procdure pour configurer un port I/O (par
exemple vitesse de transfert, adresse dun composant, parit, etc ... ). Pour ce faire, nous utilisons la fonction input-output control de la bibliothque <ioctl.h>, c--d:
! ! o: ! ! ! ! !
int
- id est lidentifiant dun fichier ouvert et li un priphrique ; - propertyname est le paramtre que lon cherche configurer ;
ioctl retourne 0 si la modification est russie, sinon elle retourne -1. Dans le cas qui nous concerne,
cette fonction nous permettra dindiquer au priphrique i2c du processeur de la carte BeagleBone ladresse du capteur MEMS LIS331HH, c--d:
ioctl(id,I2C_SLAVE,LIS331HH_ADDR);
o I2C_SLAVE est le paramtre relatif ladresse du priphrique i2c esclave (constante dfinie dans le header <linux/i2c-dev.h> ) et LIS331HH_ADDR est ladresse du capteur (constante dfinir !). Il est important de noter ici que lenregistrement du capteur est raliser avant toutes oprations de lecture et dcriture (read() et write()).
4.3.
Travail raliser
Q2- A laide du manuel de la carte BeagleBone (cf. BONE_SRM.pdf se trouvant sur Campus), identifier le port i2c utilis pour communiquer avec le capteur LIS331HH.
! Pour ce faire, vous pouvez aussi utiliser la commande UNIX suivante : ! ! ! o est lidentifiant du bus i2c scanner. !
i2cdetect i2cbus_id i2cbus_id
Q3- A laide du manuel du capteur LIS331HH (cf. LIS331HH.pdf se trouvant sur Campus) et des descriptions de fonctions faites la section 4.2, proposez des organigrammes permettant de:
! /8 7 !
Informatique Industrielle
! ! ! ! ! !
capteur.
- void acc_power_idle(void);. Cette fonction permet de mettre le capteur en mode
IDLE.
- float acc_read_acceleration(char axis);. Cette fonction retourne lacclration
Q5- Dveloppez un programme affichant toutes les secondes dans linvite de commande de la session Linux (puTTY), les 3 acclrations linaires en M/S^2 mesures par le capteur. Que constatez-vous ? Q6- A laide des mesures dacclration, calculez et affichez la position angulaire du pendule par rapport la verticale.
! /8 8 !