ssi_elec_asservissement_mbot
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| ssi_elec_asservissement_mbot [2025/11/29 14:47] – créée mistert2 | ssi_elec_asservissement_mbot [2025/12/08 11:22] (Version actuelle) – [Étape 2 : Action PI] mistert2 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | ===== TP – Asservissement en distance du mBot : Correcteur PID ===== | ||
| + | |||
| + | ==== Objectifs ==== | ||
| + | * Comprendre la logique d’un asservissement en boucle fermée | ||
| + | * Utiliser le capteur ultrason pour mesurer une distance réelle | ||
| + | * Étudier séparément les rôles des termes P, I et D | ||
| + | * Analyser la stabilité, le dépassement, | ||
| + | * Interpréter les données fournies dans le moniteur série | ||
| + | |||
| + | ==== Prérequis ==== | ||
| + | |||
| + | Lirairie mBot: [[bibliotheque_arduino_mbot]] | ||
| + | |||
| + | ==== Activité===== | ||
| + | |||
| + | {{ https:// | ||
| + | |||
| + | Forcer le mBot à suivre une cible à 20 cm de distance. | ||
| + | ==== 1) Principe général de l’asservissement ==== | ||
| + | |||
| + | Le robot doit se stabiliser à **20 cm** de l’obstacle. | ||
| + | |||
| + | L’erreur est définie par : | ||
| + | <mt> | ||
| + | e = D_{mes} - D_{cons} | ||
| + | </mt> | ||
| + | |||
| + | * si e > 0 → le robot est trop loin → avancer | ||
| + | * si e < 0 → le robot est trop près → reculer | ||
| + | |||
| + | La commande est donnée par un correcteur PID : | ||
| + | <mt> | ||
| + | v = K_p e + K_i \int e\, dt + K_d \frac{de}{dt} | ||
| + | </mt> | ||
| + | |||
| + | ===== Rôle des trois termes ===== | ||
| + | * **P** : corrige proportionnellement à l’erreur | ||
| + | * **I** : supprime l’erreur statique mais peut provoquer des oscillations | ||
| + | * **D** : réduit le dépassement, | ||
| + | |||
| + | ===== Filtrage du dérivé ===== | ||
| + | Le capteur ultrason étant bruyant, on utilise un dérivé filtré : | ||
| + | |||
| + | <mt> | ||
| + | d_{filt} = \alpha\, d_{filt} + (1 - \alpha)\, \frac{e - e_{prev}}{dt} | ||
| + | </mt> | ||
| + | |||
| + | ===== Anti-windup (limitation de l’intégrale) ===== | ||
| + | |||
| + | <mt> | ||
| + | I = \mathrm{clip}(I + e\,dt,\; -I_{max},\; I_{max}) | ||
| + | </mt> | ||
| + | |||
| + | Reset si inversion du signe de l’erreur : | ||
| + | |||
| + | <mt> | ||
| + | e \cdot e_{prev} < 0 \Rightarrow I = 0 | ||
| + | </mt> | ||
| + | |||
| + | ===== Saturation moteurs ===== | ||
| + | |||
| + | <mt> | ||
| + | v = | ||
| + | \begin{cases} | ||
| + | V_{max} & \text{si } v > V_{max} \\ | ||
| + | -V_{max} & \text{si } v < -V_{max} \\ | ||
| + | v & \text{sinon} | ||
| + | \end{cases} | ||
| + | </mt> | ||
| + | |||
| + | ===== Zone de vitesse minimale ===== | ||
| + | |||
| + | <mt> | ||
| + | |v| < V_{min} \Rightarrow v = | ||
| + | \begin{cases} | ||
| + | V_{min} & \text{si } v > 0 \\ | ||
| + | -V_{min} & \text{si } v < 0 | ||
| + | \end{cases} | ||
| + | </mt> | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== 2) Travail demandé ==== | ||
| + | |||
| + | ===== Partie A — Analyse conceptuelle ===== | ||
| + | * Expliquer la signification physique de l’erreur e. | ||
| + | * Pourquoi un système en boucle fermée est-il nécessaire ? | ||
| + | * Donner le rôle séparé des termes P, I, D. | ||
| + | * Pourquoi la dérivée doit-elle être filtrée ? | ||
| + | * Quel est l’intérêt du mécanisme anti-windup ? | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== Partie B — Expérimentations ===== | ||
| + | |||
| + | ==== Étape 1 : Action P seule ==== | ||
| + | * Mettre Ki = 0 et Kd = 0 | ||
| + | * Faire varier Kp (2, 4, 6, 8…) | ||
| + | |||
| + | **Questions :** | ||
| + | * Une erreur statique persiste-t-elle ? | ||
| + | * Y a-t-il un dépassement ? | ||
| + | * Le robot oscille-t-il si Kp est trop grand ? | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== Étape 2 : Action PI ==== | ||
| + | * Garder un Kp raisonnable (ex : 4 ou 6) | ||
| + | * Ajouter Ki (0.1 → 0.2) | ||
| + | |||
| + | **Questions :** | ||
| + | * L’erreur statique disparaît-elle ? | ||
| + | * Le robot devient-il plus oscillant ? | ||
| + | * Que provoque un Ki trop élevé ? | ||
| + | |||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== Étape 3 : Action PID ==== | ||
| + | * Ajouter un terme dérivé Kd (0.5 ou 1.0) | ||
| + | |||
| + | **Questions :** | ||
| + | * Le dépassement diminue-t-il ? | ||
| + | * La stabilité augmente-t-elle ? | ||
| + | * Le dérivé amplifie-t-il le bruit ? | ||
| + | * Le filtre (α) améliore-t-il les tremblements du robot ? | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== Partie C — Analyse des données série ===== | ||
| + | |||
| + | Les données typiques affichées : | ||
| + | |||
| + | < | ||
| + | D = distance mesurée | ||
| + | e = erreur | ||
| + | v = commande moteur | ||
| + | I = intégrale | ||
| + | d = dérivée filtrée | ||
| + | </ | ||
| + | |||
| + | **Questions :** | ||
| + | * La commande v se rapproche-t-elle de 0 une fois stabilisé ? | ||
| + | * L’intégrale atteint-elle les limites Imax ? | ||
| + | * Le dérivé filtré est-il stable ou bruité ? | ||
| + | * Observe-t-on un dépassement (overshoot) dans la distance D ? | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== 3) Synthèse finale ==== | ||
| + | |||
| + | Rédiger un paragraphe répondant aux questions suivantes : | ||
| + | |||
| + | * Pourquoi P seul ne suffit-il pas ? | ||
| + | * En quoi I améliore la précision mais peut dégrader la stabilité ? | ||
| + | * Quel est le rôle du dérivé dans l’amortissement ? | ||
| + | * Quel triplet (Kp, Ki, Kd) est optimal pour VOTRE robot ? (justifier) | ||
| + | * Pourquoi d’un robot à l’autre les réglages diffèrent-ils ? | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== 4) Bonus facultatif ==== | ||
| + | |||
| + | * Ajouter une consigne variable via le port série | ||
| + | * Tracer les courbes D, e, v, I dans un tableur | ||
| + | * Tester 10 cm, 20 cm et 30 cm pour analyser la robustesse | ||
| + | |||
ssi_elec_asservissement_mbot.1764427640.txt.gz · Dernière modification : de mistert2
