Gestions de deux servomoteur sur portique linuxcnc

N
NovA
Nouveau
23 Juil 2017
11
  • Auteur de la discussion
  • #1
Bonjour à tous,

Voilà plusieurs semaines que je bosse sur une CNC 3 axes à rétrofiter:
- Drivers commandés en +-10Vdc
- Moteurs brushless avec codeurs intégrés
- Le pont est déplacé par 2 moteurs à synchroniser
La machine fera principalement de la découpe plasma, avec la pose d'une broche de temps à autre.
J'ai choisi LinuxCNC, avec un kit MESA 5i25+7i77.

Aujourd'hui j'en suis au stade où les moteurs tournent bien, mes boucles PID sont certainement à affiner mais les mouvements sont corrects.
Problème: Je ne parviens pas à comprendre comment jumeler les deux moteurs de mon portique.

Je ne dois pas chercher correctement, je ne trouve pas d'explication (et des exemples surtout) de configurations de portiques autre qu'avec moteurs pas-à-pas.
J'ai fait différents essais avec "GANTRY", mais je ne parviens pas à charger le module (erreur au démarrage), et de toutes façon la structure de la gestion de ce couple de moteur dans HAL est bien trop floue pour moi pour l'instant, pour que je puisse aller plus loin.

SVP, quelqu'un aurait un exemple de fichier .HAL à me communiquer pour ce type de moteur? ou des explications claires? ou des liens que je n'aurais pas trouvé?

D'avance, merci beaucoup!
 
G
gaston48
Compagnon
26 Fev 2008
9 436
59000
Bonjour,
Il faut que tu joignes ton fichier .INI et .HAL pour que je puisse essayer d'intégrer la modif.

pour insérer du code sans que ça interfère avec le code html de la page de ce forum
tu cliques sur la touche + au dessus et tu as les balises code </>

 
N
NovA
Nouveau
23 Juil 2017
11
  • Auteur de la discussion
  • #3
Bonjour Gaston48,

D'abord merci beaucoup pour ce retour si rapide!
Je ne suis pas à proximité de la machine ce matin, je te joins un des essais que j'ai fait, une archive un peu brouillon (toutes mes excuses) mais je ne veux pas y toucher à l'aveugle, sans pouvoir la réessayer sur la machine avant de te l'envoyer. Du coup tu y verra entre autre:
- "Y1 et Y2" que j'ai mis sous cette forme pour suivre une piste
- Toutes les parties inutilisés pour l'instant (spindle, capteurs homing) en commentaires
- PID simplifiées juste pour essai (les moteurs tournent)

En espérant que tu n'y perde pas trop de temps:



...et:



Une nouvelle fois: merci beaucoup!
 
G
gaston48
Compagnon
26 Fev 2008
9 436
59000
Je vois que tu es déjà à l'aise avec les éditions de fichier ini et hal .

INI configure l'interface graphique d'axis ainsi que le planificateur de trajectoire qui va
interpréter le gcode. Tu as une machine 3 axes, donc il ne faut déclarer que 3 axes.

