Calificación:
  • 3 voto(s) - 5 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Autolevel, paso a paso (III): configuración (ACTUALIZADO y EDITADO).
#1
Autolevel, paso a paso (I): cambiar el firmware.
Autolevel, paso a paso (II): el sensor.
 
En este último post, veremos lo único que queda por hacer para que el autolevel sea operativo: la configuración del firmware.
 
Pero antes de meternos de lleno en ello y para que los que no lo conocen entiendan bien lo que sigue, voy a explicar un poco cómo está definido el sistema de posicionamiento de la impresora.
 
Como muchos ya sabréis, estas impresoras son de tipo cartesiano, lo que significa que la impresión se realiza mediante movimientos en los tres ejes de un sistema de ese tipo. Este sistema conforma lo que se denomina el volumen de impresión, que para una A8 tiene un tamaño de 220x220x240 mm.
 
La pieza impresa se compone de varias capas apiladas en la dirección positiva del eje vertical (Z). Dichas capas se conforman mediante movimientos en el plano que definen los otros dos ejes (X e Y). El X va de izquierda a derecha y el Y de delante a atrás.
 
El origen de este plano (punto 0,0), se encuentra situado en la esquina delantera izquierda del soporte de impresión y se extiende (para la A8 de serie) 220 mm en cada eje, siendo el punto más alejado en el que se puede imprimir por tanto el (220,220).
 
El firmware, que es el software que controla la impresión, sabe dónde se encuentra en cada momento gracias a que, antes de comenzar a imprimir, comprueba donde se encuentra el punto (0,0,0) del espacio de trabajo. Esto lo realiza mediante los interruptores de fin de carrera, de los cuales existe uno para cada eje. Esta comprobación es lo que se denomina “hacer home”.
 
Los interruptores de los ejes X e Y (el del Z es caso aparte, ya que es ajustable) podrían estar colocados de forma que, al activarse, el centro de la boquilla del extrusor estuviese en el origen del plano de impresión (0,0), pero el “sumo hacedor” de la A8 no lo quiso así.
 
Por ello, hay que indicarle al firmware a que distancia se queda de dicho punto en cada uno de esos ejes, para que lo tenga en cuenta y sepa dónde está realmente. Es lo que se denomina el desfase (offset, en inglés). Los desfases siempre son negativos o 0, ya que si no fuese así se perdería área de impresión.
 
Debido a estos desfases, la boquilla del extrusor puede moverse en un área mayor que el área de impresión, ya que a esta se le añaden aquellos en cada eje. A este área ampliada podemos denominarla el área de desplazamiento.
 
Esta es con la que realmente trabaja el firmware y, por defecto, está configurado para que la boquilla del extrusor no pueda exceder sus límites. Aunque, como veremos más adelante, eso se puede cambiar.
 
Con un esquema quedará más claro:

resim
 
El software que crea el archivo que incluye los comandos gcode que definen la pieza (el fileteador o “slicer”), posiciona los puntos referidos al área de impresión, por lo que el firmware realiza una conversión al área de desplazamiento, que es la que él maneja, simplemente restando el desfase que tenga programado. Por eso es importante tener bien configurados esos desfases.
 
Teniendo todo esto en cuenta, vamos a configurar el firmware.
 
Para empezar, ejecutamos el IDE de Arduino y nos colocamos en la pestaña configuration.h, como vimos en el cambio del firmware.
 
Lo primero que vamos a hacer, por si se nos va la mano y hacemos un home all, es configurar lo que se denomina en inglés Z Safe Homing, que es definir un punto seguro para que el eje Z haga home o, lo que es lo mismo, un punto donde el sensor esté sobre la superficie a detectar.
 
Se realiza en las siguientes líneas (recordad lo que indiqué para encontrar parámetros):

//#define Z_SAFE_HOMING
#if ENABLED(Z_SAFE_HOMING)
  #define Z_SAFE_HOMING_X_POINT ((X_BED_SIZE) / 2)    // X point for Z homing when homing all axis (G28).
  #define Z_SAFE_HOMING_Y_POINT ((Y_BED_SIZE) / 2)    // Y point for Z homing when homing all axis (G28).
#endif


y para activarlo, descomentamos la primera línea.
 
