Séquence 8 : Double commande moteur

Expérimenter, Modéliser et Résoudre pour déterminer les performances globales d’un système linéaire continu invariant

Travail préparatoire

Avant de commencer cette séquence de travaux pratiques, vous devez réaliser le travail préparatoire suivant :

Introduction

Image manquante


Comme vous pouvez le constater sur le site du constructeur de ce motoréducteur, les meilleures informations que nous puissions trouver sur les caractéristiques se trouvent dans ce document dont nous pouvons extraire les courbes ci-dessous :


Image manquante
Cliquer sur l'image pour l'agrandir


Les caractéristiques du moteur ne sont pas directement fournies et elles sont pourtant indispensables à la modélisation.


La première partie de ce TP sera consacrée à la caractérisation du moteur.

Modélisation d'un motoréducteur sous forme d'un schéma bloc

En finalité de modéliser l'asservissement de la vitesse de rotation du motoréducteur, on souhaite réaliser le schéma bloc de ce motoréducteur composé du moteur et d'un réducteur.

Image manquante
Modèle électrique d'un moteur à courant continu

En bleu, les variables électriques et en en vert les variables mécaniques


Pour cela, il est indispensable de connaître entre autre toutes les caractéristiques du motoréducteur.

Constantes caractéristiques

Soit les constantes caractéristiques du motoréducteur ainsi définies :

  • \( K_e \) : Constante de force contre électromotrice
  • \( K_c \) : Constante de couple avec \( K_c = K_e \) (comme dans la plupart des moteurs à courant continu modernes)
  • \( R \) : Résistance de l'induit
  • \( C_r \) : Couple de frottement sec ramené au rotor du moteur
  • \( f_v \) : Coefficient de frottement visqueux ramené au rotor du moteur
  • \( k \) : Rapport de réduction du réducteur avec \( k = \dfrac{\omega_m(t)}{\omega_{mr}(t)} \)
  • \( L \) : Inductance de l'induit négligée (comme dans la plupart des moteurs à courant continu modernes)
  • \( J_{eq} \) : Moment d'inertie équivalent ramené au rotor du moteur

Seul, le rapport de réduction du réducteur est connu \( k = 9.68 \). En réalité, il est négatif mais dans un esprit de simplification d'utilisation de matériel expérimental, nous prendrons la valeur absolue.

Variables

On pourra éventuellement utiliser les variables suivantes :

  • \( u(t) \) : Tension d'alimentation aux bornes du moteur
  • \( e(t) \) : Tension contre électromotrice développée dans l'induit
  • \( i(t) \) : Intensité du courant dans le moteur
  • \( \omega_m(t) \) : Vitesse de rotation du moteur (rotor du moteur par rapport au stator)
  • \( \omega_{mr}(t) \) : Vitesse de rotation du motoréducteur (arbre de sortie du réducteur par rapport au stator)
  • \( \omega_c(t) \) : Vitesse de rotation de consigne du motoréducteur
  • \( C_m(t) \) : Couple généré par le moteur
  • \( C_{mr}(t) \) : Couple généré par le motoréducteur

Spécificité propre à ce TP

On pourra éventuellement utiliser les constantes suivantes :


  • \( delai \) : La consigne \( u(t) \) et la perturbation \( C_r \) seront envoyées avec un délai.

Modélisation

Donner les 4 équations caractéristiques du moteur à courant continu :

  • l'équation électrique (loi des mailles)
  • les deux équations de couplage électro-mécanique
  • l'équation de mouvement du comportement mécanique dans sa forme généralisée issue d'une étude dynamique (PFD ou TEC)

Réaliser sur feuille le schéma bloc (modèle causal) du motoréducteur à courant continu.

Réaliser le schéma bloc (modèle causal) du motoréducteur à courant continu sous Scilab ou MatLab. Les constantes caractéristiques doivent être paramétrables afin que vous puissiez par la suite les modifier avec les valeurs que vous trouverez durant l'activité des travaux pratiques.

