filetage avec microcontrolleur

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

vres

Compagnon
Soit :
Pi -> Position premier filet = 35mm
Ai -> Position angulaire premier filet = 45°
Vb -> Vitesse broche = 3.5 tr/s
p -> pas du filet = 0.8mm
La -> longueur amorçe = 0.3mm

vitesse du moteur Pas à Pas à atteindre -> Vm = p * Vb = 0.8 * 3.5 = 2.8 mm/s
Accélération -> a = Vm / La = 2.8 / 0.3 = 9.33333
Temps de l'accélération -> Ta = sqrt ( La / 0.5 * a) = sqrt ( 0.3 / 0.5 * 9.33333) = 0.25354 S
Pendant ce temps la broche tournera de 3.5 * 0.25354 = 0.8874 tr = 319.46°

La position angulaire de départ sera donc de 45 - 319,46 = -274.46 = 85,54°

Il faut donc lancer le Moteur PàP a la position Pi-La = 34,7mm quand la broche sera à la position angulaire 85.54°

Avec une accélération de 9.333 le moteur ne risque pas de décrocher. Un réajustement de la position en fin d'accélation est surement largement suffisante. Pas besoin de recalculer sur chaque cycle.
 
V

vibram

Compagnon
Bonjour et merci à vous deux pour votre aide.
J'ai recu mon F4 donc je vais deja porter mon porjet du F1 et F4, puis toucher les bouts de code avec le float.

Ensuite je ferai une phase de test avec des vitesses "raisonnables" à savoir l'hypothese qu'on a choisi depuis le debut ou la vitesse max du stepper est inférieure à son accélération.

Ensuite, si cela ne fonctionne pas ou si les limitations sont trop importantes, je pense qu'on peut gérer l'accélération avec la variable cycle comme a proposé gaston plus haut a savoir qu'on prend par exemple 1 cycle sur 20, puis 1/19 progressivement jusqu'à 1/2 sachant que la vitesse max est 1 cycle sur 2 (toujours selon le code proposé par CNCSERV il y a longtemps). Cela ne me semble pas impossible à coder. Il faut simplement etre sur que cette accélération se fasse avant le début du filetage.


D'un point de vue mécanique, j'ai 2 options
1. Celle qui demande le moins de reflexion mais plus chère est celle que j'ai présentée dans les post précédent qui reprend le systeme de double cardan + arbre canelé.

