filetage avec microcontrolleur

  • Auteur de la discussion vibram
  • Date de début
V

vres

Compagnon
@59JAG
je n'ai pas suivi ton sujet, on ne peut pas tout suivre:spamafote:
En revanche J'ai suivi ce sujet lancé par Vibram sans savoir que le tiens existait. Pourquoi 2 sujets différents je l'ignore.

Je pense que les réflexions sur les commentaires ne t'étaient pas destinée.
 
G

gaston48

Compagnon
si elle se fait sur une zone none usinée.
habituellement on est en zone non usinée et on se réserve une bonne marge.
Tu crois qu'on pourrait perdre la synchro après l'action de la butée et la retrouver sans index, une sorte de remonté
dans le temps ?

Je pense que les réflexions sur les commentaires ne t'étaient pas destinée.
je pense que si, c'est moi qui ait aiguillé vince007 vers le travail de 59JAG :oops:
 
V

vres

Compagnon
Tu crois qu'on pourrait perdre la synchro après l'action de la butée et la retrouver sans index, une sorte de remonté
dans le temps ?

Si on n'a pas perdu la position du moteur et que l'on connait la position de la broche on peut retomber dans le pas même sans index. Si on connais la vitesse et l'accélération on peu anticiper le départ du moteur Pas à Pas comme pour le passage d'un relai.

je pense que si, c'est moi qui ait aiguillé vince007 vers le travail de 59JAG :oops:

Effectivement, vu la chronologie c'est bien possible. Peu importe le cible.
 
Dernière édition:
V

vince_007

Compagnon
C'est bon, ma réflexion ne visais personne spécifiquement, je faisais juste remarquer que ce n'est pas suffisament commenté pour que quelqu'un extérieure au programme puisse comprendre comment ça fonctionne, c'est pas une critique, juste une remarque.
 
V

vince_007

Compagnon
Bonjour,
ca fait un momment que je n ai pas lu le post,je vois que l on parle de moi.
pour répondre , oui a chaque pulse sur codeur de broche j applique l algorithme de Bresenham pour savoir si on
envoi un pluse step au pap.
on ne peux envoyé au maximum q un step par pulse.
pour les commentaires le prog est toujours en phase de conception( manque de temps) pour info le prog est de moi et l idée d utiliser Bresenham aussi.
l avancement de mon projet je suis en train ecrire les menu ,intégration d un deuxième codeur pour verfier le pap.

Ok, merci de ton retour.
L'inconvénient de faire le calcul à chaque pulse, c'est que la broche doit tourner lentement ou alors il faut un gros micro et aller vite. J'aimerais utiliser un CPU à 10 MIPS.
Je pense que c'est optimisable en réalisant les calculs à l'avance et en stockant les résultats dans un tableau ou même direct dans le code. Sur un tour, les avances sont standard et on peut coder en dur les fractions correspondantes.
De mon côté, je compte utilise un PIC 18F4431 qui possède une unité ''Feedback motion'' capable de traiter l'encodeur en hardware mais aussi de générer une interruption quand l'encodeur atteind une valeur pre-réglé, du coup, je compte utiliser cette fonction pour ne déclencher une IT quand il faut envoyer un pulse et en rechargeant le comparateur à la prochaine valeur à chaque IT.
Pour le pulse du stepper, la je pense utiliser une autre fonction hardware, le module PWM en mode One Shot, pour qu'il me génère un step d'une durée de 10us tout seul sans IT logiciel. En gros, dans l'IT pulse, je déclenche le step qui se terminera tout seul en hardware.
Le but de tout ça est de traiter une broche à 3000rpm et des avances jusqu'à 1mm à cette vitesse. Pour les avances plus grandes, généralement on tourne plus doucement.

Petit récapitulatif:
Vis mère au pas de 2mm avec stepper en direct piloté en 1/2 pas, ça donne 200step/mm, soit une résolution de 0,005mm. Je pense que c'est suffisant.
Encodeur de 1000pulse/tour, à mon avis largement suffisant, on pourra toujours faire de 2x et 4x à vitesse faible.
Avec les astuces soft au dessus, j'espère pouvoir traiter correctement la fonction avec le petit PIC à 10MIPS. Il y aura un afficheur LCD 4x20 et un encodeur de selection avec poussoir intégré. Aucun calcul flottant en live, juste des comparaisons et des lectures de tableau par pointeur pour charger le comparateur de pulse. Pour générer le step, juste une écriture de registre, le reste se fait en matériel.
Reste à gérer les accélérations mais le module motion feedback mesure la vitesse tout seul, faudra quand même faire les calculs.