Por defecto, el punto que trae configurado es el centro de la cama (X_BED_SIZE / 2, Y_BED_SIZE/ 2), ya que ahí es casi completamente seguro que el sensor estará sobre la superficie de impresión, pero podemos indicar el que queramos siempre que se cumpla para él ese requisito.
 
Aprovechando que estamos aquí, justo debajo se encuentran las líneas que definen la velocidad con que se hace el home en los distintos ejes.
 
Son las líneas:

#define HOMING_FEEDRATE_XY (100*60)
#define HOMING_FEEDRATE_Z  (4*60)

 
La primera define la de los ejes X e Y. Por defecto viene a 100 mm/s.
La segunda define la del eje Z. Por defecto está a 4 mm/s, lo que para mi gusto es un poco lento. Yo la tengo a 6 mm/s:

#define HOMING_FEEDRATE_Z  (6*60)
 
Con estos cambios, ya podemos volver a subir el firmware a la impresora y a partir de este momento, ya podemos hacer un home all con seguridad.
 
La primera vez conviene tener una mano sobre el interruptor para que, en caso de que no se active el sensor (cosa que pasa alguna vez, aún no sé muy bien porqué), parar la impresora rápidamente.
 
Lo primero que tenemos que comprobar es que estén bien los desfases para nuestra máquina. Son los valores de los parámetros X_MIN_POS e Y_MIN_POS.
 
Como vimos al realizar el cambio a Marlin, este trae unos archivos para la A8 ya configurados con los valores que suele tener el montaje original (-33 para el X y -10 para el Y).
 
Para comprobarlos no podemos emplear el home all, dado que tenemos activado el Z Safe Homing y este nos lleva el extrusor al centro de la cama. Hay que hacer un home solo de X e Y, enviando el comando gcode G28 X0 Y0.
 
Tendremos que conectar la impresora al ordenador mediante el cable USB y utilizar una aplicación que permita enviar comandos gcode. Yo utilizo Pronterface, que podeis descargar de aquí. Después de descomprimir el archivo zip, tendremos una carpeta con la aplicación Pronterface.exe en su interior.
 
Al ejecutarla, nos sale esta pantalla:
 
resim
 
En la parte superior izquierda de la ventana, configuramos el puerto COMx asignado a la impresora y la velocidad de conexión a 115200 baudios. Pulsamos Conectar.
 
Nos aparecerá la información con la configuración actual de algunos parámetros de la impresora.
 
Para enviar el comando, escribimos en el campo de texto de abajo a la derecha G28 X0 Y0 y luego pulsamos Send (o la tecla Intro). El extrusor se colocará en el punto de activación de los finales de carrera de X e Y. Después conviene pulsar en Motors off, que está debajo del puerto, para desactivar los motores.
 
Una vez en esa posición, tenemos que medir a que distancia está el centro del agujero de la boquilla del extrusor de los bordes izquierdo y delantero de la superficie de impresión. Esos serán los desfases para nuestra máquina.
 
También tenemos que medir la distancia (en X y en Y), a la que se encuentra el centro del sensor del centro del agujero de la boquilla del extrusor.
 
Si son hacia la izquierda o hacia delante, se toman como negativas (porque van en el sentido negativo de los ejes X e Y, como vimos).
 
Anotamos esos cuatro valores para usarlos más tarde. Serían los valores A, B, C y D del siguiente esquema:
 
resim
 
En este ejemplo A, B y D serían negativas y C positiva.
 
Una vez tengamos esas medidas, comenzamos la configuración.
 
Cargamos el configuration.h en el IDE de Arduino y bajamos hasta la sección Z Probe Options.
 
Dado que estamos usando para el sensor la conexión del final de carrera del eje Z, descomentamos la línea:

#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
 
Como utilizamos un sensor fijo, descomentamos la línea:

#define FIX_MOUNTED_PROBE
 
Más abajo, en la línea:

#define X_PROBE_OFFSET_FROM_EXTRUDER 0   // X offset: -left  +right  [of the nozzle]

en lugar del 0 pondremos el valor medido para C (positivo o negativo).
 
En la línea:

#define Y_PROBE_OFFSET_FROM_EXTRUDER 0   // Y offset: -front +behind [the nozzle]

en lugar del 0 pondremos el valor medido para D (positivo o negativo).
 
La línea:

