Sprinter : un firmware pour la RAMPS 1.2

Après le préambule sur l'explication du rôle du firmware, et comme promis, voici un exemple concret du paramétrage du Firmware Sprinter pour la RAMPS 1.2.

Personnellement, j'ai passé beaucoup de temps à me renseigner, essayer, configurer tout un tas de versions existantes : Teacup, Tonokips, Sprinter,... Il y a beaucoup d'exemples, voire trop, et on est vite perdu dans la jungle des exemples trouvés, et qui semblent ne pas fonctionner sur sa machine.

Il faut alors s'armer de patience et de persévérance, car il faut faire l'effort de comprendre à quoi servent les paramètres à régler, et comment adapter un fimware pour qu'il fonctionne avec sa configuration.

Personellement, j'ai arrêté mon choix sur le Firmware Sprinter, développé principalement par Kliment et caru, et qui est un fork du Firmware Tonokips. Il est sous license GNU GPL v3, ce qui veut dire qu'on a le droit de mettre les mains dedans, et de faire partager nos modifications, ce que je vais m'empresser de faire !

Remplissez votre tasse de café ou votre verre de bière, cet article va être long ! ;-)Tout ce qui va suivre est adapté en fonction de ma carte de commande (la RAMPS v1.2) et de mon modèle de RepRap (Prusa), mais en fouillant un peu, il peut se généraliser à d'autres cartes. Voici précisément la liste des composants dont je dispose, et qu'il faut paramétrer dans le firmware :

  • Modèle Prusa
  • Moteurs pas à pas 200 pas / tour NEMA 17
  • Extruder modèle Wade avec moteur pas à pas 200 pas / tour
  • Thermistance d'extruder 100kOhm
  • Thermistance du lit chauffant 100kOhm
  • Electronique RAMPS version 1.2 avec driver POLOLU

Téléchargement du Firmware

Pré-requis

La carte RAMPS est basé sur la plateforme Arduino, il faut donc récupérer l'IDE Arduino pour compiler et flasher facilement la carte.

Télécharger le code source avec git

La méthode la plus simple est de récupérer le code sur le dépot GitHub de Sprinter. Pour cela, il faut ouvrir un terminal, aller dans le dossier où son ranger les sketchs Arduino, puis taper :

$ git clone https://github.com/kliment/Sprinter.git

Git va alors télécharger automatiquement le code source du Firmware. A l'avenir, il sera simple de mettre à jour votre code en local avec les modifications du dépot officiel en utilisant git, mais ce n'est plus le propos de cette article.

Télécharger le code source, pour les allergiques à la ligne de commande

Allez sur le dépot GitHub : https://github.com/kliment/Sprinter, puis cliquez sur l'icône "ZIP" pour télécharger un zip contenant le code source, puis décompressez le dossier dans votre dossier contenant vous sketchs Arduino.

Paramétrage du firmware

Ouvrez le Sketch Sprinter avec l'IDE Arduino, ce qui va ouvrir un tas d'onglets avec tous les fichiers sources. N'ayez pas peur, nous n'aurons besoin de modifier qu'un seul fichier : Configuration.h.

C'est dans ce fichier que nous réglerons tous les coefficients, gains, vitesses, accélérations et caractéristiques des composants de la carte électronique et de la machine. Ouvrez le fichier Configuration.h, et voyons ce qu'il y a à paramétrer :

Le type de carte électronique

Chaque type de carte possède des entrées/sorties différentes et spécifiques, qui sont renseignées dans le fichier pins.h. Reportez-vous au commentaire du fichier pour trouver celui qui correspond à votre carte. Pour la RAMPS 1.2, il s'agit du numéro 3.

// MEGA/RAMPS up to 1.2 = 3,
// RAMPS 1.3 = 33
// Gen6 = 5,
// Sanguinololu up to 1.1 = 6
// Sanguinololu 1.2 and above = 62
// Teensylu (at90usb) = 8
// Gen 3 Plus = 21
// gen 3 Monolithic Electronics = 22
// Gen3 PLUS for TechZone Gen3 Remix Motherboard = 23
#define MOTHERBOARD 3