Il me reste à coder les fonctions de base et les simuler pour voir combien de cycle ça prend. Surtout que partir en IT et revenir prend déjà plusieurs cycles.
Si ca passe, je me route un PCB et je me lance, ça fait longtemps que j'ai ça en projet.
Si ça passe pas, je passe sur un FPGA pour le temps réel et un PIC pour l'IHM.
 
V

vince_007

Compagnon
Ah ouai pas mal, je suis perdu entre les 2 posts. Il est sur le STM32 ?
 
G

gaston48

Compagnon
Non arduino uno tout simple !!!
 
Dernière édition:
V

vince_007

Compagnon
heu pas possible, ya un truc que j'ai du loupé.
 
G

gaston48

Compagnon
Il faut isoler tout ses post qui sont éparpillés .

4 micro-seconde de temps de traitement complet
 
V

vres

Compagnon
Je ne comprend pas trop: un filetage avec la broche à 3000tr/min et une vis au pas de 2 mm et un filetage au pas de 1, ça nous donne donc une vitesse du moteur Pas à Pas de 1500 tr/min donc 25 tr/s. et une vitesse d'avance de 50mm/s

Sans prendre en compte les accélérations en 2 secondes on aura fileté 100mm :shock::smt017:hum:

Maintenant si on prend les accélérations en compte, pour atteindre 3000tr/min, il faut fileter au moins 300 mm et faire un démarrage progressif sur la broche car sinon le pauvre moteur pas à pas ne pourra pas suivre.
 
5

59JAG

Ouvrier
Oui c est sur un arduino uno.
avec encodeur 400i/tour en mode 2x pour n utiliser q une ligne d interruption.
le calcul avec l algorithme est tres simple c est juste une addition et soustraction 16bits.
disons 10us car le pulse step dois etre minimum 1us, faudrait que je remesure a l oscilloscope.
ce qui donne vitesse maxi broche 10us x 800=0,008s pour 1tour sois 125 tours en une seconde ce qui donne 7500tr/mn.
 
V

vince_007

Compagnon
Je ne comprend pas trop: un filetage avec la broche à 3000tr/min et une vis au pas de 2 mm et un filetage au pas de 1, ça nous donne donc une vitesse du moteur Pas à Pas de 1500 tr/min donc 25 tr/s. et une vitesse d'avance de 50mm/s

Sans prendre en compte les accélérations en 2 secondes on aura fileté 100mm :shock::smt017:hum:

Maintenant si on prend les accélérations en compte, pour atteindre 3000tr/min, il faut fileter au moins 300 mm et faire un démarrage progressif sur la broche car sinon le pauvre moteur pas à pas ne pourra pas suivre.

Le récapitulatif que j'ai donné, c'est pour du chariotage pas pour du filetage, on fait pas un filetage à 3000rpm en manuel, en tout cas, ce n'est pas mon besoin.
J'ai pris 1mm comme pire cas, le chariotage en ébauche c'est à 0,5mm voir moins.
 
V

vince_007

Compagnon
Oui c est sur un arduino uno.
avec encodeur 400i/tour en mode 2x pour n utiliser q une ligne d interruption.
le calcul avec l algorithme est tres simple c est juste une addition et soustraction 16bits.
disons 10us car le pulse step dois etre minimum 1us, faudrait que je remesure a l oscilloscope.
ce qui donne vitesse maxi broche 10us x 800=0,008s pour 1tour sois 125 tours en une seconde ce qui donne 7500tr/mn.

Attention, un driver de stepper standard, c'est un pulse d'une durée mini de 2.5µs et un délai de 5µs mini entre DIR et STEP.

Tu fait l'acquisition de l'encodeur par soft ? Ya pas de module encodeur dans le cpu de l'arduino UNO ?

On peut avoir ton code pour comprendre ?
 
Dernière édition:
V

vres

Compagnon
Le récapitulatif que j'ai donné, c'est pour du chariotage pas pour du filetage, on fait pas un filetage à 3000rpm en manuel, en tout cas, ce n'est pas mon besoin.
J'ai pris 1mm comme pire cas, le chariotage en ébauche c'est à 0,5mm voir moins.

En chariotage, il est quand même préférable à mon avis d'introduire la notion d'accélération donc de vitesse.
Ca me parait aussi intéressant d'avoir une butée électronique programmable, dans ce cas il faut bien calculer le point de décellération. ca peut être fait par un tableau comme tu le proposais pour les micro n'ayant pas une grosse puissance de calcul.
 
V

vince_007

Compagnon
Ce serait un plus effectivement mais je préfère garder un usage mécanique pour le chariotage. Donc embrayage et débrayage classique par la manette du traînard.
Après je verrais si je peux ajouter des fonctions logicielles dans un second temps.

