Pilotage de la broche d'une SX3 (Spindle Control)

More
26 Sep 2011 13:08 - 02 Oct 2011 18:21 #13455 by vitaeear
Bonjour EMCusers,

Comme d'autres heureux possesseurs d'une SX3, je me suis demandé comment piloter en vitesse la broche de la SX3 de dernière génération. Il y a eu au moins 2 version du variateur de broche . L'ancienne permettait relativement facilement de connecter un VFD au variateur. La nouvelle version est entièrement numérique et ne semble pas pilotable facilement depuis EMC2. Et pourtant !!!

j'ai regardé pendant 2 mois comment faire sans trouver de solution simple.J'ai parcouru les forums pour glaner des informations , les solutions semblaient compliquées et lourdes.

Il y a quand même une solution qui nécessite une bonne part de bricolage électronique et une petite carte à réaliser.

On veut : l'arrêt / marche à distance et avoir la broche qui tourne à la vitesse Sxxxx désiré
on veut aussi savoir si la broche tourne réellement à la bonne vitesse et laisser le temps à la vitesse de broche d'être stable avant d'attaquer une pièce.

on veut plus : inversion du sens de marche, taraudage, indexage , faire des gaufres, des frites.
pour l'instant , je ne vais pas en parler de suite car c'est pas trop utile et Le taraudage me semble un peu délicat à bien faire fonctionner.

1er partie : il faut mesurer la vitesse de broche.
Pour cela, il faut un capteur ou un codeur. Sur ma machine, pour des raisons de place, c'est un petit détecteur de proximité inductif de 5mm qui donne l'information de vitesse, Il est fixé sur une équerre prés du pignon moteur, par chance au dessus du pignon il y a une roudelle de 5mm d'épaisseur et il est facile de faire un plat . A chaque tour moteur , il y a donc un impulsion fournie par le capteur .

la vitesse de rotation maxi du moteur est 3200 t/min soit 60 impulsions/seconde (hertz) pour 1800t/min à la broche, donc un rapport de transmission de 2:1.

une photo du montage



Le signal vitesse est envoyé sur une des entrées d'un port //.
Dans le fichier custom.hal , il faut ajouter quelques lignes pour calculer la vitesse et l'afficher.

# encoder.0 is for pendant / manivelle ,encoder.1 is for spindle
loadrt encoder num_chan=2
loadrt near count=1
.....
addf encoder.capture-position servo-thread
addf encoder.update-counters base-thread
.....
# pin 11 lpt port 0 is the spindle speed sensor
net spindle-speed-sensor parport.0.pin-11-in
........
# read spindle speed
addf scale.9 servo-thread
setp scale.9.gain 60
setp encoder.1.position-scale 2
setp encoder.1.counter-mode 1
net spindle-speed-sensor => encoder.1.phase-A => encoder.1.phase-Z
net encoder-spindle <= encoder.1.velocity => scale.9.in => motion.spindle-speed-in
# spindle speed in rpm
net spindle-speed scale.9.out

# computing spindle at speed signal
addf near.0 servo-thread
setp near.0.difference 30
net spindle-speed => near.0.in1
net spindle-cmd => near.0.in2
net spindle-at-speed <= near.0.out
# stop feed during acceleration
net spindle-at-speed => motion.spindle-at-speed



Il faut s'assurer que cette mesure de vitesse est bonne, stable.

spindle-speed est la mesure de vitesse en tours par minute.
spindle-at-speed autorise les nouvements si la vitesse est atteinte. La fonction near permet de vérifier que la différence de vitesse entre la vitesse programmée et la vitesse mesurée est inférieure à 30 t/min. Attention , il faut G53 ou G53 P1 actif;
La 2eme partie de ce topic traitera du pilotage de la broche et de la partie bidouille électronique.
La 3eme de la régulation et de son optimisation.

Vos commentaires sont les bienvenus.
VitaeEar
Attachments:
Last edit: 02 Oct 2011 18:21 by vitaeear.

Please Log in or Create an account to join the conversation.

More
02 Oct 2011 20:47 - 02 Oct 2011 22:03 #13611 by vitaeear
2eme partie) l'électronique
Je suis électronicien et avant tout je voudrais dire que c'est une modification qui est assez délicate et la moindre erreur peut entrainer la destruction de variateur et même plus. Donc à vos risques et périls et ne venez pas pleurer votre mère si ça ne marche pas.

La modification relève un peu du bricolage de professeur Bourrelesol mais c'est un prototype.
Elle se situe sur le clavier de commande de la SX3.

Tel que c'est conçu, il n'y a pas beaucoup de place pour bidouiller, Par contre, refaire une jolie carte clavier de commande à mettre en lieu et place de celle d'origine est la solution élégante.

