Reglage de boucle PID comment faire ?

  • Auteur de la discussion lavalding
  • Date de début
L

lavalding

Nouveau
Bonjour,

J'utilise EMC2.3 avec les cartes MESA 5i20 et 4i33 pour la commande de servos tous fonctionne mais je galère pour la mise au point, je but sur le réglage de la boucle PID.


si quelqu'un pouvait m'aider ?

Z1.jpg
Voici la bete:
 
H

horsot

Compagnon
Bonjour lavalding,

Autant que je te dise de suite ta machine tu n'en fera rien, si tu veux je t'en débarrasse :wink: .

Sérieusement, pour ton histoire de PID as-tu essayé avec ça : http://linuxcnc.org/docs/html/motion_pid_theory_fr.html

Sinon il y a un utilitaire depuis la version 2.4 (il faut mettre à jour) : http://linuxcnc.org/docs/html/config_pncconf.html

"Halscope" (l'oscilloscope des signaux HAL) peut t'aider à voir l'erreur statique, le dépassement, temps d'établissement... Un bon outil.

Il existe aussi un module d'auto-tuning du pid "at_pid" (anglais) :
http://linuxcnc.org/docs/html/man/man9/at_pid.9.html

Tiens moi au courant ça m'intéresse.

Xavier

PS : ta carte opto doit être une 7i33 et non 4i33.
 
J

JULES 21

Apprenti
Je ne connais pas le type de variable que tu dois contrôler , mais voici la méthode qu'on utilisait en thermique quand on se retrouvait perdu dans la brousse sans aucun équipement:

1-mettre l'intégrale et la dérivée à zéro et diminuer la bande proportionnelle jusqu'à obtenir un léger "pompage".
2-doubler la bande proportionnelle puis augmenter progressivement l'action intégrale qui éliminera le statisme

l'action dérivée n'était guère utilisée que dans des boucles très rapides ..('échangeurs vapeur)

tout cela est très rudimentaire mais permet des résultats immédiats.
 
L

lavalding

Nouveau
merci pour vos réponses.

J'ai déjà utilisé pncconf mais il comporte des bugs et je n'ai pas réussi le réglage avec cet utilitaire (il me mais un message d'erreur lors de la config).

j'ai lu les méthode sur linuxcnc et des site de fac mais sur la MESA on a pas le delta entre la position commandé et la position réel dans halscope, il faut peut être le crée dans la config de hal ? pour le moment j'ai reglé la proportionnel juste avec la pin d'erreure de positionnement pid.

JULES 21, j'essaie ta méthode dés ce WE.

je vous posterais les résultats
 
F

Foxtrot

Compagnon
Bonjour à tous,

Pour Jules, Qu'entends tu par pompage? Une oscillation?

Est-il possible avec ta méthode de régler sommairement le PID sans instrument? rien qu'en regardant les servos tourner?
Si non, que faut-il comme minimum comme outils quand on n'a pas d'oscillo?

Merci pour ta réponse. :wink:
 
J

JULES 21

Apprenti
oui, pompage = oscillations,
pour le reste de ta question je voudrais en savoir un peu plus sur la variable à contrôler et/ou une description sommaire de la boucle de régulation et de son contexte.
 
H

horsot

Compagnon
Bonjour,

Je n'ai jamais utilisé EMC2 avec des servo (n'en ayant pas à disposition) mais je règle des PID régulièrement pour le boulot (électronique haute tension).

Le système asservi est un servomoteur chargé, en bref un système du second ordre. La commande moteur est généré via un PWM (vers le driver moteur) et le retour se fait par un encodeur à quadrature tout deux géré par la carte mesa 5i20.

L'erreur dont je parlais est visuelle dans "halscope" entre la consigne et le retour de position par les encodeurs. Si tu veux visualiser l'erreur il faut que tu regardes le signal "pid.N.error" où "N" est le numéro de ton axe, ce n'est pas ta carte mesa qui fait le PID mais EMC2 en logiciel, mesa gère les signaux rapides que sont les encodeurs et le PWM.

As tu essayé avec l'utilitaire dans le menu d'Axis "Machine->Calibrer" (ou "Calibration" de mémoire)? Si j'ai tout compris, il permet de calibrer les servos sans se poser trop de questions existentielles. Pensez à reporter les valeurs du PID dans votre fichier ini de la machine, il semble que ce ne soit pas fait par défaut (?).

Le pompage est en effet une oscillation auto-entretenue (un sinus dans les systèmes linéaires). La méthode JULES 21 ressemble à la méthode de Ziegler-Nichols. Elle permet de régler les termes PID en ayant mesuré le gain d'auto-oscillation "Kc" et et la période d'auto-oscillation "Pc" (voir le premier lien que j'ai donné en fond de page). Ces termes peuvent donner une bonne base que l'on peut affiner.

Pour un correcteur plus sophistiqué, il y a aussi les termes FF0, FF1, FF2 qui permettent de gagner en rapidité sur un changement de consigne (cas de la CNC). Voir la doc du module pid d'EMC2. Le triplet P I FF1 peut être intéressant.

Pour récupérer les infos sur la position du moteur (et la période d'oscillation) il faut regarder ce que sort l'encodeur (qui est là pour ça!) avec halscope (l'oscilloscope des signaux hal).

Pour pncconf, il est probable qu'il y ai des bugs surtout sur la branche 2.3.x où il venait d'être inséré... Je te conseille fortement de passer à la branche 2.4.x si ce n'est déjà fait.

Bonne après-midi

Xavier
 
J

JULES 21

Apprenti
j'avais appris après quelques années de pratique que la méthode que j'utilisais était en effet due à ZIEGLER ET NICHOLS, j'en avais été tout content ,comme celui qui faisait de la prose sans le savoir!

soyons clair, mon expérience date de bientôt 30ans, au temps du "tout analogique".quelques années avant mon départ en retraite (en 2002)j'avais vu arriver les systèmes numériques auto adaptatifs et on parlait de plus en plus de logique floue ..
bon les choses ne vont pas aussi vite que j'espérais.

Je comprend que dans le cas actuel un servo-moteur est piloté par des impulsions modulées et que sa position est donnée par un encodeur.
question:quelle est le type de variable contrôlée? excusez moi,je ne connais pas du tout EMC2!
ceci pour dire qu'il m'était arrivé à plusieurs reprises devant un mauvais retour de position du moteur de supprimer cette entrée et de fermer la boucle uniquement par la mesure de la variable à contrôler (les systèmes les plus simples.....)ceci n'était appliquable que pour des systèmes ayant une capacité d'accumulation suffisante (d'où ma question)
 
H

horsot

Compagnon
JULES 21 a dit:
question:quelle est le type de variable contrôlée?[...]
ceci pour dire qu'il m'était arrivé à plusieurs reprises devant un mauvais retour de position du moteur de supprimer cette entrée et de fermer la boucle uniquement par la mesure de la variable à contrôler (les systèmes les plus simples.....)ceci n'était appliquable que pour des systèmes ayant une capacité d'accumulation suffisante (d'où ma question)

Je ne suis pas sûr de comprendre la question, il me semble que la grandeur à contrôler est la position dans le cas du déplacement des chariots. Il est possible d'asservir la vitesse dans le cas d'une broche par exemple mais je ne pense que que lavalding parle de ça?

De manière simplifié dans EMC2, le "trajectory planner" lit le gcode et le converti en mouvements de base qu'il donne au "motion contrôler". Ce dernier les transforme en consignes de déplacements en temps réel à chacuns des générateur de signaux moteur (PID+encodeurs+PWM pour les servos, génrateurs de step/dir pour les moteurs pas à pas).

C'était la question? :?:

Xavier
 
J

JULES 21

Apprenti
oui,horsot,tu as bien compris ma question et tu y as répondu bien clairement.
du coup je ne pense pas avoir raconté trop de bêtises avec mon approche simplificatrice .
il me semble que, comme dans toute boucle de contrôle la clef du succès réside dans la qualité de la mesure (sa résolution,sa linéarité,sa répétabilité,son hystérésis,etc ).
pour le reste je renifle comme ça, à distance qu'une simple action P+I devrait faire l'affaire.
 
L

lavalding

Nouveau
horsot tu a tres bien decrit le fonctionnement de ma config.
En fait j'utilise EMC 2.4.3, désolé je me suis trompé dans le post précèdent.
Voici la methode que j'ai employé:

1/ mettre I et D a 0
2/augmenter P jusqu'à oscillation de l'axe
3/diminuer de 20% P

de cette façon j'obtiens des erreurs de suivit de l'ordre de 0.03mm pour une vitesse de 10mm/s, sauf sur l'axe Y qui dépasse les 0.4mm d'erreurs (inertie peut etre, car sur la Z1 cette axe déplace l'ensemble axe Z, moteur et boite de broche)

Comment faire mieux ?
Comment régler I (et D si besoin).

FF1 semble intéressant si j'ai bien compris il permet un ajustement en fonction de l'inertie.
et FF2 pour l'apesanteur (utile pour l'axe Z ?).
cet paramètre se règle a la fin et comment ?

ci-joint copie d'ecran de l'erreur obtenue sur Y, on y voie une petite oscillation est ce bien ca ? ( echelle 100milieme de mm par div. ).


Pour info j'utilise une carte fille 7i33 pour la commande d'ampli Alstom Pavex RTR60 (analogique).

Capture.png
 
H

horsot

Compagnon
lavalding a dit:
En fait j'utilise EMC 2.4.3, désolé je me suis trompé dans le post précèdent.
Ok

lavalding a dit:
Voici la methode que j'ai employé: [...]
Comment faire mieux ?
Comment régler I (et D si besoin).
L'erreur statique (tes 0.03mm) sont compréhensibles pour un correcteur P mais devrait disparaitre avec le terme intégral.

As-tu essayé l'utilitaire dans "machine->calibrer" ?

J'ai un peu l'impression que tu ne lis pas ce que j'écris. Es-tu sûr d'avoir lu (et essayé) : http://linuxcnc.org/docs/html/motion_pid_theory_fr.html

Pas de recettes "magiques", les méthodes du lien te donneront un système stable mais non optimisé. Il faut régler à la main ou utiliser l'algorithme de "at_pid" ou "machine->calibrer" par exemple.

Si tu lis l'anglais il y a ça avec des captures d'écran : http://wiki.linuxcnc.org/cgi-bin/emcinfo.pl?PWM_Servo_Amplifiers

lavalding a dit:
FF1 semble intéressant si j'ai bien compris il permet un ajustement en fonction de l'inertie.
En fait la grandeur corrigée est proportionnelle à la dérivée de la commande. Ici la commande est un position donc proportionnelle à une vitesse (de commande). La doc explique que dans ce cas on compense les frictions (visqueuses?) et les FCEM du moteur.

lavalding a dit:
et FF2 pour l'apesanteur (utile pour l'axe Z ?).
cet paramètre se règle a la fin et comment ?
FF2 pour un asservissement de position est proportionnelle à une accélération donc peut compenser l'inertie. Quant à savoir si ça peux compenser l'accélération de la pesanteur (par un biais), c'est une bonne question, il faudrait creuser plus.

Je n'ai jamais utilisé ces correcteurs (FFx) donc ce que je te dis est théorique!

lavalding a dit:
ci-joint copie d'écran de l'erreur obtenue sur Y, on y voie une petite oscillation est ce bien ca ? ( echelle 100milieme de mm par div. ).

Si l'oscillation est auto-entretenue à consigne fixe (elle ne s'atténue pas) c'est ça. Il faut que tu relèves la période (temps entre 2 pics) et utilise la méthode décrit dans le premier lien.

Xavier
 
L

lavalding

Nouveau
merci horsot ton explication sur l'oscillation ma permit de mieux comprendre les methodes de reglage. Je viens juste de mettre en application la Méthode de Ziegler-Nichols, et sans effort j'obtient du premier cout une erreure infierieure au centieme à 50mm/s.
dés que j'ai le temps je poursuis sur les autres axes.
par contre le Z a un comportement different suivant le sens ?
dans ce cas il faut Kc du sens le plus critique ?
 
H

horsot

Compagnon
Content que ça ai marché,

Je viens de regarder plus sérieusement la doc du PID de EMC2, il y a bien une variable pour compenser le poids de ton chariot Z par le paramètre "pid.N.bias" N étant le N° de ton axe (2 pour le Z). Ce paramètre rajoute une constante à la commande moteur donc génère un couple "de base" pouvant servir à compenser le poids du chariot Z.

J'étais parti pour compenser avec un terme d'ordre 2 car on dit "l'accélération" de l'apesanteur. C'est certes une accélération (merci Einstein :wink: ) mais elle est indépendante du mouvement ou de sa commande (ou de l'erreur) : cette force est constante (logique... :smt017 ). Lorsqu'on agit sur le PWM du moteur on joue sur le couple moteur il faut donc compenser le poids de ton chariot par un "biais" (offset, cad ajout d'une constante) dans la commande moteur (couple) à la sortie du PID.

Pour le réglage, il faut que j'y réfléchisse! Le but étant d'annuler l'action de l'apesanteur par ce paramètre. Le système obtenu sera linéaire et donc le réglage du PID pourra se faire normalement.

L'idée c'est de trouver ce fameux "couple" de compensation peut être la moyenne de la commande moteur "pid.N.output" entre un déplacement (lent et constant) vers le haut et vers le bas. Je pense que les frottements statiques seraient alors compensés par cette méthode. Tu peux l'essayer?

Xavier
 
L

lavalding

Nouveau
Bonjour,

J'ai enfin pu me remettre à la tache.

Pour l'axe Y je suis confronté a des problèmes de vibrations qui perturbe la boucle de suivie, j'ai pu remarquer un défaut de faux rond sur la poulie du moteur.
Ce faux rond doit être l'élément perturbateur pour le réglage, je vais essayer de le corriger.

Pour l'axe Z j'ai aussi des vibrations en augmentant P sans arrivé au P critique, mais je ne trouve pas d'où cela peux venir ?
Cela se produit plus facilement à la descente.
Je vais vérifie les jeux de la liaison glissière.
Pour le BIAS je ne sais pas comment ajuster cette valeur ni dans quelle ordre de grandeur.
 
H

horsot

Compagnon
Je te croyais disparu!

Le biais doit compenser le poids de la tête de ta fraiseuse en ajoutant une constante à la sortie (qui ajoute un couple constant au moteur dans le cas d'un driver fonctionnant en asservissement de couple (courant) et non en vitesse).

Pour mesurer le couple (hors frottements) il faudrait faire tourner le moteur pour un déplacement vers le haut pour une vitesse très lente et constante, relever la commande du PWM correspondante.
Couple_haut = Couple_frottement + Couple_apesanteur

Faire pareil (même vitesse) mais vers le bas et relever la commande.
Couple_bas = Couple_frottement - Couple_apesanteur

La différence entre ces deux valeurs te donnera 2 * la valeur de la commande pour contrer apesanteur donc 2 * la valeur du biais. Enfin tout ça c'est la théorie (à vérifier) mais je pense que c'est un bon départ.

Tu as un asservissement en Couple ou en vitesse sur ton driver?

Une autre méthode est de partir du poids de la tête, pas de la vis, constante en N.m/A du moteur, "gain" de ton driver moteur... Mais je doute que le résultat soit probant.

Xavier
 
L

lavalding

Nouveau
J'ai enfin réussi !!!

j'ai donc un asservissement sur la vitesse, comme tu ma dit j'ai fait des mesures en monté et en décente mais j'avais de grosse incohérences. j'ai finalement trouvé une vis coincé entre le bâti est la colonne. celle ci venait de temps à autre se coincé en décente. depuis sa suppression plus de problème.
j'ai fait mes réglage en négligent le poids soit seulement sur PID et tout marche correctement.
Pour l'axe Y j'ai refait une poulie et placé un galé tendeur, ce qui ma permis d’obtenir un réglage correct < 0.003 d'erreur à 50 mm/s.

MERCI BEAUCOUP POUR VOTRE AIDES.
 

Sujets similaires

Père-Pendiculaire
Réponses
23
Affichages
506
Père-Pendiculaire
Père-Pendiculaire
D
Réponses
33
Affichages
822
dh42
PL50
Réponses
14
Affichages
1 069
Squal112
Squal112
vax
Réponses
11
Affichages
11 939
vax
P
Réponses
33
Affichages
12 743
wika58
wika58
W
Réponses
1
Affichages
850
Jojo85770
J
L
Réponses
29
Affichages
1 369
dh42
L
Réponses
3
Affichages
603
laurent12100
L
Haut