#define Z_PROBE_OFFSET_FROM_EXTRUDER 0   // Z offset: -below +above  [the nozzle]

la dejamos como está. El Z Probe Offset lo definiremos más tarde.
 
Más abajo, en la línea:

#define X_MIN_POS 0

en lugar del 0 pondremos el valor medido para A (debería ser siempre negativo o 0).
 
En la línea siguiente:

#define Y_MIN_POS 0

en lugar del 0 pondremos el valor medido para B (debería ser siempre negativo o 0).
 
Ahora viene un punto importante.
 
Como vimos cuando comenté el sistema de posicionamiento, el firmware viene configurado por defecto para impedir los movimientos más allá de la activación de los finales de carrera.
 
Pero, dado que el sensor se activa mucho antes de que la boquilla del extrusor esté a la distancia correcta para comenzar la impresión, hay que sobrepasar ese punto de activación del sensor para llegar a ella, por lo que hay que eliminar esa limitación.
 
Se encuentra aquí:

// If enabled, axes won't move below MIN_POS in response to movement commands.
#define MIN_SOFTWARE_ENDSTOPS

 
Para evitar la limitación, hay que comentar esa línea. Pero es una cosa que no me gusta mucho, ya que afecta a todos los ejes y al estar fijos los interruptores de fin de carrera para los ejes X e Y, se podrían producir desperfectos en caso de órdenes de movimiento incorrectas.
 
No sé por qué Marlin no lo tiene por separado para el eje Z, pero vamos a solucionarlo.

ACTUALIZACIÓN
Parece que los de Marlin han leido la linea anterior y en la última versión (1.1.8) han separado por ejes la desactivación de los límites.
Si se utiliza ya esta última versión, ya no es necesario realizar lo que viene después y que ahora está en color azul.


Para ello, vamos a definir un nuevo parámetro que llamaremos MIN_SOFTWARE_ENDSTOP_Z, quedaría así:
 
// If enabled, axes won't move below MIN_POS in response to movement commands.
#define MIN_SOFTWARE_ENDSTOPS


// Si está activado, el eje Z no se podrá mover por debajo de su MIN_POS en respuesta a comandos de movimiento.
//#define MIN_SOFTWARE_ENDSTOP_Z


// If enabled, axes won't move above MAX_POS in response to movement commands.
#define MAX_SOFTWARE_ENDSTOPS

 
Ahora vamos a la pestaña Marlin_main.cpp y buscamos las líneas:

#if ENABLED(MIN_SOFTWARE_ENDSTOPS)
      #if DISABLED(DELTA)
        NOLESS(target[X_AXIS], soft_endstop_min[X_AXIS]);
        NOLESS(target[Y_AXIS], soft_endstop_min[Y_AXIS]);
      #endif
      NOLESS(target[Z_AXIS], soft_endstop_min[Z_AXIS]);


y lo dejamos así:

#if ENABLED(MIN_SOFTWARE_ENDSTOPS)
      #if DISABLED(DELTA)
        NOLESS(target[X_AXIS], soft_endstop_min[X_AXIS]);
        NOLESS(target[Y_AXIS], soft_endstop_min[Y_AXIS]);
      #endif
      #if ENABLED(MIN_SOFTWARE_ENDSTOP_Z)
        NOLESS(target[Z_AXIS], soft_endstop_min[Z_AXIS]);
      #endif

 


Ahora el código viene así:

#define MIN_SOFTWARE_ENDSTOPS
#if ENABLED(MIN_SOFTWARE_ENDSTOPS)
  #define MIN_SOFTWARE_ENDSTOP_X
  #define MIN_SOFTWARE_ENDSTOP_Y
  #define MIN_SOFTWARE_ENDSTOP_Z
#endif


Y solo tendremos que comentar la línea del eje Z para deshabilitar la limitación de ese eje.

Dado que han denominado igual que yo el nuevo parámetro, el texto puede seguir igual a partir de aquí.


Con eso ya tendremos desactivada la limitación únicamente para el eje Z. Si queremos activarla, solo tendremos que descomentar la línea //#define MIN_SOFTWARE_ENDSTOP_Z en configuration.h.
 
Volvemos a la pestaña configuration.h.
 
