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 [03/01/2025 19:49]
Keuronde [Vocabulaire et schéma de principe]
fr:informatics:asservir_les_moteurs_en_vitesse [11/01/2026 12:14] (Version actuelle)
Keuronde [Trajectoire circulaire]
Ligne 31: Ligne 31:
 Un système non-asservi, parfois décrit comme « en boucle ouverte » réagira très différemment en fonction des perturbations auxquelles est soumis le système. Un exemple concret ? Commander les moteurs des PAMI à 90 %. Soulever le PAMI et notez la vitesse des moteurs. Posez le PAMI et comparez ! Un système non-asservi, parfois décrit comme « en boucle ouverte » réagira très différemment en fonction des perturbations auxquelles est soumis le système. Un exemple concret ? Commander les moteurs des PAMI à 90 %. Soulever le PAMI et notez la vitesse des moteurs. Posez le PAMI et comparez !
  
-#Donner les valeurs de nos PAMIs.+Voici les valeurs avec notre PAMI 
 + 
 +^ Moteur ^ Position ^ Vitesse ^ 
 +| Gauche | Soulevé | 59 cm/s | 
 +| Gauche | Au sol | 55 cm/s | 
 +| Droit | Soulevé | 63 cm/s | 
 +| Droit | Au sol | 62 cm/s | 
  
 ==== Quel type d’asservissement ? ==== ==== Quel type d’asservissement ? ====
Ligne 50: 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 61: 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 83: 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 90: 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 97: Ligne 104:
   }   }
  
-#IMG signal carré+{{ :fr:informatics:consigne_vitesse.png?direct&400 |}}
  
 Envoyez une consigne à 200 mm/s qui s’inverse toutes les deux secondes. Vous adapterez si nécessaire par la suite. Envoyez une consigne à 200 mm/s qui s’inverse toutes les deux secondes. Vous adapterez si nécessaire par la suite.
Ligne 114: 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. 
 + 
 +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).
  
-Réglez ensuite votre gain I, en prenant comme première valeur gain_I = gain_P/10Ajustez-le de la même manière que le gain_P+{{ :fr:informatics:avec_gaini.png?direct&400 |}}
  
-#IMG : gain_I réglé+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 131: 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 141: 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