Mon point bloquant est de savoir sur quel CPU partir, la série 18F en 8 bits est simple à mettre en oeuvre mais ne dépasse pas les 10MIPS, sinon faut que je passe sur les 24F ou DsPIC en 16 bits, là ce sera du 70MIPS avec unité de calcul des virgules flottantes mais la mise en oeuvre est beaucoup moins rapide.
 
V

vres

Compagnon
L'arduino c'est vraiment très bien pour ce genre d'application, ça na rien de dégradant. Tu as une ribambelle de libraire et si tu es un programmeur plus chevronné tu peux aussi aller titiller les registres.

Maintenant pour tes besoins, il me semble que ce qu'a fait 59JAG est vraiment adapté, il ne sert peut-être pas grand chose de réinventer la roue.

Pour du chariotage on a vraiment besoin d'une synchronisation avec la broche ?
 
V

vince_007

Compagnon
Arduino je connais, j'en utilise sur l'imprimante 3D. L'environnement est "nullisime" par rapport aux autres outils comme MPLAB X, Eclipse ou Keil. Sur l'environnement Arduino, il n'y a aucune possibilité de debug pas à pas, on ne peut sortir que vers la console. C'est vraiment la galère pour débugger un soft, surtout quand on connait la puissance d'une sonde JTAG ou ICD.
L'argument du gratuit n'en ai pas un car Microchip fournis lui aussi MPLAB X et les compilateurs gratuitement. La force d'Arduino s'est d'avoir fournis des cartes pas cher et une librairie "friendly user", ça démocratise la programmation.
Effectivement, il y a beaucoup de librairie, c'est pratique mais au final on ne maîtrise pas grand chose de ce qu'il se passe. Pour faire du temps réel, faut oublier les librairies ou en prendre des spécifiques.
Je n'ai rien contre Arduino, j'en ai quelques unes pour bidouiller à la maison.

je n'ai aucune envie de ré-inventer la roue, si @59JAG a réussi à faire tourner quelque chose qui convient à mon cahier des charges et qu'il accepte de le partager, je suis preneur. Pour le moment, je n'ai pas réussi à trouver quelque chose de fini sur le net à ce sujet, c'est toujours des expérimentations.

Pour le chariotage, la synchro avec la broche n'est pas nécessaire mais un contrôle au minimum de la vitesse. Mais comme on va coder un truc pour le filetage, le même code ira pour le chariotage. Qui peut le plus peut le moins.
 
5

59JAG

Ouvrier
bonsoir

je vous donne le prog de l interruption sur INT0 de l arduino le reste du prog est en cours d elaboration.
le decodage de l encodeur rotatif ce fait en mode 2x ,je travail directement sur les PORT car digitalread est beaucoup trop long ,les lignes de calcul avec les variables 16bits erreur dxx et dyy sont en relation avec l alog de breishman .
pour gagner tu temps les calculs sont precalculé 1 coup en avance (pendant le temps ou step doit rester haut) ,des qu il y une impulsion codeur l arduino sais si faut envoyer un step au driver
 
5

59JAG

Ouvrier
Une petite vidéo
Le moteur cc qui simule la broche est réglé à 1000tr/m, comme ça plus facile pour vérifier le rapport de réduction entré .
pour l instant le programme est en mode réducteur, on entre 2 nombre à et b avec a et b compris entre 1 et 65535 et a>=b.
Le rapport de réduction et a/b , l erreur de calcul est =< 1/2 pas .
 
V

vince_007

Compagnon
Ça a l'air de bien fonctionner et ton afficheur LCD reste bien réactif, c'est bon ça.
 
5

59JAG

Ouvrier
photo des signaux encodeur en haut et step en bas avec moteur cc a environ 3400 tr/mn( peux pas plus mon alim a 25v maxi), on peux remarquer le temps de reponse environ 2us et temps haut step 2us ,je pense que le temps de l interruption totale doit etre au alentour de 6us.
on peux encore gagner quelques 100ns en utilisant une ISR NAKED et reserver quelques registre pour les variables de l interruption ,qui evite trop de push pull sur la pile.

20171009_221500_resized.jpg

code assembleur de l interruption
 
Dernière édition:
G

gaston48

Compagnon
Le fait de rentrer le rapport de réduction sous la forme d'un ratio de 2 entiers est bien suffisant.
Pour la mécanique, les rapports les plus ch....t à configurer correspondent aux "pas aux module"
pour usiner une vis sans fin qui va engrainer sur un engrenage standard.
Là il faut rentrer le nombre Pi dans le rapport, mais la fraction réduite de Pi : 355 / 113 ou même 333 / 106 est largement suffisante.
 
