Installation de Marlin

De LabSud
Aller à : navigation, rechercher

Pré requis

  • L'installation de ce firmware nécessite une version INFERIEURE A LA 1.0 de l'environnement de développement Arduino. La dernière version pré 1.0 est la 0023 Windows, Mac OS X, Linux (32 bit & 64 bit). Ce point est en train de changer car Marlin est en cours de portage sur la version 1.0 Arduino, mais c'est encore trop tôt...
  • Une carte Arduino Mega 1280 ou 2560 (idéalement 2560)
  • Si votre carte est basées sur un processeur AT MEGA 64, c'est une configuration particulière qui n'est pas documentée dans ce post.
  • Un câble USB
  • Connaitre le nombre d'extrudeurs de votre machine (1 ou 2, normalement 1)
  • Connaitre la technologie du système de mesure de température (le plus souvent, des thermistances 100 K ohms)
  • Connaitre l'origine de vos fins de course pour chacun des axes ( si le fin de course est au début de l'axe exemple X=0, ou à la fin de celui-ci).
  • Savoir si les fins de courses sont optiques, à effet Hall (aimants), ou mécaniques (switches)
  • Connaitre le réglage de votre carte en ce qui concerne le microstepping, c'est à dire le nombre de micropas par pas sur les moteurs pas à pas. Ceci e règle par des cavaliers sur la carte électronique pour chacun des axes. En principe, c'est du 1/8 de pas ou du 1/16e de pas en fonction des possibilités de l'électronique. Sur les contrôleurs pas à pas de marque Pololu, on peut aller jusqu'au 16e de pas, alors que sur certains compatibles Pololu, c'est limité au 1/8e de pas. Si les contrôleurs le supportent, 1/16e de pas, c'est parfait.
  • Connaitre le pas de vos courroies crantées
  • Connaitre le nombre de dents de vos poulies d’entrainement des courroies crantées
  • Connaitre le diamètre et le pas des vis des axes Z (en principe, c'est du 8mm au pas de 1.25mm sur une Prusa)

Préparation :

  • Installer l'environnement de développement Arduino, idéalement dans "c:\program files" sous Windows, dans /applications sur mac, et ou vous voulez sur Linux :)
  • Le lancer une fois pour qu'il crée le répertoire 'Arduino' dans 'Mes documents' ou ce qui en tient lieu dans votre environnement.
  • Sur Windows, brancher la carte arduino2560 et installer les drivers en désignant comme répertoire contenant les drivers "C:\Program Files\arduino-0022\drivers"
  • Récupération du Firmware ( https://github.com/ErikZalm/Marlin )
  • Soit en téléchargeant l'archive de la page github ( https://github.com/ErikZalm/Marlin/downloads )
  • Soit par Github, avec la commande
git clone https://github.com/ErikZalm/Marlin.git
  • Décompresser l'archive si nécessaire, et copier le sous répertoire contenu dans l'archive se nommant 'marlin' dans le dossier arduino de "mes documnents"
  • Sous linux : /home/UTILISATEUR/Arduino/marlin
  • Sous OSX : /Users/UTILISATEUR/Documents/Arduino/marlin
  • Sous Windows : "Mes documents/Arduino/marlin/


Note: - Si vous désirez disposer de plusieurs copies de Marlin, c'est possible. Pour cela il vous faut renommer le dossier dans lequel vous mettez Marlin (ex: Mes documents/Arduino/MonMarlinAMoi/) et aussi le fichier Marlin.pde dans ce dossier (MonMarlinAMoi.pde) avec le même nom que le dossier. Du coup, vous verrez le projet sous le nom "MonMarlinAMoi dans la liste des projets arduino. Ceci peut être une bonne pratique pour disposer d'une copie de Marlin avant paramétrage, et une autre correspondant au paramétrage de votre machine - Si vous désirez comparer des fichiers (exemple: configuration.h d'origine et configuration.h modifié), il existe des outils simples à utiliser comme Winmerge ( http://winmerge.org/?lang=fr ). Ils matérialisent la différence par des couleurs, en montrant les 2 fichiers cote à cote.. Très simple pour ne rien oublier.

Chargement de l'environnement :

  • Charger le programme Arduino0023
  • Choisir la bonne carte arduino dans "Tools / Board". Normalement, c'est une Mega 2560
  • Choisir le port série sur lequel est connecté l'Arduino dans "Tools, Serial port"
  • Aller dans "Fichier / Sketchbook' et sélectionnez 'Marlin'
  • Un certain nombre d'onglets se chargent
  • Cliquer sur le 2e onglet (Configuration.h)

Paramétrage de Marlin:

A ce stade, nous allons avoir besoin des paramètres collectés dans le premier chapitre de ce tuto.

Le fichier de configuration est constitué de commentaire et de directives. Les commentaires sont précédés de // ou de /* et apparaissent en gris. Les directives actives apparaissent en noir ou rouge.

Nous allons devoir régler :

  • Le type de carte de commande utilisée
  • La vitesse des communications avec la carte Arduino (choisir entre 115200 et 250000 bauds)
  • Le type de système de mesure de température
  • Le type et la position des fins de course
  • Le sens de rotation des moteurs
  • Le rapport de démultiplication des transmissions des moteurs

Les commentaires sont évocateurs de ce que l'on a a paramétrer.

Vitesse des communications

Par défaut, Marlin communique à 250000 bauds, mais si vous voulez dialogue avec elle dans l'environnement Arduino, il faudra réduire cette vitesse à 115200.

#define BAUDRATE 115200

En utilisation normale, laisser la valeur par défaut.

Type de carte :

#define MOTHERBOARD = 33    // préciser le type de la carte mère, ici, une RAMPS 1.4, avec un extrudeur, un bed et une sortie pour commander un ventilateur. A adapter selon votre carte

Capteurs de température :

Type de dispositif pour lire la température. Ici ce seront des thermistances génériques de 100K, le cas le plus courant. Nous n'avons qu'un bed et qu'un extrudeur. Le logiciel gère jusqu'à 3 extrudeurs.

#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
#define TEMP_SENSOR_2 0
#define TEMP_SENSOR_BED 1

Temps de stabilisation de la température extrudeur

Si vous trouvez trop long le délai de 10 secondes au démarrage, alors que la tête est chaude depuis un moment, cela se change ici:

#define TEMP_RESIDENCY_TIME 10	// (seconds)

Chauffage de l'extrudeur :

Version simple : vous ne touchez à rien, les valeurs par dfaut sont en régulateur PID avec des valeurs qui marchent pas trop mal pour une buse classique bien isolée avec du Kapton.

Version optimisée :

Pré requis: Disposer de la toute nouvelle version dans laquelle un bug a été corrigé par Labsud...

  • Vous lancez la commande Gcode suivante dans Repetier
M303 S200
  • Vous relevez les valeurs lues dans le log de Repetier à la fin de l'exercice (exemple ici):
14:58:21.140 : bias: 109 d: 109 min: 198.52 max: 202.12
14:58:21.140 : Ku: 77.20 Tu: 37.09
14:58:21.140 : Clasic PID
14:58:21.140 : Kp: 46.32
14:58:21.140 : Ki: 2.50
14:58:21.156 : Kd: 214.77

14:58:21.156 : PID Autotune finished ! Place the Kp, Ki and Kd constants in the configuration.h

  • Vous les reportez dans la config (configuration.h)de la façon suivante (en n'oubliant pas de commenter la configuration qui est en place...)
// JPC  : reprapworld.com extruder
    #define  DEFAULT_Kp 46.32
    #define  DEFAULT_Ki 2.50 
    #define  DEFAULT_Kd 214.77  
  • Vous reprogrammez l'Arduino avec ces valeurs

Chauffage du bed :

Version simple: vous ne touchez à rien. Le chauffage sera commandé en tout ou rien par défaut.

Version optimisée : Le chauffage du bed est fait par régulation PID:

  • Vous activez
#define PIDTEMPBED
  • Vous programmez l'arduino avec ces modifs
  • Vous lancez la commande Gcode suivante dans Repetier
M303 E-1 C8 S90
  • Vous relevez les valeurs lues dans le log de Repetier (exemple ici):
12:28:44.843 : bias: 95 d: 95 min: 89.32 max: 90.65
12:28:44.859 : Ku: 182.44 Tu: 28.84
12:28:44.859 : Clasic PID
12:28:44.859 : Kp: 109.46
12:28:44.859 : Ki: 7.59
12:28:44.859 : Kd: 394.56
12:28:44.859 : PID Autotune finished ! Place the Kp, Ki and Kd constants in the configuration.h
  • Vous les reportez dans la config (confguration.h) de la façon suivante (en n'oubliant pas de commenter la configuration qui est en place...)
// MK2 heatbed reversed with glass, PID autotune
    #define  DEFAULT_bedKp 109.46
    #define  DEFAULT_bedKi 7.59
    #define  DEFAULT_bedKd 394.56
  • Vous reflashez l'arduino avec ce logiciel

Pullups

Les pullups sont des résistances de tirage au +5V qui peuvent être activées dans l'arduino. Elles ne sont nécessaire que si vous avez des fins de course mécaniques (switches), pour amener un potentiel de 5V sur l'entrée fin de course, qui sera mis à zero lorsque le fin de course sera actionné.

#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors

Sinon (fins de courses opto ou effet hall) la ligne doit être commentée

//#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors

Inversion du sens de lecture des fins de course

L'inversion du sens de lecture des fins de course est requise si :

  • Vous avez des fins de course mécaniques
  • Vous avez des fins de course opto ou magnétiques, qu ienvoient un 5V sur la sortie quand le fin de course n'est pas activé
const bool X_ENDSTOPS_INVERTING = true; // set to true to invert the logic of the endstops. 
const bool Y_ENDSTOPS_INVERTING = true; // set to true to invert the logic of the endstops. 
const bool Z_ENDSTOPS_INVERTING = true; // set to true to invert the logic of the endstops. 

SI ce n'est pas le cas, il faut mettre la valeur à false :

const bool X_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops. 
const bool Y_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops. 
const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops. 

Position de fins de course

Les fins de couse peuvent se trouver au début de l'axe (x=0) ou à la fin de l'axe (x=max). Il est plus simple et plus logique de les mettre au début (c'est bien sur à la construction de la machine que cela se choisit). Les valeurs suivantes définissent le sens dans lequel le logiciel va recherche les fins de course : -1, pour faire une recherche de fin de course en décrémentant (origine au zéro) ou en incrémentant (1) (origine au max). Pour une reprap, les fdc sont à l'origine 0, il faut donc décrémenter.

#define X_HOME_DIR -1
#define Y_HOME_DIR -1
#define Z_HOME_DIR -1

Inversion des axes moteurs

Les moteurs peuvent être montés à l'envers par rapport à la config du firmware. 2 solutions s'offrent alors :

  • Le changer par modif de câblage, il suffit de permuter 2 phases d'un même bobinage sur le connecteur
  • Le changer par sort en mettant le 'invert' de l'axe considéré à true ou false en fonction du résultat désiré. Pour ce faire, programmer avec les valeurs par défaut, puis faire un essai avec l'interface de déplacement de la tête dans Repetier. Si elle bouge dans le mauvais sens, changer la valeur.

Je recommanderais de modifier le câblage pour que cela reflète la configuration par défaut de Marlin : Cela sera autant de moins à changer lors d'une mise à jour de firmware.

#define INVERT_X_DIR true    // for Mendel set to false, for Orca set to true
#define INVERT_Y_DIR false    // for Mendel set to true, for Orca set to false
#define INVERT_Z_DIR true     // for Mendel set to false, for Orca set to true
#define INVERT_E0_DIR false   // for direct drive extruder v9 set to true, for geared extruder set to false
#define INVERT_E1_DIR false    // for direct drive extruder v9 set to true, for geared extruder set to false
#define INVERT_E2_DIR false   // for direct drive extruder v9 set to true, for geared extruder set to false

Dimensions de la surface de travail

La prusa permet théoriquement une surface de travail de 200 X 200 x120. Toutefois, en fonction de l'encombrement des fins de course, cette taille peut être réduite. Il faut la mesurer en faisant un homing et en déplaçant la tête jusqu'aux limites..

// Travel limits after homing
#define X_MAX_POS 200
#define X_MIN_POS 0
#define Y_MAX_POS 200
#define Y_MIN_POS 0
#define Z_MAX_POS 130
#define Z_MIN_POS 0

Paramètres moteurs : Steps per unit

Les paramètres moteurs (Le calculateur de Joseph Prusa : http://calculator.josefprusa.cz peut aider...):

Voici un petit bloc de commentaire qu'il serait bien d'ajouter dans le fichier configuration. au niveau de la config moteur. Il permet de mieux comprendre comment calculer ses valeurs.

//// Calibration variables
// X, Y, Z, E pas par unité 
// L'engrenage de l'extrudeur Wade de base est un 11 dents / 39 dents. Pour lui la valeur théorique de pas est 700 en 16e de pas. 
// L'engrenage Wade herringbone est un 9 dents / 47 dents . Pour lui, la valeur théorique de pas est 1044 en 16e de pas. 
// Diviser ces valeur par 2 pour du 8e de pas.
// Le plus souvent les 4 axes sont en 1/16 de pas (driver_microstep).
// Pour X et Y
//   - steps = pas_par_tour_moteur(200) * micropas_driver(16) / belt_pitch(5) / pulley_number_of_teeth(8) 
// Pour Z :
//   - steps = pas_par_tour_moteur(200) * micropas_driver(16) / pas_de_la_vis (pour du 8, c'est 1.25mm / par tour) 
// Pour E :
//   - steps = pas_par_tour_moteur(200) * micropas_driver(16) * dents_gros_engrenage(47 ou 39) / dents_petit_engrenage(9 ou 11) / PI / diamètre_effectif_vis_entrainement 
//
// exemples :
// Ici, en 1/16 de pas, avec une vis de 8X1.25 en Z, et un engrenage herringbone de 9/47e et des pignons 8 dents de 5mm
//#define _AXIS_STEP_PER_UNIT {3200/5/8, 3200/5/8, 3200/1.25,1044}
//
// Ici, en 1/8 de pas, avec une vis de 8X1.25 en Z, et un engrenage herringbone de 9/47e et des pignons 16 dents de 2.5mm
// #define _AXIS_STEP_PER_UNIT {1600/2.5/16, 1600/2.5/16, 1600/1.25,1044}

La lecture de ces commentaires vous permet de mieux comprendre comment on calcule ces valeurs. Pour une Prusa V2, que ce soit en 8 dents de 5, ou 16 dents de 2.5, en 16e de pas, et avec un extrudeur standard Wade ce serait donc:

#define DEFAULT_AXIS_STEPS_PER_UNIT {3200/2.5/16, 3200/2.5/16, 3200/1.25,700}

Comme certains d'entre vous ont des extrudeurs "Greg modified Wade Extruder reloaded" (avec les pignons en chevron, ou Herrington), je donne aussi la valeur pour ceux ci :

#define DEFAULT_AXIS_STEPS_PER_UNIT {3200/2.5/16, 3200/2.5/16, 3200/1.25,1044}

A noter que la dernière valeur, celle de l'extrudeur, dépend du diamètre de la vis d’entrainement du filament. Elle devra donc être modifiée après calibration!!!!!

Paramètres moteurs : Vitesse et accélération

Il faut prendre notamment soin de paramétrer le feedrate (vitesse de déplacement) de façon à ne pas dépasser la vitesse maxi d'un axe. Au dela, il y aura des pertes de pas.

"Max Feedrate" correspond à la vitesse max des moteurs, qui sera utilisée pour les déplacements rapides.

La valeur par défaut est souvent trop élevée, notamment pour l'extrudeur (45...)

#define DEFAULT_MAX_FEEDRATE          {500, 500, 5, 16}    // (mm/sec)    

Il faudra la tester afin de vérifier que sur votre machine, vous ne perdez pas de pas. Au besoin prendre une sécurité en la réduisant :

#define _MAX_FEEDRATE {400, 400, 4, 16}       // (mm/sec)   (400,400,2,45) 

"Homing feedrate" correspond à la vitesse de recherche d'orgine. Les valeurs par défaut fonctionnement assez bien :

#define _HOMING_FEEDRATE {1500,1500,120}      // (mm/min) !!

L'accélération par défaut est par contre bien trop élevée pour une Prusa, notamment sur les petits déplacements qui vont faire des chocs dans la mchine :

#define DEFAULT_MAX_ACCELERATION      {9000,9000,100,10000}    // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for skeinforge 40+, for older versions raise them a lot.

Des valeurs plus raisonnables seraient :

#define DEFAULT_MAX_ACCELERATION      {800,800,100,10000}    // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for skeinforge 40+, for older versions raise them a lot.

Mais pour les axes X et Y il peut être nécessaire de la descendre encore (800) selon votre mécanique.

Activation du stockage des réglages de l'E2Prom

Il est capital d'activer ces deux réglages en les dé-commentant, car ils nous permettront de faire de la mise au point sous rpetier, sans avoir a reprogrammer le logiciel dans l'arduino à chaque fois.

#define EEPROM_SETTINGS
#define EEPROM_CHITCHAT

Afficheur LCD

La nouvelle version de Marlin support l'afficheur LCD de Reprap Discount. Pour ceux qui en disposent, décommenter:

#define REPRAP_DISCOUNT_SMART_CONTROLLER

De nombreux autres réglages sont disponibles. Il convient de les manipuler avec précaution.

Programmation de la carte Arduino

  • Appuyer sur l'icône "Upload" ou faire "Fichier / Upload to I/O board"
  • Les leds de l'arduino devraient clignoter, et au bout d'une vingtaine de seconde, s'arreter.
  • La carte est programmée.

A noter que vous ne pourrez le faire si la carte est connectée dans Repetier. Il conviendra de la déconnecter avant, le port série de l'arduino étant en usage exclusif.

Tests

  • Lancer ensuite votre logiciel de pilotage (ex: Repetier) et paramétrez le pour qu'il dialogue sur le même port et à la même vitesse que l'arduino.
  • Cliquez sur connecter : le logiciel devrait en bas vous afficher une bannière avec la version du micrologiciel installé.
  • Essayer de déplacer un axe avec les boutons dans l'onglet 'print panel' ou 'Panneau de imprimante'. Si il se déplace, mais dans le mauvais sens, refaire le réglage 'invension du sens de roation du moteur' et reprogrammer le firmware.
  • Lorsque les 4 axes se déplacent dans le bon sens, faire un test sur le home (d'abord axe par axe) et vérifier que l'axe se déplace bien vers le switch, et qu'i ls'arrête sur le switch.
  • Si le switch n'est pas détecté et que l'axe ne s'arrête pas, vérifier que la connnexion électrique es bonne (continuité) et que le switch est bien raccordé à la bonne entrée de l'arduino. Sur la Ramps, il existe 6 entrées pour les switches. Il faut raccorder le switch à la bonne. Exemple, si vous disposez d'un switch d'origine X à cgauche de l'axe (X=0), il faudra raccorder celui-ci sur l'entrée "X-" de la Ramps.
  • Si cela fonctionne, faire un test de homing pour tous les axes.
  • Vérifier que la température est bien lue que ce soit sur l'extrudeur, ou le lit chauffant. Si tout est bien paramétré, vous devriez lire la température ambiannte en degrés celcius.
  • Allumer le chauffage et vérifier que la température monte bien (qq secondes suffisent pour voir monter la température). Si ce n'est pas le cas, arrêtez le et cherchez le pb de cablage. Vérifier que la mesure de température se fait bien sur le bon chauffage (bed / extruder). Si il fonctionne, vérifier qu'il va bien jusqu'au point de régulation. La led témoin de chauffage asssociée à ce canal devrait s'éteindre.
  • Même chose pour l'autre chauffage.
  • Vous pouvez entrer ensuite des déplacements rapides :
G0 X100 F10000
G0 X0 F10000

Ici déplacement rapide à X=100 à la vitesse de 24 000 mm / min, soit 24 000/60=400 mm /s et retour en X=0.

Si vous entendez des bruits bizarres et / ou que le moteur s'arrête ou va moins vite qu'espéré, c'est que vous perdez des pas

Dans le cas ou cela ne va pas, vous pouvez tenter de modifier les réglages de vitesse par le menu "Configuration" / "Configuration EEPROM du firmware", et changer les valeurs de l'axe considéré (accélération, vitesse max). Quand ces valeurs sont satisfaisantes, les reporter dans la configuration de Marlin et reprogrammer le firmware.


Voilà, c'est testé. Il ne vous reste plus qu'à calibrer votre machine;. (https://github.com/alexrj/Slic3r/wiki/Calibration ou http://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide ou https://github.com/alexrj/Slic3r/wiki/Calibration ou http://richrap.blogspot.fr/2012/01/slic3r-is-nicer-part-1-settings-and.html

Tips & Hacks

Plus pour le fun, j'ai tenté d'installer un LCD 4 lignes de 20 caractères sur Marlin, qui soit piloté en i2C. Le LCD est traditionnel contrôleur HD44780, et l'interface I2C est http://www.adafruit.com/products/292 , qui vaut 10 USD.

Son cablage est simple puisqu'il suffit de raccorder :

  • Broche 20 de l'arduino Mega (SDA) sur la broche DAT de l'I2C Backpack
  • Broche 21 de l'arduino Mega (SCK) sur la broche CLK de l'I2C Backpack
  • +5V de l'arduino sur +5V du backpack
  • GND sur GND...

Tout d'abord il faut installer la librairie LiquidTWI2 (https://github.com/lincomatic/LiquidTWI2/downloads ) dans Arduino/LibrariesLiquidTWI2.

Côté soft, il faut ensuite modifier Marlin comme suit :

  • Fichier marlin.pde :
#include "Configuration.h"
#ifdef ULTRA_LCD
#include <LiquidCrystal.h>
#endif
#include <SPI.h>

Après :

#include "Configuration.h"
#ifdef ULTRA_LCD
//#include <LiquidCrystal.h>
#include <Wire.h>
#include <LiquidTWI2.h>
#endif
#include <SPI.h>

Fichier ultralcd.h

#else
#include <LiquidCrystal.h>
#define LCD_CLASS LiquidCrystal
#endif

Après :

#else
#include <LiquidTWI2.h>
#define LCD_CLASS LiquidTWI2 
//#include <LiquidCrystal.h>
//#define LCD_CLASS LiquidCrystal
#endif

Fichier ultralcd.c

LCD_CLASS lcd(LCD_PINS_RS, LCD_PINS_ENABLE, LCD_PINS_D4, LCD_PINS_D5,LCD_PINS_D6,LCD_PINS_D7);  //RS,Enable,D4,D5,D6,D7

Après :

LCD_CLASS lcd(0);
//LCD_CLASS lcd(LCD_PINS_RS, LCD_PINS_ENABLE, LCD_PINS_D4, LCD_PINS_D5,LCD_PINS_D6,LCD_PINS_D7);  //RS,Enable,D4,D5,D6,D7

Enfin, il faut décommenter "#define REPRAP_DISCOUNT_SMART_CONTROLLER" dans configuration.h