GCode : gestion des vitesses

  • Auteur de la discussion demdandeinfos
  • Date de début
D

demdandeinfos

Apprenti
Bonjour,
Avec un prusai3 j'ai un GCode de ce type

G28
(...)
G0 X25.553 Y125.961 Z8.848
G0 X25.292 Y125.696 Z9.547
G0 X25.014 Y125.411 Z10.229
G0 X24.721 Y125.107 Z10.892
G0 X24.414 Y124.784 Z11.536
G0 X24.094 Y124.444 Z12.158
G0 X23.764 Y124.087 Z12.758
G0 X23.424 Y123.715 Z13.335
G0 X23.076 Y123.33 Z13.886
(...)
Z100

qui fait des boucles : exemple ici

J'ai l'impression (je n'ai pas mesuré) qu'il y a comme une accélération en haut de la boucle et lors de chaque descente.

Est-il possible de régler cette vitesse ?

Merci d'avance pour vos retour.
 
M

Mcar

Compagnon
Le G0 est le déplacement à vitesse rapide, il n'y a donc pas de réglage de la vitesse, les axes se déplacent à la vitesse maximale de la machine.
Sur cet exemple, c'est une interpolation sur 3 axes XYZ, donc la vitesse rapide s'appliquera sur l'axe qui a le déplacement le plus long. (à condition que la vitesse maximale est la même sur les 3 axes, ce qui n'est pas le cas sur une prussia)
Les autres axes se déplaceront à une vitesse calculée qui permettra d'arriver sur le point programmé (XYZ) en même temps.
c'est surement la raison qui fait croire à un accroissement de vitesse.
au passage la programmation sur cet exemple ne fait pas des boucles au sens propre, mais une association de petite ligne droite ( environ 0,3 mm) qui donnera au final une impression de boucle.
 
D

demdandeinfos

Apprenti
Je vois le principe mais je vais devoir me renseigner un peu plus car il doit me manquer des bouts pour bien comprendre ces notions de vitesse.
Si vous connaissiez un bon tutoriel sur le sujet je suis preneur.
Juste un point, c'est à dire que si on souhaite changer la vitesse G0, il faut agir au niveau du firmware ?
Merci.
 
S

sans

Compagnon
Juste un point, c'est à dire que si on souhaite changer la vitesse G0, il faut agir au niveau du firmware ?

Non, G0 et G1 accèptent le paramètre F (feedrate = vitesse) pour définir la vitesse de déplacement. Souvent, plutôt normalement, tu trouves un G0 ... F12345 au début de ton code et ça suffit pour que tout les autres G0 prennent automatiquement la vitesse ainsi programmée. Pareil pour G1.
 
D

demdandeinfos

Apprenti
C’est ce qu’il me semblait, d’accord.

Mais si je mets :

G28
G0 F1000
G0 X25.553 Y125.961 Z8.848
G0 X25.292 Y125.696 Z9.547
G0 X25.014 Y125.411

ou

G28
G0 F3000
G0 X25.553 Y125.961 Z8.848
G0 X25.292 Y125.696 Z9.547
G0 X25.014 Y125.411

il me semble ne pas voir de différence (?).

C’est pour ça aussi d’ailleurs que j’ai ouvert le post initialement.
 
S

sans

Compagnon
Ben, il faut que la machine puisse faire aussi rapide. Elle fait combien max ? Si tu prends en plus le temps d'accélération et de desaccélération il ne reste pas beaucoup sur les petites cnc.

Essaye 100 et 300 pour voir s'il y a une différence.
 
M

MegaHertz

Compagnon
Bonjour,

En général, G0 ne gère pas de vitesse et en prime ça ne fait pas d'interpolation linéaire.
Mais le G-code n'est pas une norme, chaque constructeur fait un peu ce qu'il veut quand il l'implémente.

Ce que tu peux faire à titre d'essai c'est faire un bête chercher/remplacer pour remplacer tous les 'G0 ' par des 'G1 '
Là tu pourras gérer la vitesse.