2. La seconde nécessite plus de reflexion mais sera moins couteuse mais pas forcément moins complexe
Il s'agit d'adapter un outil de la sorte:
le principe est toujours de venir entrainer le bout de la vis pour conserver le vernier de l'autre coté.
Le souci de cet accessoire, c'est qu'on perd tout le début de course du chariot, et cette course est deja plus que limitée. Donc idéalement il faut soit que je fasse un train d'engrenage ou un renvoi de courroie, je ne sait pas encore mais la place est vraiment tres limitée.
Je dois donc reflechir à cela. C'est assez facile de se brider dans la rainure la plus eloignée de l'axe de la broche (l'autre étant généralement utilisée pour le PO) mais l'ensemble des renvois, qui plus est dans un espace réduit n'est pas le plus simple

Ne faites pas attention à la propreté du tour, mon père n'est pas aussi méticuleux que moi !!!

Capture2.JPG


Capture.jpg


IMG_20181028_093021.jpg


IMG_20181028_093002.jpg
 
V

vres

Compagnon
Avec les calculs que j'ai mis ci-dessus on peut faire un code ultra simplifié sans calcul de vitesse.
Je suis en train d'y réfléchir.
 
M

MegaHertz

Compagnon
Bonjour à tous,
sans parler de la conception mécanique. cela vous parait-il possible de réaliser des filetages au tour avec une avance contrôlée par microcontrôleur (STM32 ou arduino), driver et moteur PAP et un simple capteur de vitesse de broche ?
L'idéal étant que le microcontrôleur ajuste en temps réel l'avance en fonction de la vitesse de la broche.
Ce serait un montage amateur avec une vitesse de broche faible, j'imagine en dessous de 100trs/m

Il y a quelques videos sur youtube et cela semble fonctionner correctement.

Dans un premier temps, j'aimerais essayer avec une boucle ouverte et si cela est possible et concluant, essayer aussi de mettre une regle afin de connaitre précisement la position de l'outil et eviter le probleme des pertes de pas.

Qu'en pensez vous?

Au final ton projet aura les mêmes contraintes qu'un projet de numérisation de tour mais sans solutions toute faites et vu que tu te limites aux filetages tu feras comment avec les commandes pour le reste ?
Côté matérial le filetage t'impose tellement de contraintes que tout ce que tu ajouteras pourrait également servir pour faire auyre chose.

Tu devrais peut être simplement numériser ton tour à base de linuxcnc.
http://wiki.linuxcnc.org/cgi-bin/wiki.pl?LinuxCNC_Supported_Hardware
Là en plus des filetages tu gagnes la grande liberté du numérique.

Amuses toi bien
 
V

vibram

Compagnon
OK Christian, j'attends de voir ca :wink:

Au final ton projet aura les mêmes contraintes qu'un projet de numérisation de tour mais sans solutions toute faites et vu que tu te limites aux filetages tu feras comment avec les commandes pour le reste ?

Tu devrais peut être simplement numériser ton tour à base de linuxcnc.
http://wiki.linuxcnc.org/cgi-bin/wiki.pl?LinuxCNC_Supported_Hardware


Ce n'est pas si simple car il s'agit d'un tour d'outilleur et que je veux conserver safonction "Universelle" donc les manivelles.
Il s'agira juste d'un outil servant occasionnellement et c'est aussi pour le plaisir de fabriquer, reflechir et apprendre grâce aux membres du forum :wink:
 
V

vibram

Compagnon
J'ai commencé le portage de mon code sur le F4.
Je dois finir de configurer les timers
En revanche j'ai une erreur alors que j'utilise les mêmes librairies:
/Src/main.c(175): error: #136: struct "<unnamed>" has no field "BRR"

C'est a chaque fois que j utilise "GPIOB->BRR"

Vous avez une idée ? Sachant que le BSRR ne me donne pas de message d'erreur
 
V

vibram

Compagnon
J'ai commencé le portage de mon code sur le F4.
Je dois finir de configurer les timers
En revanche j'ai une erreur alors que j'utilise les mêmes librairies:
/Src/main.c(175): error: #136: struct "<unnamed>" has no field "BRR"

C'est a chaque fois que j utilise "GPIOB->BRR"

Vous avez une idée ? Sachant que le BSRR ne me donne pas de message d'erreur

SI cela peut servir à quelqu'un voici la réponse:

BSRR accède a 32 bit: les 16 premiers pour "set register" et les 16 derniers pour le reset register

Donc on conserve la meme fonction pour le set register:
GPIOB->BSRR = DIR_Pin;

et pour le reset on peut décaler de 16 bits:
GPIOB->BSRR = DIR_Pin << 16;



je n'ai pas encore essayé mais je pense que c'est bon :wink:
 
V

vibram

Compagnon
Bonjour à tous,

Je continue le portage et je corrige des choses.

Voici une des choses qui ne me va pas et que je ne parviens pas à corriger:

Lors de la selection du pas, je procede ainsi:


Et voici mon problème:
Lorsque je selectionne une valeur de 35 sur mon ecran, pour un pas réel de 0.35mm, j'obtiens dans le debugger, sur la variable "pitch" 0.3499999994

Il y a deux choses que je ne comprends pas à savoir je passe d'un INT de 35 à un float de 35/100 je devrais donc avoir 0.35
Mais meme si j'ai 0.3499994, pourquoi la fonction roundf ne me donne pas 0.35000?


Je me suis basé sur ce post pour le roundf:
https://stackoverflow.com/questions/1343890/rounding-number-to-2-decimal-places-in-c

Merci à vous
 
V

vres

Compagnon
Es-tu certain que la FPU fonctionne ?
En flottant si tu veux avoir de la précision il faut utiliser les "double"
Pour roundf je n'ai pas la réponse. je n'ai jamais utilisé.

PS: je ne t'oublie pas :wink:
 
V

vibram

Compagnon
Je suis certain que le FPU ne fonctionne pas car pas encore utilisé, il faut que je me penche dessus.
mais je ne comprends pas que je n'ai pas un résultat correspond à ce que je veux quand je vois la simplificté des calculs et les exemples tout aussi simples de roundf

Je vais essayer demain soir en remplacant float par double
 
V

vres

Compagnon
Un float à environ 8 chiffres significatif un double en a 16.
Sur Micro il vaut mieux utiliser la multiplication plutôt que le division.
Le nombre de cycle n'est pas du tout le même.

J'ai essayé ces calculs sur builder C++ je n'ai pas ce problème, j'ai toujours 0.35 ou 35 même en float.
Je vais essayer avec Keil quand je vais avoir l'occasion.

Tu as peut-être des infos Ici
 
V

vibram

Compagnon
Oui mais dans ce cas je devrais avoir 0.350000
Tandis qu'à la fin ma variable dans le debugger est a 0.34999 etc

J ai un peu regardé sur internet. Je ne saurais dire si le fpu est activé ou pas, je vais vérifier demain soir !
 
V

vibram

Compagnon
Bon j'ai tout passé en double et ca fonctionne nickel.
Du coup je vais passer l'ensemble en double pour le moment et je verrai ben aux essais
 
V

vres

Compagnon
J'ai un peu réfléchi a cette histoire de synchro pour retomber dans le filet avec accélération.
Il faut aussi (et surtout) que les déplacements hors filetage soit avec accélération.

Je pense que pour commencer il faut faire une classe spéciale pour la gestion du moteur Pas à Pas avec :
- Une vitesse de déplacement,
- Une accélération,
- Une position cible,
- Un mode synchrone avec la broche débrayage pour les déplacements.
- Un drapeau pour indiquer que la position est atteinte,
- Un timer dédié (thread)
-....

Une fois que l'on a cette classe les cycles de filetage sont plus simples à gérer et le code épuré.

Là, j'ai un peu de mal à me retrouver.

J'ai vu la vidéo de Gaston, pour en arriver là....il y a du travail.
 
G

gaston48

Compagnon
Attention Christian, le retour de l'outil est une séquence complètement désynchronisée de la broche.
C'est un déplacement autonome, indépendant, qui doit être déclenché par l'opérateur
seulement après qu'il ait reculé l'outil manuellement au niveau de la butée 2.
Une foi l'outil à sa position initiale, butée 1, on plonge manuellement de la valeur de la prise de passe et on déclenche
l'autorisation de déplacement synchronisé ... qui démarre seulement après l' acquisition du top index.
Les seules données communes de ces 2 séquences sont les valeurs de butées 1 et 2 : départ et arrivé.
 
Dernière édition:
V

vres

Compagnon
C'est un déplacement autonome, complètement indépendant, qui doit être déclenché par l'opérateur
Oui je l'ai bien compris, justement il faut que les 2 modes soient géré par la même classe.
- Un mode synchrone avec la broche débrayage pour les déplacements.

l'autorisation de déplacement synchronisé ... qui démarre seulement après l' acquisition du top index.

Je pense que ce qui nous intéresse pour la broche c'est sa position angulaire, inutile de stoker des tours et des tours dans un valeur 32 ou 36000bits.
La position angulaire peut être remise a zéro par l'index sur une initialisation.

seulement après qu'il ait reculé l'outil manuellement au niveau de la butée 2.

Sur la vidéo le recul est automatique ? C'est vrai que ça doit être du 2 axes .
Le problème c'est que la position de synchronisation doit être calculée en fonction de l'accélération, ou alors on ne s'occupe pas du départ du filetage, on synchronise sur le pas au plus près en fonction de la position de l'outil.
C'est exactement les calculs que j'ai mis plus haut.

Il faudrait un CDC précis avec le mode opératoire
 
G

gaston48

Compagnon
Sur la vidéo le recul est automatique ? C'est vrai que ça doit être du 2 axes .
Oui, là c'est un cycle complètement automatique ainsi que les prises de passe, mais il est inspiré finalement
du mode opératoire manuel.
Dans notre cas c'est un mode opératoire manuel, dont l'opération d’embrayage mécanique du peigne et de son
débrayage sur la vis mère et remplacé par un embrayage débrayage "numérique".
En mode manuel, quand le peigne est libéré, on peut manuellement ramené le traînard à sa position
de départ, chose qu'on ne peut pas faire ici, car le pas à pas est toujours accouplé.
Le temps de cet accouplement, il faut inclure en plus: un jog (ou une manivelle électronique) pour les déplacements de réglage
et tant qu'à faire, ce fameux retour automatique.
Mais bon, c'est comme ça que je vois la chose, à Vibram de confirmer.
 
V

vibram

Compagnon
Bonjour à vous deux et merci pour vos analyses.

J'ai de nouveau regardé la vidéo.
Selon moi, il y a toujours la même problématique d'accélération. Christian l avait dit avec des mots plus précis mais en gros la vitesse de rotation du moteur ne peut pas être supérieure à sa vitesse lors de l'accélération car quand on tourne la broche à la main comme dans la vidéo, la vitesse n'est pas constante donc on est toujours en accélération ou décélération.

Donc comme on a dit plus haut, il faut simplifier ce problème et réduire la vitesse de la broche. A l'origine c'est pour équiper un tour d outilleur ce n'est pas pour de la production donc l opération va durer 20 min au lieu de 10 par exemple ce n'est pas bien grave.

Une fois ce premier point éclairci le reste est vraiment plus simple.
On lance la première passe. Lors du premier appui sur le bouton on est en position 0 du codeur.
Quand on arrive en butée max, le compteur garde toujours la position, le PAP n'avance plus mais le codeur continue de prendre l info. On sort l'outil à la main et la on peut envoyer la commande de retour, l outil revient en position 0. A ce moment là broche continue toujours de tourner et le codeur prend toujours l'information.

On avance l'outil manuellement: on est prêt pour la deuxième passe.
On appuie sur un bouton pour lancer la passe, le codeur se ré initialise mais ne revient pas à 0, on soustrait le plus grand nombre de pas multiple de la résolution d'un tour complet de manière à avoir la position de la pièce par rapport au 0.
Ainsi la pièce était à 0° au tout début,
Admettons qu'elles soit à 90 degrés lors de l'appui sur le bouton, s'il y a 2500 pas au codeur, on aura une valeur codeur de 625. Et la valeur avant le reset de la position était par exemple 2500625. Dans ce cas par exemple j'ai soustrait 2500000 pas soit 2500000/2500 = 1000 tours complets

Comme on a dit au dessus, je suis en butée minimum, et la pièce se situe par exemple à 20mm.
Dans ce cas, j'ai 20mm pour que mon PAP rattrape 625 pulse codeur pour se remettre en position + les pulses codeur qui vont venir s ajouter pendant que le moteur rattrape le retard.
.
C'est la ou il faut que j étudie les calculs de Christian pour déterminer, selon l'accélération maximum d'un PAP, à quelle vitesse maximum ma broche peut tourner pour qu'en X millimètre je rattrape le nombre de pas en question.

Donc si je résume mes paramètres/Inconnus :

A : accélération du moteur (quelle unité ?!)
P: nombre de pas à rattraper. P < résolution codeur donc <2500 par exemple (sans compter les pas qui vont venir s ajouter pendant l acceleration)
R: vitesse max rotation moteur : c'est ce qu'on doit trouver
Q: avance par pas (vis de 2mm, 800 pas par révolution PAP) donc 1 pas = 0.0025mm
D: distance pour rattraper la position donc D <=20mm si la butée soft est 20mm avant le début de la pièce

Ça vous semble pertinent ?
 
V

vres

Compagnon
Comme je le disais le nombre de tour de broche on s'en fout.
Pour faire une passe on va avoir :
Une phase d'accélération, Une phase en vitesse constante, une phase de décceleration.
Chaque temps pour chaque phase est facilement calculable donc on peut savoir exactement sur quel angle débuter le cycle.
Ensuite en mode synchro, il faut que la base de temps soit indexée sur l'avance de broche par exemple pour chaque chaque dégrè on libere un certain temps. Oui on a un temps élastique :mrgreen:. Je fais comme cela avec les piqueuses de couettes.

Si on fait une classe pour le gestion du moteur Pas à Pas tout devient plus facile par exemple :
(code bidon)

On peut d'ailleurs aussi faire une classe pour la broche.

J'ai un doute, on peut utiliser des classes dans Keil, il me semble que non?
Sinon, on peut faire autrement en utilisant des structures ça change un peu le code c'est tout.
 
Dernière édition:
V

vres

Compagnon
ors de l'accélération car quand on tourne la broche à la main comme dans la vidéo,

Dans ce cas il n'y a pas besoin de gérer l'accélération, Il faut même surtout pas le faire car on ne serait plus synchrone.
 
V

vibram

Compagnon
Je vais dessiner le module qui va venir se fixer sur le banc
Comme ca je pourrais commencer des tests et voir si je suis completement à coté de la plaque
Bon entre les déplacements et le projet maison il ne faudra pas être pressé
 
V

vres

Compagnon
De mon coté il me reste 3 semaines pour terminer les travaux en cours et la semaine prochaine je suis en vacances.
 
G

gaston48

Compagnon
Bonjour,
Quand on tourne à la main, c'est un peu le même problème que quand on déplace
un axe avec une manivelle électronique, dans ce cas les accélérations sont aussi respectées.
ici, l'inertie du mandrin introduit naturellement une accélération je pense.
En cas de dépassement d'accélération avec une manivelle, la position définitive est restitué avec une certain retard.
J'imagine que le flux de position transite dans une sorte de buffer FiFO amortisseur
 
V

vres

Compagnon
ici, l'inertie du mandrin introduit naturellement une accélération je pense.

Oui, je pense que c'est suffisant.

En cas de dépassement d'accélération avec une manivelle, la position définitive est restitué avec une certain retard.
J'imagine que le flux de position transite dans une sorte de buffer FiFO amortisseur

Oui ça peux se faire naturellement en indiquant une vitesse max pour le moteur
 
V

vibram

Compagnon
Je pense que je vais imprimer les deux pieces support pour voir ce que ca donne avant de le faire usiner mais dans le principe c'est ca:

1541771950438.png



1541772037833.png


1541772059758.png


je n'ai pas dessiné tous les éléments (manque des vis, la bague bronze sur la poulie du bas qui serra pressée sur la piece orange) et l'element de bridage sur la piece en T dans la rainure


La forme est un peu biscornue mais voila les raisons:

1. sur la partie basse, je devais laisser le dégagement pour la queue d'aronde
2. Je voulais mettre le moteur assez haut pour laisser passer un outil dessous. N'ayant pas le tour avec moi, j'ai fait à la louche en laissant 30mm de hauteur entre le haut du chariot et le bas du moteur
3. le coté du moteur est perpendiculaire à la rainure du chariot pour pouvoir visser et devisser dans faire l'équilibriste de la clé imbus

Le pion violet sert de fixation au chariot et de maintien en position car il est fixé au tasseau en T.
2 poulies GT2 qu'on trouve sur pas mal d'imprimantes 3D
1 moteur nema 23

Comme ca d'un premier jet ca m'a lair correct. Au moins je ne perds pas de course sur le chariot

Bien sur, il y a toujours des limitation: l'ensemble vient gener un peu le positionnement de l'outil, mais pour du filetage on ne va pas faire la fine bouche et celq implique de faire attention que le face avant du montage ne rentre pas en contact avec la piece (si on a un grand diametre de piece puis un petit diametre à fileter, ca ne devrait pas arriver tous les jours), et je peux mettre une butée méca sur le capot orange
 
Dernière édition:
G

gaston48

Compagnon
Si je me souviens bien, sur une chariot de 102, il n'est pas trop difficile de déposer la manivelle puis le vernier
si on a préalablement "rodé" ce démontage.
Tu remplaces ensuite le vernier (plutôt un tambour gradué pour les puristes) par une poulie crantée et tu remontes
la manivelle.
Tu positionnes ainsi le moteur PAP à droite de la tourelle porte-outils... il ne gène personne là !
 
Dernière édition:
V

vibram

Compagnon
Oui c'est exact mais justement je vois mon outil comme un accessoire et non une modification. Pour rien au monde je veux me séparer de mes tambours gradués :)
Je veux garder la polyvalence. La entre le codeur de broche et ça, c'est environ 5 min de montage maximum, je trouve correct
 
G

gaston48

Compagnon
c'est environ 5 min de montage maximum
Déposer ton tambour est bien sur transitoire, juste le temps d'installer et d'utiliser l'ensemble filetage.
la manivelle, c'est une goupille conique ? je ne me souviens plus ...

Oui merci nos amis metabricoleurs
Tu te prépares une goupille trempée avec une tête moletée ou filetée et une extrémité qui dépasse un peu pour pouvoir
la sortir facilement.
1541798836270.png
 
Dernière édition:
V

vibram

Compagnon
Exact c'est une goupille conique.

C'est quand même bien plus long.
La je mets la pièce en T dans la rainure, serrage avec une vis puis l'arbre d entraînement au bout de la vis, 3 min
Et 2 vis derrière le bâti pour fixer le codeur, 3 min et voilà
Ça c'est la théorie :D
 

Sujets similaires

Père-Pendiculaire
Réponses
23
Affichages
1 057
Père-Pendiculaire
Père-Pendiculaire
T
Projet HBM en projet
Réponses
10
Affichages
1 175
Squal112
Squal112
V
Réponses
12
Affichages
832
vibram
V
N
Réponses
28
Affichages
1 292
Nicoala
N
C
Réponses
1
Affichages
4 688
E
B
Réponses
19
Affichages
2 627
boumboauto
B
tournele
Réponses
111
Affichages
16 819
wika58
wika58
D
Réponses
6
Affichages
13 468
Doctor_itchy
D
Haut