Banc d'Essai HIL Physique & Firmware Embarqué Critique (EN 50128 / SIL 2)
Développement C Bare-Metal strict (zéro HAL/CubeMX) & FreeRTOS sur STM32F303RE (ARM Cortex-M4) + Nœud Déporté ESP32-C3 (RISC-V)
Ce projet a pour objectif la conception, le développement logiciel bas-niveau et la qualification matérielle d'une unité centrale de contrôle-commande ferroviaire (VCU - Vehicle Control Unit).
Inspiré des standards de sûreté de fonctionnement ferroviaire (EN 50128 / SIL 2) et de l'ingénierie critique (Défense, Aérospatiale), ce banc d'essai Hardware-in-the-Loop (HIL) reproduit la chaîne complète d'acquisition, de décision temps réel et d'actionnement d'une rame :
- Chaîne de Traction / Freinage : Asservissement en vitesse, mesure d'odométrie précise et détection d'adhérence critique (WSP - Wheel Slide Protection).
- Sécurité Active des Accès Passagers : Interverrouillage physique matériel interdisant la traction tant que les portes ne sont pas fermées et verrouillées.
- Auxiliaires de Confort (HVAC) : Régulation thermique à débit variable avec diagnostic de panne par retour tachymétrique temps réel.
- Supervision Énergie & Caténaire : Mesure analogique continue de la ligne d'alimentation par ADC rapide et transferts DMA.
- Ligne de Sécurité (Arrêt d'Urgence) : Boucle à sécurité positive (contact NF) gérée par interruption matérielle prioritaire (EXTI/NVIC) à latence déterministe.
-
Bus Réseau de Bord CAN 2.0B : Communication différentielle inter-calculateurs (STM32
$\leftrightarrow$ ESP32-C3) avec filtrage matériel. - Boîte Noire Juridique (OTMR) : Enregistreur d'événements et de paramètres de vol sur carte MicroSD via bus SPI.
- Ingénierie de Test & V&V : Qualification à l'analyseur logique et automatisation de scénarios de test par scripts Python (Pytest / HIL).
- Calculateur Principal (VCU) : Carte STMicroelectronics NUCLEO-F303RE (ARM Cortex-M4 avec FPU @ 72 MHz, 64 Ko SRAM, 16 Ko CCMRAM, 512 Ko Flash).
- Nœud Déporté (Remote I/O / Sol) : ESP32-C3 Mini (Architecture RISC-V 32-bit monocœur).
- Réseau de Bord : Bus différentiel CAN 2.0B à 500 kbps piloté par 2 transceivers SN65HVD230 (3.3V) avec terminaisons 120 Ω.
- Traction : Motoréducteur CC miniature JA12-N20 (12V) piloté par un pont en H TB6612FNG (module NanoHat Motor / PCA9685).
- Odométrie : Capteur magnétique rotatif absolu 12 bits AS5600 (bus I2C) monté en bout d'arbre essieu.
- Accès Voyageurs & Pantographe : Servomoteur MG90S (portes) + Microswitch mécanique de sécurité fin de course (contact NF) + Servomoteur DM996 (pantographe).
- HVAC : Ventilateur Noctua NF-A6x25 PWM (12V) piloté en PWM 25 kHz avec retour tachymétrique (2 impulsions/tour sur voie Timer Input Capture).
- Pupitre Cabine & DMI : Afficheur OLED 0.96" SSD1306 (I2C), potentiomètre manipulateur de conduite (Traction/Frein), potentiomètre simulateur de caténaire.
- Ligne de Sécurité : Bouton Coup de Poing d'Arrêt d'Urgence industriel (contact NF).
- Enregistreur : Module MicroSD SPI avec carte Philips 32 Go.
Règle Vitale : Séparation galvanique stricte entre la commande et la puissance.
- Rail Commande (3.3V / 5V) : Fourni par le port USB de la Nucleo via le ST-LINK (limité à 300 mA après énumération).
- Rail Puissance (12V DC) : Alimentation externe régulée dédiée (12V 2A) pour alimenter le moteur N20, le ventilateur Noctua et le pont en H.
- Masse Commune (Common GND) : La masse (GND) de l'alimentation 12V externe et la masse (GND) de la carte Nucleo doivent être impérativement reliées ensemble.
- VS Code avec l'extension PlatformIO IDE.
- Chaîne d'outils GNU :
arm-none-eabi-gcc. - Python 3.10+ (avec
pytest,pyserial,python-can). - Logiciel de capture logique : PulseView / Sigrok.
# Compilation stricte (0 warning, 0 error)
pio run
# Nettoyage des artefacts de build
pio run -t clean
# Téléversement sur la carte NUCLEO-F303RE
pio run -t upload
# Ouverture du moniteur série
pio device monitor