Aller au contenu

Filament ABS

JL3D46

Double extrusion à bascule => soft : Smoothieware

Messages recommandés

 

Il y a 10 heures, yopla31 a dit :

si @JL3D46 est d'accord.

@cmatec et @pascal_lb  Oui bien sur ! parce que c'est "notre projet !"  

J'ai gratté un peu dans la doc smoothie, et li y a pas mal de littérature dédiée aux "modules" intégrées à smoothie ou à développer pour intégrer une fonction spécifique, c'est du langage C, assez accessible s'y on s'y colle sérieusement. Il y aurait peut être la possibilité de dédier un post à tout ce qui concerne le soft "smoothie", pour cela il me semble que @cmatec a déjà le bon intitulé dans son post, et je pourrais y contribuer pour la partie soft. Coté mécanique, on peut se concentrer ici et j'y contribuerai dans ce sens, et pour le code spécifique "Marlin" là à part quelques applications arduino je n'ai jamais touché à ce soft ...

Pascal & Yop, si vous avez une idée d'organisation pour cette branche "Marlin",  ici pourquoi pas ,à vous de juger.

Concernant le module "servo" un extrait de la doc. smoothie :    

Hobby Servo

This configuration will allow you to control a servo using the standard reprap G-codes for controlling a servo.

M280 S5 would be fully to the left and M280 S10 would be fully to the right.

# Switch module for servo control
switch.servo.enable                            true             # Enable this module
switch.servo.input_on_command                  M280             # M280 S7.5 would be midway
switch.servo.input_off_command                 M281             # Same as M280 S0 0% duty cycle, effectively off
switch.servo.output_pin                        3.25             # Must be a PWM capable pin
switch.servo.output_type                       hwpwm            # H/W pwm output settable with S parameter in the input_on_comand
#switch.servo.pwm_period_ms                    20               # set period to 20ms (50Hz) default is 50Hz
Modifié (le) par JL3D46
j'ai un souci de format de texte ...

Partager ce message


Lien à poster
Partager sur d’autres sites

@JL3D46 : Super idée

Un complément d'info pour le servo : sous smoothie, on utilise un module switch pour le piloter ... une commande à explorer : switch.nomdumodule.output_on_command😉. Le but serait de créer 2 nouveaux modules switch qui seraient activés à l'appel de T0 et T1. output_on command : M280 S8.5 par exemple (on peut insérer des commandes G-code dans le config). Il faudrait trouver le input_pin pour T0 et T1 au changement d'outil.

@pascal_lb : tu vas encore avoir du taf !!!😉

Partager ce message


Lien à poster
Partager sur d’autres sites

@JL3D46 :

Citation

J'ai gratté un peu dans la doc smoothie, et li y a pas mal de littérature dédiée aux "modules" intégrées à smoothie ou à développer pour intégrer une fonction spécifique, c'est du langage C

Si tu veux te pencher sur le code, ce serait top !

Partager ce message


Lien à poster
Partager sur d’autres sites

Le plus dur c'est de trouver la porte d'entrée et quelques exemples, quand on sait ce qu'on veut faire, on arrive toujours à coder ...

Donc sur smoothie, si quelqu'un à déjà développé ses propres macros, c'est par là qu'il faudrait commencer, voir la procédure pour rentrer dans le soft et tester deux ou trois fonctions simples, ensuite ça devrait rouler ... 

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour Smoothieware il y a un module de changement d'outil nommé toolmanager qui gère les commandes T[X].

Pour faire ça proprement il faudrait rajouter deux options à la configuration des extrudeurs:

  • extruder.module_name.servo_pin
  • extruder.module_name.servo_angle

Puis rajouter à la méthode ToolManager::on_gcode_received (Smoothieware/src/modules/tools/toolmanager/ToolManager.cpp) ce qu'il faut de Switch.cpp. Très sommairement, il s'agit du code de la ligne 274 à 278 (version du 11 Avril) et ses parties dépendantes.

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 1 heure, Tircown a dit :

Puis rajouter à la méthode ToolManager::on_gcode_received

