Aller au contenu


Quentin M

Inscrit(e) (le) 15 avril 2018
Déconnecté Dernière activité avril 22 2018 09:41
-----

Messages que j'ai postés

Dans le sujet : Arduino et PID, tutoriel et questions

22 avril 2018 - 09:41

Bonsoir,
C'est le même code que dans le tuto.


Dans le sujet : Arduino et PID, tutoriel et questions

18 avril 2018 - 09:17

Bonsoir,
Ok j'ai changer les traces pour voir la vitesse réelle.
Du coup ne reprenant le code tel que présenté dans le tuto mon moteur fait des vas et viens.

Donc je me dis je vais régler les 3 coefficients les un apres les autres.

Du coup je commence par Kp qui permet d'avoir une commande proportionnel à l'erreur.

Toute fois pour le régler je ne sais pas trop où m’arrêter si je le mets trop faible mon moteur par très vite mais s’arrête très vite (Kp = 0.1,Ki =0; Kd =0):
 

 

 

Ensuite je passe Kp à 1 :

 

 

 

La on voit que le moteur est allez trop loin puis est revenue en arrière pour ralentir et après se re-bloque à 0. Je me dis que du coup je suis allez trop loin dans le Kp mais je ne suis pas sur.

Qu'en pensez vous ?

 

Autre point pourquoi le moteur s’arrête ? Il trouve un point de balancement ? Car en théorie si la vitesse mesuré est nulle et la vitesse demandé est de 50% de la vitesse max il devrait accélérer non ?

 

Du coup j'essaie ensuite de régler le Ki avec 0.1 (Kd=1):

 

Puis avec Ki = 1 (Kd=1):

 

J'avoue ne pas trop savoir quoi penser des courbes.

 

 

Merci


Dans le sujet : Arduino et PID, tutoriel et questions

17 avril 2018 - 09:22

Ok merci je me disais bien que le symbole à coté des pins voulaient dire quelque chose.
Bon du coup j'essaie de comprend encore le code et il y a quelque chose que je saisie pas bien dans la fonction compute :

 

bool PID::Compute()
{
   if(!inAuto) return false;
   unsigned long now = millis();
   unsigned long timeChange = (now - lastTime);
   if(timeChange>=SampleTime)
   {
      /*Compute all the working error variables*/
      double input = *myInput;
      double error = *mySetpoint - input;
      double dInput = (input - lastInput);
      outputSum+= (ki * error);

      /*Add Proportional on Measurement, if P_ON_M is specified*/
      if(!pOnE) outputSum-= kp * dInput;

      if(outputSum > outMax) outputSum= outMax;
      else if(outputSum < outMin) outputSum= outMin;

      /*Add Proportional on Error, if P_ON_E is specified*/
	   double output;
      if(pOnE) output = kp * error;
      else output = 0;

      /*Compute Rest of PID Output*/
      output += outputSum - kd * dInput;

	    if(output > outMax) output = outMax;
      else if(output < outMin) output = outMin;
	    *myOutput = output;

      /*Remember some variables for next time*/
      lastInput = input;
      lastTime = now;
	    return true;
   }
   else return false;
}

L'erreur est calculé en fonction de *mySetpoint  et input hors *mySetpoint est égale à la commande qui si on n’envoie rien sur le port série est toujours égale à 0 et input et de même toujours égale à la vitesse du coup l'erreur est toujours la même, non ?

J'ai remplacer le backoff par advance(output-255); et au moins ça ne recule plus.


Dans le sujet : Arduino et PID, tutoriel et questions

17 avril 2018 - 08:10

Bonsoir,
Je viens de remarquer un truc qui me parait étrange mais peut être que j'ai mal compris.

Dans les fonctions avance et backoff on utilise un analogWritte et un digitalWritte hors d'apres le schéma de cablage on est uniquement brancher sur la partie digital de l'arduino donc comment la ligne :analogWrite (A,a); peut elle fonctionner ?

Il y a aussi le attachInterrupt qui est mis sur la pin 0 alors que rien n'y est rattachée ?

Merci


Dans le sujet : Arduino et PID, tutoriel et questions

16 avril 2018 - 04:13

Quand tu dis les 3 valeurs c'est les trois coefficiant ou d'autres variables ?
merci

EDIT: Alors je comprend pas trop pourquoi mais lorsque j'envoie sur le port serie une valeur "1" le moteur tourne pendant quelques secondes puis refait un va et vient.
Je pense que la boucle va trop vite mais je ne comprend pas trop les modifications à faire pour que ça roule bien.