Problème indexation broche filetage

aschamba
Apprenti
30 Juin 2009
232
Suisse, Genève
  • Auteur de la discussion
  • #1
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:
vibram
Compagnon
15 Mars 2014
3 308
FR-74
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 ?
 
vax
Modérateur
5 Mars 2008
6 666
Guipavas (près de Brest)
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).
 
aschamba
Apprenti
30 Juin 2009
232
Suisse, Genève
  • Auteur de la discussion
  • #4
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:
aschamba
Apprenti
30 Juin 2009
232
Suisse, Genève
  • Auteur de la discussion
  • #5
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
 
aschamba
Apprenti
30 Juin 2009
232
Suisse, Genève
  • Auteur de la discussion
  • #8
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é
 
aschamba
Apprenti
30 Juin 2009
232
Suisse, Genève
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
 
aschamba
Apprenti
30 Juin 2009
232
Suisse, Genève
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 ?
 
vax
Modérateur
5 Mars 2008
6 666
Guipavas (près de Brest)
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.
 
aschamba
Apprenti
30 Juin 2009
232
Suisse, Genève
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 #############
 
vax
Modérateur
5 Mars 2008
6 666
Guipavas (près de Brest)
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.
 
La dernière réponse à ce sujet date de plus de 6 mois

Dernières discussions

Haut