Autoleveling pour Prusai3

De VoWiki
Aller à : Navigation, rechercher

Accueil

Image1.jpg
Bed Autoleveling
pour Prusa i3 EiNSTeiN/Reworks
Wade Extruder


VoLAB

Assocation VoRoBoTics

Date : 01/01/2015

Auteur : J.SORANZO

Thème: impression 3D

Projet Prusa i3 autoleveling

Problématique

Implémenter l'autoleveling sur la Prusa i3/EiNSTeiN/Rework et son extruder Wade modifié.

Wade extruder "original"
A la base l'extruder Wade est fait pour les imprimante à chariot horizontal. La i3 a un chariot vertical.
Wade extruder pour Prusa i3

Répertoire de travail

Pour les fichiers 3D

VoRoboticsAsso\04-Matos\3DPrinter\RepRap\3DModeling\Prusai3SolidWorksRecapJojo\extruderWade

Pour la compilation de Marlin

Donnees\008_iao_wrk\Arduino\Croquis\Marlin\Marlin-1.0.1_fromGithub


Version A

Illustration 1: Support servo 9g version A

Servo moteur 9g

Contacteur mécanique de l'axe Z

2 pièces conçues: Support et pieds

Illustration 2: Pieds


A priori un déplacement vertical de 10mm 13mmsuffit pour ne pas entrer en collision avec le plateau

Illustration 3: Ecart safe buse plateau


Montage

La conception mécanique initiale présente de grosse lacunes notamment au niveau du montage.

Montage du servo sur le "support": les 2 trous de 2.8 sont trop grands (à passer à 1). Ce qui oblige à faire une montage vis/écrou au lieu d'une simple vis plastique en 2.5mm et donc les trou dans le servo sont à agrandir (opération très délicate). De plus le montage vis/écrou est très délicat à assemblé et compte tenu de l'écart entre les 2 parois, il ne faut pas le serrer tout de suite pour pouvoir reculer le servo et passer le pied.

Le montage sur support sur l'extruder se fais grâce à un écrou monté sur une des vis inférieur de fixation de l'extruder remplacée par 27mm pour l'occasion. On se retrouve donc avec 2 écrous sur cette fixation (pas génial). L'écrou est de plus difficile à mettre en place et pour démonter, il faudra penser d'abord à démonter le système d'autoleveling avant de déposer l'extruder. Solution : enlever les 2 écrou dans l'extruder (ce dernier pouvant être mis et maintenu en place par les 2 vis du haut). Mettre des écrous prisonniers dans le "support".

Écarter encore d'au moins 5 à 8mm les parties verticale du support pour dégager les fils de l'extruder.

Agrandir le trou de 8mm

Modifications dans Marlin

Toutes dans configuration.h

#define ENABLE_AUTO_BED_LEVELING


#define RIGHT_PROBE_BED_POSITION 170


#define AUTO_BED_LEVELING_GRID_POINTS 3


#define X_PROBE_OFFSET_FROM_EXTRUDER -37
#define Y_PROBE_OFFSET_FROM_EXTRUDER 17
#define Z_PROBE_OFFSET_FROM_EXTRUDER -9.5


#define Z_RAISE_BEFORE_HOMING 14


#define NUM_SERVOS 1 // Servo index starts with 0 for M280 command


#define SERVO_ENDSTOPS {-1, -1, 0} 


#define SERVO_ENDSTOP_ANGLES {0,0, 0,0, 40,130}


#define PROBE_SERVO_DEACTIVATION_DELAY 300


Câblage

L'alimentation du servomoteur est directement prélevé sur la carte ATMEGA vie un cavalier présent sur la carte RAMPS. Il se pourrait qu'à force de tirer sur cette sortie qui alimente également l'écran LCD et son rétroéclairage, elle finisse par ne plus être suffisante. On peut alors se poser la question de comment rentrer du 5V dans RAMPS pour alimenter l'arduino ? Voir en fin de document.

5V pour le servo fourni par un convertisseur 12V/5V directement sur l'alimentation principale : attention GND. Mesurer la continuïté du GND au travers du convertisseur DC/DC. Le GND (0V) doit être commun pour tous les équipements (Arduino, RAMPS, SERVO, LCD...)

Questionnement : Endstop sur Z mais que se passera-t-il quand on commandera un zero ?

