filetage avec microcontrolleur

  • Auteur de la discussion Auteur de la discussion vibram
  • Date de début Date de début
En pratique un seul top de départ est suffisant pour faire un filetage si on estime que les vitesses de rotation et d’avance sont constantes, et c’est ce que la plupart des amateurs utilisent pour faire le filetage avec des les soft populaires ( mach3, linuxCNC, Galaad avec des cartes Axemotion ou InterpCNC, et autres …). Les gens sont satisfaits tout simplement mais le mode suiveur de position avec codeur haute résolution offre plus de précision même en cas de vitesse non régulière, et je croix qu’il offre même à l’opérateur la possibilité de varier ou changer manuellement la vitesse de rotation de la broche et même l’arrêter ( faire une pause ) et la redémarrer pendant l’usinage « on-fly » et ça… les usineurs l’apprécieront certainement !
 
En pratique un seul top de départ est suffisant pour faire un filetage si on estime que les vitesses de rotation et d’avance sont constantes, et c’est ce que la plupart des amateurs utilisent pour faire le filetage avec des les soft populaires ( mach3, linuxCNC, Galaad avec des cartes Axemotion ou InterpCNC, et autres …)

Si le top de synchro suffit pourquoi se compliquer la vie?:smt021

Je ne vois pas l’intérêt d’arrêter de fileter en plein milieu du pas, la reprise ne va être très belle… :smt077
 
Galaad a dit:
Gawain permet d'intégrer au dessin des filetages horizontaux ou coniques, sans tenir compte du fait que votre tour numérique sera ou non capable de les réaliser. Si le moteur de rotation de votre tour n'est pas indexé ou sa vitesse non asservie, le tournage ne pourra produire que des pièces parfaitement symétriques sur l'axe de rotation, excluant de fait les filetages. L'indexation du moteur suppose bien évidemment que la commande numérique qui gère le tour soit capable effectuer un mouvement soumis à synchronisation externe, fonction assez peu répandue. Une indexation typique consiste à monter sur le moteur du tour un encodeur ou un disque optique retournant le compte précis des impulsions à la carte de commande, via un diviseur ou un multiplicateur de fréquence. Il reste possible de fileter sans indexation, sous réserve d'avoir un variateur de broche très précis ou disposant de sa propre boucle fermée de contrôle de la vitesse de rotation.

Dans la pratique Galaad préconise au moins un encoder de 100 imp
 
je l’ai expliqué la broche est réglé par l’horloge de 50hz ultra stable très divisé rendant

A condition d'avoir un moteur synchrone.
Si le top de synchro suffit pourquoi se compliquer la vie?:smt021

Je ne vois pas l’intérêt d’arrêter de fileter en plein milieu du pas, la reprise ne va être très belle… :smt077

Tu as probablement raison, je pense que cette solution peut intéresser Vibram, si le code est si simple tu peux lui proposer un petit exemple , ça peut aussi servir à d'autre.
 
La solution proposée par CHlore et CNCSERV me semble idéale, je vais voir pour la mettre en oeuvre
Je suis encore très juste niveau parametrage des deux codeurs (jen mets un pour le moteur afin de palier le probleme de perte de pas)
Entre temps c'etait mon dernier soir de formation d'usinage j'en ai profité pour fraiser le support du codeur de broche
ca vient au cul du schaublin 102, ca se monte tip top ;)

IMG_20170627_215030.jpg


IMG_20170627_215039.jpg
 
Bonsoir à tous
Je précise que je suis vraiment vraiment en phase d'apprentissage avec ce MCU et je galere (le mot est faible)

Je suis arrivé à mettre 2 encodeurs qui semblent correctement fonctionner, ca n'a l'air de rien mais c'est une petite victoire
Maintenant, j'essaie de faire un programme simple: une pulse de codeur = 1 step

Auparavant j'ai testé les branchements sur moteur avec un sketch arduino, aucun probleme il fonctionne bien.
Mais là rien ne bouge, j'ai du mal à savoir pourquoi.
Je vois bien qu'il y a un probleme car le moteur est souple. mon void_init_motor ne doit pas etre fait correctement?

Merci de votre aide

PS: il y a beaucoup de morceaux de sketchs commentés etc car, ma principale maniere de faire est de modifier des morceaux de sketch existants. Du coup je veux etre sur de ne rien perdre..

 
Il important de bien respecter le timing des signaux "Pulse" et "Dir" de ton driver, car sur le code tel qu'il est, il ne semble pas les respecter , l'impulsion doit durer au moins 5µs à état "1" et aussi au moins 5µs à l’état "0", et aussi pour l’état du signal "Dir" qui doit être fixé au moins 10µs avant d'appliquer le signal "pulse".

timing.png
 
Exact, j'etais justement en train de lire la doc plus en detail
J'ai réglé le courant, compris comment fonctionnait le mode step ou 1/2step
En revanche, je n'arrive toujours pas a quelque chose de rapide
j'ai deactivé le LCD pour n'avoir que la fonction test motor en marche et avec un delai de 10Ms a chaque fois mais cela est trop lent, cf la video.
En revanche la broche effectue bien une révolution complete
 
rha punaise je me suis posé la question en plus ...! je suis un boulet souvent
Encore merci, la suite un autre jour, point trop n'en faut ! :wink:

je n'ai pas pu résister à un petit test:
C'est sympa mais encore loin d'etre fonctionnel.
J'aurais bien aimé intégrer la fonction qui active les moteurs dans la fonction de mise à jour du codeur mais j'imagine qu'il doit y avoir un conflit entre les interrupt et la fonction donc le moteur ne bouge pas.
Et pour avoir un tel résultat, j'ai mis la fonction dans le while du main mais j'ai desactivé l'update du LCD qui a un délai de 250MS, beaucoup trop long
Je vais réflechir demain à comment corriger cela et intégrer le bout de code de CNCSERV
Et ensuite, réflechir à la disposition sur le LCD puis la démarche à suivre, les boutons etc. J'ai deja quelques idées
 
Je n'ai pas suivi, tu ne te sers plus du timer4 Pour le codeur ?

Dans le bout de code que tu m'as donné ici tu mentionnes "IRQHandler"
Ne sachant pas ce que c'était je suis allé me renseigner et j'ai vu que c'etait utilisé lors des des interrupt.
J'ai donc laissé de coté le timer pour utiliser l'interrupt
Ce n'est pas ce qu'il fallait faire?
 
C'est une interruption timer, il faut une base de temps.
Tu dois trouver facilement un exemple de code pour déclarer un timer, dans la librairie discovery il y a un exemple de PWM avec timer.

Cela n'empeche pas d'utiliser le timer4 pour le codeur.

Personnellement je ne l'utilise pas car j'ai transposé le code qui venait d'un DSP et j'ai 2 entrées codeurs.


C'est simple très rapide.
 
Ah ok donc si j'ai bien compris, en résumé:
l'interruption timer va me generer une interruption toutes les X secondes (ou micro secondes) et la valeur de mon codeur va être lue
Cette valeur sera comparée à la valeur du second codeur et selon le résultat, une instruction sera envoyée au moteur.
Pour que le mouvement soit fluide, l'instruction envoyée au moteur doit avoir une fréquence deux fois inférieure à celle du timer.

C'est correct?
 
C'est presque ça mais il n'y a qu'un seul codeur:
On lit le codeur et on converti on nombre de tours,
On calcule la position du chariot en mm en fonction
En converti en position moteur et on génère les pulses

Le code que j'ai posté n'est pas 100% fonctionnel, il y a de petites adaptations à faire.

Il manque les synchros et l'initialisation des positions
 
OK mais mon idée de mettre un codeur sur le PAP afin de savoir précisément où on en est ne te paraît pas pertinente ?
Oui oui je ne fais pas de bêtes copier coller non plus j'essaie un minimum de comprendre mais avant la synchro je veux être sûr de mes timers /interrupt
Je vais tester une nouvelle version ce soir ;)
 
OK mais mon idée de mettre un codeur sur le PAP afin de savoir précisément où on en est ne te paraît pas pertinente ?
Oui oui je ne fais pas de bêtes copier coller non plus j'essaie un minimum de comprendre mais avant la synchro je veux être sûr de mes timers /interrupt
Je vais tester une nouvelle version ce soir :wink:

Pourquoi ne pas utiliser un PAP “closed loop” plutôt que de charger le CPU avec cela?

La question est pourquoi utiliser ce genre de contrôle ? Il suffit de mettre un PAP suffisamment puissant.
 
OK mais mon idée de mettre un codeur sur le PAP afin de savoir précisément où on en est ne te paraît pas pertinente ?

Ca complique sévèrement le code, ce genre d'asservissement est assez complexe, normalement un Pas à Pas suit les informations que l'on lui donne.
 
Ok je vais vous écouter, surtout en premier lieu ou je galere.

J'ai re ecrit le code avec le timer interrupt
J'ai essayé de faire simple, si je tourne le codeur dans un sens, je viens incrementer unevariable (codeur) qui sera affichée sur le LCD
Cest une tentative de mi des différents codes trouvés/proposés et j'ai fait ca car je comprends à peu pres ce que j'ai écrit.
En revanche, j'ai toujours la valeur 0 à l'écran donc cela ne fonctionne pas. L'affichage LCD et le moteurs fonctionnent (j'ai testé à chaque fois que je rajoutais une fonction)

J'imagine que c'est au niveau de ma definition des GPIO pour l'interrupt qu'il y a un souci mais je ne vois pas pourquoi cela fonctionne pas.
Avez vous une idée?
 
Dernière édition:
Je ne vois rien qui cloche, tu peux comparer avec le code que j'ai posté en 2eme page.

Je pense que TIM4_IRQHandler est bien défini dans les vecteurs d'interruption.
 
La différence notable dans la configuration du timer est cette partie :
/* Output Compare Timing Mode configuration: Channel2 */
Que tu fais aussi pour le channel 1
J'avoue ne pas comprendre cette partie et je ne l'ai pas mise car je ne la trouvais pas dans d'autres exemples.
En revanche dans ton code il n'y a pas mention des gpio ou est branché le codeur rotatif. J'imagine que c'est lié à cette histoire de channel? Mais je ne vois pas où on parle concrètement de gpio dans ton exemple ?
 
Non pas de codeur, dans mon code il n'y a que le timer.
C'est un double timer.

Ici tu peux télécharger la librairie complète et aussi cubeMx qui peut certainement t'aider à configurer ton timer.
Dans la librairie il y a un projet TIM_TimeBase qui peux te donner une base.
 

Sujets similaires

V
Réponses
27
Affichages
1 519
VicMeca23
V
CRA2
Réponses
3
Affichages
1 013
CRA2
Dorian42
Réponses
62
Affichages
2 100
Dorian42
Dorian42

Sujets similaires

Retour
Haut