Différences entre les versions de « Autoleveling pour Prusai3 »
(28 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 25 : | Ligne 25 : | ||
[[Image:Image3.jpg|thumb|center|<center>Wade extruder pour Prusa i3</center>]] | [[Image:Image3.jpg|thumb|center|<center>Wade extruder pour Prusa i3</center>]] | ||
= Répertoire de travail = | = Répertoire de travail = | ||
Ligne 34 : | Ligne 35 : | ||
Donnees\008_iao_wrk\Arduino\Croquis\Marlin\Marlin-1.0.1_fromGithub | Donnees\008_iao_wrk\Arduino\Croquis\Marlin\Marlin-1.0.1_fromGithub | ||
= Version A = | = Version A = | ||
Ligne 222 : | Ligne 222 : | ||
Après tout le probbing n'est pas au dixième en X et Y | Après tout le probbing n'est pas au dixième en X et Y | ||
'''maj JSO''' : Cette erreur est visiblement apportée par Arduino 1.5 et supérieur (pas de nombre décimaux dans les #if). | '''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). | ||
Ligne 301 : | Ligne 301 : | ||
L'axe Z ne prend pas en compte du tout Z_PROBE_OFFSET_FROM_EXTRUDER<br /> | L'axe Z ne prend pas en compte du tout Z_PROBE_OFFSET_FROM_EXTRUDER<br /> | ||
'''maj JSO''' 9/05/2015 | '''maj JSO''' 9/05/2015 | ||
Bug reconnu officiellement dans Marlin '''bug #2040''' en cours de traitement<br /> | Bug reconnu officiellement dans Marlin '''bug #2040''' en cours de traitement<br /> | ||
Ligne 525 : | Ligne 526 : | ||
[[Image:extraitDsA1302_pinout.jpg|thumb|''Illustration 12: Brochage A1302'']] | [[Image:extraitDsA1302_pinout.jpg|thumb|''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 | 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. | ||
Ligne 539 : | Ligne 540 : | ||
[[Image:lm358Dpinout.jpg]] | [[Image: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. | 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. | ||
Ligne 557 : | Ligne 559 : | ||
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. | 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. | ||
Petite astuce pour la recherche des offsets: grâce à la | 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). | |||
Ligne 565 : | Ligne 569 : | ||
|} | |} | ||
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... | 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 == | == Les premiers essais de la version C == | ||
Ligne 680 : | Ligne 684 : | ||
Lancer l'impression | 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 [[http://premium-forum.fr/viewtopic.php?f=9&t=391 Capteur capacitif]] Attention : capteur LJ12a3-4-z est inductif. | |||
Le capteur LJC18A3-H-Z/BX est capacitif. | |||
ou [[http://www.aliexpress.com/item/1Pcs-M12-Three-Wire-DC-NPN-NO-5mm-distance-measuring-capacitive-proximity-switch-sensor-LJC12A3-5/2015738089.html?spm=2114.01020208.3.11.4UskcF&ws_ab_test=searchweb201556_2,searchweb201644_2_79_78_77_82_80_62,searchweb201560_4 Capteur capacitif]] diam 12mm distanc de détection 5mm | |||
[[Fichier:capteurCapacitif.png|center]]<br /> | |||
Autres capteurs: | |||
[[http://www.micro-epsilon.fr/displacement-position-sensors/capacitive-sensor/capacitive-displacement-sensors/index.html Autre capteur capacitif]] | |||
= Annexes = | = Annexes = | ||
Ligne 716 : | Ligne 737 : | ||
'''fin maj''' | '''fin maj''' | ||
== Problème connexe : | == 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 ! | 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 ! | ||
Ligne 722 : | Ligne 743 : | ||
[[Image:alim5VRamps.jpg]] | [[Image: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. | '''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. <br /> | ||
Ceci peut s'avérer être un fausse bonne idée: voir le paragraphe suivant. | |||
Ligne 754 : | Ligne 776 : | ||
Supprimer D1 et prélever l'alimentation sur le port USB peut s'avérer à la limite plus judicieux. | 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 fausse bonne idée.''' En effet, la commutation entre alimentation USB et alimentation régulateur carte est assurée par Vin. | '''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. | ||
[[Image:2560switchAlimUSB.jpg|thumb|''Illustration 16: Dispositif de commutation de l'alimentation USB de la carte 2560'']] | [[Image:2560switchAlimUSB.jpg|thumb|''Illustration 16: Dispositif de commutation de l'alimentation USB de la carte 2560'']] | ||
Ligne 789 : | Ligne 811 : | ||
[http://www.st.com/web/en/resource/technical/document/datasheet/CD00000464.pdf http://www.st.com/web/en/resource/technical/document/datasheet/CD00000464.pdf] | [http://www.st.com/web/en/resource/technical/document/datasheet/CD00000464.pdf http://www.st.com/web/en/resource/technical/document/datasheet/CD00000464.pdf] | ||
[http://premium-forum.fr/viewtopic.php?f=9&t=391 Forum Premium Computer Service] | |||
= Rédaction en langue française = | = Rédaction en langue française = |
Version actuelle datée du 23 mars 2022 à 22:28
← Accueil
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é.
A la base l'extruder Wade est fait pour les imprimante à chariot horizontal. La i3 a un chariot vertical.
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
Servo moteur 9g
Contacteur mécanique de l'axe Z
2 pièces conçues: Support et pieds
A priori un déplacement vertical de 10mm 13mmsuffit pour ne pas entrer en collision avec le 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 ?
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)
Activer 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
- appliquer la procédure ci-dessus
- 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).
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.
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.
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.
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
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.
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
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).
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.
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.
Comparateur à ampliop LM358
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.
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).
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
- Faire un zéro standard en débranchant le palpeur (donc avec endstopZ classique à peu près au centre du plateau.
- Marquer le point.
- Relever les valeurs dans Repetier (position buse).
- Brancher le senseur
- Emmener la tige de ce dernier en lieu et place de la bus, grâce au boutons de déplacement de Repetier.
- 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).
- Noter les nouvelles valeurs (position senseur).
- Calculer les valeurs d'offset pour Marlin
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
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 !
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.
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
La datasheet de ce dernier nous dit:
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.
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.
Autres solutions possibles :
- 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.
- 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