Aller au contenu


Photo
- - - - -

Arduino et PID, tutoriel et questions

PID Arduino

  • Veuillez vous connecter pour répondre
18 réponses à ce sujet

#1 Quentin M

Quentin M

    Membre

  • Membres
  • 12 messages

Posté 15 avril 2018 - 03:23

Bonjour à tous,
Pour mon premier tuto du site j'ai essayé de réaliser celui ci : http://www.robot-maker.com/shop/blog/33_Asservir-moteurs-courant-continu-PID.html

Mon soucis est que lorsque le code ce lance la roue tourne de maniere instable mais surtout un coup vers l'avant un coup vers l'arrière.
Pour le manque de stabilité je pense que c'est les coefficiants mais pour ce qui est de la directions je trouve ça étrange.
Est ce vous auriez une idée ?
Merci



#2 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 15 avril 2018 - 04:49

T'as utilisé le même matériel que le tuto ?



#3 Quentin M

Quentin M

    Membre

  • Membres
  • 12 messages

Posté 15 avril 2018 - 04:51

Oui.



#4 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 15 avril 2018 - 06:52

Les coefficients vont aussi avoir un impacte sur la direction sur tout si tu mets un D grand...

 

Ensuite le câblage a aussi un impacte...  Tu as bien câblé exactement comme sur le schémas ? 
Si le moteur est câblé à l'envers par rapport au codeur ça ne va pas marcher et ça peut donner exactement ce que tu décris aussi =) 

Peux tu poster ce qui est marqué dans le moniteur série ? 

Je m'intéresse surtout à la partie : 

"

  Serial.println("commande");
    Serial.println(commande);               // à commenter, utilisé pour débug
    Serial.print("'''''''''''''''''");      // à commenter, utilisé pour débug
    
    Serial.println("speed");
    Serial.println(speed);               // à commenter, utilisé pour débug
   Serial.print("'''''''''''''''''");      // à commenter, utilisé pour débug

    Serial.println("output");
    Serial.println(output);               // à commenter, utilisé pour débug
    Serial.print("'''''''''''''''''");      // à commenter, utilisé pour débug

=) 

 


 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#5 Quentin M

Quentin M

    Membre

  • Membres
  • 12 messages

Posté 15 avril 2018 - 08:12

Salut,
Alors les traces dependes de ce qu'il se passe :
-Si le moteur bouge j'ai ça :

0
'''''''''''''''''speed
128.00
'''''''''''''''''output
-255
'''''''''''''''''commande
0
'''''''''''''''''speed
128.00
'''''''''''''''''output
-255
'''''''''''''''''commande
0
'''''''''''''''''speed
-40.00
'''''''''''''''''output
112
'''''''''''''''''commande
0
'''''''''''''''''speed
-111.00
'''''''''''''''''output
112
'''''''''''''''''commande
0
'''''''''''''''''speed
-78.00
'''''''''''''''''output
90
'''''''''''''''''commande
0
'''''''''''''''''speed
9.00
'''''''''''''''''output
90
'''''''''''''''''commande
0
'''''''''''''''''speed
31.00
'''''''''''''''''output
-174
'''''''''''''''''commande
0
'''''''''''''''''speed
35.00
'''''''''''''''''output
-174
'''''''''''''''''commande
0
'''''''''''''''''speed
-16.00
'''''''''''''''''output
-108

et ça continue.

-Si il ne bouge pas :