Vous pourrez utiliser un des PC de la salle de TP, de TIPE ou d'informatique dans le secteur CPGE SI pour utiliser un des deux logiciels. Sinon, vous pouvez l'utiliser depuis chez vous :
  • Scilab : vous pouvez utiliser une version portable.
  • MatLab : vous pouvez utiliser une version en ligne mais vous avez besoin d'obtenir une licence Matlab : pour cela, il faut m'en faire la demande. Cependant la demande ne doit pas être faite à la dernière minute car je dois passer par la personne ressource du lycée pour obtenir la licence et de plus, je dois faire une demande unique groupée.

Tester votre schéma bloc sur une durée de 0.9 seconde avec un décalage temporel \( delai \) de 50 ms sur la commande \( u(t) \) et le couple résistant \( C_r \) en affichant la réponse en vitesse \( \omega_{mr}(t) \) pour un saut échelon de tension de \( u(t) \) avec les valeurs fictives suivantes :


// Consigne
delai = 0.05  // s
U = 10        // V

// Caractéristiques moteur
R = 2         // Ohm
Kc = 1e-3     // (N.m)/A
Ke = Kc       // (rad/s)/volt
fv = 1e-3     // (N.m)/(rad/s)
Cr = 1e-3     // N.m

L = 0         // H
Jeq = 100e-6  // kg.m²

// Caractéristique réducteur
k = 2         // sans unite

On rappelle qu'aucun valeur numérique ne doit être directement mise sur le schéma bloc.

Importer le fichier de mesure

et l'afficher avec la simulation.


Il ne doit y avoir aucun écart si vous n'avez pas commis d'erreur.

Donner dans le domaine de Laplace l'expression de la vitesse de rotation \( \Omega_{mr}(p) \) en fonction de la tension d’alimentation \( U(p) \) et du couple résistant \( C_r \).
Ce travail préparatoire sera à présenter dès le début de la première séance.

Environnement nécessaire pour le déroulement de la séquence

Matériel nécéssaire pour le système

Vous devez normalement avoir à votre disposition une feuille pour noter les caractéristiques trouvées.


Vous aurez besoin de ce matériel :


Si cela n'a pas déjà été fait, il faut d'abord brancher le câble série :


Si cela n'a pas déjà été fait, il faut ensuite brancher le câble réseau :


Pour finir, si cela n'a pas déjà été fait, il faut brancher l'alimentation :

Il faut attendre quelques instants avant que la carte raspberry Pi ait démarré.

Présentation du système

Domaine du commanditaire

Le robot  Geeros pcDuino est un robot gyropode d'exploration.


Il intègre une liaison Wi-Fi vous permettant de le piloter à distance à partir d'un ordinateur, d'un smartphone ou d'une tablette.


Il embarque une Webcam capable de faire de la transmission vidéo en temps-réel des images prises par le robot.


Le robot est fragile. Il est à manipuler avec le plus grand soin !


Domaine du laboratoire

La motorisation du robot Geeros a été extraite pour être implantée sur une platine.



Ce système, basé sur une carte Raspberry Pi associée à une carte micro-contrôleur Teensy 3.6 montée sur un shield de commande moteur, permet de réaliser différentes expériences de commande de deux machines à courant continu avec codeur incrémental associé, identiques, l’un fonctionnant en moteur et l’autre en générateur de couple.


En absence de commande de génération de couple par le générateur, le générateur est piloté de manière à ce qu'elle ne soit pas ressentie par le moteur. En fin de compte, dans cette situation, si l'on désaccouplait le générateur du moteur, le moteur a exactement le même comportement et nous pouvons considérer que le générateur n'est pas présent !

Problématique

L'asservissement de la verticalité du robot Geeros exige d'avoir une motorisation réactive.


Nous allons nous intéresser de manière qualitative1 à Comment peut-on arriver à faire cela ?


Pour cela, vous allez :

  • identifier des caractéristiques du motoréducteur
  • modéliser l'asservissement de la vitesse de rotation du moteur
  • modéliser un correcteur numérique (proportionnel, proportionnel intégral et à avance de phase)

Démarche de l'ingénieur

Image manquante

Rôle de chacun des membres de l'équipe