V

vres

Compagnon
J'ai enlever ma remarque sans avoir vu ta réponse :cry:.
Je disais que l'inversion pouvait ce faire a un point près.

Je n'en suis plus tout a fait certain comment est générée ton interruption ?

EDIT: Si ton interruption est à chaque changement d'état du A, il n'y a pas de problème.
Desolé.
 
Dernière édition:
5

59JAG

Ouvrier
Décodage en mode 2x donc à chaque changement d etat de A
 
V

vibram

Compagnon
Bonjour à tous,

Le projet devrait repartir :)
J'ai trouvé une solution technique pour mettre l'ensemble sur le schaublin 102
J'ai retravaillé le code notamment pour passer sur un écran OLED (principalement car je n'arrivais pas à faire fonctionner mon LCD20x4 en I2C, tant pis !)

Pour le moment il y a un mode filetage ou on selectionne le pas et une butée théorique (juste par sécurité) mais le mouvement du moteur est bien asservi à celui de la broche. et un mode libre, pour pouvoir positionner le chariot sans action du moteur. C'est l'interrupteur que j'active et qui active la led rouge sur le board
Et je vais faire un module d'avance automatique ou je précise uniquement une vitesse et une longueur à parcourir.

voici pour le module de filetage :wink:

Et j'ai fait un test sur la vitesse de rotation de la broche
A 350RPM, j'ai aucun probleme d'acceleration
A 1200RPM (vitesse max de ma perceuse), j'ai parfois un décrochage à l'acceleration uniquement quand j'attaque à 1200RPM immédiatemment. Lorsque je démarre la perceuse normalement (qui a donc aussi un petit cycle d'acceleration), aucun probleme.

Je peaufinerai le module de filetage une fois que la partie mécanique sera en place.



Concernant l'avance auto, je pensais régler la vitesse de l'avance du moteur via le timer en faisant un calcul de period/prescaler. La seule chose que j'aimerais rajouter, c'est un module d'acceleration pour éviter tout probleme en cas d'avance tres rapide ainsi que pour le retour rapide.
Il faut que je reflechisse comment faire. A premiere vue, en plus du fonctionnement par cycle utilisé depuis le début comme suggéré par CNCSERV, je pense que je devrais faire un autre cycle en début de boucle. A voir comment je peux faire.

Je commence un nouveau job lundi donc je vais forcément prendre encore un peu de temps pour tout avancer...
 
V

vibram

Compagnon
Bon j'ai fini la piece de fixation.
Comme je nai que raremet acces au tour, j'avais dessiné cette piece selon mes instincts. Elle était correctement faite mis à part que je n'avait pas pensé à la barre de protection des poulies. Du coup le codeur bloquait contre !
Plutot que de tout recommencer et comme ce n'est qu'un prototype, j'ai adopté une solution assez moche: souder une rallonge.
Maintenant c'est un peu trop long mais ca ne devrait pas gener au fonctionnement. Encore une fois, j'avance à l'aveugle, on verra bien :wink:

J'ai recu les 2 cardans, bague et arbre canelé de chez HPC, j'y ai laissé un bras et j'ai sans doute largement sur - dimensionné l'ensemble (j'ai tojours peur du manque de rigidité), en esperant que le moteur soit du coup assez costaud

J'ai presque fini les deux poulies pour le codeur et la broche, juste un percage/taraudage encore, et commander la bonne longueur de courroie

WhatsApp Image 2018-05-26 at 09.41.03.jpeg
 
V

vibram

Compagnon
J'ai pu avancer la mécanique
Comme j'ai dit plus tôt, tout est vraiment sur dimensionné. Donc pas très esthétique. Et je ne parle pas des vis, je dois commander des vis sans tête.
Concernant la sécurité, j'ai fait la fourchette en bronze afin que ce soit cette pièce qui casse s'il y a un problème.


Je dois encore recevoir le moteur.

Pour rappel : cela vise à copier le principe du schaublin. C'est assez cher a mettre en œuvre entre les cardans et les pièces cannelés. Si c'est concluant, je verrai pour me passer de ça et mettre l'ensemble lié à la manivelle.

IMG_20180602_160815.jpg


IMG_20180602_160803.jpg
 

Sujets similaires

Père-Pendiculaire
Réponses
23
Affichages
663
Père-Pendiculaire
Père-Pendiculaire
N
Réponses
27
Affichages
839
Jean 47
J
2
Réponses
27
Affichages
1 348
jean-jacques
J
C
Réponses
0
Affichages
3 517
caramel
C
B
Réponses
19
Affichages
2 056
boumboauto
B
tournele
Réponses
106
Affichages
14 590
tournele
tournele
Haut