J'ai simplement choisi de faire rentrer les 4 signaux (marche arret, plus vite et moins vite) sur la carte clavier par 4 opto-coupleurs qui assurent une bonne isolation de la commande externe par rapport au variateur. Au final , on se retrouve avec un câble blindé qui a 5 fils pour piloter la machine , un fil commun et les 4 fils de commande+ un blindage à relier à la masse. Ce câble va traverser la tête de la SX3, passer par l'un des cordons ombilicaux noirs puis aller vers la carte d'interface d'un port parallèle. il faut donc 4 sorties pour piloter la broche. Vous pouvez aller plus loin dans la modification pour déporter les 7 boutons de commande du clavier en incluant le taraudage et la marche av /ar. Pour mon utilisation, je n'en vois pas l'intérêt.

Hors sujet mais important pour la sécurité

Pendant cette modification, on peut en profiter pour rajouter 2 fils sur le contact libre du bouton d'arrêt d'urgence que l'on va câbler sur une entrée du port parallèle et qui complétera l'arrêt électrique.
Le 1er contact du bouton d'Arrêt d'urgence continue à jouer son rôle tel qu'a l'origine.
Le 2eme contact est utilisé dans EMC2 et/ou dans les drivers des moteurs d'axe comme AU et vient compléter la protection. Le gros avantage est que les mouvements vont être figés et ça évite de défoncer une pièce avec la fraise arrêtée.
Sans ce 2eme contact, un arrêt d'urgence sur le bouton proche du clavier n'arrête que la broche et pas les mouvements.

fin hors sujet.

et hop! une photo.:) du prototype.




Le schéma de principe et d'autres détails sur l'installation viendront bientôt.

A l'heure actuelle, La partie logiciel est en cours d'étude et en bonne voie.:) .
le but est de mettre en route ou d'arrêter la broche par EMC2 et d'ajuster au plus vite la vitesse selon le Gcode Sxxx , de bloquer les mouvements si la vitesse de la broche n'est pas atteinte.

VitaeEar
Attachments:
Last edit: 02 Oct 2011 22:03 by vitaeear.

Please Log in or Create an account to join the conversation.

More
02 Oct 2011 22:41 #13613 by darty367
Superbe, encore des photos et si possible une video en fonctionnement ca serait cool ;) juste une question, je ne connais pas la sx3 mais ce n'était pas plus simple de switcher l'électronique de départ et d'utiliser un variateur de frequence ?

Please Log in or Create an account to join the conversation.

More
02 Oct 2011 23:12 #13615 by vitaeear
Bonsoir Darty,

Changer le variateur est la meilleure solution, mais aussi changer le moteur et les poulies , malheureusement,ça représente quelques centaines d'euros pour améliorer les performances .Par exemple, chez Leroy Somer l'unidrive SP 1405 , c'est de l'ordre de 1000eu pour le variateur :( . celui la permettrait tout, le taraudage et le positionnement de broche. il est pilotable directement par le modbus.

Ici la modification coute moins de 30eu et bien sur ca n'améliore pas les performances du variateur.

VitaeEAr,

ps : à la demande générale :) : oui il y aura une présentation en vidéo de la machine et de l'intégration de emc2

Please Log in or Create an account to join the conversation.

More
04 Oct 2011 12:58 #13645 by vitaeear
Parlons programme,

Il s'agit de fabriquer des signaux d'arrêt et de marche de la broche.
J'ai fait le choix de garder les commandes du clavier active. EMC2 va se comporter comme si, manuellement, on appuyait sur le clavier de contrôle de la SX3. On a donc les commandes locales et distante en même temps. EMC2 va envoyer des impulsions de courte durée sur les 4 commandes Marche, Arrêt, +vite, -vite comme ferait un utilisateur sur le clavier de la SX3.

Une première information nécessaire (pour que ça fonctionne bien) est de savoir si la broche tourne ou est à l'arrêt. La plage de vitesse de la broche est 100 à 1800 tour/min .
Ce net sera un booléen que l'on va appeler spindle-in-rot et qui sera à 1 si la vitesse spindle-speed est > 0.

Pour la mise en route de la broche, on va faire en sorte que l'ordre de marche soit actif pendant un court instant.ce sera une impulsion de courte durée.
Pour l'arrêt de la broche, on va envoyer sur l'ordre d'arrêt jusqu'à ce que spindle-in-rot passe à 0.
En prime, La SX3 fait BIIIIIIIP.

Dans le même temps, lorsque la broche est en marche, on va débloquer le régulation de vitesse de la broche qui va générer des impulsions +vite ou -vite pour ajuster la vitesse à la vitesse désirée.
La mesure du temps accélération 0-> 1800t/min est d'environ 8 secondes
Il s'écoulera au pire une 10aine de secondes avant que la vitesse ne soit stable.
L'avance en vitesse de travail restera bloqué jusqu'à ce que la vitesse soit atteinte ( voir le rôle de motion.spindle-at-speed et motion.feed-hold)

Comme je suis en train décrire et de vérifier morceau de programme, je préfère le tester complétement et le nettoyer avant de le poster ici.
Qu'est ce que je m'éclate ! :) Je suis un peu bavard et je préfère expliquer à fond

VitaeEar.

Please Log in or Create an account to join the conversation.