Le type des thermistances

Ensuite, il faut renseigner le type de thermistance utilisée pour l'extruder et le lit chauffant. La thermistance permet de mesurer la température. En effet, sa caractéristique est d'avoir une résistance variable en fonction de la température.

Pour les curieux, les tables de conversion sont visibles dans le fichier thermistortables.h. Pour ma part, j'ai deux fois la même résistance de 100k.

// 1 is 100k thermistor
// 2 is 200k thermistor
// 3 is mendel-parts thermistor
// 4 is 10k thermistor
// 5 is ParCan supplied 104GT-2 100K
// 6 is EPCOS 100k
// 7 is 100k Honeywell thermistor 135-104LAG-J01
#define THERMISTORHEATER 1
#define THERMISTORBED 1

Calibration des axes

La calibration des axes permet de relier le nombre de pas moteur au déplacement de l'axe. Ayant le modèle Prusa, j'ai gardé les valeurs par défaut fournies dans l'exemple. Pour faire le calcul, il faut connaître :

  • Le nombre de pas par tour du moteur Npas ( = 200 pour le NEMA 17)
  • La résolution de controle du moteur Res (en fonction du paramétrage du driver de moteur pas à pas) (=1/16 pour les axes X,Y et E, et 1/4 pour l'axe Z)
  • Le nombre de dents de la poulie, Ndents (=8 pour les axes X et Y)
  • La résolution de la courroie Rc, qui correspond au nombre de mm par dent (=5mm pour une courroie standard T5 de reprap).

Le paramètre de calibration vaut : step_per_unit = Npas / (Res * Ndent * Rc) = 200 / (1/16* 8*5) = 80 pas par mm pour l'axe X par exemple.

Le type de calcul est équivalent pour les axes Y et Z (et les valeurs par défaut conviennent).

Là où ça se corse, c'est sur le calcul du paramètre pour l'extrudeur "E". Il faut savoir combien il faut de pas moteur pour faire avancer le fil en entrée de 1 mm. Attention cependant, en fonction de la version du moteur de génération de trajectoire, Skeinforge (j'ai prévu de faire un article là dessus, parce que si je commence à en parler maintenant, je ne finirai jamais cet article), sur les anciennes versions ( <= 39) il fallait indiquer combien de pas moteur il fallait pour avoir en sortie de l'extruder un certain volume de matière.

Le plus simple est de se baser sur une version >= 40 de Skeinforge, et de régler le premier type de paramètre, qui est pus facile à calculer.

En fonction de votre extruder, du moteur, du ratio de l'engrenage, le ratio "step_per_unit" de l'extruder varie beaucoup d'un repraper à l'autre. En ce qui me concerne, j'arrive à ce ratio :

//// Calibration variables
// X, Y, Z, E steps per unit - Metric Prusa Mendel with Wade extruder:
float axis_steps_per_unit[] = {80, 80, 3200/1.25,700};

Paramétrage des fins de course

En fonction du type de fin de course, il faut indiquer si le capteur retourne un signal haut ou bas. Si vous avez des fins de course avec une fourche optique, laisser les valeurs par défaut à FALSE, sinon avec des fins de course mécaniques (et en fonction du câblage), il faut inverser le signal, et donc indiquer TRUE. Si malgré ce réglage les axes ne bougent que sur la course de la butée, c'est qu'il faut inverser les constantes.

//// Endstop Settings
#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
// The pullups are needed if you directly connect a mechanical endswitch between the signal and ground pins.
//If your axes are only moving in one direction, make sure the endstops are connected properly.
//If your axes move in one direction ONLY when the endstops are triggered, set [XYZ]_ENDSTOP_INVERT to true here:
const bool X_ENDSTOP_INVERT = false;
const bool Y_ENDSTOP_INVERT = false;
const bool Z_ENDSTOP_INVERT = false;

Vitesse de communication

Il faut paramétrer la vitesse de communication en bauds, et la retenir pour l'indiquer plus tard au logiciel sur le PC pour qu'il puisse communiquer correctement avec la carte. Je vous conseille de laisser la valeur par défaut.

// This determines the communication speed of the printer
#define BAUDRATE 115200

Utilisation d'une carte SD

Si vous avez un lecteur de carte SD sur votre électronique, et que vous souhaiter booter dessus au démarrage de l'imprimante, les lignes suivantes sont faites pour ça. Sinon, laissez-les commentées.

// Comment out (using // at the start of the line) to disable SD support:
//#define SDSUPPORT
// Uncomment to make Sprinter run init.g from SD on boot
//#define SDINITFILE

Paramétrage des axes

Je vais passer quelques lignes dont vous n'aurez a priori pas à toucher pour une utilisation normale (inversion / désactivation des axes).

Paramétrage des fins de course

En fonction du placement de vos fins de course, il faut spécifier au firmware si les fins de course correspondent au minimum de l'axe (-1) ou au maximum (+1). Ainsi, lors de l'initialisation des axes (Homing), le zéro sera fait en fonction du min ou du max de la course de l'axe.

//// ENDSTOP SETTINGS:
// Sets direction of endstops when homing; 1=MAX, -1=MIN
#define X_HOME_DIR -1
#define Y_HOME_DIR -1
#define Z_HOME_DIR -1

On peut également définir et activer des butées logicielles sur les axes, ce qui permet de les arrêter avant d'arriver en butée physique, et de forcer voire d'endommager l'axe. Pour celà, il suffit de mesurer la capacité physique d'évolution de chaque axe à partir de la butée d'initialisation.

const bool min_software_endstops = false; //If true, axis won't move to coordinates less than zero.
const bool max_software_endstops = true; //If true, axis won't move to coordinates greater than the defined lengths below.
const int X_MAX_LENGTH = 200;
const int Y_MAX_LENGTH = 200;
const int Z_MAX_LENGTH = 100;

Paramétrage des vitesses et accélérations

Vous pouvez ensuite définir respectivement les vitesses de déplacement maximales des axes en mm/min (feedrate), les vitesses de déplacement lors de la phase d'initialisation (rester sur des vitesses lentes pour initialiser les axes avec précision). Les autres paramètres sont à laisser aux valeurs par défaut.

//// MOVEMENT SETTINGS
const int NUM_AXIS = 4; // The axis order in all axis related arrays is X, Y, Z, E
float max_feedrate[] = {200000, 200000, 240, 500000};
float homing_feedrate[] = {1500,1500,120};
bool axis_relative_modes[] = {false, false, false, false};

Pour la suite, le paramétrage des accélérations est à laisser aux valeurs par défaut, sauf si vous vous y connaissez suffisamment pour paufiner les réglages de votre imprimante.

Réglage de la commande de chauffage

Tous les paramètres suivants concernent le réglage de la partie chauffante, et peuvent être délicats à régler, je vous conseille de laisser les valeurs pas défaut. Cependant, il peut être intéressant de limiter la valeur maximale de température, ce qui peut être utile pour ne pas endommager l'imprimante.

#define MAXTEMP 220

Compilation et téléchargement du firmware

Maintenant tous ces paramètres renseignés, compilez puis téléchargez le programme sur la carte de commande (cliquez pour l'aide Arduino). Vous pouvez maintenant essayer de connecter l'imprimante au logiciel de commande sur le PC (par exemple Replicatorg), et essayer de faire bouger les axes un à un ou de commander la température avec l'interface de controle du logiciel.

Je vous conseille fortement de garder la main sur l'interrupteur d'alimentation tant que vous n'êtes pas sûrs que les vitesses, fin de course et autre ne sont pas réglés correctement.

Pour la suite, je vous présenterai le logiciel Replicatorg, que j'utilise, ainsi que le logiciel Skeinforge. D'ici là, si vous avez des difficultés, vous pouvez m'en faire part dans les commentaires ;-) .

Commentaires

Pour commenter cet article, merci de m'écrire directement par mail : mailto