Vous êtes sur la page 1sur 3

Ecole Nationale d'Ingénieurs de Carthage

Département GE- 3 Mécatronique OS-Embarqué

Problème 1: Simulation d'une perceuse automatique à colonne


I- Objectifs :

• Redécouverte de CubeMX
• Création des taches et ordonnancement

II- Description du système :


On se propose dans ce problème de vous guider pour réaliser la simulation de fonctionnement d'une
perceuse automatique à colonne. Cette perceuse est équipée des entrées/sorties suivantes :

Montee|Descente Arrêt Urgence

Réparation Défaut PB0 PB1


Bouton Arrêt Urgence
Rotation Moteur
STM32F4
PA1 PB2
Bouton Montee
Descente
PA2
Bouton Descente PB3
PA3 Montée
Capteur Position Haut
PA4 PB4
Capteur Position Bas
Défaut
PB7
Réparation défaut

Les entrées :
• Broche PB0 : fait l'acquisition de l'état du Bouton Arrêt d'Urgence, ce dernier peut être
actionné à n'importe quel moment du cycle.
• Broche PA1 : fait l'acquisition de l'état du Bouton Montée.
• Broche PA2 : fait l'acquisition de l'état du Bouton Descente.
• Broche PA3 : est reliée au Capteur Position Haut, qui se met à 1 lorsqu'il détecte la présence
de la tête de la perceuse.
• Broche PA4 : de même, elle est reliée au Capteur Position Bas.
• Broche PB7 : est reliée au Bouton Réparation Défaut, qui se met à 1 suite à un appui.

1
• Les sorties :
• Broche PB1 reliée à une LED: représente la Rotation du moteur de perceuse.
• Broche PB2 reliée à une LED: représente la Descente de la tête de la perceuse.
• Broche PB3 reliée à une LED: représente la Montée de la tête de la perceuse.
• Broche PB4 reliée à une LED: représente un Voyant de défaut.
Le cycle effectué par la perceuse est le suivant :
1) Dès l'appui sur le bouton Descente, la LED "Descente" est allumée et la perceuse se met en rotation
puis descend jusqu'à atteindre le Capteur de Position Bas. A ce moment les mouvements de rotation et
de descente sont arrêtés et la LED est éteinte.
2) Dès l'appui sur le bouton Montée, la LED "Montée" est allumée et la perceuse se met en rotation puis
descend jusqu'à atteindre le Capteur de Position Haut. A ce moment les mouvements de rotation et de
montée sont arrêtés et la LED est éteinte.
La gestion du Bouton Arrêt d'Urgence se fait comme suit :
1) Si l'Arrêt d'Urgence est actionné, la Rotation s'arrête et la perceuse remonte quelque soit l'endroit ou
l'on se trouve dans le cycle.
2) La led "Défaut" est allumée jusqu'à ce que le défaut soit réparé (Bouton Réparation Défaut appuyé).
Tant que le défaut n’est pas réparé l'appui sur les boutons Descente et Montée est ignoré.
Lorsque le défaut est réparé la LED "Défaut" est éteinte.
III- Résolution de problème sans FreeRTOS
Pour réaliser le programme de commande de cette perceuse, créer un projet sous CubeMX avec la
configuration décrite précédemment, ensuite générer le projet MDK-ARM.
Dans cette première partie nous vous guidons pour développer le programme de commande de cette
perceuse sans l'utilisation de FreeRTOS.
Q1- Écrire la fonction Ft_Descente qui permet de lancer la rotation du moteur de la perceuse et la
descente de la perceuse jusqu'à ce que le Capteur Position Bas soit activé
Q2- Écrire la fonction Ft_Montee qui permet de lancer la rotation du moteur de la perceuse et la
montée de la perceuse jusqu'à ce que le Capteur Position Haut soit activé.
Q3- Comme il est précisé précédemment, le Bouton Arrêt d'Urgence est relié à la broche PB0 et il
est géré par une interruption sur un front montant. Écrire la routine d'interruption ayant
l'organigramme 1.
Q4- Donner le code source du programme principal ayant l'organigramme 2.

2
Organigramme 1 : INT Organigramme 2 main :

Début Début

Montée=1, Rotation = 0 INIT Sorties


Voyant défaut=1

Capteur Position Bouton Arrêt


Haut=1 d'urgence

Montée = 0
Voyant Défaut
allumé

Réparation
Défaut = 1
Ft_Descente

Ft_Montee

FIN

IV- Résolution de problème avec FreeRTOS


Q5- Proposer la division de ce problème en plusieurs taches sans utilisation d'interruption, et définir la priorité des
différentes tâches.
Q6- Nous proposons de commander cette perceuse en définissant les trois taches suivantes :
• "void vArret_Urgence_Task(void *pvParameters);"
• "void vMontee_Task(void *pvParameters);"
• "void vDescente_Task(void *pvParameters);"

Coder en C les différentes taches.

Q7- On veut déclarer les taches "vMontee_Task" et " vDescente_Task " une seule fois en les remplaçant par
une seule tache générique "vMD_Task". Implémenter cette nouvelle tache, en créant deux instances de cette
dernière. Préciser les modifications nécessaires au niveau du main.

Vous aimerez peut-être aussi