05-10-2018, 02:26 PM
Varias veces he respondido a consultas sobre la orientación de las piezas impresas por las impresoras que referencian la posición mediante tres ejes cartesianos (rectangulares) y siempre se suscitan las mismas dudas y comentarios, estos últimos la mayoría de las veces equivocados o inexactos. Por ello, voy a intentar clarificar un poco este tema.
Como siempre, serán bienvenidas las objeciones y correcciones a lo que expongo, si son presentadas con argumentos razonados que las apoyen.
Solo me referiré a los ejes X e Y, dado que el eje Z siempre tiene la misma orientación (ya que no es posible imprimir de arriba a abajo).
La orientación de las piezas impresas está condicionada por la del programa de diseño con que se han generado, ya que el STL que se utiliza para cortar la pieza lleva incorporada esa orientación.
Tanto la del programa de corte como la de la impresora tendrán que coincidir con aquella para que no sea necesario invertir de forma manual la pieza antes de generar el archivo G-code.
La dirección estándar para todos los programas de diseño que conozco es (en sentido creciente): X de izquierda a derecha; Y de delante a atrás y Z de abajo a arriba.
CURA considera las direcciones según ese criterio, por lo que no hay problema en este caso. En él este aspecto no es configurable, aunque de forma manual puede invertirse la pieza según cualquier eje.
Simplify3D, por defecto, tiene invertido respecto a ese criterio el sentido del eje Y, por lo que reflejará las figuras según ese eje. Este criterio puede cambiarse en la configuración de la máquina y ajustarlo como se quiera. También, como en CURA, se puede reflejar de forma manual la pieza según cualquiera de los ejes.
No conozco el criterio por defecto que utilizan otros programas de corte ni sus posibilidades de configuración en este sentido, aunque supongo que serán similares a los anteriores.
Por lo que se refiere a la máquina, la orientación la fijan tanto la posición física de los interruptores de final de carrera de los ejes como su tipo (configurado en el firmware).
La posición de los interruptores es una decisión de diseño, más o menos condicionada por la estructura elegida. Suele ser habitual la colocación atendiendo, más que nada, a como llevar los cables hasta la placa.
El tipo se refiere a si es un interruptor de final de carrera que limita el movimiento en dirección descendente del eje (MIN) o ascendente (MAX).
Una vez decididos ambos, queda fijado el origen de coordenadas de la máquina (punto 0,0,0) y en ese momento, ya no queda margen de libertad a la configuración del firmware. Sólo queda ya configurar el sentido de giro de los motores, para que se muevan en las direcciones correctas cuando lo hacen hacia los interruptores (decreciente si son MIN o creciente si son MAX).
Como sucede para el programa de corte, si esta orientación no coincide con la del programa de diseño y el de corte, habrá inversión en el eje en que sean distintas.
Sólo hay dos formas de cambiar la orientación de la máquina: cambiar la posición del interruptor de carrera del eje al lado contrario o cambiar el tipo de interruptor en el firmware. En ambos casos, hay que cambiar también el sentido del movimiento de ese eje.
Cambiar el interruptor de posición en la impresora no siempre es posible o recomendable por lo que, si no queremos o no podemos hacerlo, nos queda como única solución el cambio de tipo.
Lo habitual es que los interruptores de final de carrera estén configurados todos como MIN en el firmware (los ejes se mueven hacia direcciones negativas para realizar el “home”), lo que hace que muchas placas solo traigan conectores para ese tipo.
Para modificar el tipo de interruptor, hay que realizar tres cambios: el control del interruptor por la placa, la dirección del “homing” y el sentido del movimiento de ese eje.
Para lo primero, depende de si tenemos una placa que tenga ya un conector dedicado para el interruptor en posición MAX o no.
Si lo tiene, sólo hay que conectarlo en él e indicarle al firmware que lo utilice. Si no lo tiene o no queremos cambiar la conexión, hay que utilizar el del MIN como si fuese MAX, para lo que hay que cambiar el pin asignado en el archivo pins_X.h (donde X es el nombre de la placa).
La configuración del tipo de interruptor se realiza en las siguientes líneas del archivo Configuration.h:
#define USE_XMIN_PLUG
#define USE_YMIN_PLUG
//#define USE_XMAX_PLUG
//#define USE_YMAX_PLUG
Hay que tener descomentadas (sin el // inicial) las líneas correspondientes a los interruptores que se utilicen en cada eje.
Dado que pasamos a utilizar otro tipo de interruptor, hay que cambiar su lógica si es necesario. Se realiza en las siguientes líneas:
#define X_MIN_ENDSTOP_INVERTING <valor>
#define Y_MIN_ENDSTOP_INVERTING <valor>
#define X_MAX_ENDSTOP_INVERTING <valor>
#define Y_MAX_ENDSTOP_INVERTING <valor>
siendo <valor>, true o false. Los interruptores del tipo NC (normalmente cerrados) tienen valor false y los NO (normalmente abiertos) true.
La dirección del “homing” se configura en las siguientes líneas:
#define X_HOME_DIR -1
#define Y_HOME_DIR -1
El valor -1 indica MIN y el 1 MAX.
Cambiar el sentido del movimiento del eje depende del tipo de impresora que se trate.
Si es del tipo con un driver para cada eje la cosa es sencilla: se puede invertir la conexión del motor o cambiar la lógica en el firmware. Esto último se realiza en las siguientes líneas:
#define INVERT_X_DIR <valor>
#define INVERT_Y_DIR <valor>
siendo <valor>, true o false. Hay que poner el valor que haga que el eje se mueva en la dirección correcta.
Si la impresora es del tipo Core (XY o YX) la cosa se complica, ya que el movimiento de los ejes X e Y se realiza conjuntamente por dos drivers, por lo que no funcionan los métodos descritos para las anteriores.
En este tipo de impresoras confluyen tres variables: el tipo de Core (XY o YX), la conexión de los motores (cual se conecta al driver de X y cual al de Y) y la lógica del movimiento de cada eje.
El tipo de Core lo determina la asignación de ejes que hagamos: será CoreXY, si cuando los motores giran en el mismo sentido se mueve el eje que consideramos X y cuando giran en sentidos opuestos se mueve el eje que consideramos Y. Será CoreYX, si se cumple el criterio contrario al anterior.
Aún no he dado con el algoritmo para sacar la configuración directamente, pero sigo pensando en el tema. Mientras tanto, pruebo todas las configuraciones posibles hasta dar con la correcta.
Las variables son: tipo de cinemática (CoreXY, CoreYX), conexión de los motores (2 formas), lógica del eje X (true, false) y lógica del eje Y (true o false). Total 16 posibilidades.
Veamos un caso concreto, como ejemplo para aplicar todo esto:
Impresora tipo Core con placa RAMPS 1.4, interruptores de final de carrera de tipo NO, situados en la esquina trasera izquierda y configurados como MIN, lo que hace que su origen de coordenadas esté en dicha esquina y con la orientación (en sentido ascendente) del eje X de izquierda a derecha y del eje Y de atrás a adelante, que hace que sea una CoreYX.
Simplify3D como programa de corte, que como vimos, por defecto tiene el origen de coordenadas igual que la impresora, por lo que ningún problema con esto.
Pero sí lo tenemos en que no coincide la orientación del programa de corte/impresora, con la del programa de diseño. Esto hace que se invierta el eje Y, por lo que las piezas aparecen reflejadas respecto a ese eje, tanto en Simplify3D como una vez impresas.
Para solucionarlo, o bien se invierten las figuras al diseñarlas o al cortarlas (lo que obliga a hacerlo de forma manual cada vez), o bien se cambia la orientación, tanto en la impresora como en el programa de corte, para adaptarlos al del programa de diseño. Dado que no quiero tener que acordarme de invertir las piezas, tomaré esta segunda opción.
En Simplify3D lo tengo fácil, ya que solo tengo que indicarle que invierta el eje Y en la configuración de la máquina (si fuese CURA no tendría que hacer nada).
Para revertir la inversión del eje Y en la impresora, sin cambiar de posición el interruptor de final de carrera (cosa que no quiero hacer), tengo que cambiar: 1) el tipo de interruptor de ese eje a MAX, 2) el control del interruptor, 3) la dirección del “homing” a MAX y 4) el movimiento del eje Y para que sea en dirección creciente hacia el interuptor, que ahora es de tipo MAX.
1) Para lograr esto, configuro así las siguientes líneas en el archivo Configuration.h:
#define USE_XMIN_PLUG
//#define USE_YMIN_PLUG
//#define USE_XMAX_PLUG
#define USE_YMAX_PLUG
Dado que el interruptor es de tipo NO, además tengo que poner así la lógica del interruptor:
#define Y_MAX_ENDSTOP_INVERTING true
2) Aunque la placa RAMPS 1.4 lleva conector dedicado para el MAX, no voy a cambiar el interruptor de conector. Utilizaré el MIN al que ya está conectado.
Para ello, en el archivo pins_RAMPS.h, intercambio la definición de pines:
#define Y_MIN_PIN 15
#define Y_MAX_PIN 14
3) La dirección del homing se configura con la siguiente línea:
#define Y_HOME_DIR 1
4) Las posibles configuraciones para cambiar el sentido del eje son:
Iríamos probando hasta dar con la configuración correcta, que es la que consigue que los ejes se muevan según el criterio buscado (en sentido creciente): X de izquierda a derecha e Y de adelante a atrás.
Suponiendo que fuese la 15, querría decir que lo hemos conseguido teniendo conectado el Motor2 al driver del eje X, el Motor1 al del eje Y y con la siguiente configuración en el archivo Configuration.h:
…
//#define COREXY
//#define COREXZ
//#define COREYZ
#define COREYX
//#define COREZX
//#define COREZY
…
#define INVERT_X_DIR false
#define INVERT_Y_DIR true
…
Con ello, el origen de coordenadas de la impresora pasará a la esquina delantera izquierda y el sentido de los ejes de la máquina, del programa de corte y del de diseño serán iguales, con lo que las piezas saldrán perfectamente orientadas en todos los ejes.
Como siempre, serán bienvenidas las objeciones y correcciones a lo que expongo, si son presentadas con argumentos razonados que las apoyen.
Solo me referiré a los ejes X e Y, dado que el eje Z siempre tiene la misma orientación (ya que no es posible imprimir de arriba a abajo).
La orientación de las piezas impresas está condicionada por la del programa de diseño con que se han generado, ya que el STL que se utiliza para cortar la pieza lleva incorporada esa orientación.
Tanto la del programa de corte como la de la impresora tendrán que coincidir con aquella para que no sea necesario invertir de forma manual la pieza antes de generar el archivo G-code.
La dirección estándar para todos los programas de diseño que conozco es (en sentido creciente): X de izquierda a derecha; Y de delante a atrás y Z de abajo a arriba.
CURA considera las direcciones según ese criterio, por lo que no hay problema en este caso. En él este aspecto no es configurable, aunque de forma manual puede invertirse la pieza según cualquier eje.
Simplify3D, por defecto, tiene invertido respecto a ese criterio el sentido del eje Y, por lo que reflejará las figuras según ese eje. Este criterio puede cambiarse en la configuración de la máquina y ajustarlo como se quiera. También, como en CURA, se puede reflejar de forma manual la pieza según cualquiera de los ejes.
No conozco el criterio por defecto que utilizan otros programas de corte ni sus posibilidades de configuración en este sentido, aunque supongo que serán similares a los anteriores.
Por lo que se refiere a la máquina, la orientación la fijan tanto la posición física de los interruptores de final de carrera de los ejes como su tipo (configurado en el firmware).
La posición de los interruptores es una decisión de diseño, más o menos condicionada por la estructura elegida. Suele ser habitual la colocación atendiendo, más que nada, a como llevar los cables hasta la placa.
El tipo se refiere a si es un interruptor de final de carrera que limita el movimiento en dirección descendente del eje (MIN) o ascendente (MAX).
Una vez decididos ambos, queda fijado el origen de coordenadas de la máquina (punto 0,0,0) y en ese momento, ya no queda margen de libertad a la configuración del firmware. Sólo queda ya configurar el sentido de giro de los motores, para que se muevan en las direcciones correctas cuando lo hacen hacia los interruptores (decreciente si son MIN o creciente si son MAX).
Como sucede para el programa de corte, si esta orientación no coincide con la del programa de diseño y el de corte, habrá inversión en el eje en que sean distintas.
Sólo hay dos formas de cambiar la orientación de la máquina: cambiar la posición del interruptor de carrera del eje al lado contrario o cambiar el tipo de interruptor en el firmware. En ambos casos, hay que cambiar también el sentido del movimiento de ese eje.
Cambiar el interruptor de posición en la impresora no siempre es posible o recomendable por lo que, si no queremos o no podemos hacerlo, nos queda como única solución el cambio de tipo.
Lo habitual es que los interruptores de final de carrera estén configurados todos como MIN en el firmware (los ejes se mueven hacia direcciones negativas para realizar el “home”), lo que hace que muchas placas solo traigan conectores para ese tipo.
Para modificar el tipo de interruptor, hay que realizar tres cambios: el control del interruptor por la placa, la dirección del “homing” y el sentido del movimiento de ese eje.
Para lo primero, depende de si tenemos una placa que tenga ya un conector dedicado para el interruptor en posición MAX o no.
Si lo tiene, sólo hay que conectarlo en él e indicarle al firmware que lo utilice. Si no lo tiene o no queremos cambiar la conexión, hay que utilizar el del MIN como si fuese MAX, para lo que hay que cambiar el pin asignado en el archivo pins_X.h (donde X es el nombre de la placa).
La configuración del tipo de interruptor se realiza en las siguientes líneas del archivo Configuration.h:
#define USE_XMIN_PLUG
#define USE_YMIN_PLUG
//#define USE_XMAX_PLUG
//#define USE_YMAX_PLUG
Hay que tener descomentadas (sin el // inicial) las líneas correspondientes a los interruptores que se utilicen en cada eje.
Dado que pasamos a utilizar otro tipo de interruptor, hay que cambiar su lógica si es necesario. Se realiza en las siguientes líneas:
#define X_MIN_ENDSTOP_INVERTING <valor>
#define Y_MIN_ENDSTOP_INVERTING <valor>
#define X_MAX_ENDSTOP_INVERTING <valor>
#define Y_MAX_ENDSTOP_INVERTING <valor>
siendo <valor>, true o false. Los interruptores del tipo NC (normalmente cerrados) tienen valor false y los NO (normalmente abiertos) true.
La dirección del “homing” se configura en las siguientes líneas:
#define X_HOME_DIR -1
#define Y_HOME_DIR -1
El valor -1 indica MIN y el 1 MAX.
Cambiar el sentido del movimiento del eje depende del tipo de impresora que se trate.
Si es del tipo con un driver para cada eje la cosa es sencilla: se puede invertir la conexión del motor o cambiar la lógica en el firmware. Esto último se realiza en las siguientes líneas:
#define INVERT_X_DIR <valor>
#define INVERT_Y_DIR <valor>
siendo <valor>, true o false. Hay que poner el valor que haga que el eje se mueva en la dirección correcta.
Si la impresora es del tipo Core (XY o YX) la cosa se complica, ya que el movimiento de los ejes X e Y se realiza conjuntamente por dos drivers, por lo que no funcionan los métodos descritos para las anteriores.
En este tipo de impresoras confluyen tres variables: el tipo de Core (XY o YX), la conexión de los motores (cual se conecta al driver de X y cual al de Y) y la lógica del movimiento de cada eje.
El tipo de Core lo determina la asignación de ejes que hagamos: será CoreXY, si cuando los motores giran en el mismo sentido se mueve el eje que consideramos X y cuando giran en sentidos opuestos se mueve el eje que consideramos Y. Será CoreYX, si se cumple el criterio contrario al anterior.
Aún no he dado con el algoritmo para sacar la configuración directamente, pero sigo pensando en el tema. Mientras tanto, pruebo todas las configuraciones posibles hasta dar con la correcta.
Las variables son: tipo de cinemática (CoreXY, CoreYX), conexión de los motores (2 formas), lógica del eje X (true, false) y lógica del eje Y (true o false). Total 16 posibilidades.
Veamos un caso concreto, como ejemplo para aplicar todo esto:
Impresora tipo Core con placa RAMPS 1.4, interruptores de final de carrera de tipo NO, situados en la esquina trasera izquierda y configurados como MIN, lo que hace que su origen de coordenadas esté en dicha esquina y con la orientación (en sentido ascendente) del eje X de izquierda a derecha y del eje Y de atrás a adelante, que hace que sea una CoreYX.
Simplify3D como programa de corte, que como vimos, por defecto tiene el origen de coordenadas igual que la impresora, por lo que ningún problema con esto.
Pero sí lo tenemos en que no coincide la orientación del programa de corte/impresora, con la del programa de diseño. Esto hace que se invierta el eje Y, por lo que las piezas aparecen reflejadas respecto a ese eje, tanto en Simplify3D como una vez impresas.
Para solucionarlo, o bien se invierten las figuras al diseñarlas o al cortarlas (lo que obliga a hacerlo de forma manual cada vez), o bien se cambia la orientación, tanto en la impresora como en el programa de corte, para adaptarlos al del programa de diseño. Dado que no quiero tener que acordarme de invertir las piezas, tomaré esta segunda opción.
En Simplify3D lo tengo fácil, ya que solo tengo que indicarle que invierta el eje Y en la configuración de la máquina (si fuese CURA no tendría que hacer nada).
Para revertir la inversión del eje Y en la impresora, sin cambiar de posición el interruptor de final de carrera (cosa que no quiero hacer), tengo que cambiar: 1) el tipo de interruptor de ese eje a MAX, 2) el control del interruptor, 3) la dirección del “homing” a MAX y 4) el movimiento del eje Y para que sea en dirección creciente hacia el interuptor, que ahora es de tipo MAX.
1) Para lograr esto, configuro así las siguientes líneas en el archivo Configuration.h:
#define USE_XMIN_PLUG
//#define USE_YMIN_PLUG
//#define USE_XMAX_PLUG
#define USE_YMAX_PLUG
Dado que el interruptor es de tipo NO, además tengo que poner así la lógica del interruptor:
#define Y_MAX_ENDSTOP_INVERTING true
2) Aunque la placa RAMPS 1.4 lleva conector dedicado para el MAX, no voy a cambiar el interruptor de conector. Utilizaré el MIN al que ya está conectado.
Para ello, en el archivo pins_RAMPS.h, intercambio la definición de pines:
#define Y_MIN_PIN 15
#define Y_MAX_PIN 14
3) La dirección del homing se configura con la siguiente línea:
#define Y_HOME_DIR 1
4) Las posibles configuraciones para cambiar el sentido del eje son:
Iríamos probando hasta dar con la configuración correcta, que es la que consigue que los ejes se muevan según el criterio buscado (en sentido creciente): X de izquierda a derecha e Y de adelante a atrás.
Suponiendo que fuese la 15, querría decir que lo hemos conseguido teniendo conectado el Motor2 al driver del eje X, el Motor1 al del eje Y y con la siguiente configuración en el archivo Configuration.h:
…
//#define COREXY
//#define COREXZ
//#define COREYZ
#define COREYX
//#define COREZX
//#define COREZY
…
#define INVERT_X_DIR false
#define INVERT_Y_DIR true
…
Con ello, el origen de coordenadas de la impresora pasará a la esquina delantera izquierda y el sentido de los ejes de la máquina, del programa de corte y del de diseño serán iguales, con lo que las piezas saldrán perfectamente orientadas en todos los ejes.