Différences
Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
|
fr:informatics:asservir_les_moteurs_en_vitesse [25/08/2024 16:38] Keuronde créée |
fr:informatics:asservir_les_moteurs_en_vitesse [11/01/2026 12:14] (Version actuelle) Keuronde [Trajectoire circulaire] |
||
|---|---|---|---|
| Ligne 25: | Ligne 25: | ||
| **Le gain du capteur** : | **Le gain du capteur** : | ||
| - | #Insérer schéma d’asservissement | + | {{ : |
| ==== Pourquoi asservir ? ==== | ==== Pourquoi asservir ? ==== | ||
| Ligne 31: | Ligne 31: | ||
| Un système non-asservi, | Un système non-asservi, | ||
| - | # | + | Voici les valeurs |
| + | |||
| + | ^ 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à |
| ===== 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. | ||
| - | | + | |
| 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, | * AsserMoteur_setConsigne_mm_s(vitesse, | ||
| - | #LIEN vers code complet | + | [[https:// |
| ==== 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 | + | if(Temps_get_temps_ms() % demi_periode |
| consigne_vitesse = - consigne_vitesse; | consigne_vitesse = - consigne_vitesse; | ||
| AsserMoteur_setConsigne_mm_s(consigne_vitesse, | AsserMoteur_setConsigne_mm_s(consigne_vitesse, | ||
| Ligne 97: | Ligne 104: | ||
| } | } | ||
| - | #IMG signal carré | + | {{ : |
| 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: |
| 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 | + | {{ :fr: |
| + | |||
| + | 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. | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | 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/10. Ajustez-le de la même manière que le gain_P | + | {{ : |
| - | #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:// | ||
| ===== 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 | + | Donnez 2 vitesses fixes mais différentes à vos moteurs pour obtenir un PAMI qui suit une trajectoire circulaire. Essayez les vitesses de 100 mm/ |
| #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 | ||