DS ARS-I2 - APP16 . 1. Exercice 1 : LANGAGE C SUR PIC18F4550

Download Report

Transcript DS ARS-I2 - APP16 . 1. Exercice 1 : LANGAGE C SUR PIC18F4550

I.U.T. de Marseille
G.E.I.I. – APP16
2012-13
Informatique Industrielle
DS
DS ARS-I2 - APP16 .
1. Exercice 1 : LANGAGE C SUR PIC18F4550.
On dispose :
- d'un axe motorisé composé :
o d’un plateau mis en mouvement linéaire par un moteur à courant continu,
o de capteurs de fin de course du plateau,
o d'un codeur permettant de fournir des informations sur le déplacement du plateau,
o d'une carte d'interface pour adapter les signaux entre la carte de développement PIC et
l'axe motorisé,
- de la carte de développement PIC,
- D’un bouton poussoir GO permettant de démarrer le programme.
- D’un bouton poussoir STOP permettant de stopper le programme.
- D’un témoin lumineux LED permettant d’indiquer un disfonctionnement.
La longueur de l’axe permet un déplacement du plateau de 1 m.
Vis sans fin
Carte
PIC
Carte
Interface
STOP GO
LED
Codeur
Moteur
Capteur Butée
Gauche (CBG)
Plateau
Capteur Butée
Droite (CBD)
On souhaite réaliser un programme de test de l’axe motorisé (déplacement moteur, butées, codeur).
Déroulement :
Sur action sur GO, le moteur doit se positionner à droite, puis à gauche (test des capteurs de butée).
Ensuite, il doit avancer de 700 mm vers la droite.
Enfin, il doit effectuer en boucle les actions suivantes : déplacement de 400 mm vers la gauche puis
400 mm vers la droite, ….. (pour voir la dérive éventuelle du codeur).
Il interrompt son mouvement lorsqu’il y a appui sur STOP ou lorsqu’il atteint (ce qui ne devrait pas
arriver, mais il faut le prévoir) une butée. Si ce dernier cas se présente, on doit allumer la LED ! Un
appui sur GO relance alors le programme au début (déplacement vers la butée droite, ….).
Contrainte de développement :
Les entrées GO et STOP sont gérées par scrutation !! (=> pas par interruption !!!)
La gestion des butées est traitée par scrutation !! (idem)
La gestion du codeur est traitée par interruption !!
Si l’on atteint une butée pendant les aller-retours, on doit stopper le moteur !!
-1-
I.U.T. de Marseille
G.E.I.I. – APP16
2012-13
Informatique Industrielle
DS
Commandes et informations disponibles sur la carte d'interface.
Entrées :
- Les capteurs de butée droite CBD et gauche CBG sont actifs à l'état logique 1, ainsi que GO et
STOP
- Le codeur fournit une impulsion haute sur son signal Up à chaque fois que le plateau se déplace de
0,1 mm (vers la droite comme vers la gauche).
Sorties :
- Pour commander le moteur on dispose de 2 signaux : MA : Mise en marche du moteur actif à 1 et
DIR : sens de déplacement du plateau : 0 vers la droite, 1 vers la gauche.
- La LED est active à ‘1’.
Rq. : Lorsque le plateau se déplace, on reçoit des impulsions (tous les 0,1mm) sur l’entrée Up. C’est
cette entrée qui devra être traitée par interruption pour mettre à jour la position relative du plateau.
Ex.: si on part de 0 et qu'on reçoit 100 impulsions => on s’est déplacé de 10 mm.
Etapes de développement :
a) On considère que les bits d’E/S ont été définis préalablement. On peut donc les utiliser
directement. Ex. : MA = 1 ;
b) Utiliser le port B pour les entrées, le port D pour les sorties. L’interruption matérielle (signal Up)
doit être placée sur RB0 (=INT0) .
c) Ecrire les fonctions qui vont configurer le PIC : "init_ports" et init_interrupt".
d) Ecrire la fonction d'interruption générée par le signal Up. A quelle adresse doit se trouver cette
fonction si l’on utilise les interruptions hautes ? La nommer : void interrupt_high ( )
e) Ecrire le programme principal dans le void main( ).
Rappels :
La configuration et la gestion des interruptions passe par un travail avec les registres INTCON, PIE1,
PIR1, PIE2 et PIR2.
-2-
I.U.T. de Marseille
G.E.I.I. – APP16
2012-13
Informatique Industrielle
DS
2. Exercice 2 : VHDL.
-
-
On souhaite réaliser le même programme en vhdl.
Le programme sera constitué de 2 process dans la même architecture :
un process gèrera la position (correspond à la fonction d’interruption du prg C ci-dessus). Pour
cela, on déclarera un signal POS qui représentera la position en dixième de mm (limité donc à
10000) et de type entier. Ce signal s’incrémentera à chaque impulsion de Up (si DIR=0) ou se
décrémentera à chaque impulsion de Up (si DIR=1). La mise à 1 d’un signal RAZ_Pos (entrée du
process) remettra de manière asynchrone à 0 Pos.
Un second process gèrera le programme en déroulant la machine d’état ci-dessous :
Modèle
Commentaire :
N° état
MA DIR LED RAZ_Pos
Attente GO :
000
0
0
Dep. Droite :
001
GO
Dep.Gauche :
010
CBD
0
CBG
Dep D700 :
111
STOP
STOP
STOP
Raz codeur :
011
CBD
CBD
CBG
Dep D400 :
110
Pos=700
Dep G400 :
101
Dep D700 :
100
Pos=700
Pos=300
Rq. :
Pos et RAZ_Pos sont 2 signaux internes et doivent être déclarés dans l’architecture.
Les 2 process auront donc accès à ces 2 signaux.
A) Ecrire l’entité du composant à réaliser.
B) Ecrire l’architecture du système, y déclarer les 2 signaux Pos et RAZ_Pos, puis écrire le process
qui gère la position.
C) Ecrire le process qui gère le générateur d’états,
D) Ecrire le bloc combinatoire qui fixe l’état des sorties en fonction de l’état du générateur d’états.
-3-