Alors, on va faire simple ... comme je l'ai indiqué dans mes premiers messages (de débutant) je viens juste d'intégrer ma première carte mère (Smoothie MKS Sbase 1.3) sur une grosse imprimante de ma fabrication, j'ai fait un tuto "basique de basique" au fur et à mesure de l'intégration, parce que les conseils c'est bien, mais quand on part de zéro c'est le boxon...

Maintenant, ça marche impec, mais je n'ai jamais joué avec le code source de la smoothie pour la bonne raison que je n'en ai eu ni le temps, ni le besoin.

Pour la phase 2 (les développements soft) , ce qu'il me faut, c'est partir de zéro !

- Comment est ce qu'on trouve les codes source à jour ?

- Faut il une licence ou une application pour compiler le C et intégrer les modifs dans le code de la carte mère

- Comment transfère t'on les modifs à la carte ( re-compilation du firmware ou ajout de modules annexes )?

- Et si j'en oublie (ce qui est quasi certain) qu'est ce que j'oublie ?

Les codes source sur smoothieware\src .... j'en ai bien trouvé, mais pour le moment je ne sais rien en faire.

à la limite, l'exercice de base pour moi ce serait : (ex:)  définir une nouvelle fonction M , (ex M234) et faire en sorte que quand je passe M234 en Gcode dans le programme, une sortie de la carte passe à 1 pour allumer une Led ! Quand je saurai fait ça, la suite ne m'inquiète pas...

A+

Modifié (le) par JL3D46

Partager ce message


Lien à poster
Partager sur d’autres sites

Dans ce sujet vous retrouvez les posts concernant le double extrudeur à bascule piloté par smoothieware...

Les premiers posts semblent décousus car ils viennent d'un autre sujet...

Partager ce message


Lien à poster
Partager sur d’autres sites
Le 10/10/2018 at 16:44, JL3D46 a dit :

l'exercice de base pour moi ce serait : (ex:)  définir une nouvelle fonction M , (ex M234) et faire en sorte que quand je passe M234 en Gcode dans le programme, une sortie de la carte passe à 1 pour allumer une Led !

(Je me cite moi même ! ça tourne en boucle) tout ça pour dire que ce premier exercice, sans l'avoir effectivement testé (je préférerais avoir une seconde carte pour jouer sur un banc d’essai) j'ai à peu près trouvé le chemin pour y parvenir.

En fait, on a une série de déclarations dans le fichier config. qui utilisent le module "switch" , ce module ne demande pas à être édité pour y ajouter des fonctionnalités, il sait en créer autant qu'on veut.

Par exemple, si je veux allumer une Led sur un code M234 il faut juste rajouter une commande "switch" pour ce qu'on veut faire, on peut en créer autant que nécessaire.

et il n'est pas interdit d'écrire en français tout ce qui peut l’être (donc acte) ...

# Module Switch pour alumage Led - on l'appelera "lumiere" 

switch.lumiere.enable                            true             #  Initialise ce module

switch.lumiere.input_on_command                  M234             # ce switch allume la lumière quand M234 est envoyé

switch.lumiere.input_off_command                 M235             # ce switch éteint la lumière quand M235 est envoyé

switch.lumiere.output_pin                        1.21              # Cette sortie passe à 1 quand le switch est activé  et à 0 dans l'autre cas

switch.lumiere.output_type                       digital              # c'est une sortie marche / arrêt simple 

Partager ce message


Lien à poster
Partager sur d’autres sites

@JL3D46 :

Citation

j'ai à peu près trouvé le chemin pour y parvenir

des infos !!! 😁

Citation

# Switch module for servo control
switch.servo.enable                            true             # Enable this module
switch.servo.input_on_command                  M280             # M280 S7.5 would be midway
switch.servo.input_off_command                 M281             # Same as M280 S0 0% duty cycle, effectively off
switch.servo.output_pin                        3.25 (1.23)             # Must be a PWM capable pin
switch.servo.output_type                       hwpwm            # H/W pwm output settable with S parameter in the input_on_comand
#switch.servo.pwm_period_ms                    20               # set period to 20ms (50Hz) default is 50Hz