Quel soft utilises tu comme slicer ?
Il y'en a de meilleurs que d'autres et dans celui que tu utilises vérifies les options qui n'apparaissent pas forcément de prime abord.
 
O

Otatiaro

Compagnon
Salut,

Non, G0 et G1 accèptent le paramètre F (feedrate = vitesse) pour définir la vitesse de déplacement. Souvent, plutôt normalement, tu trouves un G0 ... F12345 au début de ton code et ça suffit pour que tout les autres G0 prennent automatiquement la vitesse ainsi programmée. Pareil pour G1.

Non par définition le G0 c'est un déplacement au plus rapide de la machine, pour ne justement pas avoir à connaitre cette vitesse max dans le g-code. Donc le code F ne sera pas pris en compte par un déplacement G0.
D'ailleurs le G0 n'est même pas forcément une interpolation linéaire (sur certaines machines comme les Haas par défaut chaque axe se place au plus rapide possible, avec comme conséquence un déplacement pas du tout linéaire, mais en courbe selon le trajet, à faire attention de ne pas l'utiliser quand la trajectoire risque de percuter la pièce). C'est d'ailleurs pour ça que les logiciels de CAM utilisent du G1 "à grande vitesse" sur du trochoïdal, et pas du G0, parce que la trajectoire n'est pas 100% prédictible.

Thomas.
 
O

Otatiaro

Compagnon
Salut,

Bonjour,
Avec un prusai3 j'ai un GCode de ce type

G28
(...)
G0 X25.553 Y125.961 Z8.848
G0 X25.292 Y125.696 Z9.547
G0 X25.014 Y125.411 Z10.229
G0 X24.721 Y125.107 Z10.892
G0 X24.414 Y124.784 Z11.536
G0 X24.094 Y124.444 Z12.158
G0 X23.764 Y124.087 Z12.758
G0 X23.424 Y123.715 Z13.335
G0 X23.076 Y123.33 Z13.886
(...)
Z100

qui fait des boucles : exemple ici

J'ai l'impression (je n'ai pas mesuré) qu'il y a comme une accélération en haut de la boucle et lors de chaque descente.

Est-il possible de régler cette vitesse ?

Merci d'avance pour vos retour.

Plus que les paramètres, je pense que cela est surtout du à la façon dont ton interpolateur gère la suite de mouvements.
Le G0 c'est vitesse max, mais ça ne veut pas dire que ton électronique saura le gérer parfaitement, il a beaucoup de traitement à faire, doit "casser les angles" entre chaque segment, etc.

Et là sauf à réduire la vitesse globale (nivellement par le bas, comme on sait si bien le faire en France :wink: ), donc utiliser du G1 avec une vitesse d'avance connue, point de salut (et tu auras forcément des ralentissement à chaque changement de segment, les interpolateurs d'imprimantes 3D ne savent pas gérer du G2/G3 pour assurer la continuité des dérivées).

Thomas.
 
D

Dardar88

Compagnon
les interpolateurs d'imprimantes 3D ne savent pas gérer du G2/G3 pour assurer la continuité des dérivées
merci pour l'info , je pensais que c'etait beaucoup plus évolué que ça ( j'irais chercher quelques infos sup...,ça me scie)
 
M

MegaHertz

Compagnon
Bonjour,

A propos des G2 et G3 je ne sais pas si l'imprimante saura les gérer ou pas, c'est assez simple de faire un essai.
De toute façon même si le calculateur sait gérer les interpolations circulaires ça se finit en micro-segments parce qu'il faut bien au final contrôler des moteurs.

Une imprimante 3D n'est pas confrontée aux mêmes problèmes qu'une CNC : il n'y a pas d'effort comparable à un effort de coupe ou de changement d'outils qui fasse varier l'inertie du bouzin :)

Mais tu n'as pas répondu à propos du Slicer.
Tu as Cura en mode de base, ou tu peux gratter un peu pour mieux le connaître.

Paraît que Simplify 3D (payant) est très apprécié pour la qualité du travail (Produit un meilleur GCode)

Tu utilises quoi pour produire le GCode (Slicer) ?
 
G

gaston48

Compagnon

Un G0 qui ne fait pas d'interpolation linéaire est plutôt une exception, c'est la norme RS274/NGC de base de ce langage,
il impose d'aller au plus vite d'un point à un autre sans forcement respecter une vitesse constante compte tenu
des accélérations possibles. Alors qu'avec une vitesse limité par G1, G2 et G3 les trajets d'accélération sont plus courts
et une vitesse constante est plus facilement respecté sur l'ensemble de la trajectoire.
J'imagine que le volume d'extrusion est asservi à la vitesse instantané ?
 
O

Otatiaro

Compagnon

Un G0 qui ne fait pas d'interpolation linéaire est plutôt une exception, c'est la norme RS274/NGC de base de ce langage,
il impose d'aller au plus vite d'un point à un autre sans forcement respecter une vitesse constante compte tenu
des accélérations possibles. Alors qu'avec une vitesse limité par G1, G2 et G3 les trajets d'accélération sont plus courts
et une vitesse constante est plus facilement respecté sur l'ensemble de la trajectoire.
J'imagine que le volume d'extrusion est asservi à la vitesse instantané ?

Du fait que les interpolateurs d'imprimantes 3D ne gèrent que des trains d'impulsions, c'était plus simple pour eux de faire une "interpolation rapide" plutôt que du "vrai G0".

Dans un contrôleur CNC basé sur des servomoteurs, lors d'un G0 l'interpolateur pilote simplement les moteurs d'axes en demandant le couple maximal disponible (accél et déccel), et ce sur chaque axe indépendamment (d'ou la trajectoire pas totalement prédictible), dans le but d'arriver au plus vite à destination par rapport aux capacités de la machine (et donc gagner à chaque fois quelques poussières, mais qui cumulés sur 3x8h par jour peut finir par augmenter la productivité).