Illustration 4: Cavalier 5V
5V point central.


Câblage de senseur

Problème il s'agit du senseur Z donc si on branche on ne peut plus faire le 0 Z.


M280 - Position an RC Servo P<index> S<angle/microseconds>, ommit S to report back current angle

M280 P0 S130 : en haut

M280 P0 S40 : en bas

hauteur de sauvegarde 15mm

Index du premier servo brancher à la RAMPS est 0 :


Même si:

#define NUM_SERVOS 1 // Servo index starts with 0 for M280 command

Essais

Code trouvé sur http://www.zem.fr/imprimante-3d-auto-bed-leveling-facile/#codesyntax_2
Dans Slic3r/Printer setting/Strat G-code
Attention au G28 déjà présent.
A faire à la main avant.
G90 ; Passage coordonnees absolues
G28 X Y ; Home X Y
//G28 Z ; home Z (pas necessaire)
G29 ; Palpage
G90 ; Passage coordonnées absolues
G1 Z2 F4000 ; rétractation palpeur
Pas de gestion du Servo ???? G29 prend peut-être en charge.

Procédure pour mesurer les paramètres pour Marlin

Méthode de base issu du read me de Marlin

My preferred method:

* a) Make a small mark in the bed with a marker/felt-tip pen.

* b) Place the hotend tip as *exactly* as possible on the mark, touching the bed. Raise the hotend 0.1mm (a regular paper thickness) and zero all axis (G92 X0 Y0 Z0);

* d) Raise the hotend 10mm (or more) for probe clearance, lower the Z probe (Z-Endstop) with M401 and place it just on that mark by moving X, Y and Z;

* e) Lower the Z in 0.1mm steps, with the probe always touching the mark (it may be necessary to adjust X and Y as well) until you hear the "click" meaning the mechanical endstop was trigged. You can confirm with M119;

* f) Now you have the probe in the same place as your hotend tip was before. Perform a M114 and write down the values, for example: X:24.3 Y:-31.4 Z:5.1;

* g) You can raise the z probe with M402 command;

* h) Fill the defines bellow multiplying the values by "-1" (just change the signal)


BandeauRepetier.jpgActiver les acquittements pour voir les retours des commandes


Compléments:

A) avec le câblage Z-END stop normal faire sont zéro – Marlin avec SERVO mais sans autoleveling (commandes des servo active) attention toutefois le pied se baisse chaque fois qu'on commande un Z zéro. Astuce : débrancher le servo moteur mais sans l'autoleveling.

B) cabler le nouveau Z-END stop

  1. appliquer la procédure ci-dessus
  1. activer l'autoleveling dans Marlin

Problème avec la commande G92, une fois saisie, elle ne permet plus d'entrer des position négative sauf si:

#define min_software_endstops false

In Configuration.h, this will allow you to move to negetive positions.

