Aller au contenu
Achille BOSC
Tous les projets

Projet phare

Engine Controller

Contrôleur de moteur-fusée en C11, sans OS ni allocation dynamique, validé en Software-In-the-Loop.

Le problème

Un contrôleur de moteur-fusée pilote une séquence où l'erreur n'est pas permise : allumer, maintenir un régime nominal, s'arrêter proprement, et couper immédiatement si une grandeur sort de son domaine sûr. Le logiciel doit être déterministe (même entrée, même comportement, même temps d'exécution) et vérifiable avant de toucher le moindre matériel.

Machine à états de la séquence moteurAllumage, puis nominal, puis arrêt. Depuis chacun de ces états, un dépassement de redline déclenche l'abort.départALLUMAGENOMINALPID · fréquence fixeARRÊTredlineredlineredlineABORT
Allumage, puis nominal, puis arrêt. Depuis chacun de ces états, un dépassement de redline déclenche l'abort.

Ce que j'ai fait

  • Machine à états de séquence : allumage, nominal, arrêt, abort. Chaque transition est explicite ; aucun état n'est atteint « par accident ».
  • Régulation PID à fréquence fixe : la boucle de contrôle s'exécute à cadence constante, condition pour que les gains réglés restent valides.
  • Redlines avec arrêt d'urgence : des seuils surveillés à chaque cycle ; un dépassement déclenche la transition vers l'état abort, prioritaire sur tout le reste.
  • Télémétrie post-essai : les données de l'essai sont conservées pour être analysées après coup.
  • Validation Software-In-the-Loop : le code de contrôle tourne contre un modèle simulé du moteur, ce qui permet de rejouer des scénarios nominaux comme des pannes sans aucun risque.
  • Tests sur émulateur STM32 et tests unitaires pour valider le comportement du code tel qu'il tournera sur cible.

Choix de conception

Choix Pourquoi
C11, sans OS Maîtrise totale du flot d'exécution et du temps : pas d'ordonnanceur ni de couche cachée entre le code et le matériel.
Aucune allocation dynamique Pas de malloc donc pas de fragmentation ni d'échec d'allocation en plein vol : toute la mémoire est connue à la compilation (règle 3 de « Power of Ten »).
Règles NASA/JPL « Power of Ten » Un cadre éprouvé pour le code critique : flot de contrôle simple, boucles bornées, assertions, portée minimale des données. Le code reste analysable.
Machine à états explicite Rend la séquence lisible, testable état par état, et garantit que l'abort est toujours atteignable.
SIL avant le matériel Comme un simulateur de vol pour un pilote : on s'entraîne sur les pannes avant qu'elles n'arrivent pour de vrai.

Compétences démontrées

Programmation C embarquée contrainte, conception de logiciel critique et temps réel, automatique (PID), architecture en machine à états, stratégie de test (unitaires, SIL, émulation), application d'un standard de codage industriel.

Projet suivantKFS — Kernel From Scratch