C'est au niveau du hard, dans HAL, qu'on pourra brancher une unique commande d'axe
vers 2 servo-moteurs mais qui auront chacun leurs propre PID.
Donc un principe à respecter dans HAL, un emeteur, (une sortie) peut être branché sur
plusieurs récepteurs, (des entrées) mais pas l'inverse. Dans ce cas le récepteur ne doit
être branché que sur une unique sortie d'un aiguillage: logique comme un OU ou
analogique comme un multiplexer MUX.
HAL accepte beaucoup de valeurs de paramètres [entres crochets] qui proviennent de INI
ça n'est pas obligatoire, tu peux rentrer directement des valeurs numériques ou logiques
au bout des lignes "setp" comme par exemple les valeurs de PID l'avantage es que tu peux
les changer "à la volée" quand axis est lancé avec son popup dédié.
Donc les valeurs de PID de l'axe unique Y déclaré dans INI vont être transmises
aux 2 PID individuelles Y1 et Y2 déclarées dans HAL. Si tu veux imposer des
valeurs différentes pour les 2 moteurs en // il faudra les écrire dans HAL et supprimer
les variables entre [].
De la même façon, dans HAL on ne va activer que l'index d'un seul moteur pour
initialiser la POM de précision (après l'activation d'un switch) ainsi que le retour
de position courante vers axis: net y-pos-fb => axis.1.motor-pos-fb
les fichiers ont été modifier avec un éditeur windows, les fins de ligne ne sont pas
compatible avec linux, tu les recharges dans gedit et les sauve en paramétrant bien
"fin de ligne linux".
Ca devrait donner ceci: (non testé car j'ai une 5i20 pas 5i25.)

Ici tu dois pouvoir ne déclarer que num_encoders=4
et les pwm à 0 car sauf erreur, il ne sont pas à déclarer, ils le sont d'une façon implicite avec la 7i77

loadrt hm2_pci config=" num_encoders=6 num_pwmgens=0 num_stepgens=0 sserial_port_0=000xxx"

on doit gagner quelques thread inutiles et donc de la rapidité ?



 
Dernière édition:
N
NovA
Nouveau
23 Juil 2017
11
  • Auteur de la discussion
  • #5
:smt107
Quelle réactivité!!!

Et un grand merci pour ces détails, ça me paraît assez clair dans l'ensemble, faut que je vois sur la machine (j'y arrive un peu mieux avec du concret).
Pour ce qui est du nombre d'encodeurs, effectivement je peux rester à 4 (je n'avais pas envisagé que ça bouffe de la ressource), mais pour les PWM, il me semblait que c'était la génération de PWM par la 5i25 qui permettait à la 7i77 de me fournir ces signaux analogiques +-10V...
Oui je suis sur W7 à la maison, j'ignorait que d'ouvrir les fichiers avec un éditeur Windows les dégraderait, mais ce n'est pas un problème, le ferai les modifs sur la machine directement.
Je vais bucher encore la dessus dès demain après-midi et je te tiens au courant.

Je me répète encore mais, vraiment, un très grand merci pour tes lumières et ton aide précieuse.:prayer:
Bonne fin de journée.
 
G
gaston48
Compagnon
26 Fev 2008
9 436
59000
mais pour les PWM, il me semblait que c'était la génération de PWM par la 5i25 qui permettait à la 7i77 de me fournir ces signaux analogiques +-10V...
Oui c'est toujours le cas, mais ça ne passe pas par hostmot2 et hm2_pci config.
Tout dépend du firmware qui est chargé ici on a habituellement 5i77X2 et si tu regardes
le fichier .pin, toutes les voies des 2 connecteurs de la 5i25 sont des liaisons séries ou des voies multiplexées
Si tu déclares des pwm, tu ne les vois pas apparaître dans halmeter et donc tu ne peux pas configurer
leur fréquence, le type pwm ou pdm et les brancher etc. donc ça se passe automatiquement entre la 5i25
et la 7i77
C'est d'ailleurs pour ça que je ne suis par certain qu'on gagne du temps en simplifiant hm2_pci config ? mais bon ...

Si tu changes de firmware pour une 7i77 et une autre carte compatible sur l'autre connecteur libre de la 5i25
là tu peux activer au besoin des stepgen par exemple.
 
N
NovA
Nouveau
23 Juil 2017
11
  • Auteur de la discussion
  • #7
Bonjour Gaston,

J'avoue que sur le papier, je pense comprendre où tu veux aller, mais qu'en réalité j'ai encore quelques difficultés...

J'ai testé ce que tu m'as indiqué plus haut, et je pense qu'il y a un souci avec les dénominations y, y1, et y2 dans hal.
Tel quel, l'axe y ne tourne pas (aucun des deux moteurs), et je n'ai pas non plus de réponse à l'écran lorsque j'actione les moteurs y1 ou y2 en manuel.
Un essai (certe pas très intelligent:roll:) en remplaçant les "y" par "y1" fait tourner les deux moteur mais ne surveille que y1 en retour.
J'avoue que je saturé un peu à force de retourner le problème dans tous les sens.... Et je crains de m'être un peu embrouillé.
Une petite idée de ton côté par hasard?

D'autre part tu as effectivement raison, la suppression des déclarations de PWM ne gêne en rien le bon fonctionnement.

Je continue la fouille...
 
N
NovA
Nouveau
23 Juil 2017
11
  • Auteur de la discussion
  • #8
