Vous êtes ici : Accueil > Activités > Terminale S > TP n°1 série n°5
Publié : 20 février 2009

TP n°1 série n°5

SERIE N°5 (TS)

TP1

 

 1- Préparation à la maison

Rappels sur le fonctionnement de la pompe : la pompe utilisée dans le système calypso est réversible (elle peut aspirer ou refouler), le volume d’eau pompée est fonction du nombre de tours du rotor de la pompe. Sur ce rotor est fixé un codeur incrémental percé de 24 encoches dont une grande (top au tour) qui nous permettra de contrôler le volume d’eau pompée.

Tâche n°1 « vidanger le tuyau d’aspiration » : avant le prélèvement d’un échantillon, il faut vider le tuyau d’aspiration de façon à ne pas mélanger l’eau de deux prélèvements différents.
Tâche n°2 « aspirer jusqu’à présence d’eau à l’entrée de la pompe » :

Fin de la tâche 2 :

Tâche n°3 « aspirer jusqu’à ce que flacon soit rempli avec le volume adéquat (fonction du nombre de tours du rotor de la pompe, programmé avec le microswitch 1 » :

Organigramme global du fonctionnement de la pompe :

 

Etude de la tâche « vidanger le tuyau d’aspiration » :
Lors de cette tâche la pompe doit refouler, le rotor de la pompe doit au moins faire 3 tours. Pour cela nous allons utiliser un des signaux du codeur incrémental fixé en sortie du motoréducteur : POSD0. POSD0 est le signal « top au tour », il est associé à la grande encoche du disque. POSD0 passe au niveau logique bas lorsque la grande encoche passe dans la fourche du capteur optique. Si nous comptons 4 fronts descendant de POSD0, nous avons la garantie que le rotor de la pompe a bien fait au moins 3 tours.
• Compléter le chronogramme suivant (le rotor pompe fait un tour en 5s)
Algorigramme de la tâche « refouler » :
• Dans cet algorigramme nous repérons deux structures « faire ……jusqu’à » (I et II) qui permettent de détecter un front descendant de POSD0 et une structure « pour i de 1 à 4 faire » (III), compléter l’algorithme.

Comparer la fonction en langage C correspondant à l’algo, et la compléter.

void vidanger()
unsigned char i, POSD0 ;
mise_a_1_PORTA_bit(2) ; //mise à 1 de refoul
message2() ;
for (i=1 ;i<=4 ;i=i+1)
do
POSD0=test_PORTB_bit(2) ;
while (…………………………) ;
delay_ms(100) ;
do
POSD0=test_PORTB_bit(2) ;
while (…………………………) ;
delay_ms(100) ;

mise_a_0_PORTA_bit(2) ; //mise à 0 de refoul


 Mise au point de la fonction « tache3_remplissage » :
Au départ de la tâche 3 l’eau est présente à l’entrée de la pompe. Le volume pompé est fonction du nombre de tours que va effectuer le rotor de la pompe, et ce nombre est fixé par le microswitch1 relié au PORT D. (variable nbre_de_tours).
Lors de cette tâche la pompe doit aspirer, le rotor de la pompe doit faire exactement « nbre_de_tours » tours. Pour cela nous allons utiliser un des signaux du codeur incrémental : POSD1. POSD1 est le signal associé à la grande encoche du disque et aux 23 petites. POSD1 passe au niveau logique bas lorsque la grande ou une des 23 petites encoches passent dans la fourche du capteur optique.
Si nous comptons 24 fronts descendants de POSD1, nous avons la garantie que le rotor de la pompe a fait 1 tour. (+/- la résolution du codeur : 360/24=15° pour le 1°tour).

Combien de fronts descendants de POSD1 faudra t’il compter pour garantir que le bon volume a été pompé. ?
total_fronts= …………………………………. ?

Nous allons donc utiliser une structure algorithmique de type : TANT QUE……………FAIRE

Algorigramme de la tâche 3 : compléter l’algorithme en vous inspirant de la tâche 1.

 

 

Programme C correspondant : le compléter et le faire vérifier.
void tache3_remplissage(unsigned char nbre_de_tours)
unsigned char i,total_fronts, POSD1 ;
message_tache3() ;

mise_a_1_PORTA_bit(………) ; //mise à 1 d’aspi

total_fronts=…………*………………… ;

i=0 ;
while (……………………)
// test front descendant de POSD1
do
POSD1=test_PORTB_bit(……) ;
while (………………) ;
delay_ms(100) ;
do
POSD1=test_PORTB_bit(……) ;
while (……………) ;
delay_ms(100) ;
i=i+1 ;



mise_a_0_PORTA_bit(3) ; //mise à 0 d’aspi

 

 2- Mise en œuvre du micro-contrôleur ATMEL et de ses périphériques.

 

Matériel : Un PC équipé d’un logiciel de programmation micro-contrôleur en langage C.
Un kit ATMEL connecté au PC.
Un afficheur LCD.
Un carte comportant un moto-réducteur associé à un capteur de position.
La carte présence d’eau associée à une sonde.

• A partir du schéma proposé en annexe 1, câbler les ports du kit Atmel à ses périphériques. Alimenter la carte distributeur et la carte présence d’eau (Vbat=12V).

La carte LCD affiche les messages d’information du fonctionnement.

N’ayant pas de poussoir à disposition c’est l’interrupteur SW0 de la carte distributeur qui commandera le départ cycle (dcy), pour un fonctionnement normal, cet interrupteur doit être remis en position repos.

 

Cycle d’appui sur dcy = SW0
Lancer le logiciel de programmation ATMEL, et charger le projet POMPE1.
Compléter la fonction tâche3.
Compiler et télécharger le programme dans la mémoire flash du microcontrôleur.
Effectuer les tests en programmant différents volumes d’eau à pomper avec le microswitch (3, 4, et 5 tours).
Appeler votre professeur et effectuer un test devant lui.


Modification :

Nous remarquons que dans la tâche 1 nous détectons un front descendant de POSD0 (bit 2 de PORT B) et que dans la tâche 3 nous détectons un front descendant de POSD1 (bit 3 de PORT B).
Il serait donc judicieux de créer un composant logiciel réutilisable permettant de détecter un front descendant sur n’importe quel bit du PORT B.
Front_desc_PORTB_bit(unsigned char i) ; avec i de 0 à 7, cette fonction ne se terminerait que lorsqu’elle aurait détecté un front descendant sur le bit i du PORT B.

Void Front_desc_PORTB_bit(unsigned char i)

do
while (test_PORTB_bit(i)==0) ;
delay_ms(100) ;
do
while ( test_PORTB_bit(i)==1)
delay_ms(100) ;



Cette fonction se trouve dans la bibliothèque INOUT2 (avec celles de la fonction INOUT), elle nous permettra de nous simplifier la vie (c’est le but des composants logiciels réutilisables)



Nouveaux algorigrammes et nouvelles fonctions tâche 1 et tâche 3 :
FONCTIONS
Modification du programme :

Modifier les tâches 1 et 2 ; (attention rajouter au début du programme #include<INOUT2> et supprimer #include<INOUT> , effectuer le test pour voir si tout se passe bien.


Modification :
Les flacons ne peuvent contenir une quantité infinie d’eau, il faut donc limiter le volume d’eau à pomper.
Nous désirons modifier le programme de façon à ce qu’il affiche un message d’erreur lorsque le nombre programmé avec le microswitch1 dépasse 8.
Pour cela il nous faut modifier l’algorigramme , l’algorithme et le programme en C.

 

 • A quelle structure algorithmique cette modification correspond t’elle (voir annexe)………………… ?

 

ALGORITHME LANGAGE C

 • Après vérification, charger le projet POMPE3, compléter le programme et tester (pour des raisons de taille limite de programme, l’affichage des tâches est supprimé). Si vous avez le temps ajouter une boucle POUR… FAIRE… de façon à faire clignoter le message 5 fois 1 seconde.

ANNEXE 1

Câblage du kit ATMEL et de ses périphériques (le moteur est connecté à la carte relais).

 

CONFIGURATION DES PORTS

PORTC= c7 c6 c5 c4 c3 c2 c1 c0
commande de l’afficheur LCD
PORTD= d7 d6 d5 d4 d3 d2 d1 d0
relié à un micro-switch

 


TP origine Lycée M. Genevoix, Bressuire

Documents joints