'''''''''''''''''commande
0
'''''''''''''''''speed
0.00
'''''''''''''''''output
31
en boucle

 

J'ai vérifie les branchements normalement c'est bon. Faudrait il que je vérifie avec un voltmetre certains branchement ?

Merci



#6 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 15 avril 2018 - 09:08

Si il bouge ? Si il ne bouge pas? Comment ça tu arrives à avoir les deux cas? 

Qu'est ce que tu fais pour être dans un cas ou dans l'autre ? 

Une petite vidéo ? 

 

Par contre je pense que c'est un problème de coefficient de PID. Essaye de le régler. 

D'ailleurs plutôt que de faire des retours sur le moniteur série tu peux utiliser le ploteur série =) 

 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#7 Quentin M

Quentin M

    Membre

  • Membres
  • 12 messages

Posté 15 avril 2018 - 09:27

En gros d'abords il tourne dans un sens un dans l'autre puis il arrête complétement de tourner.
Vidéo : https://www.cjoint.com/c/HDpuAresXjb


 



#8 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 15 avril 2018 - 10:47

ça m'a l'air "normal" =) . 

Tu as essayé en commentant les serial print ? 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#9 Quentin M

Quentin M

    Membre

  • Membres
  • 12 messages

Posté 16 avril 2018 - 03:17

Si ça à l'air normal je vais modifier les coefficiants. Mais j'avous que je comprend pas du coup comment on avoir une marche puis une marche arrière et un arret complet.
Je me demande aussi à quoi sert la valeur commande ?
Je vais relire la théorie du PID, mais je trouve ça bizzare que le code du tuto n'est pas des coefficiants proches d'un fonctionement normale.
Je vais refaire des testes.
Merci



#10 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 16 avril 2018 - 03:44

En effet je pensais moi aussi que thibaut avait mis les coefficients normaux ...

 

C'est pour ça que je propose d'essayer sans les Serial. 

Le marche avant / marche arrière c'est par ce que si tu vas trop vite il faut freiner.... mais si le PID veut trop freiner il envoit carrément l'ordre de faire marche arrière ... 

 

ensuite tu as 3 valeurs : 


La vitesse réelle mesurée du moteur. 

La consigne souhaité en vitesse 

 

La valeur de PWM envoyée au moteur =)

 


 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#11 Quentin M

Quentin M

    Membre

  • Membres
  • 12 messages

Posté 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.



#12 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 16 avril 2018 - 07:54

Je parlais de ce que tu affichais dans le moniteur série  les  " speed outpout commande " 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#13 Quentin M

Quentin M

    Membre

  • Membres
  • 12 messages

Posté 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



#14 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 17 avril 2018 - 08:30

Alors, 

AnalogWrite se met sur les pins PWM , 3 5 6 9 10 et 11. Cela n'a rien à voir avec les pin analogique A0  A1 etc ... qui permettent de lire des signaux analogique avec la fonction analogRead. 

 

Ensuite attachInterrupt permet d'attacher une interruption sur pin d'interruption . Il y a deux interruption hardware disponible sur l'arduino uno : l'interruption 0 sur le pin 2 et l'interruption 1 sur le pin 3. 

 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#15 Quentin M

Quentin M

    Membre

  • Membres
  • 12 messages

Posté 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.



#16 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 18 avril 2018 - 12:50

mySetpoint = Commande => Consigne demandée 

input = Vitesse lue => Vitesse réelle mesurée 

 

output = Sortie consigne moteur => Pwm envoyé au moteur 

 

 

Donc si la vitesse réelle reste ne change pas  : Oui l'erreur sera la même . 

Sauf que la vitesse réelle change, donc l'erreur change, et on adapte la sortie en conséquence. 


 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#17 Quentin M

Quentin M

    Membre

  • Membres
  • 12 messages

Posté 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

Fichier(s) joint(s)

  • Fichier joint  Kp0,1.PNG   3,62 Ko   0 téléchargement(s)
  • Fichier joint  Kp1.PNG   3,67 Ko   0 téléchargement(s)
  • Fichier joint  Kp1Ki0,1.PNG   4,29 Ko   0 téléchargement(s)
  • Fichier joint  Kp1Ki1.PNG   4,17 Ko   0 téléchargement(s)


#18 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 18 avril 2018 - 09:50

peux tu mettre les codes utilisés en même temps ? Même si c'est le même code que pris sur le tuto avec une légère différence hésite pas à le reposter. 

Quand j'aurais du temps je vais prenre un moteur et essayer ce que tu as fais de mon côté en même temps pour pouvoir te répondre au mieux.


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#19 Quentin M

Quentin M

    Membre

  • Membres
  • 12 messages

Posté 22 avril 2018 - 09:41

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







Aussi étiqueté avec au moins un de ces mots-clés : PID, Arduino

0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users