Donc dans le cas spécifique des imprimantes 3D grand public, oui le G0 n'est qu'un G1 très rapide, mais c'est ça qui est un cas particulier (sur Haas on peut lui demander de faire des G0 linéaires, par défaut il est en "dogleg" donc non linéaire). Une petite recherche google rapide semble indiquer que chez Fanuc c'est la même chose, et vu les noms d'oiseaux prononcés sur les forums US par ceux qui n'étaient pas au courant et qui ont plafonné une pièce, pas mal d'autres contrôleurs CNC sont par défaut dans ce mode :wink:

Thomas.
 
O

Otatiaro

Compagnon
merci pour l'info , je pensais que c'etait beaucoup plus évolué que ça ( j'irais chercher quelques infos sup...,ça me scie)

La plupart des slicer disponibles aujourd'hui ne gère que le STL en format d'entrée, hors le STL (STereoLithigraphy) ne sait décrire que des triangles de mémoire, donc pas d'arc possible (d'ailleurs quand on exporte un modèle 3D depuis Fusion / Solidworks en STL, on choisit un certain nombre de paramètres qui découlent de cette limitation). L'entrée du problème étant uniquement des segments et jamais d'arc, ils ont développé des interpolateurs qui ne font que des segments et pas d'arc.

Si je ne dis pas de bêtise, il en existe un qui est capable de reconnaître une suite de segment comme étant un morceau d'arc et de le convertir à la volée, mais je ne saurais pas dire lequel.

Si les process d'imprimantes 3D prenaient du STEP et géraient les interpolations circulaires, ça enlèverait un certain nombre de problèmes.
Mais il faut garder en tête que bon nombre de ces contrôleurs utilisent des microcontrôleurs (le "processeur") 8 bits de tout petit calibre, ça tient déjà limite du miracle d'arriver à sortir de l'interpolation linéaire (à quelques KHz quand les contrôleurs un peu plus évolués peuvent sortir plusieurs centaines de KHz en trains d'impulsions ... en mode servo les fréquences ne correspondent plus et sont plutôt dans les quelques dizaines de KHz de ce que j'en sais).