Les étudiant(e)s qui travaillent en îlots doivent constituer une équipe, dans laquelle chacun aura un rôle essentiel et complémentaire à celui des autres membres, pour réaliser les tâches correspondant aux objectifs.

Mission spécifique au groupe projet

Un groupe projet est composé d’un expérimentateur, d’un modélisateur travaillant conjointement.


Les groupes projet doivent mettre en oeuvre les compétences suivantes :

    Normalement je vous ai donnée une feuille pour que vous sachiez quelle platine utilisée à la prochaine séance mais également de faire une synthèse des caractéristiques trouvées.


    Veuillez noter vos noms sur cette feuille.

    Introduction

    Image manquante


    Comme vous pouvez le constater sur le site du constructeur de ce motoréducteur, les meilleures informations que nous puissions trouver sur les caractéristiques se trouvent dans ce document dont nous pouvons extraire les courbes ci-dessous :


    Image manquante
    Cliquer sur l'image pour zoomer


    Les caractéristiques du moteur ne sont pas directement fournies et elles sont pourtant indispensables à la modélisation.

    Logiciel de commande et d'acquisition MyViz

    Le logiciel MyViz Image manquante permet de piloter la platine mais aussi de récupérer les données issues de l'expérimentation.

    Normalement, la platine devrait être déjà branchée sinon veuillez suivre cette procédure.

    Lancer l'application avec le fichier MyViz.exe Image manquante.

    La première chose à faire est de vérifier que le port série soit bien configuré : Pour cela,

    • Cliquer sur le menu Paramètres
    • Cliquer sur le sous menu Port série par défaut
    • Sélectionner COMx - Microsoft (x pouvant être un nombre différent d'un ordinateur à l'autre)

    Image manquante

    Cette opération n'est possible que si la platine est alimentée.

    Il faut ensuite accéder à l'environnement de travail. Pour cela :

    • Cliquer sur le menu Applications
    • Cliquer sur le sous menu Systèmes didactiques
    • Cliquer sur le sous sous menu Double commande de moteur à courant continu
    • Sélectionner Tableaux de bords

    Image manquante

    Pour l'identification, nous utiliserons la commande en tension par le port série bien plus rapide que par le port réseau. Pour cela,

    • Cliquer sur Ouvrir de Commande en tension série (acquisition rapide)

    Image manquante


    Noter que par la suite, il est possible de passer directement d’une application à une autre en utilisant la zone Applications intégrée dans chaque tableau de bord.


    Image manquante

    La première chose à faire est de réaliser la connexion en cliquant sur OFF de Connexion au port série de Contrôle de l'application. L'interrupteur commute alors sur ON.


    Image manquante Image manquante


    Une led  orange  doit s'allumer sur la platine.

    Par la suite, l'utilisation du logiciel est assez intuitive.

    Environnement python : Jupyter Notebook Image manquante

    Pour toute cette séquence de TP, vous aurez besoin d'utiliser le logiciel Jupyter Lab Image manquante dont les fichiers utilisés ont l'extension ipynb.


    Vous devrez sauvegarder tous vos fichiers dans un seul dossier. De préférence, sur votre clé USB afin de les récupérer à la fin de votre séance pour les réutiliser à la prochaine séance.


    Pour utiliser vos fichiers, vous devez, depuis l'explorateur Windows, double cliquer une seule fois sur le premier fichier ipynb à utiliser. Par la suite, les fichiers seront accessibles depuis l'environnent Jupyter Notebook.


    Si vous rencontrez des difficultés de lancement, n'hésitez à appler votre professeur.

    Identification des caractéristiques du motoréducteur

    Nous rappelons que le rapport de réduction du réducteur \( k = \dfrac{\omega_m(t)}{\omega_{mr}(t)} \) est de 9.68.

    La résistance \( R \)
    l'inductance \( L \)

    Cette identification se fait le rotor bloqué en tenant à la main la roue aimantée du codeur incrémental du codeur. Prenez garde à ne pas toucher le capteur effet hall.

    Identifier les constituants de la chaîne d'information réalisant la fonction acquérir.

    La procédure est la suivante :

    • Si cela n'est pas déjà fait, commuter sur ON le bouton de connexion au port série
    • Choisir une durée d’acquisition de 0.01 s
    • Choisir un signal de type Rectangle avec une amplitude de 3.75 V (c’est la moitié de la tension d’alimentation du système) et un délai avant le démarrage de 2 ms
    • Tenir fixe la roue du codeur en la pinçant fortement mais sans s'appuyer sur le capteur à effet hall
    • Commuter le bouton du générateur de signal sur ON

    Image manquante

    Répéter l’opération jusqu’à l’obtention d’une mesure de courant la plus propre possible, c'est-à-dire, a peu près similaire à celle-ci :

    Image manquante


    Nous vous invitons à cliquer sur le bouton " EXPLORER " pour extraire rapidement des informations sur les courbes.


    Image manquante

    Enregistrer les données sous le nom RL.csv dans le dossier que vous avez choisi en cliquant sur le bouton Enregistrer dans Contrôle de l'application.

    A partir de cette expérience, identifier la résistance \( R \) et l'inductance \( L \) du moteur.
    Valider vos résultats.
    Il est à savoir que la résistance que vous avez mesuré est en fait la résistance équivalente du hacheur (\( 0.565 \; \Omega \)) en série avec celle du moteur \( R \).
    Malgré que nous ayons la valeur numérique de l'inductance \( L \), nous la négligerons quand même du fait du comportement dominant constaté sur l'expérience.

    Constante de force contre électromotrice \( K_e \)
    Constante de couple \( K_c \)

    Cette identification se fait le rotor libre, sur une période de temps plus longue.


    Il est inutile de désaccoupler le moteur du générateur. En effet, le générateur est piloté de manière à ne pas être ressenti par le moteur.

    La procédure est la suivante :
    • Si cela n'est pas déjà fait, commuter sur ON le bouton de connexion au port série
    • Choisir une durée d’acquisition de 0.9 s
    • Choisir un signal de type Rectangle avec une amplitude de 6 V et un délai avant le démarrage de 50 ms
    • Commuter le bouton du générateur de signal sur ON

    Image manquante

    Image manquante


    Nous vous invitons à cliquer sur le bouton " EXPLORER " pour extraire rapidement des informations sur les courbes.


    Image manquante

    • Enregistrer les données sous le nom Ke.csv en cliquant sur le bouton Enregistrer dans Contrôle de l'application
    A partir de cette expérience, identifier la constante de force contre électromotrice \( K_e \).

    Dans les moteurs modernes, \( K_c = K_e \) en terme de grandeur. Les unités ne sont pas comparables.

    Identification du frottement sec et du frottement visqueux

    Cette identification nécessite la réalisation de plusieurs essais (identique de l'expérience précédente) avec plusieurs tensions d’alimentation différentes (1V, 2V, 3V, 4V, 5V et 6V).


    Vous nommerez les différents fichiers CrFvi.csv avec \( i \) la tension appliquée au moteur.

    Par exemple pour l'expérience avec une tension de 1 volt, nous nommerons le fichier CrFv1.csv.


    Vous pouvez, éventuellement, faire plusieurs fois le même essai mais cette fois-ci vous nommerez votre fichier CrFvi-j.csv avec \( i \) la tension appliquée au moteur et \( j \) le numéro de l'expérience à cette tension.

    Tracer expérimentalement le courant \( i(t) \) en fonction de la vitesse de rotation du motoréducteur \( \omega_{m}(t) \)

    Couple de frottement visqueux

    Identifier le coefficient de frottement visqueux \( f_v \).

    Coefficient de frottement sec

    L’intersection de la droite avec l’axe des ordonnées représente le courant de seuil \( i_0 \).

    A partir des expériences précédentes, déterminer le courant de seuil \( i_0 \).


    En déduire le couple de frottement sec \( C_r \) associé.

    Réaliser l'expérience suivante :
    • Si cela n'est pas déjà fait, commuter sur ON le bouton de connexion au port série
    • Choisir une durée d’acquisition de 0 s
    • Choisir un signal de type Rectangle avec une amplitude de 0 V et un délai avant le démarrage de 0 ms
    • Commuter le bouton du générateur de signal sur ON
    • Augmenter petit à petit la tension de commande jusqu'à ce que le rotor se mette en mouvement

    Déterminer expérimentalement le courant de seuil \( i_0 \) à partir de l'expérience précédente.


    En déduire le couple de frottement sec \( C_r \) associé.

    Réaliser l'expérience suivante :
    • Si cela n'est pas déjà fait, commuter sur ON le bouton de connexion au port série
    • Choisir une durée d’acquisition de 0 s
    • Choisir un signal de type Rectangle avec une amplitude de 1 V et un délai avant le démarrage de 0 ms
    • Commuter le bouton du générateur de signal sur ON
    • Diminuer petit à petit la tension de commande jusqu'à ce que le rotor s'immobilise

    Déterminer expérimentalement le courant de seuil \( i_0 \) à partir de l'expérience précédente.


    En déduire le couple de frottement sec \( C_r \) associé.

    Comparer ces 3 courants de seuil \( i_0 \) entre elles.

    Nous vous invitons à faire une recherche bibliographique sur le frottement sec statique et dynamique.

    Le modèle de " Coulomb, sec et visqueux " peut se représenter ainsi :

    Image manquante


    On pourrait se pose la question de " Où se trouve les différents couples de frottement évoqués précédemment ? "

    Identifier le couple de frottement sec \( C_r \).

    Identification du moment d'inertie équivalente

    L’identification du moment d'inertie équivalente peut se faire en reprenant l'expérience fait à 6 volts.
    Donner dans le domaine de Laplace l'expression de la vitesse de rotation \( \Omega_{mr}(p) \) en fonction de la tension d’alimentation \( U(p) \) et du couple résistant \( C_r \).
    Exprimer la constante de temps des deux fonctions de transferts \( \left[ \dfrac{\Omega_{mr}(p)}{U(p)} \right]_{C_r=0} \) et \( \left[ \dfrac{\Omega_{mr}(p)}{C_r} \right]_{U(p)=0} \).
    Identifier le moment d'inertie équivalente à partir de l'expérience

    Validation du modèle par la réponse temporelle

    • Récupérer les résultats expérimentations pour une commande de 6V.
    • Utiliser le fichier Image manquante conversionCommandeEnTension_Serie.ipynb (pour scilab ou pour MatLab) pour convertir les résultats expérimentaux en données compatibles le modèle causal choisi.
    • Ouvrir votre modèle causal et saisir vos constantes caractéristiques

    Valider votre modèle

    Commenter les écarts constatés

    Validation du modèle par la réponse fréquentielle

    Déterminer la fonction de transfert en boucle fermée du motoréducteur \( \left[ \dfrac{\Omega_{mr}(p)}{U(p)} \right]_{C_r=0} \).
    Tracer le diagramme de Bode de la fonction de transfert en boucle fermée du motoréducteur \( \left[ \dfrac{\Omega_{mr}(p)}{U(p)} \right]_{C_r=0} \) en modifiant le gain statique et la constante de temps du programme ci contre.

    La procédure est la suivante :

    • Si cela n'est pas déjà fait, commuter sur ON le bouton de connexion au port série
    • Choisir une durée d’acquisition de 0 s
    • Choisir un signal de type Sinus avec une amplitude de 3 V, une fréquence de 1 Hz et un délai avant le démarrage de 0 ms
    • Commuter le bouton du générateur de signal sur ON
    • Commuter le bouton du générateur de signal sur OFF une fois que les courbes commencent à défiler (le temps de réponse ne doit plus apparaitre sur la courbe)

    Image manquante

    Image manquante

    Déterminer le module et le déphasage entre les deux signaux à partir des informations de la fréquence, de l’amplitude, de phase et de l’offset du signal d’entrée et du signal de sortie.

    Compléter, avec les relevés expérimentaux, les variables :

    • wm : la pulsation mesurée
    • gainm : le gain mesuré
    • phasem : le déphase mesuré

    Valider votre modèle

    Commenter les écarts constatés

    Modélisation de l'asservissement de la vitesse de rotation du moteur

    Modélisation

    Donner, dans sa généralité, le schéma-blocs organique d'un système asservi.

    Justifier que l'on puisse se ramener à ce schéma-blocs ci-dessous :


    Image manquante
    Cliquer sur l'image pour l'agrandir

    La première chose à faire est de fermer la connexion en cliquant sur ON de Connexion au port série de Contrôle de l'application. L'interrupteur commute alors sur OFF.


    Image manquante Image manquante


    Une led orange doit s'éteindre sur la platine.


    Si vous ne réalisez pas cette étape, par la suite vous pourriez avoir des problèmes de communication.

    Pour l'identification des composants de gain inconnu (hacheur, capteur, etc.), nous utiliserons l'asservissement en vitesse par le port série bien plus rapide que par le port réseau. Pour cela,

    • Cliquer sur Ouvrir de Asservissement en vitesse série (acquisition rapide)

    Image manquante


    Noter que par la suite, il est possible de passer directement d’une application à une autre en utilisant la zone Applications intégrée dans chaque tableau de bord.


    Image manquante

    La procédure est la suivante :

    • Si cela n'est pas déjà fait, commuter sur ON le bouton de connexion au port série
    • Choisir une durée d’acquisition de 0.9 s
    • Choisir un signal de type Rectangle avec une amplitude de 40 rad/s et un délai avant le démarrage de 50 ms
    • Régler le correcteur PID en correcteur proportionnel
      • \( Kp = 0.1 \)
      • \( Ki = 0 \)
      • \( Kd = 0 \)
    • Commuter le bouton du générateur de signal sur ON

    Image manquante

    Identifier le gain \( Kautre \) à partir de la mesure

    • la tension de commande \( u(t) \)
    • la vitesse de rotation du motoréducteur \( \omega_{mr}(t) \)

    et à partir des informations

    • la vitesse de rotation de consigne du motoréducteur \( \omega_c(t) \)
    • du gain du correcteur \( K_p \)

    Compléter votre schéma bloc.

    • Utiliser le fichier Image manquante conversionAsservissementEnVitesse_Serie.py (pour scilab ou pour MatLab) pour convertir les résultats en données compatibles le modèle causal choisi.
    • Ouvrir votre modèle causal et saisir vos constantes caractéristiques

    Valider votre modèle

    Commenter les écarts constatés

    Amélioration / dégradation du comportement

    En vue d’analyser les performances (la stabilité, la robustesse, la rapidité et la précision) avec ou sans l’effet de la perturbation de couple extérieur au motoréducteur, lancer des échelons de vitesse avec l'acquisition des courbes de vitesse, pour chacune des situations ci-dessous :

    Situation \(Kp\) \(Ki\) \(Kd\) couple extérieur Nom du fichier
    Correction proportionnelle
    sans perturbation
    0.05 0 0 Désactivé kp005ki000cr000.csv
    0.1 kp010ki000cr000.csv
    0.2 kp020ki000cr000.csv
    0.4 kp040ki000cr000.csv
    Correction proportionnelle
    avec perturbation
    0.05 0 0 Activé kp005ki000cr001.csv
    0.1 kp010ki000cr001.csv
    0.2 kp020ki000cr001.csv
    0.4 kp040ki000cr001.csv
    Correction proportionnelle intégrale
    sans perturbation
    0.1 0.1 0 Désactivé kp010ki001cr000.csv
    2 kp010ki020cr000.csv
    10 kp010ki100cr000.csv
    Correction proportionnelle intégrale
    avec perturbation
    0.1 0.1 0 Activé kp010ki001cr001.csv
    2 kp010ki020cr001.csv
    10 kp010ki100cr001.csv

    Pour cela, dans l'application Asservissement en vitesse série (acquisition rapide),

    • Si cela n'est pas déjà fait, commuter sur ON le bouton de connexion au port série
    • Choisir une durée d’acquisition de 2.25 s
    • Choisir un signal de type Rectangle avec
      • un offset de 0 rad/s
      • une amplitude de 40 rad/s
      • une fréquence de 0.5 Hz
      • un rapport cyclique de 80%
      • un délai avant le démarrage de 500 ms
    • Régler le correcteur PID selon les différentes situations ci-dessus.
    • Régler la consigne de couple à -0.01 N.m que l'on activera selon les besoins
    • Commuter le bouton du générateur de signal sur ON quand vous êtes prêt
    • Enregistrer l'expérience sous le nom du fichier imposé.

    Image manquante

    Afficher les courbes dans la situation Correction proportionnelle avec et sans perturbation.

    Commenter l'évolution des performances au cause de la présence de la perturbation.

    Afficher les courbes dans la situation Correction proportionnelle

    Commenter l'évolution des performances grâce l'augmentation du gain du correcteur proportionnel.

    Afficher les courbes dans la situation Correction proportionnelle intégrale.

    Commenter l'évolution des performances grâce à l'introduction de l'intégrateur dans le correcteur proportionnel.

    Le cours à venir sur les correcteurs fera la synthèse de vos observations.

    A la suite de ce cours, nous irons plus loin en proposant et en mettant en œuvre une démarche de réglage d’un correcteur.

    Correction numérique

    Mise en garde

    Malheureusement dans cette partie, nous ne pouvons plus utiliser le port série. Il nous faut utiliser le port réseau afin de pouvoir écrire son propre correcteur.


    La vitesse de communication par le port réseau est beaucoup plus lente que par le port série. Cela implique un retard dans la chaine de communications que nous n'avions pas auparavant. De ce fait, le comportement de la platine n'est plus le même et le modèle que nous avions établi n'est plus valable !

    Correcteur numérique

    L'implémentation d'un correcteur numérique dans un micro-contrôleur ou dans un ordinateur se fait grâce à un programme dont vous pouvez voir la structure ci dessous.

    Il faut garder à l'esprit que ce script est itératif. Il est exécuté à intervalle de temps régulier avec une période de l'échantillonnage Te.

    Nous rappelons que l'erreur est la différence de la consigne avec la réponse. Dans notre cas, la grandeur physique asservie est la vitesse de rotation du motoréducteur.

    I_x = 0. # Etat de l'intégrateur
    D_x = 0. # Etat de la dérivée
    erreurprec = 0. # Mesure de l'erreur au pas précédent
    
    def PID(cons, mes, Kp, Ki, Kd, Tf, umax, umin, Te):
        # cons : Consigne de vitesse
        # mes : Mesure de la vitesse
        # Kp : gain de l'action proportionnelle
        # Ki : gain de l'action intégrale
        # Ti : constante de temps de l'action intégrale
        if Ki == 0:
            Ti = 0 # Attention à la division par zéro...
        else:
            Ti = 1 / Ki
        # Kd : gain de l'action dérivée
        # Tf : Non utilise
        # umax : commande maximale
        # umin : commande minimale
        # Te : période de l'échantillonnage
    
        global I_x, D_x, erreurprec
        
        ## Calcul du PID
    
        ## Calcul de l'erreur
        erreur = cons - mes
     
        ## Terme proportionnel de gain Kp
        P_x = 0.
    
        ## Terme intégral de gain Ki ou de constante de temps Ti
        I_x = 0.
    
        ## Terme dérivé de gain Kd
        D_x = 0.
    
        ## Calcul de la commande avant saturation
        if (Kp == 0): P_x = 0.
        if (Ki == 0): I_x = 0.
        if (Kd == 0): D_x = 0.
        commande_avant_sat = P_x + I_x + D_x
    
        ## Application de la saturation sur la commande
        if (commande_avant_sat > umax):
            commande = umax
        elif (commande_avant_sat < umin):
            commande = umin
        else:
            commande = commande_avant_sat
    
        ## Stockage de l'erreur courante pour utilisation lors du pas d'échantillonnage suivant
        erreurprec = erreur
    
        return commande
    

    Implémentation de l'action proportionnelle

    La correction proportionnelle est caractérisée par cette relation : la commande \( u(t) = Kp \cdot erreur(t) \).

    La commande \( u(t) \) de l'action proportionnelle sera appelée dans le programme P_x.

    Modifier le programme ci-dessus pour implanter l'action proportionnelle.

    La première chose à faire est de fermer la connexion en cliquant sur ON de Connexion au port série de Contrôle de l'application. L'interrupteur commute alors sur OFF.


    Image manquante Image manquante


    Une led orange doit s'éteindre sur la platine.

    Nous allons implanter votre programme dans la platine et tester dans la foulée votre programme.

    • Ouvrir l'application Asservissement en vitesse (réseau)
    • Si cela n'est pas déjà fait, commuter sur ON le bouton de Marche / Arrêt
    • Implanter votre correcteur :
      • Téléverser votre fichier PID.py
      • Commuter le bouton Utiliser le fichier téléchargé sur
      • Régler le correcteur PID à votre convenance
    • Choisir une durée d’acquisition de 2.25 s
    • Choisir un signal de type Rectangle avec
      • un offset de 0 rad/s
      • une amplitude de 40 rad/s
      • une fréquence de 0.5 Hz
      • un rapport cyclique de 80%
      • un délai avant le démarrage de 500 ms
    • Commuter le bouton du générateur de signal sur ON quand vous êtes prêt

    Image manquante

    • Refaire au choix une seule des situations Correction proportionnelle avec ou sans perturbation avec le correcteur personnalisé. Sauvegarder l'acquisition sous correcteurProportionnelPersonnalise.csv.
    • Refaire la même situation avec le correcteur par défaut. Sauvegarder l'acquisition sous correcteurProportionnelparDefaut.csv
    • Afficher les courbes dans la situation Correction proportionnelle.
    • Commenter la différence entre le correcteur par défaut et le vôtre.

    Implémentation de l'action intégrale

    La correction intégrale est caractérisée par cette relation : la commande \( u(t) = \dfrac{1}{Ti} \cdot \int\limits_{0}^{t} erreur(\theta) \cdot d\theta \) avec \( \dfrac{1}{Ti} = Ki \).

    La commande \( u(t) \) de l'action intégrale sera appelée dans le programme I_x.

    Recopier sur une feuille le schéma ci-dessous


    Image manquante


    Représenter sur cette courbe \( \int\limits_{0}^{t} erreur(\theta) \cdot d\theta \) pour \( t = 2 \cdot Te \).

    On suppose qu'à l'instant \( t \) que \( u(t) = \dfrac{1}{Ti} \cdot \int\limits_{0}^{t} erreur(\theta) \cdot d\theta \) est connu. D'ailleurs sur le programme ci-dessus, cela correspond à la variable globale I_x.


    Le temps est échantillonné sur un intervalle de temps Te. A la prochaine itération, nous devons réévaluer \( u(t+Te) = \dfrac{1}{Ti} \cdot \int\limits_{0}^{t+Te} erreur(\theta) \cdot d\theta \) qui vaut en fait \( \dfrac{1}{Ti} \cdot \int\limits_{0}^{t} erreur(\theta) \cdot d\theta + \dfrac{1}{Ti} \cdot \int\limits_{t}^{t+Te} erreur(\theta) \cdot d\theta \).

    Sur le schéma recopié, représenter d'une autre couleur \( \int\limits_{t}^{t+Te} erreur(\theta) \cdot d\theta \) pour \( t = 2 \cdot Te \).

    Un correcteur proportionnel intégrale peut s'écrire \( u(t) = Kp \cdot erreur(t) + \dfrac{1}{Ti} \cdot \int\limits_{0}^{t} erreur(\theta) \cdot d\theta \), c'est-à-dire, commande_avant_sat = P_x + I_x.

    Modifier le programme précédent pour implanter l'action intégrale.

    Téléverser votre nouveau programme.

    • Refaire au choix une seule des situations Correction proportionnelle intégrale avec ou sans perturbation avec le correcteur personnalisé. Sauvegarder l'acquisition sous correcteurProportionnelIntegralPersonnalise.csv.
    • Refaire la même situation avec le correcteur par défaut. Sauvegarder l'acquisition sous correcteurProportionnelIntegralparDefaut.csv
    • Afficher les courbes dans la situation Correction proportionnelle.
    • Commenter la différence entre le correcteur par défaut et le vôtre.