Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
fr:informatics:asservir_les_moteurs_en_vitesse [29/01/2025 22:19]
Keuronde [Finalisation]
fr:informatics:asservir_les_moteurs_en_vitesse [11/01/2026 12:14] (Version actuelle)
Keuronde [Trajectoire circulaire]
Ligne 57: Ligne 57:
 Enfin la commande s’obtient en sommant les commandes précédentes : Enfin la commande s’obtient en sommant les commandes précédentes :
   commande = commande_P + commande_I + commande_D   commande = commande_P + commande_I + commande_D
-Voila pour le correcteur. Maintenant, il reste deux tâches. Régler les gains, ce sera votre travail, mais surtout structurer le code pour mettre en œuvre ce correcteur.+Voilà pour le correcteur. Maintenant, il reste deux tâches. Régler les gains, ce sera votre travail, mais surtout structurer le code pour mettre en œuvre ce correcteur.
 ===== Structure du code ===== ===== Structure du code =====
  
Ligne 68: Ligne 68:
   Temps_init()   Temps_init()
 Dans la boucle principale, utilisez les fonctions de temps pour n’exécuter votre code qu’à intervalles réguliers. Dans la boucle principale, utilisez les fonctions de temps pour n’exécuter votre code qu’à intervalles réguliers.
-  temps_ms=0 ;+  m_temps_ms=0 ;
   while(1){   while(1){
-    if(Temps_get_ms()!= temps_ms){ +    if(Temps_get_temps_ms()!= temps_ms){ 
-      if(Temps_get_ms() % pas_de_temps == 0){+      if(Temps_get_temps_ms() % pas_de_temps == 0){
         // Votre futur code ici         // Votre futur code ici
       }       }
Ligne 90: Ligne 90:
   * AsserMoteur_setConsigne_mm_s(vitesse, moteur) : stocke la consigne de vitesse pour le moteur sélectionné   * AsserMoteur_setConsigne_mm_s(vitesse, moteur) : stocke la consigne de vitesse pour le moteur sélectionné
  
-#LIEN vers code complet+[[https://git.poivron-robotique.fr/Keuronde/Art_deplacer_robot/src/branch/Asservissement_des_moteurs/Asser_Moteurs.c|Lien vers le code du module]]
  
 ==== Finalisation ==== ==== Finalisation ====
Ligne 97: Ligne 97:
   float consigne_vitesse = 200; // Consigne en mm/s.   float consigne_vitesse = 200; // Consigne en mm/s.
   int demi_periode = 2000; // Temps haut ou bas du créneau (en ms)   int demi_periode = 2000; // Temps haut ou bas du créneau (en ms)
-A l’intérieur de votre « if(Temps_get_ms()!= temps_ms){ … } » : +A l’intérieur de votre « if(Temps_get_temps_ms()!= m_temps_ms){ … } » : 
-  if(Temps_get_ms() % demi_periode  == 0){+  if(Temps_get_temps_ms() % demi_periode  == 0){
     consigne_vitesse = - consigne_vitesse;     consigne_vitesse = - consigne_vitesse;
     AsserMoteur_setConsigne_mm_s(consigne_vitesse, MOTEUR_A);     AsserMoteur_setConsigne_mm_s(consigne_vitesse, MOTEUR_A);
Ligne 121: Ligne 121:
 Avec un tel réglage, vous devriez obtenir une réponse molle.  Avec un tel réglage, vous devriez obtenir une réponse molle. 
  
-#IMG :Ajouter image du graphique+{{ :fr:informatics:gainp_mou.png?direct&400 |}}
  
 Multiplier successivement votre gain par 2 jusqu’à avoir une réponse plus dynamique Multiplier successivement votre gain par 2 jusqu’à avoir une réponse plus dynamique
  
-#IMG gain_P dynamique.+{{ :fr:informatics:gainp_regle.png?direct&400 |}}
  
-Réglez ensuite votre gain I, en prenant comme première valeur gain_I = gain_P/10. Ajustez-le de la même manière que le gain_P+Réglez ensuite votre gain I, en prenant comme première valeur gain_I = gain_P/10. Ajustez-le de la même manière que le gain_P.
  
-#IMG gain_I réglé+Pour voir l’effet du gain I, nous augmentons la valeur de la consigne de vitesse à 400 mm/s et la fréquence de la consigne. 
 + 
 +{{ :fr:informatics:sans_gain_i.png?direct&400 |}} 
 + 
 +Nous observons que, sans gain I, la consigne n’est pas atteinte (ci-dessus). 
 + 
 +{{ :fr:informatics:avec_gaini.png?direct&400 |}} 
 + 
 +Lorsque nous réglons notre gain I, nous observons que la consigne est atteinte. Ceci au prix d’un petit dépassement.
  
 Pour le gain_D, débrouillez-vous ! Nous, nous ne nous en servons pas… Pour le gain_D, débrouillez-vous ! Nous, nous ne nous en servons pas…
  
 +Le code est disponible sur la branche « [[https://git.poivron-robotique.fr/Keuronde/Art_deplacer_robot/src/branch/Asservissement_des_moteurs|Asservissement des moteurs]] ».
 ===== Codes de démonstration ===== ===== Codes de démonstration =====
  
Ligne 138: Ligne 147:
 ==== Trajectoire circulaire ==== ==== Trajectoire circulaire ====
  
-Donnez 2 vitesses fixes mais différentes à vos moteurs pour obtenir un PAMI qui suit une trajectoire circulaire. Essayez les vitesses de 100 mm·s et 200 mm/s. Observez également à quel point votre PAMI se décale (ou non) au fil des passages.+Donnez 2 vitesses fixes mais différentes à vos moteurs pour obtenir un PAMI qui suit une trajectoire circulaire. Essayez les vitesses de 100 mm/et 200 mm/s. Observez également à quel point votre PAMI se décale (ou non) au fil des passages.
  
 #Vidéo PAMI #Vidéo PAMI
Ligne 148: Ligne 157:
 Si votre coefficient de conversion des pas du codeur en millimètres parcourus par la roue est bon, vous devriez observer que le déplacement réel correspond globalement à celui programmé (à la fois en termes de vitesse et en termes de distance). Si votre coefficient de conversion des pas du codeur en millimètres parcourus par la roue est bon, vous devriez observer que le déplacement réel correspond globalement à celui programmé (à la fois en termes de vitesse et en termes de distance).
  
-Observez également le décalage de votre PAME d’un aller-retour à l’autre !+Observez également le décalage de votre PAMI d’un aller-retour à l’autre !
  
 #Vidéo PAMI #Vidéo PAMI