Thomas.
 
D

Dardar88

Compagnon
Si je ne dis pas de bêtise, il en existe un qui est capable de reconnaître une suite de segment comme étant un morceau d'arc et de le convertir à la volée, mais je ne saurais pas dire lequel.
merci d'avoir développé , je suis allé a la pêche a l'arc 8-) et j'ai trouvé ceci:
https://reprap.org/forum/read.php?1,236207
(le dernier post donne aussi quelques explications intéressantes qui corroborent) je n'ai pas cité tout ton message pour faire court.
Le contrôle des arcs ne seraient utilisé que pour les remplissages car il ne seraient généré par le trancheur

on peut valider ou pas et paramétrer l' interprétation des arcs dans ex: sprinter mais comme tu le soulignes ,c'est soit le fichier qui enfle soit le
microcontrôleur qui rame ( si j'ai bien compris ?) dans tous les cas la peau restera interprété en segment.

---------------------------------

Ayant tous pointés les différentes options de déplacement a vitesse programmé dont les arcs , (avec le risque d'etre hors sujet et l'avantage de le clarifier)
- je me demande si la réponse a @demdandeinfos ne serait pas de vérifier , d'adapter son firmware pour une meilleure fluidité des déplacements en modifiant ses parametres d'acceleration+ vitesse maximum ?
- Slic3r permet aussi de bien parametrer et de sauvegarder en temps que profil si le firmware semble ok.
- Sinon editer le code et modifier en G1 avec la vitesse qui va bien ,ça peut être assez fastidieux suivant la taille et le libellé du fichier.
 
D

demdandeinfos

Apprenti
Bonsoir,
Pour la procédure :
- imprimante sous arduino mega2560+shield, firmware marlin
- GCode obtenu sous fusion360
- copie du GCode x, y, z uniquement
- ajout de G0
- pilotage par Repetier Host
J’ai lu les posts et il m’a semblé qu’il y a une dépendance avec le firmware (?). Je suis intéressé pour avoir vos avis tenant compte de ces éléments..
Merci d’avance.
 
Dernière édition:
G

gaston48

Compagnon
Avec le paramètre E, tu as la quantité de résine à injecter du point de départ au point d'arrivé.
et elle est synchronisée avec la vitesse instantanée.

ScreenShot123.jpg
 
Dernière édition:
M

MegaHertz

Compagnon
- GCode obtenu sous fusion360

OK.
Je me souviens de tes posts à propos d'un usage détourné de l'imprimante.

Connais tu le C ou le javascript ?

Vu que c'est de la prog spécifique en usage hacké, il faudrait que tu partes d'un post proc existant pour t'en faire un spécifique.

Le post-proc est écrit en javascript (proche du C).
Dedans tu as des méthodes pour définir l'entête et la fin du prog et la gestion des vitesses.

Tu pourrais gérer le flux de matière via le changement d'outil (dans le post proc maison).

Avec les infos de Gaston sur le GCode de l'imprimante ça devrait le faire :)
 
D

demdandeinfos

Apprenti
Ok, j’ai bien lu tous vos retours, merci pour les infos, je vais faire le point et voir ce que je peux faire. Ok aussi pour la programmation, je ne maîtrise pas mais je vais regarder.
 
G

gaston48

Compagnon
Je pense que ce paramètre E est calculé par le slicer, donc pas par fusion 360.
Je ne sais pas si dans le post-pro on peut rajouter des calculs fournissant une distance
parcourue entre 2 coordonnées (on exclue déjà G2 et G3)
 

Sujets similaires

Devil-Nic
Réponses
18
Affichages
2 782
dh42
dh42
N
Réponses
7
Affichages
2 045
Noha819
N
M
Réponses
51
Affichages
6 977
yvon29
yvon29
2
Réponses
27
Affichages
1 245
jean-jacques
J
J
Réponses
265
Affichages
14 388
FLCV71
F
mvt
Réponses
39
Affichages
6 336
mvt
Haut