ça ça marche, ce qu'il faut arriver à faire c'est de définir la position du servo lors des changements d'outil et là je bloque ...

Partager ce message


Lien à poster
Partager sur d’autres sites

Ben, je crois bien que c'est clair dans la doc ... 

Je cite (en traduisant) Le paramètre Shift spécifie le facteur de marche en pourcentage et, pour un servo typique, il sera compris entre 5% et 10% (1 ms à 2 ms lorsque la vitesse est réglée à 50 Hz) pour une rotation à 180 °" et ta seconde ligne de code indique

switch.servo.input_on_command                  M280             # M280 S7.5 would be midway

Ce qui veut dire selon toute logique (et selon la course de ta servo) que pour une valeur 5 elle est en position mini (ex: 0°) à 7.5 en position intermédiaire (ex:90°) et à 10 en position maxi (180°) , donc si tu travailles dans une tranche de 20° , si la position de la tête 1 est 80° ça va faire M280 S7.22 et pour 100° M280 S7.77 ( je ne sais pas combien on peut mettre de décimales) en faisant une simple règle de trois. 

Peut être je me goure mais il suffit d'essayer ... Ah si j'avais gardé mon banc d'essai ! il faut que je rachète une smoothie, de toute façon j'en aurai besoin pour intégrer la Zatsit

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 9 heures, cmatec a dit :

des infos !!! 😁

Le chemin, il est tout simple, lorsque la fonction existe dans le firmware de la carte par exemple la fonction "switch" elle est dotée de multiples options.

Il suffit de faire un copier / coller d'une séquence switch de ton fichier config.txt , (ça rajoute des lignes dans ton fichier config.) de changer le nom du truc à piloter, moi je l'ai appelé "lumiere" et de donner les bons paramètres pour que ça fasse ce que ça doit faire ( d'ou les quelques différences entre le pilotage de "switch lumiere" et "switch servo" ) mais dans l'esprit on utilise juste une boite à outils dispo dans le firmware.

Par contre, je ne trouve pas de trace de la fonction "tool change" qui (peut être) se résume à une fonction "switch" correctement paramétrée ... d'ou ma question sur l'autre post ton Gcode, Il pilote comment le changement de tête ?    

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a une heure, JL3D46 a dit :

Par contre, je ne trouve pas de trace de la fonction "tool change" qui (peut être) se résume à une fonction "switch" correctement paramétrée ... d'ou ma question sur l'autre post ton Gcode, Il pilote comment le changement de tête ?     

J'ai mis le chemin quelques post plus haut...

Partager ce message


Lien à poster
Partager sur d’autres sites

@JL3D46 : je vais essayer de clarifier un peu la problématique ...

Pour piloter un servo sous smoothie, ben c'est pas trop compliqué, il suffit d'insérer ce module switch dans le config.txt

Citation

# Switch module for servo control
switch.servo.enable                            true             # Enable this module
switch.servo.input_on_command                  M280             # M280 S7.5 would be midway
switch.servo.input_off_command                 M281             # Same as M280 S0 0% duty cycle, effectively off
switch.servo.output_pin                        1.23             # Must be a PWM capable pin
switch.servo.output_type                       hwpwm            # H/W pwm output settable with S parameter in the input_on_comand
#switch.servo.pwm_period_ms                    20               # set period to 20ms (50Hz) default is 50Hz

et basta, il n'y a pas besoin de plus ... La commande M280 intègre un paramètre S qui permet de définir l'angle du servo : M280 S7.5 par exemple

Pour faire simple, si sous repetier ou équivalent, je tape la commande M280 S7 puis M280 S8 on pilote le servo en mode manuel.

Le but est d'introduire ce pilotage dans le G-code du print à réaliser et cela se fait dans le trancheur (section g-code avant changement d'extrudeur). Et c'est là que les problèmes commencent ...

Repetier et slic3r : un seul module avant changement d'extrudeur pour les 2 têtes. Il faut donc éditer le g-code à la main pour positionner le servo correctement en fonction de la tête active (c'est ce que je fais actuellement avec une petite combine ...)

