Vous êtes sur la page 1sur 3

Problème 1: Commande et simulation d’un pont roulant par

FreeRTOS
I- Objectifs :

 Développer un programme multi-taches


 Implémentation du mécanisme de communication : Queues.

La figure suivante présente un pont roulant et son montage de simulation avec un STM32. Ce montage autorise
les actions suivantes :
• Marche/arrêt,
• Déplacement vers la gauche/droite du pont et mouvement de Montée/
Descente de la charge.

Butée Droite
Butée Gauche

Les butés gauche et droite sont deux capteurs qui représentent la fin des courses à gauche et à droite.
L'interconnexion du système de commande avec le STM32 est donnée par la figure suivante.

La spécification du montage de simulation est donnée par l’organigramme suivant ( Page 2).

1
2
On se propose de programmer en C le STM32 en se basant sur l'organigramme du système de la page 2 sans
utiliser le FreeRTOS.
1) Ecrire une fonction permettant la configuration du système?
2) Ecrire la fonction Montee_Descente qui traite la montée et la descente?
3) Ecrire la fonction Gauche_Droite qui traite le mouvement gauche et droite du pont?
4) Ecrire la fonction principale permettant de programmer l'application ?
5) Citer au-moins trois défauts fonctionnels de l'organigramme de la page 2 qui peuvent être résolus par
parallélisme des tâches du Système ?

Pour corriger ces défauts fonctionnels, on va subdiviser les traitements de l'organigramme en 4 tâches: (arrêt
d'urgence, marche/arrêt, montée/descente, mouvement gauche/droite). On utilisera ensuite le FreeRTOS pour
paralléliser les tâches. Les 4 tâches seront spécifiées dans les questions qui suivent.

6) void T1_arret_urgence(void* PvParameters): c'est la tâche la plus prioritaire, elle permet d'arrêter le
système quelque soit son état de fonctionnement et le remettre à zéro par la réinitialisation de tous les
indicateurs Leds. On doit tester l'état du bouton arrêt d'urgence tous les 100 Ticks de FreeRTOS.
Codez en C cette tâche ?

7) void T2_marche_arret (void* PvParameters): c'est une tâche communicante avec toutes les autres
tâches. Elle doit envoyer l'état ON/OFF du bouton Marche/Arrêt aux autres tâches. Ces dernières
n'exécutent les traitements qui y sont alloués que si l'état est ON.

4.a. Définissez les deux Queues: Mont_desc_Q et Gau_dro_Q?


4.b. Codez en C cette tâche en se référant à la partie adéquate de l'organigramme de la page 2?

8) void T3_montee_descente (void* PvParameters): Elle reçoit l'état de la tâche T2_marche_arrêt. S'il
est à l'état ON, elle fait appel à la fonction Montee_Descente. Codez en C cette tâche?

9) void T4_gauche_droite (void* PvParameters): Elle reçoit l'état de la tache T2_marche_arrêt. S'il est
à l'état ON elle fait appel à la fonction Gauche_Droite. Codez en C cette tâche?

10) Donner le code C de la fonction main ?

Vous aimerez peut-être aussi