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
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
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
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
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é
La bibliothèque Simulink SUPSYM5X

   La librairie Simulink SUPSYM5X/QADC64 :
La bibliothèque Simulink SUPSYM5X

   La librairie Simulink SUPSYM5X/QADC64 :
La bibliothèque Simulink SUPSYM5X

   La librairie Simulink SUPSYM5X/QSMCM :
La bibliothèque Simulink SUPSYM5X

   La librairie Simulink SUPSYM5X/QSMCM :
La bibliothèque Simulink SUPSYM5X

   Exemple de comportement en simulation :
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);
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
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
Stimuli   Loi de commande
                                      Frein 1




                            Frein 2
Modules
MPC555    Algorithme
Entrées                Modules
                       MPC555
                       Sorties
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 »
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
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();
                                                                             }
                                }
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));
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
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;
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
Limites des solutions retenues

   Environnement de génération automatique de code
    SUPSYM5X :
      Uniquement utilisable avec la version 4.1 de

       l’environnement RTW
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 »
Bilan

   Point faible du projet SUPSYM5X :
      Logiciel :
         Evolutivité relativement difficile (versions des
          environnements Simulink et RTW)

PFE PSA Peugeot Citroen - Prototypage rapide

  • 1.
    Projet de find’é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 SimulinkSUPSYM5X  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é
  • 6.
    La bibliothèque SimulinkSUPSYM5X  La librairie Simulink SUPSYM5X/QADC64 :
  • 7.
    La bibliothèque SimulinkSUPSYM5X  La librairie Simulink SUPSYM5X/QADC64 :
  • 8.
    La bibliothèque SimulinkSUPSYM5X  La librairie Simulink SUPSYM5X/QSMCM :
  • 9.
    La bibliothèque SimulinkSUPSYM5X  La librairie Simulink SUPSYM5X/QSMCM :
  • 10.
    La bibliothèque SimulinkSUPSYM5X  Exemple de comportement en simulation :
  • 11.
    La bibliothèque SimulinkSUPSYM5X  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
  • 14.
    Stimuli Loi de commande Frein 1 Frein 2
  • 15.
    Modules MPC555 Algorithme Entrées Modules MPC555 Sorties
  • 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 solutionsretenues  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 solutionsretenues  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)