Simplify3d est payant donc hors philosophie linux 😉

La solution semble être dans cura 3.x car il intègre 1 module avant changement d'extrudeur pour chaque tête. Les g-code sont déjà prêts, il faut que je teste la gestion du dual sous smoothie avec cura3.x

Modifié (le) par cmatec

Partager ce message


Lien à poster
Partager sur d’autres sites

Ok, merci pour l'info , je travaille souvent avec Cura, donc il faudra que je teste cette fonctionnalité, mais il me manque une autre explication ... quelle commande switche les extrudeurs, il faut bien qu'un moteur se mette en veille et que l'autre prenne le relais ?

C'est écrit avec l'axe E et l'axe F (par exemple) dans le Gcode 

Modifié (le) par JL3D46

Partager ce message


Lien à poster
Partager sur d’autres sites

@JL3D46 : T0, T1 ...

Le G-code produit par cura 3.5 est "propre" et inclus bien les commandes de pilotage du servo au changement d'extrudeur !!!:banana:

Modifié (le) par cmatec

Partager ce message


Lien à poster
Partager sur d’autres sites

@JL3D46 : ? deux moteurs -2 têtes (cartouche de chauffe + thermistance)

Mais au final c'est super simple ... : ajout du module servo dans le config et après tout se passe dans cura 3.x

1302698687_configservocura.png.a2d0af5893696473f9d51001035a6640.png

ça marche sans rien de plus !!! (je renseigne les offset dans le config)

Modifié (le) par cmatec

Partager ce message


Lien à poster
Partager sur d’autres sites

Et bien tant mieux ... 

En fait, j'ai pas mal cherché ou est ce que ce foutu toolmanager pouvait gérer le switch des moteurs d'extrudeurs

Le 10/10/2018 at 15:00, Tircown a dit :

Puis rajouter à la méthode ToolManager::on_gcode_received (Smoothieware/src/modules/tools/toolmanager/ToolManager.cpp) ce qu'il faut de Switch.cpp. Très sommairement, il s'agit du code de la ligne 274 à 278 (version du 11 Avril)

Et bien, la dernière version à télécharger est du Dec 16, 2015 , et les lignes 274 à 278 n'existent pas encore dans cette version.

Voilà mon souci,  @Tircown s'il te plait ne me laisse pas dans l’ignorance, dis moi ou se trouve cette version du 11 Avril

Et dans le fichier config.txt de la carte, il n'y a aucune allusion à un "toolchange" + des paramètres associés, d'ou mon questionnement : que peut on paramétrer dans cette fonction à partir du fichier config.txt   

Modifié (le) par JL3D46

Partager ce message


Lien à poster
Partager sur d’autres sites

Sur le github de smoothieware dont le lien est sur le site officiel: https://github.com/Smoothieware/Smoothieware

Edit:

Suite à ces révélations de @cmatec, ceci devrait encore mieux fonctionner:

  1. Paramétrer un Z lift au retract, ceci évitera aux buses heurter la pièce lors de la bascule. Malheureusement ça le fera aussi à chaque retract.
    #extruder.hotend.retract_zlift_length 3 # Z-lift on retract in mm, 0 disables
  2. Extruder start gcode
    G11
    M280 Sx ;x à définir avec l'angle selon l'extrudeur
    Tx ;x à définir selon l'extrudeur

     

  3. Extruder end gcode
    G10 ;retract

     

Modifié (le) par Tircown
  • Merci ! 1

Partager ce message


Lien à poster
Partager sur d’autres sites

@Tircown : Je confirme ! ça fonctionne nickel !!! Juste le G11 à placer après le M280 Sx 😉

Citation

Malheureusement ça le fera aussi à chaque retract

J'ai désactivé les lignes retract et retract_recover dans le config. Du coup, à l'appel de G10 et G11 seul le zlift entre en action. Pour les retracts lors des déplacements, ce sont les paramètres cura qui sont pris en compte.

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

  • Sur cette page :   0 membre est en ligne

    Aucun utilisateur enregistré regarde cette page.

×