Aller au contenu


Photo
- - - - -

Asservissement PID moteur CC


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

#1 Colin

Colin

    Nouveau membre

  • Membres
  • 7 messages
  • Gender:Male

Posté 20 février 2019 - 08:06

Salut à tous,

 

A peine arrivé et déjà des questions  :D:

 

J'ai regardé le tuto sur l'asservissement PID d'un moteur CC avec un driver L9110 et une arduino.

J'ai aussi regardé la librairie du PID mais je n'arrive pas à comprendre ce que renvoi la commande PID.Compute(): je ne comprends pas à quoi correspond le Output. Est-ce la nouvelle consigne de vitesse du moteur ?

 

Deuxième question: je ne comprends pas l'intérieur de la fonction counter ci-joint:

Fichier joint  Capture1.JPG   32,76 Ko   8 téléchargement(s)

J'ai notamment pas du tout compris l'avant dernière ligne... la variable count s'incrémente-t-elle à chaque fois qu'il y à un front montant sur l'encodeur A ou B ?

Si c'est juste un compteur, pourquoi c'est directement la vitesse de rotation du moteur, car on a pas de référence de temps, non ?

 

Merci d'avance et bonne soirée à vous.



#2 Path

Path

    Made By Humans

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

Posté 20 février 2019 - 11:39

C'est toi qui apporte le référence de temps en comptant les fronts sur une durée.

Podcast Made By Humans

Je cherche des volontaires de tous niveaux pour nos petites conversations entre hobbyistes.

Accès aux salles secrètes

 


#3 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 7 905 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é 21 février 2019 - 09:54

Alors pour ce tuto sur comment asservir un moteur CC avec un PID

Il est important de comprendre les différents morceaux du code. 

Il faut savoir : 

=> Savoir utiliser un driver de moteur avec le PWM pour piloter un moteur CC dans les deux sens et le faire aller plus ou moins vite. 

Tu peux faire des fonctions intermédiaire avancer reculer et arrêt qui prennent la valeur de vitesse souhaitée en paramètre si ça peut te faciliter le travail en fonction du driver de moteur que tu utilises. 
Mais il faudra pour des raison de practicité une fonction générale, qui prend la valeur de vitesse souhaitée en paramètre et qui en fonction de cela gère directement avancer ou reculer en fonction de la valeur de vitesse spécifiée. 

 

=> Savoir utiliser les codeurs pour lire la vitesse du moteur 

Lire les messages que j'ai posté ici en plus du tutoriel ne serait pas une mauvaise chose =) 
De plus il y a aussi ce sujet sur un robot 2WD qui répond à pas mal de question
 

 

 

attachicon.gifCapture1.JPG

J'ai notamment pas du tout compris l'avant dernière ligne... la variable count s'incrémente-t-elle à chaque fois qu'il y à un front montant sur l'encodeur A ou B ?

 

 

Dans le code du tutoriel, oui la variable s'incrément à chaque fous qu'il y a un front montant sur la voie A  qui est branchée sur le pin 2 grâce à cette ligne de code : 

attachInterrupt(0,counter, CHANGE); // on crée l'interruption sur changement sur la pin 2 => interruption 0, la routine counter va se faire toute seule sans l'appeler à chaque changement d'état sur le pin 2

ça peut être déroutant mais oui qui  l'interruption 0 sur une arduino uno et nano est reliée au pin 2. 
Il est possible de doubler la résolution du codeur en comptant aussi sur la voie B. En mettant la voie B sur le Pin 3 et en faisant appel à l'interruption 1 liée au pin 3. 

 

 

 

Si c'est juste un compteur, pourquoi c'est directement la vitesse de rotation du moteur, car on a pas de référence de temps, non ?

 

 

Il y a une base de temps. Elle est définie avec le Timer 1 par ces lignes : 
 

Timer1.initialize(100000); // On défini le timeur : 100000 microseconds ( 0.1 sec - or 10Hz )
Timer1.attachInterrupt( timerIsr ); // attach the service routine here la fonction timerIsr est une routine qui va se faire automatiquement 10* par secondes sans l'appeler

Dans la fonctions timerIsr on remt à 0 le compteur, et on fait ça 10 fois par secondes ... ça nous donne une base de temps ... On a  : un nombre de ticks / 0,1 s ... 
Reste à définir le nombre de ticks / tours et tu peux avoir ton unité en RPM.

 

 

 

=> Savoir combiner le tout en utilisant le PID => Tuto final :  Comment asservir un moteur CC avec un PID

 

 

 

 

J'ai aussi regardé la librairie du PID mais je n'arrive pas à comprendre ce que renvoi la commande PID.Compute(): je ne comprends pas à quoi correspond le Output. Est-ce la nouvelle consigne de vitesse du moteur ?

 

 

 

Tu as une consigne ( valeur de vitesse souhaitée ) 
Tu as une mesure ( valeur de vitesse mesurée ) 

Le PID va utiliser l'erreur ( consigne - mesure ) avec "compute" pour déterminer un "ordre moteur correctif " à appliquer. 
Output est cet ordre moteur correctif . 

Dans le cas d'un moteur il sera la valeur de PWM à appliquer au moteur. 

Donc oui Output c'est bien la nouvelle consigne du 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 !

 

Les réalisations de Mike118  

 

 

 


#4 Colin

Colin

    Nouveau membre

  • Membres
  • 7 messages
  • Gender:Male

Posté 24 février 2019 - 04:24

Okay j'ai compris, merci messieurs !






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

0 members, 0 guests, 0 anonymous users