(http://forums.reprap.org/read.php?146,314645,323274#msg-323274)

Procédure délicate mais même sans la commande G92, on y arrive, il suffit de savoir faire une soustraction.

Position buse - Position senseur donne directement les valeurs à entrer dans Marlin et pas besoin de multiplier par -1


Mes valeurs:

  #define X_PROBE_OFFSET_FROM_EXTRUDER -37.4
  #define Y_PROBE_OFFSET_FROM_EXTRUDER 16.8
  #define Z_PROBE_OFFSET_FROM_EXTRUDER -9.5

X remplacer par -37 et Y par 16 à cause de l'erreur suivante (apparemment due à Arduino 1.5):

In file included from Marlin.h:22:0,
                 from BlinkM.cpp:5:
Configuration.h:417:41: error: floating constant in preprocessor expression
   #define X_PROBE_OFFSET_FROM_EXTRUDER -37.4
                                         ^
Configuration.h:457:9: note: in expansion of macro 'X_PROBE_OFFSET_FROM_EXTRUDER'
     #if X_PROBE_OFFSET_FROM_EXTRUDER < 0
         ^
Configuration.h:417:41: error: floating constant in preprocessor expression
   #define X_PROBE_OFFSET_FROM_EXTRUDER -37.4
                                         ^
Configuration.h:462:13: note: in expansion of macro 'X_PROBE_OFFSET_FROM_EXTRUDER'
       #if ((X_PROBE_OFFSET_FROM_EXTRUDER * AUTO_BED_LEVELING_GRID_POINTS) >= (RIGHT_PROBE_BED_POSITION - LEFT_PROBE_BED_POSITION))
             ^
Configuration.h:418:40: error: floating constant in preprocessor expression
   #define Y_PROBE_OFFSET_FROM_EXTRUDER 16.8
                                        ^
Configuration.h:466:9: note: in expansion of macro 'Y_PROBE_OFFSET_FROM_EXTRUDER'
     #if Y_PROBE_OFFSET_FROM_EXTRUDER < 0
         ^
Configuration.h:418:40: error: floating constant in preprocessor expression
   #define Y_PROBE_OFFSET_FROM_EXTRUDER 16.8
                                        ^
Configuration.h:471:13: note: in expansion of macro 'Y_PROBE_OFFSET_FROM_EXTRUDER'
       #if ((Y_PROBE_OFFSET_FROM_EXTRUDER * AUTO_BED_LEVELING_GRID_POINTS) >= (BACK_PROBE_BED_POSITION – FRONT_PROBE_BED_POSITION))

Après tout le probbing n'est pas au dixième en X et Y

maj JSO 10/5/15 : Cette erreur est visiblement apportée par Arduino 1.5 et supérieur (pas de nombre décimaux dans les #if).


Illustration 5: Version avec escamotage à servo moteur

Premiers palpages

18:43:02.703 : Bed x: 15.00 y: 20.00 z: -0.07
18:43:11.856 : Bed x: 92.00 y: 20.00 z: -0.03
18:43:21.146 : Bed x: 169.00 y: 20.00 z: -0.29
18:43:29.563 : Bed x: 170.00 y: 80.00 z: 0.40
18:43:38.778 : Bed x: 93.00 y: 80.00 z: 0.19
18:43:47.932 : Bed x: 16.00 y: 80.00 z: 0.30
18:43:56.850 : Bed x: 15.00 y: 140.00 z: 0.51
18:44:06.182 : Bed x: 92.00 y: 140.00 z: 0.17
18:44:15.123 : Bed x: 169.00 y: 140.00 z: 0.27


18:48:08.487 : Bed x: 15.00 y: 20.00 z: -0.12
18:48:17.597 : Bed x: 92.00 y: 20.00 z: -0.14
18:48:26.820 : Bed x: 169.00 y: 20.00 z: -0.21
18:48:35.930 : Bed x: 170.00 y: 80.00 z: -0.39
18:48:44.924 : Bed x: 93.00 y: 80.00 z: 0.05
18:48:54.055 : Bed x: 16.00 y: 80.00 z: 0.02
18:49:03.017 : Bed x: 15.00 y: 140.00 z: 0.21
18:49:12.348 : Bed x: 92.00 y: 140.00 z: 0.03
18:49:21.624 : Bed x: 169.00 y: 140.00 z: -0.16

Gros défaut de conception

Le talon de la botte entre en collision avec le plateau dans 2 cas: lors d'un homeaxis Z et lors des mesures avec G29. La cause en est que avant de sortie le capteur, il y a bien dans marlin déplacement en Z à la position Z_RAISE_BEFORE_HOMING mais pas au moment de la rentrée.


Ligne 1236: fonction static void homeaxis(int axis) {

    if (axis==Z_AXIS) retract_z_probe();

A chaque fois on retrouve bien Z_RAISE_BEFORE_HOMING avant d'appeler HOEMAXIS(Z). Le problème est que

      destination[Z_AXIS] = Z_RAISE_BEFORE_HOMING * home_dir(Z_AXIS) * (-1);    // Set destination away from bed
              feedrate = max_feedrate[Z_AXIS];
              plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate, active_extruder);
              st_synchronize();
              HOMEAXIS(Z);

Extrait de code L1597 de marlin_main.cpp

Version A.1

Reprise des pièces mécaniques. Application des modification proposée au §Montage avec la distance supplémentaire par rapport à l'extruder de 10mm au lieu de 8. Et surtout redesign complet du pied pour supprimer le talon avec création d'une carte endstop verticale.


Switch sch.jpg

Mes valeurs pour le design A.1:

  #define X_PROBE_OFFSET_FROM_EXTRUDER -45
  #define Y_PROBE_OFFSET_FROM_EXTRUDER 2
  #define Z_PROBE_OFFSET_FROM_EXTRUDER -11.1


Essais

Petits problème de répétabilité: entre 2 probing à vide, on obtient pas tout à fait les mêmes valeurs.

23:23:10.113 : Bed x: 15.00 y: 140.00 z: 0.26
23:23:20.271 : Bed x: 15.00 y: 20.00 z: 0.06
23:23:30.719 : Bed x: 170.00 y: 70.00 z: -0.10
23:23:30.729 : echo:endstops hit:  Z:-0.10


16:48:02.129 : Bed x: 15.00 y: 140.00 z: 0.12
16:48:12.285 : Bed x: 15.00 y: 20.00 z: -0.05
16:48:22.877 : Bed x: 170.00 y: 70.00 z: -0.43
16:48:22.877 : echo:endstops hit:  Z:-0.43


Premier essai d'impression (l'idée est de dire allons-y, nous verrons bien !)

L'imprimante imprime au moins à 10mm du plateau !!! Vérification du paramètre Z_PROBE_OFFSET_FROM_EXTRUDER.

L'axe Z ne prend pas en compte du tout Z_PROBE_OFFSET_FROM_EXTRUDER

maj JSO 9/05/2015 Bug reconnu officiellement dans Marlin bug #2040 en cours de traitement
https://github.com/MarlinFirmware/Marlin/issues/2040

Différents essais:

Z_PROBE_OFFSET_FROM_EXTRUDER +20 => aucun effet

min_software_endstops true : aucun effet

Seul endroit où c'est utilisé dans Marlin :

void clamp_to_software_endstops(float target[3])
{
  if (min_software_endstops) {
    if (target[X_AXIS] < min_pos[X_AXIS]) target[X_AXIS] = min_pos[X_AXIS];
    if (target[Y_AXIS] < min_pos[Y_AXIS]) target[Y_AXIS] = min_pos[Y_AXIS];
    float negative_z_offset = 0;
    #ifdef ENABLE_AUTO_BED_LEVELING
      if (Z_PROBE_OFFSET_FROM_EXTRUDER < 0) negative_z_offset = negative_z_offset + Z_PROBE_OFFSET_FROM_EXTRUDER;
      if (add_homing[Z_AXIS] < 0) negative_z_offset = negative_z_offset + add_homing[Z_AXIS];
    #endif
    if (target[Z_AXIS] < min_pos[Z_AXIS]+negative_z_offset) target[Z_AXIS] = min_pos[Z_AXIS]+negative_z_offset;
  }

Désactivation écran LCD car :

Configuration.h|343|#define min_software_endstops false|
Marlin_main.cpp|3948|if (min_software_endstops) {|
ultralcd.cpp|638|if (min_software_endstops && current_position[axis] < min) current_position[axis] = min;|

SANS EFFET

et enfin min_software_endstops false et LCD désactivé.

Et en mode grille ?


Seule configuration fonctionnelle est de mettre un offset Z négatif dans SLIC3r
maj JSO 9/05/2015 Une correction de Marlin est en cours voir un peu plus haut.


Illustration 6: Support version A.2

Version A.2

Au cours des premiers tests, nous avons constaté un problème de répétabilité dans les mesures qui n'a fait que se confirmer au cours des impressions suivantes.

Pour y remédier, nous avons renforcé la pièce support. Nous avons également taraudé directement dans la pièce les trous de fixation au diamètre M4 ce qui permet de se passer d'écrou. cf.Filetage Directe.


Illustration 7: Mécanisme sensor version A2


Les essais suivant nous montrent que cela ne corrige pas le problème.


Mesure 1 Mesure 2 Ecart vs M1 Mesure 3 Ecart vs M1 Mesure 4 Ecart vs M1 Mesure 5 Ecart vs M1
0.08 -0.01
-0.09
0.06
-0.02
-0.03
-0.11
0.09
0.01
-0.01 -0.14
-0.13
0.07
0.08
-0.22
-0.21
-0.06
-0.05
-0.1 -0.23
-0.13
-0.34
-0.24
-0.43
-0.33
-0.33
-0.23

Tableau 1: Écart de mesure entre plusieurs mesures 3 points version A.2

Plusieurs causes sont envisagées à ce problème: mauvaise qualité du contact qui mesure. Répétabilité de positionnement du servo moteur. Nous avons en effet remarqués sur le projet HEXAPOD VOR005 que 2 commandes identiques dans un servo moteur ne provoquaient pas le même déplacement.

Essai en commandant manuellement la sortie du palpeur puis en débranchant le servo moteur (afin que le capteur soit toujours dans la même position).


Mes 1 Mes 2 Mes 3 Mes 4
0.05
-0.01
-0.06
0.01
-0.04
0.03
-0.02
-0.08
-0.08
0
-0.07
0.01
-0.06
0.02
-0.35
-0.33
0.02
-0.32
0.03
-0.33
0.02

Tableau 2: Écarts de mesures avec servo toujours dans la même positon !

CQFD !

Version B

Démarrée en Février 2015
Illustration 8: Platine CD en cours de câblage

L'idée du servo moteur est pas top et d'après les essais ci-dessus, nous voyons que ce n'est pas une bonne solution

Proposition de remplacement : chariot de lecteur CD/DVD => embarqué un 328P qui interprète les ordres servo moteur

Pour décoder les impulsions de commande, on peut utiliser pulsein(pin, HIGH):

int pin = 7;
unsigned long duration;
void setup(){
  pinMode(pin, INPUT);
}
void loop(){
  duration = pulseIn(pin, HIGH);
}

Attention toutefois pulsein attend l'impulsion, sauf si on utilise le paramètre timeout dans ce cas la valeur de retour est nulle.

Illustration 9: Montage maquette platine lecteur CD

Si duration est inférieure à 1000us alors commande sortir capteur (50° dans mon cas). Si duration supérieur à 1000us commande entrée.

Connecteur Jaune, Vert, Rouge, Noir

1 : point orange = fil Jaune

Stepper monMoteur(60, A2, A1, A0, A4);

A2 = jaune, A1 = vert, A0= rouge, A4 = noir

200pas = 30mm

Essais sur la maquette ci-dessus montrent que le moteur n'est pas assez puissant pour activer le endstop haut qu'on apperçois sur la photo (petit téton blanc au bout des fils gris et orange).

Cette solution est donc abandonnée.

Version B.2

un moteur CC, deux endstop (haut, bas), un L293 et un crémaillère verticale qui descend le senseur imprimée. Là encore, il faut intercepter les commandes du servo donc le design 328P reste d'actualité.

Version C

Illustration 10: senseur à capteur à effet hall de "The Breizh Maker"

Version avec capteur à effet Hall. Dans cette version le capteur à proprement parlé est fixe, c'est une tige mobile qui palpe. Cette solution a été mise en oeuvre par Thierry Monnot de "The Breizh Maker". La difficulté est alors de faire rentrer et sortir cette tige. En position sortie, il faut qu'elle dépasse la base de la buse d'impression et en position rentrée, qu'elle soit toujours au dessus. La solution de Thierry est de sortir la tige à l'aide d'une pince et d'utilisé l'effet aimant pour la rentrer à la fin du palpage.

Parmi les solutions que nous avons envisagées:

le principe de la grue avec un "câble" et un moteur enrouleur/dérouleur - on utilise la gravité pour sortir (faire descendre) le palpeur.

une crémaillère avec pignon débraillable

une ergot à ressort pour tenir en position haute (motorisable) et la gravité pour sortir et un marche pied pour rentrer (en dehors de la zone d'impression).

Dans cette solution le capteur à effet hall peut être remplacé par un ILS voir même par un simple fin de course mécanique (avec ou sans roulette).


Illustration 11: Schéma ayant inspiré le montage


Targette supérieure mue par un moteur CC (donc la carte 328P, L293 est aussi utilisable)


Hall captor chez RS : 680-7504P


http://reprap.org/wiki/Hall-%CE%98

http://www.rs-particuliers.com/WebCatalog/Capteur_a_effet_Hall_A1302KUA_T__Ultra_Mini_SIP_3_broches_4_5__6_V-6807504.aspx

Etude du capteur A1302

Tension de sortie sens aimant : 762mV 2.5V au repos (il faut bien connecter les broches) Attention dans la datasheet les broches 2 et 3 sont permutées entre les 2 type de boîtiers.

Illustration 12: Brochage A1302

Avec aimant cylindrique 12mmx3 x2 220mV à 2mm. Le capteur détecte un pôle de l'aimant. Le design aurait été plus simple avec des aimants de type barreau mais nous n'avions sous la main que des aimants de type disque avec un pôle sur chaque face. La principal difficulté reste l'escamotage du palpeur et le réglage de la distance d’escamotage. C'est le rôle de l'aimant sur le dessus. C'est un réglage de conception un peu délicat. Trop puissant et il escamote le palpeur trop tôt trop faible il l'escamote trop tard. Comprendre tôt et tard comme les longueurs de palpeur en dessous ou au dessus de l'extrémité de la buse.


PalpeurVersionC1.jpg ExtruderAvecVersionC1.jpg

Comparateur à ampliop LM358

Lm358Dpinout.jpg

Nous avons positionné les aimants arbitrairement pour avoir une variation de 2.5V en absence d'aimant vers 5V quand l'aimant est présent devant le capteur.

3k/10k sur l'entrée + , capteur sur l'entrée -
JSO 9/5/15: valeurs à confirmer.

Conserver le mécanical endstop Z tout en ajoutant l'autolevelling

Mechanical endstop de chez makerbot V1.2 à 4 fil. Celui du haut = sig, GND, GND et en bas VCC.


EndStopSpecial.jpg Mechanical-endstop display pcb.jpg

Mechanical-endstop display large preview featured.jpg

Petit soucis, la branche NC du switch qui renvoi du VCC sur le fil SIG quand on est pas en contact. Un petit coup de pince coupante plus tard et ça marche.

Pourquoi cela pose-t-il problème ? On veut pouvoir faire un OU de zéros logique entre le fin de course mécanique et le fin de course de l'autolevelling donc soit on est relier au VCC par pull-up quand aucun des 2 n'est actif. Soit on est directement relier au GND par un des 2 fin de course voire même les 2.

Petite astuce pour la recherche des offsets: grâce à la connexion simultané des 2 fins de course(celui de base et celui de l'autolevelling, on peut facilement passer d'un mode à l'autre).


Illustration 13: autoleveling connecté
Illustration 14: autoleveling déconnecté

Grâce au petit montage ci-dessus, 3 connecteurs 3 points reliés en fil à fil (1 au 1, 2 au 2 et 3 au 3) – il devient plus facile de passer d'un mode à l'autre sans être obligé de se contorsionner derrière la carte RAMPS...Mécaniquement et temporellement parlant le fin de course de l'autolevelling entre en action avant le fin de course mécanique, on peut laisser ce dernier branché en permanence. De plus il fait office de sécurité si l'autolevelling avait un soucis

Les premiers essais de la version C

Une erreur étrange est apparue au cours des essais:

Error:Line Number is not Last Line Number+1, Last Line: x

D'après le grand maître Google, il s'agirait d'une 'harware issue' => d'où, désactivation de l'écran LCD dans Marlin. Donc pour le moment retrait de l'écran LCD (on verra plus tard) disparition des erreurs (probablement un problème de limite de courant délivré par le régulateur de la carte ARDUINO cf. #Annexes ci-dessous.)

Mesure des offset méthode easy

CopieEcranRepetier zerobuse.jpg

  1. Faire un zéro standard en débranchant le palpeur (donc avec endstopZ classique à peu près au centre du plateau.
  2. Marquer le point.
  3. Relever les valeurs dans Repetier (position buse).
  4. Brancher le senseur
  5. Emmener la tige de ce dernier en lieu et place de la bus, grâce au boutons de déplacement de Repetier.
  6. Monter/descendre l'axe Z jusqu'à la limite du zéro senseur. (jouer avec les déplacement de 1/10 de mm pour trouver la position exacte (rappel pour les axes X et Y la position est au mm près cf. Procédure pour mesurer les paramètres pour Marlin plus haut dans cet article).
  7. Noter les nouvelles valeurs (position senseur).
  8. Calculer les valeurs d'offset pour Marlin

CopieEcranRepetier sensorVC 150414.jpg


Pos. Buse Pos. Senseur Offset
X 100 149 -49
Y 60 60 0
Z 0 19,5 -19,5

Procédure d'essai autoleveling en manuel

G1 Z12

G28 X Y

G1 X150 Y60 F7600 //sortir le palpeur

G29

G1 Z-12 //rentrée du capteur

G1 Z6 // éloigne un peu du bed

Activation du mode Grille à trois point

J'ai été confronté à cette erreur:

#error "The X axis probing range is not enough to fit all the points defined in AUTO_BED_LEVELING_GRID_POINTS"

Qui provient du fichier config.h au environ de la ligne 470

Les paramètres pris en compte pour ce test sont

X_PROBE_OFFSET_FROM_EXTRUDER -48
AUTO_BED_LEVELING_GRID_POINTS 3
LEFT_PROBE_BED_POSITION 20
RIGHT_PROBE_BED_POSITION 140

L'erreur pête si :

|X_PROBE_OFFSET_FROM_EXTRUDER * AUTO_BED_LEVELING_GRID_POINTS| >=
RIGHT_PROBE_BED_POSITION – LEFT_PROBE_BED_POSITION

AN : 48*3 >= 140-20 <=> 144>=120 => oui donc erreur

Qu'à cela ne tienne prenont 190 (Xmaxi) pour RIGHT_PROBE_BED_POSITION

170 est bien supérieur à 144 et ça compile !

Problème lors des déplacement de la tête pour palper c'est 190 + l'offset qui est appliqué donc partage en butée

Paramètres pour que ça passe:

X_PROBE_OFFSET_FROM_EXTRUDER -46
AUTO_BED_LEVELING_GRID_POINTS 3
LEFT_PROBE_BED_POSITION 1
RIGHT_PROBE_BED_POSITION 140

46*3 versus 140-1 => 138 >= 139 ça passe juste !!!!

En trichant un peu sur l'offset

Lancer une impression

Lancer le chauffage de la buse et éventuellement du plateau

Faire le zéro en Z:

G28 X Y //homing X et Y

G1 Y60 X150 F7600 // Centrer X et Y sur le plateau

G28 Z // zéro en Z

Lancer l'impression

Conclusion et futur

Ce n'est peut-être pas très claire dans ce qui précède, mais la seule version réellement fonctionnel à nos yeux est la version C à capteur à effet Hall.

La prochaine étape, après beaucoup de repos sur ce sujet, sera l'implémentation d'un capteur à effet capacitif avec zéro contact et zéro mécanique.

cf [Capteur capacitif] Attention : capteur LJ12a3-4-z est inductif. Le capteur LJC18A3-H-Z/BX est capacitif.

ou [Capteur capacitif] diam 12mm distanc de détection 5mm


CapteurCapacitif.png


Autres capteurs: [Autre capteur capacitif]

Annexes

Commandes utiles

Rappel : dans le readme.md de marlin, se trouve la liste des commandes supportées

Certaines commandes Marlin sont bien pratiques.

M401 : sortie capteur (abaisser)

M402 : rentrer capteur

M280 P0 S48 : metter le servo moteur 0 à l'angle 48°

G28 X Y : faire le zéro axe X et Y

G1 X40 F7600 : déplacer l'axe X à 40mm à la vitesse 7600

M600 - Pause for filament change X[pos] Y[pos] Z[relative lift] E[initial retract] L[later retract distance for removal]

G29 lancer une mesure "autoleveling"

maj JSO 10/5

G90 - Use Absolute Coordinates

G91 - Use Relative Coordinates

M114 - Output current position to serial port

M119 - Output Endstop status to serial port

M300 - Play beepsound S<frequency Hz> P<duration ms> (a condition d'avoir un buzzer)

fin maj

Problème connexe : entrée un 5V extérieur

Dans la configuration original, le 12V est appliqué à la carte RAMPS puis "descend" vers la carte 2560 par son entrée VIN au travers de la diode D1. Sur la carte 2560, ce 12V traverse un régulateur linéaire NCP1117 pour générer le 5V de la carte 2560. Ce 5V remonte vers la carte RAMPS par la broche 5V de la 2560 pour alimenter toute les fonctions de la carte RAMPS. A savoir : tous les step stick de pilotage des moteurs pas à pas (seulement leurs parties logiques), les leds des fins de courses et les éventuels servo, écran LCD (avec leurs rétroéclairage) et autres cartes SD. Tout ça, ça fini par consommer !


Alim5VRamps.jpg

Supprimer D1 et injecter le 5V sur la broche 5Vin En n'oubliant pas de relier au 5V SERVO. Ce 5V n'est distribué qu'aux 4 connecteur SERVO de droite.
Ceci peut s'avérer être un fausse bonne idée: voir le paragraphe suivant.



Remarque: la sélection en rouge ci-dessous est une fonctionnalité de EAGLE (show depuis le schéma en cliquant sur le fil VCC – cela allume les points en vert claire – couleur non configurable – pour les avoir en rouge, je suis passé par un logiciel de retouche d'image – GIMP.

Illustration 15: Distribution du VCC (5V)

En supprimant D1, on coupe le VIN qui descend au régulateur d'entrée de l'ARDUINO

Calcul de puissance ARDUINO:

Le régulateur 5V de l'ARDUINO est un NCP1117ST50T3G

SchArduinoRegul.jpg

La datasheet de ce dernier nous dit:

NCP1117DtsExtraiAbsMaxRat.jpg

Or pour nous Vin = 14V (alimentation un peu boostée pour diminuer le temps de chauffe du plateau). Le régulateur a donc 14V – 5V = 9V de chute à ses bornes. Si il doit débiter 150mA. Atmega2560 à 8MHz : 14mA. 5 stepstick pollolu 8mA soit 40mA, l'écran LCD avec son rétroéclairage: pas vraiment d'information trouvé sur le net. On va dire qu'il y a 4 diode pour le rétroéclairage à 10mA chacune soit 40mA +20mA pour l'écran et son électronique. La puissance à dissiper est donc de 9x.15 soit 1.35W.

D'après la formule : TJ = Pd x RJA + Ta = 1.35x160 + 26 (il fait chaud au VoLAB) = 242°C (on est largement au dessus des 175°C maximum admissibles.

NCP1117ThermalRes.jpg

La courbe ci-dessus montre que dans les meilleur condition de dissipation, la puissance maximum dissipable est de 1.4W avec un delta U de 9V aux bornes cela donne 155mA max

Même si ces calcul sont très approximatifs, ils montrent qu'il peut être très facile d'atteindre les limites de dissipation du tout petit régulateur de la carte ARDUINO.

Supprimer D1 et prélever l'alimentation sur le port USB peut s'avérer à la limite plus judicieux.

Pour une utilisation en autonome (i.e. sans PC), supprimer la diode D1 est une bonne idée, en revanche lors de l'utilisation avec PC c'est une fausse bonne idée. En effet, la commutation entre alimentation USB et alimentation régulateur carte est assurée par Vin. Hors dans ce cas il n'y aurait plus cette coupure entre 5VUSB et 5V externe gare aux comportement imprévus.

Illustration 16: Dispositif de commutation de l'alimentation USB de la carte 2560

Autres solutions possibles :

  1. mettre un dissipateur sur le régulateur de la carte 2560 mais compte-tenu des mauvaise condition de dissipation à l'intérieur du sandwitch 2560/RAMPS, il serait peut-être plus judicieux de placer ce dissipateur sous le régulateur de la carte 2560.
  2. Déposer le régulateur de la 2560 et le remplacer par une version plus musclée.

Fichiers sources, pdf et odt

Sources de l'article original au format Open Office: [cliquer ici]

Le même en version pdf : [cliquer là]

Les fichiers sources techniques : [et enfin là]
Le top level se nomme: prusaI3Full6mmAluFrame.SLDASM

License

Ce document est mise à disposition selon les termes de la Licence Creative Commons Attribution 4.0 International.


Bibliographie

webographie

http://www.reprap-france.com/home/91-imprimante-3d-prusa-i3-rework.html

https://github.com/ErikZalm/Marlin

http://arduino.cc/en/Main/Software

https://thebreizmaker.wordpress.com/autoleveling-bed/

Datasheet LM358 disponible chez de nombreux fabricants comme ST

http://www.st.com/web/en/resource/technical/document/datasheet/CD00000464.pdf

Forum Premium Computer Service

Rédaction en langue française

Partant du constat de terrain qu'une énorme masse d'information concernant les sujets qui nous intéressent comme entre autres l'impression 3D n'étaient disponibles que dans la langue de Shakespeare et que de nombreuses personnes dans notre entourage ne maîtrisaient pas la dite langue et soucieux de diffuser encore plus l'information, nous avons pris le parti, au VoLAB, de rédiger nos documents de préférence en langue française.


VoLAB

Un mot sur le VoLAB. VoLAB est un fablab implanté à environ 30km au nord-ouest de Paris dans la commune de Vauréal dans l'agglomération de Cergy Pontoise. Il est animé par l'association VoRoBoTics.

Site internet www.vorobotics.com