Un peu plus sérieusement, les PID sont elles autonomes, ou ont-elles besoin d'axis pour tourner?
La question est peut-être bête, mais si je résume ce que tu m'as expliqué, on envoi la même commande aux deux PID, on les laisse gérer chacun leur moteur en fonction de cette consigne, et on se sert d'une des deux boucles pour remonter l'information de position à axis... Et les deux moteur sont correctement asservis, indépendamment l'un de l'autre mais synchronisés sur le même mouvement.

C'est ça? Ou est-ce que je suis complètement à côté?

Là en l'état, le meilleur comportement que je puisse avoir, c'est les deux moteurs qui tourne en même temps mais un seul des deux est réellement asservi, l'autre ne tourne qu'en fonction des ordres du premier.
 
G
gaston48
Compagnon
26 Fev 2008
9 436
59000
C'est ça? Ou est-ce que je suis complètement à côté?
C'est tout à fait ça !! :-D

j'ai corrigé le fichier HAL posté précédemment
je n’écris pas mon code comme le présente pncconf, je suis plus compacte

j’écris une ligne de branchement net avec mon nom de variable, l’émetteur et le récepteur quand j'en ai besoin
puis une nouvelle ligne si ma variable doit entrer dans une autre récepteur
pncconf déclare toutes les variables utiles ou pas

J'ai branché aussi la sortie vitesse d'un encodeur vers l'entrée feedback-vitesse de sa PID
on doit pourvoir minimiser FF1 dans ce cas
 
G
gaston48
Compagnon
26 Fev 2008
9 436
59000
Pour la compréhension, il faudrait peut être mieux nommer y1 y tout court, le rendre
opérationnel comme x et z et ensuite insérer yesc comme esclave avec ses propres
branchement: pid, encodeur, commande analogique etc et une seule commande commune
à y en provenance de axis.1.
c'est à toi de voir
 
N
NovA
Nouveau
23 Juil 2017
11
Oui c'est ce que j'ai attaqué à faire cet aprem... J'ai y et y2. Mais pour le reste il y a visiblement encore un détail qui m'échappe. Ça va bien venir!:smt108
Je m'y remets demain matin.
 
G
gaston48
Compagnon
26 Fev 2008
9 436
59000
:smt043 Je voulais dire que mon message posté précédemment avait été réédité avec un nouveau fichier
hal. (Si plus tard, quelqu'un s'en inspire, il n'y en a qu'un dans ce post et mise à jour).
 
N
NovA
Nouveau
23 Juil 2017
11
:smt089
Tu as raison, et le prochain post c'est pour moi, avec un vrai bon fichier HAL qui marche tout bien!
 
N
NovA
Nouveau
23 Juil 2017
11
Bonjour Gaston48, bonjour tout le monde,

J'ai pas mal avancé de mon côté et suis en train de peaufiner mon fichier hal, mais il me reste quelques soucis.

D'abord ça y est, la machine tourne, et relativement bien d'ailleurs.
Mais (outre les petits soucis de réglage à affiner ou autre capteurs fin de course à raccorder) il me reste un souci assez important:

- Je démarre la machine, actionne les axes.
- Machine OFF, mais je reste sur AXIS
- Je déplace le moteur Y2 du portique manuellement (pid.y2.error augmente tandis que pid.y.error reste à 0, logique)
-ou-
- L'un des deux moteur du portique s'est arrêté un peu à la limite de la zone morte, et linuxcnc envoi une légère tension sur les drivers de cet axe, qui crois petit-à-petit avec le temps (visible au voltmètre ou sur Hal scope)
- Au bout de quelques minutes, Machine ON
- Le moteur Y2 (sur lequel la boucle ne renvoi pas d'info de position) se lance, seul, sans que rien ne l'arrête.
- obligé de redémarrer linuxcnc pour reprendre un fonctionnement normal.

Gaston48, dans l'ensemble ta solution me convient, ne serait-ce que parce-qu'elle m'a permis de mieux comprendre le fonctionnement de HAL et de sa gestion des PID (un grand merci, de nouveau). Mais n'y existe-t-il pas d'outil spécifique pour la gestion de deux moteur pour un seul axe?

Et Gantrykins par exemple, ça ne permet pas de faire office? tu connais ce composant?

Bonne journée
 
La dernière réponse à ce sujet date de plus de 6 mois
Haut