:: Prusa i3xl - Notes techniques ::
Alimentation
Besoins estimés
- 12V @ 5A pour les 5 moteurs
- 12V @ 2A pour la buse chauffante de l'extrudeur (+20W)
- 12V @ 12A pour un lit chauffant 140W (300x200)
- 5V @ 2A pour l'électronique embarquée (Arduino, RAMPS, Raspberry Pi)
- 5V @ 1-2A pour le "base load" de l'alimentation
Cela donne un total d'environ 20A en 12V (240W) et 5A en 5v (25W).
Sachant qu'une alimentation ne fournit au mieux que 80% de sa puissance max indiquée et qu'il est préférable de l'utiliser à 50-60% de sa puissance max, on cible une alimentation de 500-600W et de préférence certifiée 80+.
Préparation de l'alimentation
Le modèle est une alimentation Antec Neo ECO 520C 80PLUS.
La puissance fournie en sortie sur les différentes tensions est résumée ci-dessous :
|
+5V |
+3.3V |
+12V |
-12V |
+5VSB |
Intensité max |
24A |
24A |
40A |
0.8A |
2.5A |
Caractéristiques
- Certification 80+ Bronze
- ATX 2.3
Connecteurs
- 1 x +12V (Alimentation P8 - Scindable en 2 x P4)
- 6 x Alimentation Serial ATA
- 1 x ATX 20 + 4 Broches
- 1 x Disquette (Molex 4 Broches Femelle)
- 6 x Molex (4 broches) Femelle
- 1 x PCI Express 6 + 2 Broches
- 1 x PCI Express 6 broches
Diagramme des connecteurs
Câbles
20AWG gaine PVC semi-rigide (RS)
- 331862 Fil câblage équip. UL1007 noir, 20 AWG
- 331878 Fil câblage équip. UL1007 rouge, 20 AWG
22AWG / 0,35 mm2 gaine PVC semi-rigide (RS)
- 1680786 FIL DE CABLAGE UL1061
- 1680821 FIL DE CABLAGE UL1061
- 1680764 FIL DE CABLAGE UL1061
- 1680809 FIL DE CABLAGE UL1061
- 1680758 FIL DE CABLAGE UL1061
- fs20awgr fil silicone 20 awg / 0.5mm² pour les courants faibles
- fs16awgr fil silicone 16 awg / 1.32mm² pour le lit 140W
Moteurs NEMA17
Extrudeur
1 moteur pas à pas Casun 42SHD0404-22 :
- Angle du pas : 1.8° (200 pas / tour)
- Couple : 520 mN.m
- Tension : 3.4 V
- Intensité : 1.7 A
Axes X, Y et Z
4 moteurs pas à pas Casun 42SHD001-24 :
- Angle du pas : 1.8° (200 pas / tour)
- Couple : 260 mN.m
- Tension : 12 V
- Intensité : 0.4 A
Stepper drivers (x4)
Le réglage du courant fourni au moteur se fait à l'aide du petit potentiomètre présent sur le stick.
Commencer au plus bas (tourner dans sens horaire inverse) et augmenter doucement (par 1/8ème de tour) la tension de référence jusqu'à obtenir le résultat désiré.
Note : la mesure de la tension qui nous sert de référence se fait entre la terre et le potentiomètre lui-même.
La puissance demandée aux moteurs variant en fonction des vitesses maximales paramétrées, j'ai arbitrairement choisi les vitesses maximales suivantes :
- Axes X et Y : 7500 mm/min <=> 125 mm/s
- Axe Z : 300 mm/min <=> 5 mm/s
Dans mon cas, après suppression/diminution des bruits et autres vibrations, j'arrive aux réglages suivants :
- Axe X : 0.419 V
- Axe Y : 0.573 V
- Axe Z : 0.669 V
- Extrudeur : 0.435 V
Schéma de cablage
Parties mécaniques
- Poulies GT2-20
- Nombre de dents : 20
- Longueur de pas : 2 mm
- Courroies GT2
:: Calibration et gestion du firmware - Marlin LCD ::
Préparation de l'environnement de développement Arduino
Installation
Sur Linux Mint, l'IDE Arduino étant présent dans les repositories officiels, on l'installe en une seule commande :
$ sudo apt-get install arduino
Permissions utilisateurs
Ajouter les utilisateurs de l'imprimante au groupe "dialout" pour autoriser l'accès aux ports séries.
$ sudo usermod -aG dialout utilisateur
Pour s'ajouter soi-même :
$ sudo usermod -aG dialout $(whoami)
Vérifier à l'aide de la commande "groups" :
$ groups
[...] dialout [...]
Connexion à la carte Arduino
- Connecter la carte Arduino à l'aide du câble usb.
- Lancer Arduino IDE et sélectionner le type de carte et le port série, pour ma part :
- Outils > Type de carte > Arduino Mega 2560 ou Mega ADK
- Outils > Port série > /dev/ttyACM0
Calibration des moteurs
- Nombre de pas moteur : 200
- Angle de pas : 1,8 °
- Résolution ou pas du driver : 1/16ème (A4988) ou 1/32ème (DRV8825)
- Type de tige filetée et son pas de vis : M5 / 0.8
- Type de courroie et son pas : GT2 / 2 mm
- Nombre de dents de l'engrenage de la courroie : 20
- Nombre de dents du grand engrenage de l’extrudeur : 43
- Nombre de dents du petit engrenage de l’extrudeur : 10
- Ratio de l’extrudeur : 1
- Diamètre de l’axe de la vis entraînant le fil : 6.5
Ces informations sont nécessaires pour calculer le nombre de pas pour chaque moteur (axes X, Y, Z + extrudeur) et définir la valeur DEFAULT_AXIS_STEPS_PER_UNIT
du fichier Configuration.h :
#define DEFAULT_AXIS_STEPS_PER_UNIT {X, Y, Z, E}
Calcul des valeurs de pas
Extrudeur
Formule du calcul de pas pour l'extrudeur :
\[ E = \frac{{PasMoteur} * {PasControleur} * \frac{DentsGrandEngrenage}{DentsPetitEngrenage}}{{DiamètreAxe} * {\pi}} \]
Extrudeur Wade
\[ E = \frac{{200} * {32} * \frac{43}{10}}{{6.5} * {\pi}} = 1347,67508735 \]
Extrudeur Titan
\[ E = \frac{{200} * {32} * {3}}{{6.7} * {\pi}} = 912,171614139 \]
Axes X et Y
Formule du calcul de pas pour les axes X et Y :
\[ X | Y = \frac{PasMoteur}{PasCourroie * DentsEngrenage * Résolution} \]
Axe Z
Formule du calcul de pas pour l'axe Z :
\[ Z = \frac{PasMoteur}{PasDeVis * Résolution} \]
Dans mon cas, j'obtiens les valeurs suivantes :
Extrudeur Wade
define DEFAULT_AXIS_STEPS_PER_UNIT {80,80,4000,1347.67}
Extrudeur Titan
define DEFAULT_AXIS_STEPS_PER_UNIT {80,80,4000,912.17}
Outil indispensable
Le calculateur de pas RepRap : RepRap Calculator
Optimisation des paramètres PID
Les paramètres Proportionnelle Intégrale et Dérivation concernent les éléments chauffants de l'imprimante (buses de chauffe et lit).
Afin d'éviter tout problème de dépassement de température et d'optimiser la consommation électrique, il est important d'affiner au maximum ces paramètres.
Pour cela, une commande existe qui fait tout le travail pour nous :-)
Buse de chauffe extrudeur
Le code suivant chauffe la buse n°1 (E0) jusqu'à 200°C durant 8 cycles, puis remonte les valeurs PID calculées :
M303 E0 S200 C8
Après quelques minutes, le résultat donne :
[...]
bias: 102 d: 102 min: 194.70 max: 205.94
Ku: 23.12 Tu: 61.87
Clasic PID
Kp: 13.87
Ki: 0.45
Kd: 107.29
PID Autotune finished! Put the Kp, Ki and Kd constants into Configuration.h
Lit chauffant :
Le code suivant chauffe le lit (E-1) jusqu'à 50°C durant 8 cycles, puis affiche les valeurs PID calculées.
M303 E-1 S50 C8
Après plusieurs minutes, on obtient :
[...]
bias: 126 d: 126 min: 49.92 max: 50.70
Ku: 410.70 Tu: 87.54
Clasic PID
Kp: 246.42
Ki: 5.63
Kd: 2696.34
PID Autotune finished! Put the Kp, Ki and Kd constants into Configuration.h
Modification du firmware
Configuration.h
Valeurs modifiées :
Version et auteur
#define STRING_VERSION_CONFIG_H __DATE__ " " __TIME__
#define STRING_CONFIG_H_AUTHOR "Xzz"
Connexion à l'imprimante
#define SERIAL_PORT 0
#define BAUDRATE 250000
Type de carte (RAMPS 1.4 avec sorties extrudeur, ventilateur et lit)
#define MOTHERBOARD 33
Thermistances
#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_BED 7
Buse de chauffe de l'extrudeur
// Prusa i3 - Hotend 12V 40W
#define DEFAULT_Kp 13.87
#define DEFAULT_Ki 0.45
#define DEFAULT_Kd 107.29
Lit chauffant
// Mk8 300x200 12V
#define DEFAULT_bedKp 246.42
#define DEFAULT_bedKi 5.63
#define DEFAULT_bedKd 2696.34
Bornes d'arrêt (endstop)
const bool X_MIN_ENDSTOP_INVERTING = false;
const bool Y_MIN_ENDSTOP_INVERTING = false;
const bool Z_MIN_ENDSTOP_INVERTING = false;
#define DISABLE_MAX_ENDSTOPS
[...]
#define INVERT_X_DIR false
#define INVERT_Y_DIR false
#define INVERT_Z_DIR false
#define X_HOME_DIR -1
#define Y_HOME_DIR -1
#define Z_HOME_DIR -1
Dimensions du lit
#define X_MAX_POS 200
#define X_MIN_POS 0
#define Y_MAX_POS 260
#define Y_MIN_POS 0
#define Z_MAX_POS 180
#define Z_MIN_POS 0
Mouvements
#define HOMING_FEEDRATE {50*60, 50*60, 3*60, 0}
#define DEFAULT_AXIS_STEPS_PER_UNIT {80,80,4000,1347.67}
#define DEFAULT_MAX_FEEDRATE {100, 100, 3, 25}
Note : les valeurs d'accélération par défaut sont extraordinairement élevées pour ma Prusa i3. Afin d'éviter les sauts de pas (que j'ai surtout constaté sur l'axe Y), je les ai diminuées drastiquement.
#define DEFAULT_MAX_ACCELERATION {220,220,10,200}
#define DEFAULT_ACCELERATION 180
#define DEFAULT_RETRACT_ACCELERATION 180
Constantes de préchauffage
#define PLA_PREHEAT_HOTEND_TEMP 190
#define PLA_PREHEAT_HPB_TEMP 45
#define PLA_PREHEAT_FAN_SPEED 255 // Insert Value between 0 and 255
#define ABS_PREHEAT_HOTEND_TEMP 240
#define ABS_PREHEAT_HPB_TEMP 100
#define ABS_PREHEAT_FAN_SPEED 255 // Insert Value between 0 and 255
Références