1. Projet de fin d’études d’ingénieur
SUPSYM5X
Spécification, conception et validation de
modules logiciels dédiés automobile et de
blocs Simulink pour le microcontrôleur
MPC555
2. Sommaire
1. Présentation du projet
2. La bibliothèque Simulink SUPSYM5X
3. L’environnement de génération automatique de
code SUPSYM5X_RTW
4. Limites des solutions retenues
5. Bilan
3. Présentation du projet
Objectif : réaliser un Support de Prototypage de
Système Mécatronique
Système mécatronique = système physique +
système de pilotage
Système de pilotage agit sur le système physique
Loi de commande conçue sous l’environnement Simulink
v4.1
4. Présentation du projet
Permet un « prototypage rapide »
Carte électronique développée autour d’un
microcontrôleur MPC555
Bibliothèque de modules logiciels bas niveau
Environnement de génération automatique et de
téléchargement de code C dédié
Sera intégré sur les « démonstrateurs » de la DRIA
5. La bibliothèque Simulink SUPSYM5X
Ensemble de blocs Simulink représentant les
modules du microcontrôleur MPC555
Respect du comportement
physique des modules
Génération automatique d’un
code C dédié
11. La bibliothèque Simulink SUPSYM5X
Exemple de comportement en génération automatique
de code :
Mise à jour des fonctions module
Déclaration des sorties du du module
Initialisation du module QADC64
QADC64
logiciel
/* Implémentation de(s) S-Fonction : <Root>/QADC64_NUM */
de la S-Fonction(s) de la librairie SUPSYM5X_QADC64 */
UINT8 listeBroche_0[1];
static UINT8 data = 0;
#include "h_QADC.h"
static STATUS erreur_initDigitalOutput_QADCA = 0;
/* Implémentation de(s) S-Fonction : <Root>/QADC64_NUM */ la librairie
de la S-Fonction(s) du type QADC64_NUM de
/* Mécanisme de seuillage */
SUPSYM5X_QADC64 S-Fonction : <Root>/QADC64_NUM */
Implémentation de la */
listeBroche_0[0] = AN58;
if(test_Input.Input_1 > 0)
extern STATUS B_QADC_InitDigitalInput(PTRModule, UINT8, PTRUINT8);
erreur_initDigitalOutput_QADCA = B_QADC_InitDigitalOutput(&QADC_A, 1,
extern STATUS B_QADC_InitDigitalOutput(PTRModule, UINT8, PTRUINT8);
data = 1;
elselisteBroche_0);
extern STATUS B_QADC_WritePin(PTRModule, UINT8, UINT8);
extern UINT8 B_QADC_ReadPin(PTRModule, UINT8);
data = 0;
erreur_sendDigitalValue_QADCA = B_QADC_WritePin(&QADC_A, AN58,
data);
12. L’environnement de génération
automatique de code SUPSYM5X
Objectif : générer un code C optimisé
Dédié au microcontrôleur MPC555
Dédié au compilateur – éditeur de liens Metrowerks for Embedded PowerPC
Utilise l’environnement RTW
Définit des options de génération spécifiques
S’inspire de la cible matérielle prédéfinie Embedded
C-code
13. L’environnement de génération
automatique de code SUPSYM5X
Exemple : système de freinage piloté d’un
« démonstrateur » de la DRIA
Système physique :
Deux servovalves
Capteurs de pression
Système de pilotage pour chaque circuit hydraulique :
Un correcteur proportionnel intégral
Deux filtres numériques du premier ordre
16. L’environnement de génération
automatique de code SUPSYM5X
Fichiers générés :
Fichiers source C :
Phycore.c
c_app_Phycore.c ou c_basiqsec_Phycore.c
Fichiers de déclaration :
Phycore.h
Phycore_export.h
Phycore_prm.h
Fichiers de rapport html, fichier de « calibration »
17. L’environnement de génération
automatique de code SUPSYM5X
Fichier Phycore.c :
Code des fonctions de la loi de commande :
void Phycore_initialize(boolean firstTime)
void Phycore_step(void)
void Phycore_terminate(void)
Inclusion des fichiers Phycore.h, Phycore_export.h
et Phycore_prm.h
18. L’environnement de génération
automatique de code SUPSYM5X
Séquenceur de tâches OSEK : Fichier c_app_Phycore.c
/***************************************************************
/*******************************************************************
/*****************************************************************
/*********************************************************************
Task Name : B_BegApp Task Name
B_InitApp : B_Tache0
Task Name : B_EndApp
Engineer : Engineer : /**********************************************************************
Engineer :
Date : Date : Task Name : B_QADCI_EOC
Date :
Engineer :
Parameters : none Parameters : none Date : Parameters : none
Returns : none Returns : none
Returns : none
Notes : This task initializes the task scheduling is activated by an cyclic alarm
Notes applicationtask
: This Parameters : noneNotes : This task initializes the task scheduling
****************************************************************/
********************************************************************/
*****************************************************************/
Returns : none *********************************************************************/
void B_BegApp(void)
B_InitApp(void) void B_Tache0(void) Notes : Fonction appelée par l'ISR du module QADC_A ou QADC_B
void B_EndApp(void)
{ { **********************************************************************/
{
/* Activation fonction d'initialision du fichier RTW Phycore.c */ RTW Phycore.c */
Appel à la de la tache correspondantàau modèle Simulink fichier
/* Appel la fonction step du "Phycore.mdl" */ {}
void B_QADCA_EOC(void) /* Appel à la fonction de terminaison du fichier RTW Phycore.c */
B_SetTempsTempo(0, (unsigned int)(1.0));
Phycore_initialize(TRUE); /* Cas d'un uniquevoid B_QADCB_EOC(void) {}
sample time */
Phycore_terminate();
} Phycore_step();
}
}
19. L’environnement de génération
automatique de code SUPSYM5X
Séquenceur basique de tâches : Fichier
c_basiqsec_Phycore.c
/*************************************************************** while(1)
Task Name : main {
Engineer :
Date : if (IsNewStep())
{
Parameters : none ToggleRedLED();
Returns : none
Notes : This task initializes and launches the basic sequenceur /* Appel à la fonction step du fichier RTW Phycore.c */
****************************************************************/ /* Cas d'un unique sample time */
void main() Phycore_step();
{ }
/* Initialisation des LED de la carte Phycore MPC555 */ }
InitializeLED(); /* Appel à la fonction de terminate du fichier RTW Phycore.c */
/* Appel à la fonction d'initialision du fichier RTW Phycore.c */ Phycore_terminate();
Phycore_initialize(TRUE); } /* main */
/* Initialisation du timer programmable du microcontrôleur MPC555 PIT */
/* Période d'activation donnée en ms */
InitializePIT((unsigned int)(1.0));
20. L’environnement de génération
automatique de code SUPSYM5X
Influence du mécanisme d’ « Inlining » des
paramètres du modèle Simulink
Variable rtb_temp30
Sortie 1 du bloc QADC64_ANA
21. L’environnement de génération
automatique de code SUPSYM5X
Influence du mécanisme d’ « Inlining » des
paramètres du modèle Simulink
Paramètre Gain du bloc Gain non « inliné » :
Fonction Phycore_step() :
rtb_temp30 = (-Phycore_Param.Offset_P_brut_1_Value +
Phycore_Block.QADC64_ANA_o1) * Phycore_Param.Gain_P_brut_2_bar_1_Gain;
Paramètre Gain du bloc Gain « inliné » :
Fonction Phycore_step() :
rtb_temp30 = (-51.15 + Phycore_Block.QADC64_ANA_o1) * 1.7319580201087256E-001;
22. Limites des solutions retenues
Bibliothèque Simulink SUPSYM5X :
Uniquement utilisable sous la version 4.1 de
l’environnement Simulink
Pour tout bloc de la bibliothèque :
Utilisation d’une broche par plusieurs blocs
Simulink
23. Limites des solutions retenues
Environnement de génération automatique de code
SUPSYM5X :
Uniquement utilisable avec la version 4.1 de
l’environnement RTW
24. Bilan
Points forts du projet SUPSYM5X :
Matériel
Microcontrôleur MPC555
Logiciel :
Modules logiciels bas niveau
Génération automatique de code C
Noyau OSEK temps réel
Fichier de « calibration »
25. Bilan
Point faible du projet SUPSYM5X :
Logiciel :
Evolutivité relativement difficile (versions des
environnements Simulink et RTW)