Вы находитесь на странице: 1из 4

Devoir 1

Systèmes embarqués
Date limite : Vendredi 10 Avril 2020 Avant 12H00

Systèmes embarqués

Exercice 1

On veut faire, à l'aide du schéma donné ci-dessus, les opérations suivantes :


• Lorsqu'on ferme l'interrupteur BP1 la LED D1 s'allume,
• Lorsqu'on ouvre l'interrupteur BP1 la LED D1 s'éteint.
• Lorsqu'on ferme l'interrupteur BP2 la LED D2 s'allume,
• Lorsqu'on ouvre l'interrupteur BP2 la LED D2 s'éteint.

Donnez un programme permettant de faire les opérations citées ci-dessus en gérant les interruptions
déclenchées par le changement d'état des interrupteurs BP1 et BP2.
N.B. Les interrupteurs sont initialement fermés.

Exercice 2 : Lecture d’un codeur incrémental.


On veut déterminer la valeur de la position angulaire de l’arbre d'un moteur équipé d'un codeur incrémental
en utilisant le montage suivant :

Faites varier la valeur de l’entrée analogique A0 pour faire varier la position angulaire et l’afficher.
Affichez en même temps la vitesse de rotation en Tours/min

Complétez ce qui manque dans le programme suivant pour pouvoir bien déterminer la vitesse VRPM et la
position (compteur) angulaires de l’arbre du moteur doté d'un codeur incrémental :

H. EL GAMAH 1/4 γ
Les différents états du codeur sont donnés par le schéma suivant :
Rotation en sens direct
A 1
- -
B + +
1 2 3 4 1 2 3 4 1
4 2
Rotation en sens inverse + +
A -
-
B 3

#define A 2
#define B 3 //3. Donnez la définition de la fonction codeur ?
#define EN1 9
void codeur()
????????
{
int etatPrec, etatAct; q1 = digitalRead(A);
int q1, q2; q2 = digitalRead(B);
long int compteur; if ((q1 == 1) && (q2 == 1)) etatAct = 1;
//_________________________________
if ((q1 == 1) && (q2 == 0)) etatAct = 2;
void setup()
{ if ((q1 == 0) && (q2 == 0)) etatAct = 3;
Serial.begin(9600);
if ((q1 == 0) && (q2 == 1)) etatAct = 4;
pinMode(A, INPUT);
pinMode(B, INPUT);
pinMode(12, OUTPUT); //. Complétez cette instruction
pinMode(13, OUTPUT);
switch (etatAct)
pinMode(EN1, OUTPUT);
{
digitalWrite(12, HIGH);
case 1: if (etatPrec == 4) compteur++;
digitalWrite(13, LOW);
analogWrite(EN1, 128); else if (etatPrec == 2) compteur-- ;
q1 = digitalRead(A); break;
q2 = digitalRead(B);
case 2: if (etatPrec == 1) compteur++;
else if (etatPrec == 3) compteur-- ;
// 1. Initialisez l'état du codeur :
break;
if ((q1 == 1) && (q2 == 1)) etatPrec = 1; case 3: if (etatPrec == 2) compteur++;
if ((q1 == 1) && (q2 == 0)) etatPrec = 2;
else if (etatPrec == 4) compteur-- ;
if ((q1 == 0) && (q2 == 0)) etatPrec = 3;
if ((q1 == 0) && (q2 == 1)) etatPrec = 4; break;
case 4: if (etatPrec == 3) compteur++;
// Utilisez la documentation pour comprendre le rôle de la
// fonction attachInterrupt else if (etatPrec == 1) compteur-- ;
attachInterrupt(0, codeur, CHANGE); break;
attachInterrupt(1, codeur, CHANGE);
}
// 2. Initialisez le compteur :
compteur = 0; etatPrec = etatAct;
}//________________________________ }
void loop()
{ ??????????
……… ????……. ??????????
……… ? ???….
Serial.println(compteur);
}

H. EL GAMAH 2/4 γ
Exercice 3
1. Dans une communication série de type RS232 (USART), le protocole de communication est :
10000 bauds 8 N 1 . [10000 Bauds 8 bits de données Pas de bit de parité Un seul bit de Stop]
Si on exécute les deux instructions suivantes :
Serial.begin(10000) ;
Serial.write(0x65) ;
Donnez la forme du signal qui sera porté par la ligne TX
TX
clk

2. Dans une communication série de type RS232 (USART), le protocole de communication est :
10000 bauds 8 N 1
Serial.begin(10000) ;
Serial.write( ?????? ) ;
Donnez en hexadécimal la valeur de l’information à envoyer dans la ligne TX (le paramètre de la fonction
Serial.write) pour avoir cette forme du signal :

TX
clk

3. Quelle est la durée de transmission d'un seul octet sur la ligne TX.

Rappel :
Frame Formats

H. EL GAMAH 3/4 γ
Exercice 4

Donnez un programme, basé sur le schéma ci-dessus, pour faire l’asservissement en position du moteur DC.
- Pour la période d’échantillonnage, utilisez le mode normal du TIMER 2 et définissez une
période T de 10ms.

- Pour le correcteur, utilisez, en premier lieu, uniquement le correcteur proportionnel.

𝜽𝜽𝒄𝒄 représente l’angle désiré (c’est la consigne) et 𝜽𝜽𝒎𝒎 représente l’angle mesuré.

Afficher la vitesse VRPM et la position (compteur) angulaires de l’arbre du moteur doté d'un codeur
incrémental :

Caractéristiques du moteur
Fin du devoir 1.

H. EL GAMAH 4/4 γ