More
04 Oct 2011 20:48 #13656 by darty367
il faudra m'expliquer un jour comment on fait pour apprendre à programmer avec emc2 parceque dit comme cela, ca à l'air simple :laugh:

Please Log in or Create an account to join the conversation.

More
15 Oct 2011 21:12 - 15 Oct 2011 21:14 #13938 by vitaeear
Pas si simple que cela. 35 ans d'expérience en électro et automatisme, ça aide un peu.:)
Justement, le plus difficile est d'exprimer le principe avec des mots simples alors qu'il y a un jargon du métier.

Parlons programme suite .

il faut définir les 4 sorties qui vont piloter la machine.
Ici par exemple, c'est 4 sorties du port imprimante 1.

il faudra adapter et choisir les bonnes sorties qui correspondent à vos choix et au câblage.

net spindle-slower => parport.1.pin-01-out
net spindle-faster => parport.1.pin-14-out
net spindle-on => parport.1.pin-16-out
net spindle-off => parport.1.pin-17-out


Le morceau de code à ajouter à custom.hal pour charger les modules dont on a besoin.

loadrt oneshot count=1
loadrt comp count=1
loadrt and2 count=6
loadrt not count=3

Le programme de marche/arret broche

#

# computing start stop of the SX3
# marche/arret de la broche de la SX3
#
addf comp.1 servo-thread
addf not.1 servo-thread
addf not.2 servo-thread
addf not.3 servo-thread
addf and2.0 servo-thread
addf and2.1 servo-thread
addf oneshot.0 servo-thread

# signal vitesse nulle broche
# computing spindle zero speed
net spindle-speed => comp.1.in1
setp comp.1.in0 1
net spindle-in-rot => comp.1.out

# arret broche
# computing stop spindle
net spindle-enable => not.1.in
net spindle-disable <= not.1.out
net spindle-in-rot => and2.0.in0
net spindle-disable => and2.0.in1
net spindle-off and2.0.out

# marche broche
# computing start spindle
net spindle-in-rot => not.2.in
net spindle-not-in-rot <= not.2.out
net spindle-enable => oneshot.0.in
setp oneshot.0.width 0.5
net spindle-pulse-start oneshot.0.out => and2.1.in0
net spindle-not-in-rot => and2.1.in1
# une impulsion de demarrage si la broche n'est pas en rotation
net spindle-on and2.1.ou0
#

Reste à venir la dernière partie qui est le régulateur de vitesse.
C'est la partie la plus délicate à concevoir.
J'ai fait plusieurs essais avec des stratégies différentes sans obtenir de très bons résultats.
La vitesse se stabilise bien à quelques tours près mais le temps de réponse est trop long et il y a parfois des pics de survitesse lorsque l'on change la consigne. On dira que pour l'instant le résultat est : bof !.
Je mettrais le morceau de code de régulateur un peu plus tard lorsque j'aurai trouvé une meilleur solution.

A suivre.

VitaeEar
Last edit: 15 Oct 2011 21:14 by vitaeear.

Please Log in or Create an account to join the conversation.

More
17 Oct 2011 21:34 #13999 by darty367
Slt, A tout hazard saurais tu si il est possible via Emc2 de faire enregistrer les positionnements d'un capteur ou d'un encodeur dans le but de lui faire refaire la même chose numériquement sans devoir forcement passer par du gcode écrit à l'avance ?
Pour imager mes propos, un peu comme si on jouer une partition de musique d'un panio mécanique à la main et qu'ensuite emc2 était capable de la rejouer tt seul.

Please Log in or Create an account to join the conversation.

More
18 Oct 2011 08:39 #14005 by vitaeear
Bonjour Darty,

Je comprends ce que tu veux dire à propos de la partition.Je ne sais pas trop comment on peut faire.

Il est possible de generer un fichier log contenant X,Y,Z, ... + ce que tu veux
et déclencher l'ajout d'une ligne dans le fichier par une commande M1xx associé a un bouton. ainsi on peut mémoriser des points. Il faut regarder les fonctions LOG

Sinon il y a le mode MDI,
il y a le fichier . axis_mdi_history dans le répertoire /home/ "cheztoi" qui contient les gcodes envoyé au MDI. Ce fichier est mis à jour à chaque nouvelle commande.
Tu ouvres ce fichier avec gedit, tu copies ensuite les commandes qui t'intéressent (Gcode) dans un fichier .ngc et tu rejoues le fichier créé.
Tu peux aussi te creer un fichier " canevas " qui va contenir l'initialisation qui te convient et la fin de programme et que tu vas réutiliser pour chaque usinage.

J'ai lu aussi dans la doc V2.3 qu'il existe une commande MDI que l'on peux utiliser avec un terminal. ça peux aider.

PS : peux tu me contacter en PM , j'ai besoin d'aide à propos de vitesse de coupe"

Please Log in or Create an account to join the conversation.

Moderators: darty367
Time to create page: 0.198 seconds
Powered by Kunena Forum