Problème indexation broche filetage

  • Auteur de la discussion aschamba
  • Date de début
A

aschamba

Apprenti
Bonjour à tous,

J'ai un ptit soucis, je pense savoir d’où ça vient mais je voulais me renseigné si il n'y'avait pas moyen de trouver une solution software avant de passer au hardware…

Je m'explique, voici ces 2 filetages réaliser exactement avec le même programme. Et on voit qu'il y a un souci. A vu de nez, le pas n'est pas dutout le même on dirait environ d'un facteur 2.

La ligne de prog pour un filetage de M10 que j'utilise
G76 P1.5 Z-6 I-0.05 J0.08 K0.85 Q29.5 L2 E0.0

(a noter que j'ai pas bien compris le paramètre I..)

fil.jpg


Je pense savoir d’où ça vient, quand j'ai acheté et monté mon codeur d'indexation et je n'avais pas tout lu en profondeur avant… C'est un codeur phase A, B, Z à 100 impulsions par tour (je n'utilise pas B). Pour une question de place j'ai pris un rapport de poulie ½ donc mon codeur donne 200 impulsion par tour. Jusque là rien de grave, mais pour l'impulsion de départ (Z) ben j'en ai 2 par tours! Et je pense que c'est ça qui pose ce problème. Je ne vois pas comment corriger ça en software, car pour le système il ne peut pas savoir quels impulsion d'indexation choisir…. Bref à part revoir mon rapport de courroie et passer à du 1/1 je vois pas d'autre solution et vous ?

ma config:

############# Spindle Encoder #############
# add scale and lowpass, these will be used in custom_postgui.hal
loadrt scale count=1
loadrt lowpass count=1

# add the encoder to HAL and attach it to threads.
loadrt encoder num_chan=1
addf encoder.update-counters base-thread
addf encoder.capture-position servo-thread

# set the HAL encoder to 200 pulses per revolution.
setp encoder.0.position-scale 200

# set the HAL encoder to non-quadrature simple counting using A only.
setp encoder.0.counter-mode true
#setp encoder.0.counter-mode 1 - alternative line

# connect the HAL encoder outputs to LinuxCNC.
net spindle-position encoder.0.position => motion.spindle-revs
net spindle-velocity encoder.0.velocity => motion.spindle-speed-in
net spindle-index-enable encoder.0.index-enable <=> motion.spindle-index-enable

# connect the HAL encoder inputs to the real encoder.
net spindle-phase-a encoder.0.phase-A <= parport.0.pin-11-in
net spindle-phase-b encoder.0.phase-B
net spindle-index encoder.0.phase-Z <= parport.0.pin-12-in
############# End Spindle Encoder #############

a.JPG


b.JPG



c.JPG


d.JPG
 
Dernière édition:
V

vibram

Compagnon
Attention, mes propos sont à confirmer par plus expérimenté que moi.

Dans un codeur en quadrature, Z est seulement un index. Donc si tu prends que 2 fils j'aurais plutôt pris A et B car sinon tu vas avoir des signaux différents et une interprétation qui ne correspond pas.
Pourquoi ce choix de A et Z ?
 
V

vax

Modérateur
Ton analyse est bonne sur ton problème.

Je te proposerai bien de boucher la moitié du trou sur ton index Z (1/2 trou X2 égal un trou par tour) mais certains tatillons vont mettre mon raisonnement en doute :wink:

Bon trêve plaisanterie, soit tu as vraiment besoin de 200 impulsions par tour de définition et tu peux monter une détection sur ta poulie finale comme index top tour (cellule optique ou détection par effet hall avec un petit aimant collé sur la poulie finale), soit tu reviens à un rapport 1:1 avec ton codeur mais seulement 100 impulsions par tour (ce qui est déjà pas mal pour asservir un filetage).
 
A

aschamba

Apprenti
oui ok merci donc c'est bien ce que je pensais.... j'ai pas spécialement besoin de plus d'impulsion, c''était des kit polie courroie et le 1:1 n'existait pas. Et pour un souci de taille je me suis lancé sur le 1/2. Bon le plus simple c'est de que je commande une autre polie et courroie plus longue pour pouvoirs garder la position de mon codeur. Je pourrait rajouté comme tu dis un capteur mais bon j'avais déjà regardé et j'avais pas trop la place sans tout massacré.
PS: pour ceux qui se pose la question pourquoi j'au tourné ma poulie côté broche c'est que justement j'avais pas la largeur pour que tout soit aligné...

code.jpg



polie.jpg
 
Dernière édition:
A

aschamba

Apprenti
Attention, mes propos sont à confirmer par plus expérimenté que moi.

Dans un codeur en quadrature, Z est seulement un index. Donc si tu prends que 2 fils j'aurais plutôt pris A et B car sinon tu vas avoir des signaux différents et une interprétation qui ne correspond pas.
Pourquoi ce choix de A et Z ?

Alors je suis pas non plus un spécialiste mais de ce que j'ai compris tu a besoin d'un signale distinct pour donner un top départ, et on me confirme qu'il ne peut pas y en avoir plus que 1 part tour justement
 
V

vibram

Compagnon
OK. Je comprends mieux maintenant.
Si. Jamais tu peux aussi regarder pour un codeur "hollow shaft" mais c'est plus cher ;(
 
A

aschamba

Apprenti
Ok je ne connaissais pas, merci!
En fréquence ça peut résoudre le problème, mais par contre il reste à déterminer la position. On ne sais pas sur lequel des 2 impulsions il va prendre son top départ! Imaginons je lance mon programme. une fois fini la broche s'arrête mon filetage n'est pas assez profond. Je ne peux plus relancer une passe de finition. Car j'aurais une chance sur 2 d'être décalé de 180°

Autre question dans la foulée, comment afficher la vitesse mesurée et non pas la consigne ? j'ai de quoi faire une boucle fermée pour la vitesse de broche mais j'ai pas encore tout paramétré
 
G

gaston48

Compagnon
On ne sais pas sur lequel des 2 impulsions il va prendre son top départ!
Normalement si le diviseur par 2 reste branché, donc avec tout ses états logiques préservés, peut importe si tu démarres un filetage
plus tard, il va toujours éliminer le top qu'il faut sur les deux succéssifs.
 
A

aschamba

Apprenti
ok mais vous pensez ces versions sont compatibles ?
flip.jpg


La magie d'internet :wink:
Bon sinon plus sérieusement je n'ai pas trouver bcp d'exemple d’application pour m'en inspiré au niveau de la syntaxe et l'appliqué à mon cas... je suis nouveau sur Linux
 
A

aschamba

Apprenti
J'ai pensé à ça dans l'après midi, mais je me doutais bien que tu allais passer par là avant moi aujourd'hui.

mais je comprend pas le fonctionnement, en fait à la première impulsion l'état passe à 1 et doit redescendre au 2ème pour ensuite remonté à l'état 1 quand il retombe physiquement sur la première position. Mais je dois crée un compteur d'impulsion pour spindle-index ?
 
V

vax

Modérateur
Au lieu de fournir directement le signal index, tu le fais passer par une bascule pour en diviser la fréquence par deux. Tant que l'électronique reste alimentée c'est transparent pour l'asservissement. Le seul détail c'est qu'au démarrage du système tu ne peux pas définir sur quel "demi tour" l'indexation se fera. Mais ce n'est pas un problème. Au pire si tu le souhaites, tu peux toujours faire un repère visuel sur ton mandrin et le placer toujours au même endroit AVANT le démarrage, comme ça ce sera le même top qui sera pris en compte en premier.

Le liens vers Sonelec donné par Gaston48 t'explique comment faire un diviseur de fréquence /2 avec une bascule D
On entre par CLK, R et S sont à 0 et la sortie Q barre est connecté à l'entrée D.

Donc tu déclares un inverseur (disons not.0) et une bascule D (disons flipflop.0)
Tu définis R (flipflop.0.reset) et S (flipflop.0.set) à 0 (false)
Tu affectes la sortie de la bascule à l'entrée de l'inverseur (flipflop.0.out => not.0.in) ce qui donne la sortie Q barre.
Et cette sortie sur l'entrée D (not.0.out => flipflop.0.data), voilà la config doit être OK

Pour le fonctionnement,
Tu affectes l'index de ton compteur à l'entrée CLK de la bascule (net spindle-position encoder.0.position => flipflop.0.clk)
Puis tu affectes la sortie de ta bascule (net flipflop.0.out => motion.spindle-revs)

Dans l'idée on doit pas être trop mal. Gaston48 te confirmera ça avec plus de savoir faire que moi.
 
A

aschamba

Apprenti
ok merci je suis débutant sous linux donc je reprend des linges et je fais du mimétisme...
J'ai lu la doc mais pas tout saisis encore :le_kneu:
Donc ça doit pas être tout juste :

############# Spindle Encoder #############
# add scale and lowpass, these will be used in custom_postgui.hal
loadrt scale count=1
loadrt lowpass count=1

# add the encoder to HAL and attach it to threads.
loadrt encoder num_chan=1
addf encoder.update-counters base-thread
addf encoder.capture-position servo-thread

# set the HAL encoder to 200 pulses per revolution.
setp encoder.0.position-scale 200

# set the HAL encoder to non-quadrature simple counting using A only.
setp encoder.0.counter-mode true
#setp encoder.0.counter-mode 1 - alternative line

# connect the HAL encoder outputs to LinuxCNC.
loadrt not.0
loadrt flipflop.0
sets flipflop.0.reset false
sets flipflop.0.set false
net not.0.out => flipflop.0.data
net flipflop.0.out => not.0.in
net spindle-position encoder.0.position => flipflop.0.clk
net flipflop.0.out => motion.spindle-revs
net spindle-velocity encoder.0.velocity => motion.spindle-speed-in
net spindle-index-enable encoder.0.index-enable <=> motion.spindle-index-enable


# connect the HAL encoder inputs to the real encoder.
net spindle-phase-a encoder.0.phase-A <= parport.0.pin-11-in
net spindle-phase-b encoder.0.phase-B
net spindle-index encoder.0.phase-Z <= parport.0.pin-12-in
############# End Spindle Encoder #############
 
V

vax

Modérateur
C'est en faisant qu'on apprend ! :wink:
Je ne suis pas à l'aise encore, loin de là, avec l'utilisation de ces fonctions.
Je suis un utilisateur très "basique" !

Qu'est ce que te dis LinuxCNC ? Généralement les erreurs ne pardonnent pas, tu as un message direct ! :wink:

net not.0.out => flipflop.0.data
net flipflop.0.out => not.0.in

Perso, dans un soucis de logique dans les déclaration, j'aurai inversé les deux lignes.
Histoire d'avoir l'entrée de l'inverseur déclarée avant d'en utiliser la sortie.
Question d'habitude.

Comme ça, je ne sais pas voir d'erreur s'il y en a.
 
A

aschamba

Apprenti
ok bon alors j'ai fait quelques essais mais je vais pas loin... c'est plutôt un gros flop pour le moment!
En plus je pensais faire un copié collé à la ctrl c/v du message d'erreur mais pas moyen :smt022
PS: suis en 2.7.13

flip.jpg
 
A

aschamba

Apprenti
Bon ben j'ai ramé un moment... et comme je suis meilleur en hardware qu'en software, j'avais commandé une polie et courroie en parallèle. Et elles sont arrivé avant de trouver la solution sofware.
Donc je passe en rapport de 1:1 avec 100 impulsion par tour et ça marche nickel. En plus le vendeur précisait les entraxes avec les longueurs de courroies correspondantes, donc même pas eu besoin de retoucher la fixation du codeur.

poulie.jpg
 

Sujets similaires

G
Réponses
1
Affichages
1 305
Greg de Nîmes
G
01power
Réponses
3
Affichages
13 836
01power
01power
JC10
Réponses
9
Affichages
1 561
gaston48
G
J
Réponses
1
Affichages
1 469
pro-ms
P
F
Réponses
14
Affichages
2 997
franckapik
F
D
Réponses
9
Affichages
3 051
David80
D
taratata
Réponses
4
Affichages
4 240
taratata
taratata
N
Réponses
0
Affichages
1 345
nathan33240
N
V
Réponses
7
Affichages
1 971
vibram
V
Haut