Más abajo, en la sección Bed Leveling, debemos seleccionar el tipo de autolevel que queremos utilizar. Yo utilizo el LINEAR, por lo que descomentaré este, quedando así:

//#define AUTO_BED_LEVELING_3POINT
#define AUTO_BED_LEVELING_LINEAR
//#define AUTO_BED_LEVELING_BILINEAR
//#define AUTO_BED_LEVELING_UBL
//#define MESH_BED_LEVELING

 
Más abajo, definimos el número de puntos de medición que tendrá la rejilla del autolevel.
 
En las siguientes líneas:

#define GRID_MAX_POINTS_X 3
#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X


se definen las filas y columnas de la rejilla.
 
Por defecto está configurada una de 3x3=9 puntos. He probado otras configuraciones con más puntos, pero no he notado ninguna mejora apreciable, así que la dejaremos así.
 
Más abajo viene un ajuste con el que mucha gente tiene problemas: los límites de la rejilla de medición.
 
Se configura en las siguientes líneas:

#define LEFT_PROBE_BED_POSITION
#define RIGHT_PROBE_BED_POSITION
#define FRONT_PROBE_BED_POSITION
#define BACK_PROBE_BED_POSITION

 
Y los problemas vienen porque a los valores que se indiquen ahí, tiene que poder llegar el sensor. Si no es así, nos dará un error al compilar el firmware.
 
Esos valores están referidos al área de desplazamiento por lo que, para llegar a ellos, la boquilla del extrusor no puede salirse de ella.
 
Dado que el sensor tiene que detectar la cama, tampoco deben estar fuera del área de impresión o no habrá nada debajo de él que pueda detectar.
 
Los límites máximos para una rejilla funcional son (recordad que los valores A, B, C y D pueden ser positivos o negativos):

Para #define LEFT_PROBE_BED_POSITION, con el sensor a la izquierda de la boquilla, 0. Con el sensor a la derecha de la boquilla, A+C si es mayor o igual que 0. Sino, 0.

Para #define RIGHT_PROBE_BED_POSITION, con el sensor a la izquierda de la boquilla, 220+C. Con el sensor a la derecha de la boquilla, 220.

Para #define FRONT_PROBE_BED_POSITION, con el sensor hacia delante de la boquilla, 0. Con el sensor hacia atrás de la boquilla, B+D si es mayor o igual que 0. Sino, 0.

Para #define BACK_PROBE_BED_POSITION, con el sensor hacia delante de la boquilla, 220+D. Con el sensor hacia atrás de la boquilla, 220.
 
Por esto es conviene colocar el sensor lo más cercano que se pueda a la boquilla, ya que así maximizamos el tamaño de la rejilla que se puede usar.
 
Veámoslo con un ejemplo.
 
Supongamos que tenemos el sensor situado como vimos en el esquema de las medidas. Es decir, a la derecha y por delante de la boquilla, por lo que A, B y D serán negativas y C, positiva. Y que hemos obtenido para las mediciones los siguientes valores: A=-33 mm, B=-10 mm, C=30 mm y D=-10 mm.
 
Con esos valores, los límites de la rejilla de medición máxima serían:

#define LEFT_PROBE_BED_POSITION 0 --> (A+C=-33+30=-3, menor que cero, luego 0).
#define RIGHT_PROBE_BED_POSITION 220 --> (sensor a la derecha, luego 220).
#define FRONT_PROBE_BED_POSITION 0 --> (sensor hacia delante de la boquilla, luego 0).
#define BACK_PROBE_BED_POSITION 210 --> (220+D=220+(-10)=210, luego 210).
 
Esa sería la rejilla máxima que se podría configurar en esta máquina sin que diese error al compilar y con el sensor siempre dentro del área de impresión.
 
Pero es conveniente que la rejilla esté centrada y esta no lo está.
 
Para centrarla maximizando su tamaño, hay que mirar cual es la mayor distancia a la que está del borde en cada eje e igualarla en el otro lado.
En este caso, solo hay que cambiar el eje Y, ya que está a 10 milímetros por la parte de atrás.
 
Por lo tanto, la rejilla máxima centrada quedaría así:

