Go Down

Topic: Courbe accélération / décélération moteur CC  (Read 75 times) previous topic - next topic

Hexor

Bonjour à tous,

Je viens vers vous car je rencontre un blocage dans la programmation d'une courbe d'accélération/décélération d'un moteur CC.

Je suis en train de faire un petit robot avec 4 roues motrices. Les moteurs sont indépendant et sont pilotés par une carte de contrôle ou j'envoi la vitesse du moteur via une liaison série (nombre de 0 à 254).

Le principe est que le robot lit un ordre sur une carte SD : avancer de X pas / tourner à gauche / tourner à gauche / avancer de X pas....

J'essaye de coder une fonction pour faire accélérer et freiner le robot mais je ne vois pas comment faire.
Je ne vois pas comment faire pour que la formule prenne en compte aussi bien une courte distance à parcourir, qu'une longue distance. J'ai aussi une fonction pour mettre en pause, mais du coup le robot ne décélère pas, il "pile" et quand je reprend, ma fonction ne tient pas compte qu'il est à l'arret et il repart donc plein pot.

J'ai fait une bête fonction qui coupe la distance en 3 : une partie accélération entre 0% et X% du trajet parcouru, entre X% et Y% vitesse constante et au delà décélération. mais ce qui veut dire que sur de "longue" distance, le robot est dans sa phase d'accélération pendant beaucoup plus longtemps.
Je pense que je ne résonne pas du tout comme il faut !

Si vous avez donc un exemple ou quelque-chose pour m'aiguiller, je suis preneur :)


Code: [Select]
//Determination de la vitesse
    if (nbPasEffectue <= 0)
    {
      vitesseCorrigee = 1;
    }
    else if (nbPasEffectue > 0 && nbPasEffectue <= t1) // Accel
    {
      vitesseCorrigee = mot_a * nbPasEffectue;
      vitesseCorrigee = constrain(vitesseCorrigee, 1, consigneVitesse);
    } else if (nbPasEffectue > t1 && nbPasEffectue <= (t1 + t2)) //Regime constant
    {
      vitesseCorrigee = consigneVitesse;
    } else if (nbPasEffectue > (t1 + t2) && nbPasEffectue <= (t1 + t2 + t3)) //Decelleration
    {
      vitesseCorrigee = (-mot_c * nbPasEffectue) + (mot_c * (t1 + t2 + t3));
      vitesseCorrigee = constrain(vitesseCorrigee, 1, consigneVitesse);
    }



Merci.


hameau

Salut,

Comment fait tu pour vérifier que le robot a bien fait le bon nombre de pas lors des dépalcements ?

Sachant que le robot lit sur la carte SD les différents ordres de commandes, tu connais normalement la distance à parcourir, donc en fonction de la longueur à faire, il serait envisageable d'avoir plusieurs lois d'accélerations.

- déplacement de faible distance (à determiner) : loi en triangle --> accélération, decéleration.
- déplacement moyen ou important : loi en trapeze  --> accéleration, vitesse Cst, décéleration.

Un deplacement sur un grande distance induit pas forcement une phase d'accéleration plus longue, mais un temps de déplacement à vitesse constante plus important,

Pourquoi ne pas rajouter dans la SD en plus des ordres de commande des deplacements, un paramètre de gestion des phases accéleration - décéleration.

@+

Hexor

Bonjour,

Je me suis mal exprimé, quand je parle de "pas", c'est le retour des encodeurs qui sont sur mes moteurs CC. Je connais donc le nombre de tour de roue effectué et ainsi la distance théorique parcourue (car pour un calcul exacte il faudrait le diamètre de roue exacte) et ça ne prend pas en compte s'il y a un glissement.


Oui, je connais bien la distance à parcourir.


Je peux en effet tout à fait rajouter sur la SD les param d'accel/deccel.
Le seul soucis, c'est ce côté "math" sur lequel je fais un blocage.

Je vais regarder avec ces lois en triangle / trapèze ce que je trouve sur le net, car je ne connaissais pas du tout (je suis fâché avec les math  :) )
Si quelqu'un à un site bien fait sur ces lois, je suis preneur.


Merci.

hameau

Salut,

Exemple de graphique traduisant une loi de vitesse type trapeze :

1 : phase accélération
2 : phase à vitesse constante
3 : phase de freinage ou décélération

Si la distance à parcourir est faible, il n'y a plus de phase (2), donc le graphique ressemble à un triangle.
Concernant les équations reliant vitesse, accélaration et deplacememnt je peux vous aidez.
cdt

Go Up