Programmation AMESet (trajectoire avec accélération et décélération)
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Programmation AMESet (trajectoire avec accélération et décélération)



  1. #1
    mAx6010

    Question Programmation AMESet (trajectoire avec accélération et décélération)


    ------

    Hello,
    Je recherche une bonne âme pour me débloquer sur un problème de programmation C au niveau du module AMESet (AMESim)
    Je dois modéliser la logique d un moteur pas a pas et je bloque sur une variable explicite state qui ne veut pas s'integrer.
    Pour la faire court:
    j ai une particule qui accélère avec une accélération constante a, puis vitesse constante (a=0) puis décélération avec -a
    le profile de la vitesse est ok pour l'accélération et la phase a vitesse constante. Mais pour la décélération, il ne se passe rien (vitesse toujours constante).
    Pourtant je rentre bien dans ma condition de décélération.

    Merci par avance

    -----

  2. #2
    mds2014

    Re : Programmation AMESet (trajectoire avec accélération et décélération)

    Bonjour,

    ça va être difficile de vous aider sans le code en question, mais à priori vous ne sortez pas de la région 'vitesse constante.

    J'imagine que vous êtes reparti de l'exemple 'Bouncing ball' du manuel d'Ameset qui montre comment gérer une discontinuité.
    Je vous conseille d'utiliser la méthode avec 'disloc' qui peut être expliquée assez simplement:

    /* Définition des régions - qui doivent être disjointes (2, 3, .... x régions) */
    /* Integration has just started or restarted */
    if (*flag == 0)
    {
    /* zone 1 */
    if (condition1)
    {
    ic[0] = 1;
    }
    /* zone 2 */
    else
    {
    ic[0] = 2;
    }
    }

    /* Définition des affectations dans chaque région */
    if (ic[0] == 1)
    {
    ..... affectation des dérivées....
    logi = condition de sortie de région
    }
    else
    {
    ...
    }

    disloc_(&logi);

    En espérant que ça vous aide.
    Cordialement

  3. #3
    mAx6010

    Re : Programmation AMESet (trajectoire avec accélération et décélération)

    ah super, vous connaissez AEMSIM et donc AMESet, donc deja ça va m'aider.
    J'ai tres peu d experience sous AMESim (depuis decembre) et encore mois sous AMESet (2 semaines).
    Je finis de transposer un supercomposant d une version 10 a 13, et je vous repose le probleme avec partie du code qui pose probleme et diagrames.

  4. #4
    mAx6010

    Re : Programmation AMESet (trajectoire avec accélération et décélération)

    Alors:
    j utilise la variable dphi (difference entre deux angles) pour situer sur la phase d acceleration, de vitesse constante et de deceleration
    phiAcc est un parametre
    alphaMax est un parametre
    omegaMax est un parametre

    omega et phi sont 2 variables d etat explicites >> alpha = d(omega)/dt & omega=d(phi)/dt

    j utilise notamment la variable dummy2 pour savoir si je rentre bien dans mes 3 conditions decrites ci-dessous (acceleration, vitesse constant ou deceleration)
    Le premier diagramme est l'acceleration: on distingue bien la phase d'acceleration (a>0), puis la vitesse constante (a=0) et finalement la phase de deceleration (a<0)
    le second diagramme est la vitesse: celle ci augmente lors de l acceleration, puis stagne, et finalement ne tient pas compte de ma deceleration (et donc reste constante)
    Je n'ai pas le plot de dummy2, mais je rentre bien dans la phase de deceleration (dummy2 prend bien les valeurs 1,2 et 3 correspondant aux 3 phases)
    Voila donc ce qui me pose probleme: je rentre bien dans la phase de deceleration, mais le solver n integre pas l acceleration (a<0)

    Unbenannt1.JPG Unbenannt2.JPG

    ******
    Code:
    if (*dphi > 0)
       {
          if ( *dphi < *phiAcc )
    {
             *alpha = -alphaMax;
    *dummy2 = 3; //deceleration
    }
          else if (*omega < omegaMax)
    {
             *alpha = alphaMax;
    *dummy2 = 1; // acceleration
    }
       else
    {
             *alpha = 0;
    *dummy2 = 2; // constant velocity
    }
       }
    
    
    
     /* */
       *omegaDot = *alpha;
    
       /* set the derivative of angle */
       *phiDot = *omega;
    Dernière modification par Jack ; 18/03/2014 à 10h47. Motif: Ajout balises code

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : Programmation AMESet (trajectoire avec accélération et décélération)

    Merci de présenter le code correctement à l'aide des balises code ou de l'icône # dans l'éditeur avancé.

    Déplacement dans le forum programmation plus adéquat

  7. #6
    mds2014

    Re : Programmation AMESet (trajectoire avec accélération et décélération)

    Si la dérivée est discontinue il faut absolument gérer une discontinuité.
    C'est le cas ici avec: omegadot=alpha={alphaMax, 0, -alphaMax}
    Par contre il faut clarifier les conditions d'entrée/sortie de région, que se passe-t-il si dphi est négatif ? Pourquoi avoir un test sur dphi puis sur omega ?

    Le mieux est de lire le manuel d'AMESet qui vous explique comment faire ça proprement, notamment l'exemple 'Bouncing ball'.
    En quelques mots la méthode est:
    1. Dans AMESet déclarer que le submodel va gérer des discontinuités: "Submodel requires discontinuity flag"
    2. Toujours dans AMESet, ajouter au moins un "integer store", c'est le tableau statique ic[] qui est utilisé pour mémoriser la région.
    3. Dans le code il faut implémenter ce que je décrivais plus haut. En reprenant la logique (les test d'entrée dans les régions) de votre code ça ressemblerait à:
    Code:
    /* Définition des 3 régions */
    /* Integration has just started or restarted */
    if (*flag == 0)
    {
    /* zone 1: deceleration */ if ( (*dphi > 0.0) && (*dphi < *phiAcc ) ) { ic[0] = 1; } /* zone 2: acceleration */ else if ( (*dphi > 0.0) && (*omega < omegaMax) ) { ic[0] = 2; } /* zone 3: constant velocity */ else if (*dphi > 0.0) { ic[0] = 3; }
    } /* zone 1: deceleration */ if (ic[0] == 1) { *omegaDot = *alpha = -alphaMax; /* exit condition */ logi = !( (*dphi > 0.0) && (*dphi < *phiAcc ) ); } /* zone 2: acceleration */ else if (ic[0] == 2) { *omegaDot = *alpha = alphaMax; /* exit condition */ logi = !( (*dphi > 0.0) && (*omega < omegaMax) ); } else if (ic[0] == 3) { *omegaDot = *alpha = 0.0; /* exit condition */ logi = !(*dphi > 0); } disloc_(&logi);

    Par contre, j'insiste, ici je suis quasiment persuadé que ça ne fonctionnera pas en l'état car dans la définition des régions, les conditions ne décrivent pas tous les cas et ne sont pas disjointes, en gros les conditions doivent décrire tous les cas et ne pas se recouvrir.

    Aussi, plotter tous les paramètres de ces fameuses conditions d'entrée/sortie pour mieux comprendre ce qu'il se passe (dphi, phiacc, omega, omegamax).

  8. #7
    mAx6010

    Re : Programmation AMESet (trajectoire avec accélération et décélération)

    hello,
    Entre temps je suis passé sous la version 13.
    J'ai relancé le code et bizarrement il me detecte bien la phase de deceleration.
    Nom : Unbenannt3.JPG
Affichages : 89
Taille : 71,4 Ko
    Et effectivent la condition dphi<0 est manquante, mais je voulais deja m atteler la phase de deceleration.
    Je viens d imprimer le tutorial avec le bouncing ball pour voir les discontinuites.
    Merci beaucoup pour vos reponses.

  9. #8
    mAx6010

    Re : Programmation AMESet (trajectoire avec accélération et décélération)

    Hello,
    Alors j'ai modifié mon code avec prise en charge des discontinuités comme vous m'avez conseillé.
    Pourtant j'ai toujours un problème lors de la décélération: la vitesse s'amenuise, mais devient négative, alors que je spécifie bien ce cas ( if omega <0)
    Je ne travaille plus avec la variable dphi, mais je me situe par rapport au parametre phiAcc, qui est l'angle necessaire pour l'accélération ou décélération
    Je definis bien une 4e zone avec vitesse negative, mais le solver l'ignore ( la variable dummy2 ne prend pas la valeur 4)
    Si parcontre je crée une nouvelle condition if (*omega <0 ) après disloc_(&logi); alors ça passe nickel ( voir derniere boucle if commentée)
    Unbenannt4.JPGUnbenannt5.JPG

    Code:
    /* Définition des 3 régions */
    /* Integration has just started or restarted */
    if (*flag == 0)
    {/* zone 1: deceleration */
    if ( *phi >  *phiSoll - *phiAcc )
    {
       ic[0] = 1;
    }
    /* zone 2: acceleration */
    else if (*phi < *phiAcc)
    {
       ic[0] = 2;
    }
    /* zone 3: constant velocity */
    else if ( (*phi <= *phiSoll - *phiAcc) && ( *phi >= *phiAcc) )
    {
       ic[0] = 3;
    }
    /* zone 4 : hold */
    else if ( *omega < 0 )
    {
       ic[0] = 4;
    }}
    /* zone 1: deceleration */
    if (ic[0] == 1)
    {
       *omegaDot = *alpha = -alphaMax;
       *dummy2 = 3;
       /* exit condition */
       logi = !( *phi >  *phiSoll - *phiAcc );
    }
    /* zone 2: acceleration */
    else if (ic[0] == 2)
    {
       *omegaDot = *alpha = alphaMax;
       *dummy2 = 1;
       /* exit condition */
       logi = !(*phi < *phiAcc);
    }
    /* zone 3: constant velocity */
    else if (ic[0] == 3)
    {
       *omegaDot = *alpha = 0.0;   
       *dummy2 = 2;
       /* exit condition */
       logi = !( (*phi <= *phiSoll - *phiAcc) && ( *phi >= *phiAcc) );
    }
    /* zone 4: hold */
    else if (ic[0] == 4)
    {
       *omega = 0.0;
       *dummy2 = 4;
      /* exit condition */
       logi = !( *omega <0 );
    }
    disloc_(&logi);
    
    /*
    if (*omega <0 )
    {
    *alpha = 0;
    *omega = 0;
    *dummy2 = 4;
    }
    */

Discussions similaires

  1. trajectoire et accélération d'un projectile
    Par Leviss dans le forum Physique
    Réponses: 1
    Dernier message: 27/12/2012, 10h14
  2. Accélération et décelération
    Par invite76bd8b6d dans le forum Physique
    Réponses: 11
    Dernier message: 20/08/2012, 06h33
  3. Dimensionnement d'un moteur, temps d'accélération et décélération ?
    Par inviteae5e3233 dans le forum Technologies
    Réponses: 6
    Dernier message: 29/05/2012, 21h08
  4. Accélération et décélération d'un BLDC sensorless
    Par Rim88 dans le forum Électronique
    Réponses: 0
    Dernier message: 10/03/2012, 17h01
  5. Accélération/Décélération fixe
    Par invite13699774 dans le forum Technologies
    Réponses: 8
    Dernier message: 14/04/2011, 17h19