#define LEFT_PROBE_BED_POSITION 0
#define RIGHT_PROBE_BED_POSITION 220
#define FRONT_PROBE_BED_POSITION 10
#define BACK_PROBE_BED_POSITION 210

 
Si queremos, a partir de esta, podremos reducirla aumentando por igual la distancia a los distintos bordes de la cama.
En este caso sería conveniente reducirla en el eje X para que el centro del sensor no quede justo en el borde de la cama.

 
Con los valores de los límites de la rejilla de medición, quedaría completa toda la configuración. Ya se puede salvar y subir a la impresora el firmware.
 
Con esto, para poder utilizar el autolevel, ya solo nos queda configurar el desfase del sensor en el eje Z (Z Probe Offset), que habíamos dejado pendiente.
 
Hay varias formas de hacerlo, pero yo creo que la más sencilla es mediante comandos gcode.
 
Para ello, tenemos que conectar con la impresora como vimos antes y realizar el siguiente proceso:
 
1º Calentar cama y fusor a sus temperaturas de impresión, esperando unos minutos para que se estabilicen las dilataciones que se producen.
 
2º Fijamos el desfase a 0 con un comando M851 Z0 y lo guardamos en la EEPROM con un M500.
 
3º Mandamos un comando G28 para hacer home a todos los ejes.
 
4º Movemos la boquilla del extrusor al centro de la cama, con un comando G1 X110 Y110 (si tenemos la cama original), para que la medición que vamos a hacer sea en el centro de la rejilla.
 
5º Con los controles de movimiento del eje Z, tenemos que ajustar la altura de la boquilla del extrusor para que roce ligeramente un folio de papel de 80 gr/m2 (lo que viene a ser una décima de milímetro). Podemos bajar 10 mm la primera vez, ya que el firmware sube esa distancia después de hacer el home del eje Z. Después solo hay que utilizar los de 1 mm (si está aún lejos) y el de 0,1 mm.
 
6º Fijamos el valor del desfase con un comando M851  Z-X.XX, siendo –X.XX el valor que indica en este momento la pantalla para el eje Z. Guardamos el valor en la EEPROM con un comando M500.
 
Y con esto la impresora está preparada para utilizar el autolevel.
 
Para probarlo, mandamos un comando G28 y cuando termine de hacer el home all, mandamos un comando G29. Si todo está correcto, veremos cómo realiza la medición el autolevel. Como siempre, la primera vez con la mano en el interruptor, por si acaso.
 
Ahora, para comenzar a imprimir solo queda configurar el fileteador (slicer) que utilicemos, para que incluya el autolevel en los archivos gcode generados. Para ello, tendremos que incluir en el script de inicio, una línea con un comando G29 justo después de la última línea que tengamos con un G28.
 
Y con esto termino la serie de post sobre el autolevel. He revisado con cuidado todos los post, pero siempre se cuela algún error. Agradeceré las correcciones.
 
Y si hay alguna duda o algo de la configuración que queráis conocer y que no he tratado, preguntad e intentaré contestarlo.

Buenas impresiones para tod@s.

Edito 1:
En color granate está una corrección que he hecho sobre como centrar la rejilla máxima de medición ya que, como lo tenía, no era realmente la máxima que se podia obtener.
Citar
#2
Excelente curro compi, con esto creo que no le quedará duda a aquel que decida colocar un sensor autolevel a la anet a8. Muchas gracias!!!
Citar
#3
Muchisimas gracias por toda la info. Me va a venir de lujo. Estoy deseando poner ya el sensor.
Citar
#4
se agradece!! en una semana me pillo el autolevel y cuando me llegue me pongo con esta guía, algún vídeo que recomiendes para adjuntar a la guía??

Gracias de nuevo!
Citar
#5
(07-11-2017, 03:29 PM)Jotadesign escribió: se agradece!! en una semana me pillo el autolevel y cuando me llegue me pongo con esta guía, algún vídeo que recomiendes para adjuntar a la guía??

Gracias de nuevo!

Pues no lo he mirado y no te puedo recomendar ninguno.
No me gustan mucho los videos, prefiero las cosas técnicas por escrito.
Para mí, la inmensa mayoría de los videos sobre cosas técnicas que circulan por internet son malísimos.
Citar
#6
(07-11-2017, 03:57 PM)Simemart escribió:
(07-11-2017, 03:29 PM)Jotadesign escribió: se agradece!! en una semana me pillo el autolevel y cuando me llegue me pongo con esta guía, algún vídeo que recomiendes para adjuntar a la guía??

