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 ;-) .

RepRap : le firmware de la carte de commande.

L'une des parties les plus compliqués dans mon aventure RepRap a été de trouver un Firmware pour la carte de commande. Il s'agit du logiciel embarqué dans la carte permettant de contrôler tout le hardware :

  • Pilotage des moteurs pas à pas
  • Gestion des butées physiques et logicielles
  • Asservissement en température de l'extruder et du lit chauffant
  • Pilotage du ventilateur de refroidissement

Attention, il ne faut pas confondre ce logiciel avec celui qui est installé sur le PC et qui sert à convertir un object 3D en commandes pour l'imprimante 3D.

Le Firmware ne connaît pas l'objet à imprimer, il ne fait que exécuter les ordres transmis par l'ordinateur de commande : se déplacer, chauffer l'extruder à 190°C, extruder, ...

Liaisons Commande

Cependant, l'ordinateur ne connaît pas du tout les caractéristiques du matériel. Si le PC demandeà l'axe X d'avancer de 10mm, concrètement, il va envoyer cette commande à la carte :

G0 X10

Je ne veux pas rentrer maintenant dans les détails du langage de commande utilisé (le GCode), c'est juste pour montrer un exemple.

Le PC demande donc à l'axe X d'avancer de 10mm, mais il ne dit pas directement combien le moteur pas à pas doit faire de crans, avec quelle accélération, si il faut s'arrêter quand on arrive en butée,... Tout ce paramétrage se fait dans le Firmware de la carte. On commence donc a comprendre qu'il y a potentiellement énormément de paramètres à régler... et c'est le cas !

Fort heureusement, pour un modèle standard de RepRap, par exemple le modèle Prusa avec le "Wade's Extruder", ces paramètres sont connus et il n'y a plus qu'à copier/coller (enfin en théorie). De même, un firmware peut convenir à plusieurs cartes électroniques, mais les principales sont déjà intégrées dans le code de ces firmwares.

Je m'arrête là pour cet article, qui a pour vocation d'être un préambule à un prochain article sur la présentation et au paramétrage du firmware que j'utilise pour ma carte RAMPS v1.2, et qui arrive très bientôt (je sais que certains de mes lecteurs l'attendent avec impatience ;-) ) !

Alimentation stabilisée 5V et 12V

Pour alimenter une RepRap, ou tout autre équipement électronique, on a souvent besoin d'une alimentation 5 ou 12V.

Dans cet article, nous allons voir rapidement comment transformer une alimentation de PC de type ATX pour avoir une alimentation utilisable facilement.

ATTENTION : Cette manipulation peut être dangereuse car nous allons ouvrir un appareil 220V, avec des condensateurs qui sont potentiellement encore chargés. Faites bien attention !

Première étape : choisir l'alimentation

En fonction de la puissance dont vous avez besoin, vous pourrez récupérer une vielle alimentation, ou acheter une alimentation Premier Prix. Pour une RepRap, il faut avoir idéalement 15A sous 12V, ce que peut délivrer une alimentation 300W. L'alimentation doit être compatible ATX pour pouvoir ensuite piloter l’allumage et l'extinction.

{filename}../images/before.png

Deuxième étape :

Sur la grande prise, repérer le fil VERT (PS_ON) et coupez-le, ainsi qu'un fil de masse NOIR (COM) à proximité.

http://www.smpspowersupply.com/connector_atx_pinout.GIF {filename}../images/prise.png

Troisième étape :

Ouvrir l'alimentation, et tirer les câbles que vous venez de couper. Pour vérification, sur mon alimentation le fil vert est bien noté PS_ON sur la carte :

{filename}../images/PS_ON.png

On peut alors connecter les deux fils précédemment coupés sur un interrupteur :

{filename}../images/interrupteur.png

Dernière étape :

Intégrez l'interrupteur dans le boîtier, et c'est fini !

{filename}../images/after.png

L'électronique de la RepRap : Arduino + RAMPS

Un nouvel article pour expliquer l'électronique de la RepRap. Cet article n'est pas spécifique à un modèle de RepRap en particulier, la carte électronique peut être utilisée pour différents modèles d'imprimante 3D.

Le modèle de l'électronique que j'ai choisi Arduino + RAMPS 1.2 en est un parmis tant d'autres, je vous conseille d'aller sur le Wiki RepRap pour avoir plus d'informations sur les autres modèles possibles. Une vidéo vaut mieux qu'un long discours pour présenter la carte :

D'une manière générale voici les fonctionnalités que vous retrouverez sur la carte de commande d'une imprimante 3D :

  • Contrôle des moteurs pas à pas pour les axes
  • Contrôle de l'extrudeur (moteur pas à pas ou CC en fonction du modèle)
  • Commande des résistances de chauffage de l'extruder et du lit chauffant
  • Acquisition des températures de l'extruder et du lit chauffant
  • Acquisition des informations de fin de course (mécanique ou fourche optique)
  • Pilotage d'un ventilateur pour le refroidissement au niveau de l'extruder

Ci dessous, la photos de la carte RAMPS version 1.2 en pièces détachées achetée sur le site GRRF.de. Je vous invite également à consulter leur wiki qui explique très bien comment assembler la carte étape par étape avec beaucoup de photos (c'est en allemand, mais Google le traduit bien si vous le souhaitez).

{filename}../images/ramps1.2.jpg

Depuis, la boutique de GRRF.de propose la version RAMPS 1.4 qui ajoute la possibilité d'ajouter un second extruder, et d'ajouter une carte SD pour pouvoir imprimer sans l'ordinateur.

Petit point sur l'avancement de ma RepRap

Mon dernier article sur la RepRap date d'un mois. Entre temps, j'ai reçu tout le matériel, monté, assemblé, soudé et réglé mon imprimante. Il y a beaucoup de travail pour l'assembler entièrement, et pour comprendre comment elle fonctionne. Je peux déjà dire que la RepRap ne s'adresse pas à un public néophyte, tant il faut chercher à comprendre et persévérer pour tout monter et régler l'imprimante. Je pense que les imprimantes du commerce (MakerBot par exemple) sont plus adaptées car les réglages existent déjà, mais ce sont bien souvent des solutions deux à trois fois plus chères.

Dans le cas d'une RepRap, il est beaucoup plus difficile de trouver des réglages qui correspondent parfaitement à ce que l'on souhaite, du fait de la diversité des composants. Mais au final, on a la satisfaction de comprendre comment ça marche, et quand ce n'est pas le cas de comprendre pourquoi ça ne fonctionne pas ;-).

Je reviendrai dans de prochains articles sur la description de ma configuration (mécanique, électronique, et logicielle), et surtout j'expliquerai tout ce qui m'a fait perdre du temps, en espérant que cela puisse servir à d'autres !

Première Impression

Une des premières impressions, un cube d'étalonnage.