Gracias de nuevo!

Pues no lo he mirado y no te puedo recomendar ninguno.
No me gustan mucho los videos, prefiero las cosas técnicas por escrito.
Para mí, la inmensa mayoría de los videos sobre cosas técnicas que circulan por internet son malísimos.


estoy totalmente de acuerdo!! por eso no me había tirado a instalar el autolevel hasta que hiciste esta guía...
Clap Clap

vamos a ver que tal!! 
Perdón por si no esta permitido en el foro:

https://www.amazon.es/ILS-LJ18A3-8-Z-Aut...=autolevel

hablamos siempre de este autolevel no?
Citar
#7
Ese en concreto es un sensor inductivo.
El que es muy parecido a ese y capacitivo, es el LJC18A3-H-Z/BX.
Por ejemplo este.
La C después del LJ es lo que indica que es capacitivo.
Citar
#8
Si señor!!!! es usted todo un maestro!!!!

Tengo todo perfectamente funcionando, pero para sacar el offset de Z usando Repetier-Host resulta que con las flechas no me deja baja de Z0, le das y la impresora ni se inmuta, pero en cambio enviando el GCode G1 Z-x.xx si me deja bajar de "0" y pude sacar el offset sin problemas.


ahhhh....algún administrador debería hacer estos tres posts del autolevel fijo para que no se pierdan y que todos lo tengan a mano.
Citar
#9
Incleible!! Todo muy bien explicado y de esta manera se entiende lo que se está haciendo Sonrisa
Citar
#10
Antes de nada una pasada tu tutorial. Pero a mi me da un problema al editar esto:
#if ENABLED(MIN_SOFTWARE_ENDSTOPS)
      #if DISABLED(DELTA)
        NOLESS(target[X_AXIS], soft_endstop_min[X_AXIS]);
        NOLESS(target[Y_AXIS], soft_endstop_min[Y_AXIS]);
      #endif
      #if ENABLED(MIN_SOFTWARE_ENDSTOP_Z)
        NOLESS(target[Z_AXIS], soft_endstop_min[Z_AXIS]);

Cuando le doy a verificar me da error de que esta incompleto, esta puesto tal como lo esplicas

Se os ocurre por que puede ser?? Gracias
Citar
#11
Si incluyes lo que te dice que falta será más fácil "acertar" Gran sonrisa
Citar
#12
(21-01-2018, 09:42 PM)Bucanero escribió: Alguien que sepa Ingles y que pueda al menos hacer un resumen de este video https://goo.gl/79dvKd , en el se le hacen pruebas a un monton de sensores de proximidad y seria bastante interesante saber los resultados, gracias de antemano a cualquiera que se moleste en traducirlo.
Bucanero,

Tu mensaje de "presentación" en el foro y nos pones deberes de inglés?

Venga, te he hecho un resumen aquí: https://goo.gl/k9oWkA . Espero que se lea bien.

Por cierto, al final del vídeo tienes las gráficas de velocidad de disparo de cada uno.

Saludos,
Citar
#13
al compilar justo antes de configurar el desfase del sensor en el eje Z me da este error:

#error "Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN requires Z_MIN_ENDSTOP_INVERTING to match Z_MIN_PROBE_ENDSTOP_INVERTING."

Ahora vamos a la pestaña Marlin_main.cpp y buscamos las líneas:

#if ENABLED(MIN_SOFTWARE_ENDSTOPS)
#if DISABLED(DELTA)
NOLESS(target[X_AXIS], soft_endstop_min[X_AXIS]);
NOLESS(target[Y_AXIS], soft_endstop_min[Y_AXIS]);
#endif
NOLESS(target[Z_AXIS], soft_endstop_min[Z_AXIS]);

y lo dejamos así:

#if ENABLED(MIN_SOFTWARE_ENDSTOPS)
#if DISABLED(DELTA)
NOLESS(target[X_AXIS], soft_endstop_min[X_AXIS]);
NOLESS(target[Y_AXIS], soft_endstop_min[Y_AXIS]);
#endif
#if ENABLED(MIN_SOFTWARE_ENDSTOP_Z)
NOLESS(target[Z_AXIS], soft_endstop_min[Z_AXIS]);
#endif


esto no lo ent¡ngo en el io sale asi lomas parecido:

void clamp_to_software_endstops(float target[XYZ]) {
if (!soft_endstops_enabled) return;
#if IS_KINEMATIC
const float dist_2 = HYPOT2(target[X_AXIS], target[Y_AXIS]);
if (dist_2 > soft_endstop_radius_2) {
const float ratio = soft_endstop_radius / SQRT(dist_2); // 200 / 300 = 0.66
target[X_AXIS] *= ratio;
target[Y_AXIS] *= ratio;
}
#else
#if ENABLED(MIN_SOFTWARE_ENDSTOP_X)
NOLESS(target[X_AXIS], soft_endstop_min[X_AXIS]);
#endif
#if ENABLED(MIN_SOFTWARE_ENDSTOP_Y)
NOLESS(target[Y_AXIS], soft_endstop_min[Y_AXIS]);
#endif
#if ENABLED(MAX_SOFTWARE_ENDSTOP_X)
NOMORE(target[X_AXIS], soft_endstop_max[X_AXIS]);
#endif
#if ENABLED(MAX_SOFTWARE_ENDSTOP_Y)
NOMORE(target[Y_AXIS], soft_endstop_max[Y_AXIS]);
#endif
#endif
#if ENABLED(MIN_SOFTWARE_ENDSTOP_Z)
NOLESS(target[Z_AXIS], soft_endstop_min[Z_AXIS]);
#endif
#if ENABLED(MAX_SOFTWARE_ENDSTOP_Z)
NOMORE(target[Z_AXIS], soft_endstop_max[Z_AXIS]);
#endif
}

y esto tampoco esta asi:

Se encuentra aquí:

// If enabled, axes won't move below MIN_POS in response to movement commands.
#define MIN_SOFTWARE_ENDSTOPS


me imagino que sera esto:

// Max software endstops curtail movement above maximum coordinate bounds
#define MAX_SOFTWARE_ENDSTOPS
#if ENABLED(MAX_SOFTWARE_ENDSTOPS)
#define MAX_SOFTWARE_ENDSTOP_X
#define MAX_SOFTWARE_ENDSTOP_Y
#define MAX_SOFTWARE_ENDSTOP_Z
#endif
Citar
#14
El tutorial que estás siguiendo se elaboró hace casi tres meses y por aquella fecha la versión de Marlin que había era la 1.1.6.
Tú estás utilizando una más moderna y han cambiado algunas cosas desde las versiones anteriores.
Por ejemplo lo que comentas, ya que han separado por ejes el control de límites.
Ahora ya se puede desactivar en los ejes que se desée por separado, sin necesidad de hacer la modificación que yo planteaba para la versión 1.1.6.
Para estas versiones más modernas viene así:
#define MIN_SOFTWARE_ENDSTOPS
#if ENABLED(MIN_SOFTWARE_ENDSTOPS)
 #define MIN_SOFTWARE_ENDSTOP_X
 #define MIN_SOFTWARE_ENDSTOP_Y
 #define MIN_SOFTWARE_ENDSTOP_Z
#endif

Para hacer lo que se indicaba en el tutorial, ahora solo hay que comentar la linea del eje Z, sin necesidad de cambiar nada más. Quedaría así:
#define MIN_SOFTWARE_ENDSTOPS
#if ENABLED(MIN_SOFTWARE_ENDSTOPS)
 #define MIN_SOFTWARE_ENDSTOP_X
 #define MIN_SOFTWARE_ENDSTOP_Y
//#define MIN_SOFTWARE_ENDSTOP_Z
#endif

Naturalmente, según vayan saliendo nuevas versiones, se pueden producir cambios que invaliden partes del tutorial.
Pero comprenderéis que no puedo modificarlo cada vez que eso suceda.
Cuando alguien encuentre un problema, tendrá que indicarlo para poder darle una solución.
Respecto al error al compilar, se produce porque tienes una lógica distinta para el Z_MIN_ENDSTOP_INVERTING y para el Z_MIN_PROBE_ENDSTOP_INVERTING. Tienen que tener el mismo valor.
Citar
#15
Ok... muchas gracias, voy a probar y te digo.
Citar
#16
#define Z_MIN_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.

si los tenia diferente, este en false y el otro en true...

cual cambio?

lo he puesto en false para probar, el problema es que ahora me dice que es muy grande el archivo... que borre cosas... he probado a borrar cosas que estan comentadas pero no cambia el tamaño

lo raro es que me habia dejado compilar antes de hacer estos cambios...

habia incluido la libreria u8glib y lo habia compilado bien, y al cambiar esto me pone que too big....
Citar
#17
Estos parámetros controlan la lógica de los interruptores de fin de carrera.
Normalmente, tienes que poner el Z_MIN_PROBE_ENDSTOP_INVERTING al valor que tiene Z_MIN_ENDSTOP_INVERTING
Los interruptores que tráe la A8 son del tipo NO y necesitan estar a true para funcionar correctamente. Supongo que los de la A6 son iguales.
El sensor tiene que ser del tipo NPN-NO para poder utilizar el conector de final de carrera del eje Z (como se indica en la parte II del tutorial).
Lógicamente, Z_MIN_PROBE_ENDSTOP_INVERTING tiene que estar también en true.
Citar
#18
Bueno, despues de seguir tu guia paso a paso tengo Marlin imprimendo en mi a6 con autolevel, mas facil de lo que parecia, queria agradecer tu trabajo ya que me ha sido de mucha ayuda, MUCHISIMAS GRACIAS¡¡¡¡¡

aprovecho para preguntarte una duda... al hacer G29 los primeros 3 puntos de la derecha me los hace fuera de la cama y los del medio e izquierda no me los hace centrados, me imagino que sera por los #define xxx_PROBE_BED que no lo he puesto bien no?

Saludos, y una vez mas....

MUCHIIIISIMAS GRACIAS¡¡¡¡¡
Citar
#19
Me alegro que te haya servido de ayuda.
Sobre tu pregunta, si los puntos de medición del autolevel no los hace donde debería y las medidas están correctas, entonces son los valores de los #define XXX_PROBE_BED_POSITION.
Como decía en el tutorial, esa configuración suele dar problemas a mucha gente.
Dale otra lectura con calma a esa parte y si ves que no das con ello, indica las distintas medidas que tiene tu máquina (de la cama y los parámetros A, B, C y D) y lo que estás poniendo en los #define XXX_PROBE_BED_POSITION para ver donde está el problema.
Citar
#20
No lo consigo....

esta es mi configuracion:

#define X_PROBE_OFFSET_FROM_EXTRUDER -31 // X offset: -left +right [of the nozzle]
#define Y_PROBE_OFFSET_FROM_EXTRUDER 20 // Y offset: -front +behind [the nozzle]
#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle]


#define X_BED_SIZE 220
#define Y_BED_SIZE 220
#define X_MIN_POS 0
#define Y_MIN_POS -4
#define Z_MIN_POS 0
#define Z_MAX_POS 230

//#define LEFT_PROBE_BED_POSITION 31
//#define RIGHT_PROBE_BED_POSITION 189
//#define FRONT_PROBE_BED_POSITION 31
//#define BACK_PROBE_BED_POSITION 189

y el home me lo hace en el x141 y90 z11.69 que es el centro del sensor....

vale... mientras escribia consegui mover el g29 ahora ya lo hace mas centrado.... cambiando por estas:

#define LEFT_PROBE_BED_POSITION 15
#define RIGHT_PROBE_BED_POSITION 170
#define FRONT_PROBE_BED_POSITION 20
#define BACK_PROBE_BED_POSITION 170


y lo del home en el centro del sensor??
Citar


Temas similares...
Tema Autor Respuestas Vistas Último mensaje
  Autolevel, paso a paso (I): Cambiar el firmware. Simemart 38 4,339 Hace 21 minutos
Último mensaje: SebaS
  Autolevel, paso a paso (II): el sensor. Simemart 5 2,395 Hace 3 horas
Último mensaje: Bucanero
  Problema Autolevel cambia de un dia para otro urrielu 16 232 18-04-2018, 07:55 AM
Último mensaje: david.4
  APORTE Autoapagado con Marlin (Editado). Simemart 6 422 13-04-2018, 11:31 PM
Último mensaje: Simemart
  Problema con autolevel Jozila 7 1,251 29-03-2018, 06:32 PM
Último mensaje: Balackdur