Armado de una impresora Prusa P3 Steel

38
Armado de una impresora Prusa P3 Steel Maximiliano Torre ´ Ultima actualizaci´on: Diciembre 2019 1

Transcript of Armado de una impresora Prusa P3 Steel

Page 1: Armado de una impresora Prusa P3 Steel

Armado de una impresora Prusa P3 Steel

Maximiliano Torre

Ultima actualizacion: Diciembre 2019

1

Page 2: Armado de una impresora Prusa P3 Steel

Indice

1. Introduccion 31.1. ¿Que es la impresion 3D? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2. Modelado por deposicion fundida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.3. El proyecto RepRap y la impresora Prusa i3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2. ¿Como funciona la impresora? 4

3. Armando la impresora 53.1. Calibrando los drivers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53.2. Ensamblando la impresora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.3. Configurando el firmware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

A. Codigo para la calibracion de los drivers 37

2

Page 3: Armado de una impresora Prusa P3 Steel

1. Introduccion

1.1. ¿Que es la impresion 3D?

La impresion 3D es un grupo de tecnologıas de fabricacion por adicion donde un objeto tridimensional escreado mediante la superposicion de capas sucesivas de material. Esta tecnologıa surgio en el ano 1986 con lacreacion de la primera impresora 3D por parte de Chuck Hull, quien tuvo la idea mientras endurecıa pinturafresca con luz ultravioleta luego de pintar una mesa.

Existen distintos metodos de impresion, y sus principales diferencias se encuentran en el modo en el que segeneran las diferentes capas para darle forma a los objetos. Algunos metodos utilizan la fundicion o ablanda-miento del material para producir las capas, mientras que otros utilizan materiales lıquidos que son solidificadosmediante diferentes tecnologıas.

1.2. Modelado por deposicion fundida

Figura 1: Esquema del modelado por deposicion fundida.

Las impresoras 3D de escritorio mas comunes (como la que vamos a armar) utilizan el metodo de modeladopor deposicion fundida. Un filamento plastico almacenado en forma de rollo es introducido en una boquilla(llamada nozzle), la cual se encuentra por encima de la temperatura de fusion del material. Esta boquilla puededesplazarse en los tres ejes que dan las dimensiones al objeto: ancho, largo y alto. Una vez que el termoplasticofue fundido es depositado por la boquilla en capas del grosor requerido dandole forma al objeto.

3

Page 4: Armado de una impresora Prusa P3 Steel

1.3. El proyecto RepRap y la impresora Prusa i3

Figura 2: Logo de la comunidad RepRap.

El proyecto RepRap surgio en el ano 2005 en la Universidad de Bath, en Inglaterra, como una iniciativapara desarrollar una impresora 3D open source de bajo costo que pudiera imprimir la mayorıa de sus propiaspiezas. A partir del exito de la primera impresora RepRap el proyecto crecio exponencialmente, llegando atener cientos de colaboradores en todo el mundo desarrollando distintos modelos de impresoras RepRap. Alfomentar el diseno abierto todos los disenos producidos por el proyecto son de libre uso bajo una licencia GNU.

Uno de los modelos producidos por el proyecto RepRap que llego a ser de los mas populares debido asus caracterısticas es la impresora Prusa i3, y este es el modelo de impresora que vamos a construir. Masespecificamente vamos a construir una Prusa P3 Steel, que es una variacion del modelo original de la Prusai3.

2. ¿Como funciona la impresora?

La Prusa que vamos a armar utiliza los ejes X, Y, Z para moverse: el eje X proporciona movimiento derecha-izquierda, el eje Y proporciona movimiento atras-adelante y el eje Z proporciona el movimiento vertical.

Se necesitan dos motores para mover el eje Z, un motor para mover el eje X y un motor para mover el eje Y.Todos estos motores son motores paso a paso, que se llaman ası ya que convierten una serie de pulsos electricosen desplazamientos angulares. Estos desplazamientos son llamados pasos, y el paso puede variar desde 90°hasta1.8°o menos, dependiendo de las especificaciones del motor. Como necesitamos que la impresora se mueva conprecision los motores se van a mover en micro pasos, que son fracciones de un paso (1/2 paso, 1/4 paso, 1/8paso, etc.).

El movimiento linear a lo largo de los ejes se lleva a cabo usando varillas roscadas o una combinacion depolea y correa. Las varillas roscadas son mas eficaces para movimientos lentos y con fuerza, por lo que se usanpara los movimientos del eje Z. Las poleas y correas son mas eficaces para movimientos rapidos y livianos, porlo que se usan para los movimientos de los ejes X e Y.

La inteligencia detras del movimiento de estos motores la proporciona el conjunto del Arduino, su shieldRAMPS y los drivers de los motores. El Arduino recibe el G-code (codigo de maquina) de la pieza que vamos aimprimir y mediante el RAMPS, un shield disenado por la comunidad RepRap, envıa las senales a los motoresindicando como deben moverse. Para poder lograr esto el RAMPS necesita usar drivers para los motores, yaque el microcontrolador del Arduino solo puede entregar pequenas cantidades de corriente que no alcanzan paraponer en funcionamiento a los motores. Los drivers son capaces de entregar mayores cantidades de corriente ytensiones mayores que los 5/3,3V estandar que entregan los microcontroladores.

Para poder hacer que el plastico se introduzca en el nozzle el extrusor utiliza un motor paso a paso demenor torque que los motores de los ejes, ya que no se necesita tanta fuerza. El movimiento de este motor,junto con la temperatura del nozzle y la temperatura de la cama caliente donde se deposita el plastico tambienson controlados por el Arduino mediante el RAMPS.

4

Page 5: Armado de una impresora Prusa P3 Steel

3. Armando la impresora

3.1. Calibrando los drivers

Antes de ensamblar todos los componentes de la impresora para ya dejarlos fijos en su lugar vamos arealizar la calibracion de los drivers de los motores.

Componentes que necesitamos:

4 - Motores Paso a Paso NEMA17 (17HS8401 de 52 N·cm 1.8°, 1,7 A o similar, ver los criterios deseleccion de los motores mas abajo)

1 - Motor Paso a Paso NEMA17 (17HS8401 de 28 N·cm 1.8°, 0,4 A o similar, ver los criterios de seleccionde los motores mas abajo)

1 - Arduino MEGA 2560

1 - RAMPS 1.4

4 - Drivers a4988 o DRV8825

Herramientas que necesitamos:

Multımetro

Cable banana-coco

Destornillador de precision

Pinza

Alicate

A la hora de elegir unos motores y unos drivers adecuados, es importante tener en cuenta dos cosas:

1. Elegir motores con un torque suficiente para la aplicacion que vayan a tener (suficientemente “fuertes”).Esta es la primera decision a tomar, ya que nuestro objetivo principal es mover uno de los ejes de lamaquina con la suficiente fuerza y velocidad.

2. Que los drivers puedan aportar suficiente corriente para que el motor ejerza el torque necesario.

Por lo tanto, las decisiones de que motor y que driver utilizar para una aplicacion se afectan entre sı.En los datasheets de los distintos motores el fabricante especifica una serie de datos sobre el producto,

como por ejemplo los que aparecen en la tabla de la Figura 3.

Figura 3: Tabla de datos caracterısticos de un motor paso a paso.

5

Page 6: Armado de una impresora Prusa P3 Steel

Tenemos que prestar atencion especialmente a estos dos datos:

El torque (o par motor) de retencion: Aparece como “Holding Torque” o “Static moment”. Se mide enN·m o N·cm (Newtons·centımetro) y es uno de los parametros que indica la “fuerza” del motor. Es elque mas habitualmente ofrecen los fabricantes.

Este valor es un indicativo de la fuerza con la que el motor puede mantenerse en un paso. Determinarael aguante del motor a que la inercia del eje que estamos moviendo le haga saltarse un paso al frenardicho eje (que es el punto mas comun en el que puede saltarse un paso).

La corriente o intensidad nominal: Aparece como “Rated Current”, “Phase Current” o “Max Current”.Se mide en Ampers (A) y nos da el valor maximo de corriente que podemos hacer circular de maneracontinua por el motor sin quemarlo.

Si queremos utilizar este motor aprovechando toda su fuerza (a mayor corriente mayor fuerza) tenemosque controlarlo con un driver que sea capaz de entregar toda esa corriente.

Entonces, el motor debe tener suficiente par motor o torque de retencion para mover correctamente el ejede la maquina.

¿Como calculo el mınimo torque que necesito? El calculo teorico de este valor es muy complejo. Influyengran cantidad de factores, como la masa del eje a mover, la velocidad de giro del motor paso a paso, lainductancia de las bobinas, etc. Por lo tanto, es imposible dar una solucion rapida o formula para calcularlo.En vistas de esto vamos a establecer unos valores mınimos, considerando que cualquier motor de superioresprestaciones funcionara tambien correctamente. Para los 4 motores de los ejes el torque mınimo es de 40 N·cm,y para el motor del extrusor el torque mınimo es de 28 N·cm.

Como dijimos, las selecciones que hagamos de motores y de drivers se van a afectar entre sı. Uno de loscriterios a tener en cuenta es la corriente maxima que pueden entregar los drivers, ası que vamos a elegir unmotor cuya corriente nominal no sea muy alta, a ser posible dentro (o cerca) de los valores que pueden otorgarlos drivers. Si tenemos unos drivers a4988 la corriente maxima que pueden entregar es de 2 A, y si tenemos unosdrivers DRV8825 la corriente maxima que pueden entregar es de 2,2 A (estos datos se encuentran especificadosen los respectivos datasheets de los drivers).

Valores estandar de corrientes nominales para los motores son los siguientes:

0,6 - 0,7 A

1,2 - 1,3 A

1,7 - 1,8 A

2,5 A

En caso de duda, entre dos motores del mismo torque no siempre es mejor elegir el de menor corrientenominal. Cuanta mayor corriente nominal, mas conserva su torque el motor a altas velocidades, por lo quevamos a elegir el de mayor corriente que admitan los drivers que tenemos. Normalmente la mejor opcion sonlos de 1,7-1,8 A de corriente nominal, ya que es un valor aceptable para la mayorıa de los drivers disponibles.

Ya dijimos que la fuerza (realmente, el par motor o torque) que va a ejercer un motor depende directamentede la corriente que circula por el. Mas corriente equivale a mas fuerza. Pero tambien, nuestros drivers tienenun valor maximo de corriente que pueden entregar con seguridad. El valor optimo de corriente al que debemosregular los drivers esta comprendido entre el valor mınimo que necesita el motor para ejercer suficiente fuerzapara nuestro sistema y la corriente maxima que puede entregar el driver.

¿Cual es la corriente que hace que mi motor tenga suficiente fuerza? Dado que los valores de torqueque entregan los fabricantes se refieren a su funcionamiento a la corriente nominal, dichos valores de torquedisminuiran si los calibramos a una corriente inferior. Sin embargo, los valores de torque que establecimos parala seleccion de motores estan ya dados con esta disminucion de fuerza en mente, por lo que no es necesario quecalibremos nuestro motor a una corriente tan alta como la nominal, evitando que el driver sufra. Entonces,como regla general vamos a calibrar los motores a una corriente del 60-70 % de su corriente nominal, obteniendoun valor tolerable por los drivers. Ası logramos evitar trabajar al lımite de los valores maximos tolerados porlos drivers, ya que de lo contrario pueden surgir problemas de sobrecalentamiento, perdida de pasos o se puedequemar el driver.

6

Page 7: Armado de una impresora Prusa P3 Steel

Una vez elegida la corriente adecuada para nuestro conjunto de motor y driver vamos a proceder a calibrarlos drivers para asegurarnos de que entreguen esta corriente. Muchas veces, cuando el fabricante no es el oficial,no se cumplen necesariamente las mismas especificaciones. Por lo tanto vamos a realizar tres mediciones paracalibrar la corriente: calibracion mediante tension de referencia, calibracion de corriente con paso completo ycalibracion de corriente con los micro pasos que vamos a utilizar.

Para poder realizar las calibraciones debemos conectar el driver y los motores al RAMPS, y este debe estarconectado a la fuente de alimentacion. Estas conexiones se muestran en la Figura 4 y en la Figura 5. Paraconectar el motor al RAMPS debemos observar que los pines se encuentran etiquetados como 1A, 1B, 2Ay 2B. En los pines 1A y 1B debemos conectar dos cables que pertenezcan a los extremos de una de las dosbobinas del motor (podemos verificar si hay continuidad entre los cables con un multımetro para asegurarnosde que pertenezcan a la misma bobina), y en los pines 2A y 2B debemos conectar los dos cables restantes quepertenecen a los extremos de la otra bobina del motor.

Figura 4: Conexion de la fuente de alimentacion y los motores al RAMPS.

7

Page 8: Armado de una impresora Prusa P3 Steel

Figura 5: Conexion de los drivers al RAMPS.

Para conectar los drivers al RAMPS debemos buscar en el datasheet del driver su pinout y conectarlos enlos respectivos pinouts del RAMPS. Al haber distintas versiones de un mismo driver en algunas el pinout y ladisposicion de los componentes pueden estar espejadas en comparacion con otras versiones, por lo tanto hayque ser cuidadosos para no danar el driver al conectarlo incorrectamente.

Para la calibracion mediante tension de referencia, si observamos el datasheet de nuestros drivers vamosa encontrar una formula que relaciona la tension de referencia del driver (Vref ) con la corriente que entrega(Imax).

En el caso del a4988 esta formula es Vref = 8 · Imax ·Rcs, donde Rcs es el valor de la resistencia del sensorde corriente. Las versiones producidas con anterioridad a enero del 2017 tienen resistencias con un valor deRcs = 0, 05Ω, y las versiones posteriores tienen resistencias con un valor de Rcs = 0, 068Ω.

En el caso del DRV8825 la formula es Vref = Imax

2 .Una vez obtenido el valor de la tension de referencia vamos a proceder a calibrarla midiendo la misma en

el potenciometro o trimmer metalico que usamos para ajustarla. Este potenciometro se muestra indicado paradiferentes modelos de drivers en la Figura 6.

Figura 6: Potenciometro indicado en diferentes modelos de drivers.

8

Page 9: Armado de una impresora Prusa P3 Steel

Para los siguientes pasos de la calibracion vamos a cargar en el Arduino MEGA nuestro programa decalibracion, el cual podemos encontrar en el Apendice A. Este programa envıa un pulso en alto a los pinesde todos los motores y drivers. Es importante apagar la fuente de alimentacion de los motores al cargar unprograma nuevo en el Arduino o al conectar y desconectar los motores, de lo contrario se pueden quemar losdrivers.

Una vez establecida la tension de referencia vamos a calibrar la corriente con paso completo. Segun eldatasheet de nuestros drivers, la corriente que midamos con paso completo es un 70 % de la corriente queentrega el driver con micro pasos (esto es valido tanto para a4988 como para DRV8825). Para poder medir lacorriente, si debajo del driver se encuentra conectado algun jumper (como se indica en la Figura 7) debemossacarlo para establecer el driver en paso completo, conectar el motor al RAMPS y poner el multimetro enserie con cualquiera de los cuatro cables del motor tal como se muestra en la Figura 8. Una vez hechas lasconexiones y que estemos midiendo corriente debemos regular el valor a un 70 % de la corriente que queremosque entregue el driver, esto lo hacemos moviendo el potenciometro.

Figura 7: Jumpers que permiten seleccionar la cantidad de pasos a usar en los motores.

9

Page 10: Armado de una impresora Prusa P3 Steel

Figura 8: Conexion del amperımetro a un motor para poder realizar la calibracion del driver.

Por ultimo vamos a calibrar la corriente con micro pasos, por lo que debemos poner todos los jumpers paraque el driver funcione con los micro pasos necesarios. Una vez hecho esto repetimos el mismo procedimientode medicion que para paso completo pero esta vez la corriente medida va a ser el 100 % de la corriente queentrega el driver, ası que debemos regularla al valor exacto que queremos que entregue el driver.

Finalizada la calibracion de un par motor-driver es conveniente desconectar ambos del shield para poderrealizar la calibracion de otro par motor-driver. Siempre que conectemos o desconectemos un par motor-driverrealizarlo con la fuente de alimentacion del RAMPS apagada. Cada par motor-driver debe conectarse en sulugar en el RAMPS como se indica en la Figura 4. Tener en cuenta que los dos motores del eje Z realizan elmismo movimiento en simultaneo por lo que los vamos a controlar con un solo driver, y entonces tenemos 5motores y 4 drivers (si los tomamos de a pares nos sobraria un motor).

10

Page 11: Armado de una impresora Prusa P3 Steel

3.2. Ensamblando la impresora

El marco de una Prusa P3 Steel esta fabricado de acero, a diferencia del marco de la Prusa i3 originalel cual era de aluminio. Esta mejora elimina la oscilacion del marco de adelante hacia atras, el cual era undefecto de la Prusa Single Frame, gracias a las escuadras de refuerzo. Tambien se simplifica la construccion,eliminando el complejo subchasis de varillas roscadas en el eje Y, y eliminando la necesidad de un gran numerode piezas impresas.

Componentes que necesitamos:

2 - Varillas trefiladas de acero inoxidable M8x340[mm] (Para el eje Y)

2 - Varillas trefiladas de acero inoxidable M8x320[mm] (Para el eje Z)

2 - Varillas trefiladas de acero inoxidable M8x370[mm] (Para el eje X)

2 - Varillas roscadas M5x320[mm]

2 - Acoples de aluminio de 5 mm a M5 antibobble

8 - Rodamientos Lineales LM8UU

1 - Rodamiento 608zz

2 - Poleas GT2

2 metros de correa GT2

3 - Endstops

1 - Hobbed bolt

4 - Resortes para cama

2 - Resortes para idler

Piezas impresas varias

Vamos a empezar por ensamblar el marco tal como se muestra en las Figuras 9, 10 y 11.El primero de los ejes que vamos a ensamblar va a ser el eje Y. Comenzamos por colocar los rodamientos

lineales LM8UU en las varillas trefiladas del largo correspondiente al eje Y, 340 mm, y colocarlas en el marcotal como se observa en la Figura 10. Luego debemos atornillar al marco el motor correspondiente al eje Y,tal como se observa en la Figura 11, anadiendole luego su polea GT2 correspondiente y acoplando tambien elrodamiento 608zz al marco utilizando un tornillo M8. Teniendo ya impresas las piezas necesarias para ajustarla correa, las cuales se observan en la Figura 12, debemos atornillarlas a la base de la cama y luego ensamblarla base con los rodamientos lineales LM8UU tal como se observa en la Figura 13. Para poder ajustar la correadebemos seguir el procedimiento que se muestra en las Figuras 14, 15, 16, 17, 18 y 19. Es necesario tener encuenta que la correa no debe quedar demasiado tensa.

Para poder ensamblar el eje X primero debemos armar las piezas impresas de este eje, las cuales podemosobservar en la Figura 20. Los rodamientos LM8UU de cada pieza deben quedar dispuestos a 45° entre sı, talcomo se observa en la Figura 21, de modo que la superficie de contacto entre los rodamientos y la varilla seala maxima posible. Luego debemos ensamblar las piezas con las varillas trefiladas del largo correspondiente aleje X, 370 mm, y los rodamientos LM8UU necesarios para el carro donde va montado el extrusor tal como seobserva en la Figura 22 pero teniendo en cuenta que en nuestro caso necesitamos cuatro rodamientos para elcarro, dos por cada varilla.

Luego vamos a insertar las varillas trefiladas del largo correspondiente al eje Z, 320 mm, a traves de losrodamientos LM8UU de las piezas impresas del eje X y las vamos a ensamblar en el marco, tal como se observaen la Figura 23. Para continuar con el ensamblado del eje Z debemos montar los motores y las varillas roscadas

11

Page 12: Armado de una impresora Prusa P3 Steel

M5 en el acople antibobble, tal como se observa en la Figura 24, insertando solamente 5 mm dentro del acopletanto del eje del motor como de la varilla roscada, tal como se observa en la Figura 25. Esto es importante yaque el acople conecta el motor con la varilla roscada que mueve el eje Z hacia arriba y abajo. Si el motor y lavarilla no se encuentran perfectamente alineados, la rotacion del motor va a aplicar fuerza en la varilla y estase va a desplazar en las direcciones de los ejes X e Y.

Para el ensamblado del extrusor debemos seguir los pasos que se describen en las Figuras 26, 27, 28 y 29,notando que es necesario haber ensamblado antes el carro del extrusor a los rodamientos LM8UU medianteprecintos. Debemos conectar al RAMPS la resistencia de cartucho y el termistor que controlan la temperaturadel hot end tal como se observa en la Figura 30.

Para poder montar la cama caliente debemos haber realizado previamente las conexiones que se observanen la Figura 30, utilizando cinta kapton para poder fijar el termistor, y luego acoplarla a la base tal como seobserva en la Figura 31.

Para ensamblar los endstops debemos conectarlos al RAMPS tal como se observa en la Figura 32 y luego,teniendo ya impresas las piezas necesarias, debemos montarlos tal como se observa en las Figuras 33, 34 y 35.

Por ultimo podemos montar las abrazaderas para las varillas trefiladas del eje Y, tal como se observa en laFigura 36, y las patas del marco, tal como se observa en la Figura 37.

12

Page 13: Armado de una impresora Prusa P3 Steel

Figura 9: Primer paso del ensamblado de la impresora.

13

Page 14: Armado de una impresora Prusa P3 Steel

Figura 10: Segundo paso del ensamblado de la impresora.

14

Page 15: Armado de una impresora Prusa P3 Steel

Figura 11: Tercer paso del ensamblado de la impresora.

15

Page 16: Armado de una impresora Prusa P3 Steel

Figura 12: Piezas necesarias para el ajuste de la correa del eje Y.

Figura 13: Cuarto paso del ensamblado de la impresora.

16

Page 17: Armado de una impresora Prusa P3 Steel

Figura 14: Montaje de la correa en las piezas impresas para poder ajustarla.

Figura 15: Montaje de la correa en las piezas impresas para poder ajustarla.

17

Page 18: Armado de una impresora Prusa P3 Steel

Figura 16: Montaje de la correa en las piezas impresas para poder ajustarla.

Figura 17: Montaje de la correa en las piezas impresas para poder ajustarla.

18

Page 19: Armado de una impresora Prusa P3 Steel

Figura 18: Montaje de la correa en las piezas impresas para poder ajustarla.

Figura 19: Montaje de la correa en las piezas impresas para poder ajustarla.

19

Page 20: Armado de una impresora Prusa P3 Steel

Figura 20: Ensamblado de las piezas impresas del eje X.

20

Page 21: Armado de una impresora Prusa P3 Steel

Figura 21: Montaje de los rodamientos lineales LM8UU en las piezas impresas del eje X. Las bolillas internasde los dos rodamientos deben encontrarse deplazadas 45° entre si.

Figura 22: Ensamblado de las piezas impresas del eje X junto con las varillas trefiladas y los rodamientoslineales.

21

Page 22: Armado de una impresora Prusa P3 Steel

Figura 23: Ensamblado del eje X junto con las varillas trefiladas del eje Z.

22

Page 23: Armado de una impresora Prusa P3 Steel

Figura 24: Ensamblado de los motores del eje Z junto con las varillas roscadas y el acople antibobble.

23

Page 24: Armado de una impresora Prusa P3 Steel

Figura 25: Montaje de los motores del eje Z junto con las varillas roscadas en el acople antibobble.

Figura 26: Ensamblado del idler del extrusor.

24

Page 25: Armado de una impresora Prusa P3 Steel

Figura 27: Ensamblado del extrusor.

25

Page 26: Armado de una impresora Prusa P3 Steel

Figura 28: Montaje del extrusor en el carro.

Figura 29: Montaje en el extrusor de las tuercas y tornillos para el idler.

26

Page 27: Armado de una impresora Prusa P3 Steel

Figura 30: Conexiones de la cama caliente y el extrusor al RAMPS.

27

Page 28: Armado de una impresora Prusa P3 Steel

Figura 31: Montaje de la cama caliente en la base.

Figura 32: Conexion de los endstops al RAMPS.

28

Page 29: Armado de una impresora Prusa P3 Steel

Figura 33: Montaje del endstop del eje X.

Figura 34: Montaje del endstop del eje Y.

29

Page 30: Armado de una impresora Prusa P3 Steel

Figura 35: Montaje del endstop del eje Z.

Figura 36: Montaje de las abrazaderas para las varillas trefiladas del eje Y.

30

Page 31: Armado de una impresora Prusa P3 Steel

Figura 37: Montaje de las patas del marco.

31

Page 32: Armado de una impresora Prusa P3 Steel

3.3. Configurando el firmware

Figura 38: Esquema del rol que cumple el firmware en el funcionamiento de una impresora 3D.

El firmware es el programa que cargamos en el Arduino y que controla el funcionamiento de la impresora. Elfirmware especıfico que vamos a usar se llama Marlin, y podemos descargarlo de http://marlinfw.org. Es unprograma de C++ compuesto por muchos archivos, pero solo necesitamos modificar el archivo Configuration.hque contiene las opciones de configuracion. Nos vamos a centrar en modificar las opciones de configuracionbasicas y necesarias para que nuestra impresora funcione. Para conocer las demas opciones de configuracionse puede leer la documentacion que se encuentra en la pagina oficial de Marlin.

Lo primero que vamos a hacer es definir la version de la configuracion, ya que Marlin verifica la version dela configuracion y no compila si no esta definida. Esta opcion es de utilidad cuando se realiza el proceso decalibracion o actualizacion y de alguna manera se tiene que ir versionando la modificaciones que se hacen.

#define CONFIGURATION_H_VERSION 010000

Luego vamos a definir el nombre del autor de la configuracion, cambiando el texto (none, default config)por nuestro nombre.

#define STRING_CONFIG_H_AUTHOR "(none , default config)"

Si bien el puerto serie 0 es el que se usa por defecto, dependiendo la placa utilizada requerira el cambio depuerto al adecuado.

#define SERIAL_PORT 0

La comunicacion serie con la impresora deberıa ser lo mas rapida posible, por lo cual es acosejable usar unavelocidad de 250000. Sin embargo algunos drivers y el uso de cables USB no mallados pueden llevar a erroresaleatorios en la comunicacion con el dispositivo, por lo tanto de encontrarse errores se aconseja disminuir lavelocidad de conexion hasta que la comunicacon sea estable. En la mayorıa de los casos una velocidad de115200 brinda un buen balance entre velocidad de comunicacion y estabilidad.

#define BAUDRATE 115200

Es muy importante definir la placa madre que estamos utilizando en la impresora para poder establecerlas configuraciones basicas a nivel microcontrolador para un optimo desempeno.

#define MOTHERBOARD BOARD_RAMPS_14_EFB

Dependiendo del diametro nominal del filamento que vamos a usar (1.75, 2.85, 3.0) debemos definirlo en lasiguiente lınea. El diametro nominal es el que tıpicamente se encuentra informado por el vendedor o fabricanteen el rollo de filamento.

#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75

32

Page 33: Armado de una impresora Prusa P3 Steel

Debemos definir la cantidad y el tipo de sensores de temperatura que tiene nuestra impresora, que ennuestro caso son dos: el sensor de la cama y el sensor del extrusor. Ambos sensores son termistores genericosde 100 kΩ, por lo que podemos ver en la lista de los perfiles de sensores disponibles, la cual se encuentra dentrodel arcihvo Configuration.h, que corresponden a la opcion 1.

#define TEMP_SENSOR_0 1

#define TEMP_SENSOR_1 0

#define TEMP_SENSOR_2 0

#define TEMP_SENSOR_3 0

#define TEMP_SENSOR_4 0

#define TEMP_SENSOR_5 0

#define TEMP_SENSOR_BED 1

#define TEMP_SENSOR_CHAMBER 0

Para que el firmware pueda realizar los movimientos con precision debemos definir en la seccion MovementSettings lo siguiente dentro del apartado Default Axis Steps Per Unit (steps/mm).

NEMA17 FULL STEPS: Define la cantidad de pasos completos que puede dar el motor por revolucion.Esto depende de la cantidad de grados por paso del motor, lo cual se encuentra detallado en las especi-ficaciones del mismo. Por ejemplo, un motor de 1.8°puede realizar 200 pasos por revolucion teniendo encuenta que una revolucion son 360°.

NEMA17 MICROSTEPS: Define la cantidad de micropasos que puede llegar a realizar el motor. Es-to viene definido por el RAMPS, y se configura en el mismo con jumpers tal como se explico en laSubseccion 3.1.

PULLEY PITCH: Define el espacio de separacion que hay entre los dientes que tiene la correa GT2.

PULLEY TEETH: Define la cantidad de dientes que tiene la polea que transmite el movimiento a lacorrea.

Z ROD PITCH: Define la distancia entre dientes de la varilla roscada para el movimiento del eje Z.

WADE PULLEY TEETH: Define la cantidad de dientes que tiene la polea que se acopla directamenteal motor del extrusor.

WADE GEAR TEETH: Define la cantidad de dientes que tiene el engranaje del extrusor.

HOBBED BOLT DIAM: Define el diametro efectivo del hobbed bolt, el cual es el diametro de la canaletaestriada que empuja el plastico hacia el hotend.

Es necesario prestar atencion al valor de NEMA17 FULL STEPS ya que depende de las especificacionesdel motor que dispongamos, al valor de PULLEY TEETH ya que las poleas GT2 pueden venir con distintacantidad de dientes, y tambien al valor de HOBBED BOLT DIAM ya que el diametro del hobbed bolt puedevariar. Para los demas valores debemos conservar los que definimos a continuacion.

33

Page 34: Armado de una impresora Prusa P3 Steel

#define NEMA17_FULL_STEPS 200.0

#define NEMA17_MICROSTEPS 16.0

#define NEMA17_MOTOR_STEPS (NEMA17_FULL_STEPS * NEMA17_MICROSTEPS)

#define PULLEY_PITCH 2.0

#define PULLEY_TEETH 20.0

#define Z_ROD_PITCH 0.8

#define WADE_PULLEY_TEETH 9.0

#define WADE_GEAR_TEETH 47.0

#define HOBBED_BOLT_DIAM 6.0

#define XY_STEPS (NEMA17_MOTOR_STEPS / (PULLEY_PITCH * PULLEY_TEETH ))

#define Z_STEPS (NEMA17_MOTOR_STEPS / Z_ROD_PITCH)

#define WADE_GEAR_RATIO (WADE_GEAR_TEETH / WADE_PULLEY_TEETH)

#define HOBBED_BOLD_CIRC (M_PI * HOBBED_BOLT_DIAM)

#define WADE_E_STEPS (NEMA17_MOTOR_STEPS * WADE_GEAR_RATIO / HOBBED_BOLD_CIRC)

#define DEFAULT_AXIS_STEPS_PER_UNIT XY_STEPS , XY_STEPS , Z_STEPS , WADE_E_STEPS

Una vez que configuramos estas opciones basicas podemos cargar el programa en nuestro Arduino medianteel archivo Marlin.ino a traves del Arduino IDE. Con el firmware ya cargado debemos poner en marcha laimpresora y, utilizando algun host para controlar nuestra impresora como puede ser el programa Pronterface,realizar un home de la impresora para verificar el correcto funcionamiento de los motores y de los endstops.

Al realizar un home los motores de los tres ejes deben moverse de tal forma que la cama se desplace haciael endstop del eje Y, el carro se desplace hacia el endstop del eje X y todo el conjunto del eje X se desplacehacia abajo en direccion a la cama y al endstop del eje Z. Si alguno de los motores se mueve en el sentidoincorrecto debemos modificar el valor de la variable para invertir el sentido del motor cambiando el valor dela variable por true.

#define INVERT_X_DIR false

#define INVERT_Y_DIR false

#define INVERT_Z_DIR false

Tambien debemos verificar que el motor del extrusor se mueva en el sentido correcto realizando una ex-trusion. En este caso no es necesario que se encuentre el filamento cargado en el extrusor ya que solamentequeremos verificar el sentido de su movimiento. En caso de que se mueva en el sentido incorrecto debemosinvertirlo cambiando el valor de la variable por true.

#define INVERT_E0_DIR false

Lo mismo puede suceder con los endstops, que deben activarse solamente cuando se los presiona, y debemosinvertirlos cambiando el valor de la variable por true.

#define X_MIN_ENDSTOP_INVERTING false

#define Y_MIN_ENDSTOP_INVERTING false

#define Z_MIN_ENDSTOP_INVERTING false

Luego debemos calibrar los parametros del PID, el cual es un algoritmo de control proporcional-integral-derivativo usado en la impresora para controlar la temperatura del hot end y de la cama caliente. El algoritmoPID necesita tener definidos los valores de sus parametros P, I y D para poder controlar la temperatura. Si latemperatura aumenta rapidamente y disminuye su velocidad a medida que se acerca a la temperatura deseada,o si oscila en un rango de unos grados mas o menos a partir de la temperatura deseada entonces los valores delos parametros son incorrectos.

Para calibrar los valores del PID para el hot end debemos poner el siguiente comando G-code para que secaliente el nozzle (E0), realice 8 ciclos (C8) alrededor de la temperatura deseada (S200) y devuelva los valorescalculados de los parametros P, I y D.

M303 E0 S200 C8

34

Page 35: Armado de una impresora Prusa P3 Steel

A los valores que obtuvimos de los parametros debemos reemplazarlos en el codigo del Marlin en la seccionPID Settings:

#define DEFAULT_Kp 22.2

#define DEFAULT_Ki 1.08

#define DEFAULT_Kd 114

Para calibrar los valores del PID para la cama caliente debemos poner el siguiente comando G-code paraque se caliente la cama (E-1), realice 8 ciclos (C8) alrededor de la temperatura deseada (S90) y devuelva losvalores calculados de los parametros P, I y D.

M303 E-1 C8 S90

A los valores que obtuvimos de los parametros debemos reemplazarlos en el codigo del Marlin en la seccionPID Bed Temperature Control :

#define DEFAULT_bedKp 10.00

#define DEFAULT_bedKi .023

#define DEFAULT_bedKd 305.4

Por ultimo vamos a calibrar los pasos por mm del extrusor, reemplazando el valor aproximado calculadoanteriormente por el valor real. Para ello vamos a darle a la impresora la orden de extruir 100 mm de filamento yluego verificar si realmente se extruyeron 100 mm de filamento. Primero debemos medir 120 mm de filamento apartir de donde este entra al extrusor y realizar una marca en el filamento con un marcador, este va a ser nuestropunto de referencia. Luego debemos calentar el hot end a la temperatura usual de extrusion y asegurarnos deque el nozzle se encuentre en una posicion por encima de la cama que le permita extruir filamento libremente.Para que la impresora interprete los siguientes codigos de extrusion en modo relativo debemos ingresar elcomando G-code M83. Luego debemos establecer la velocidad de extrusion en 50 mm/minuto con el comandoG1 F50. Para extruir 100 mm de filamento debemos ingresar el comando G1 E100, lo cual tardara unos 120segundos. La razon por la que utilizamos una velocidad de extrusion tan baja es para asegurarnos de que laresistencia del filamento en el hot end no afecte la cantidad de plastico que es empujado por el motor. Una vezque se hayan extruido los 100 mm de filamento debemos establecer la temperatura del hot end en 0°C paraque este se enfrie. Debemos medir la distancia entre el punto de referencia que marcamos en el filamento yel punto donde el filamento entra en el extrusor (el mismo punto a partir del cual medimos los 120 mm defilamento incialmente), tal como se observa en la Figura 39. Si esta distancia es de 20 mm entonces los pasospor mm del extrusor estan bien calibrados, pero si es mas o menos de 20 mm entonces debemos calibrar estevalor.

Figura 39: Medicion de la cantidad de filamento extruido para realizar la calibracion.

35

Page 36: Armado de una impresora Prusa P3 Steel

Para poder calcular el nuevo valor de pasos por mm del extrusor debemos obtener la cantidad de filamentoextruido realmente, lo cual podemos calcular como los 120 mm de filamento medidos inicialmente menosla cantidad de filamento restante que medimos luego de la extrusion. Luego calculamos el multiplicador decorreccion de la siguiente manera:

Distancia de extrusion deseada

Distancia de extrusion real= Multiplicador de correccion

Para obtener el valor de pasos por mm calibrado debemos multiplicar el valor obtenido anteriormente, cuyonombre de variable en el codigo es WADE E STEPS, por el multiplicador de correccion:

WADE E STEPS ∗ Multiplicador de correccion = Pasos por mm calibrados

Para finalizar la calibracion debemos reemplazar este valor por el valor WADE E STEPS obtenido ante-riormente en el codigo del Marlin.

36

Page 37: Armado de una impresora Prusa P3 Steel

A. Codigo para la calibracion de los drivers

/* Programa para calibracion de drivers , con un Arduino Mega y un Ramps V 1.4 Shield.

Este programa envia un pulso HIGH a cada pin de direccion y paso de los motores.

De esta manera el motor paso a paso se encuentra energizado al maximo , por lo que

puede ser medida la maxima corriente entregada y asi poder ajustarla.*/

// Se define el numero de los pines para el RAMPS 1.4

#define X_STEP_PIN 54

#define X_DIR_PIN 55

#define X_ENABLE_PIN 38

#define Y_STEP_PIN 60

#define Y_DIR_PIN 61

#define Y_ENABLE_PIN 56

#define Z_STEP_PIN 46

#define Z_DIR_PIN 48

#define Z_ENABLE_PIN 62

#define E_STEP_PIN 26

#define E_DIR_PIN 28

#define E_ENABLE_PIN 24

#define LED_PIN 13

#define DELAY_LOW 600

#define STEPS 200

void setup ()

// Se definen los pines de los motores como Outputs

pinMode(X_STEP_PIN ,OUTPUT );

pinMode(X_DIR_PIN ,OUTPUT );

pinMode(X_ENABLE_PIN ,OUTPUT );

pinMode(Y_STEP_PIN ,OUTPUT );

pinMode(Y_DIR_PIN ,OUTPUT );

pinMode(Y_ENABLE_PIN ,OUTPUT );

pinMode(Z_STEP_PIN ,OUTPUT );

pinMode(Z_DIR_PIN ,OUTPUT );

pinMode(Z_ENABLE_PIN ,OUTPUT );

37

Page 38: Armado de una impresora Prusa P3 Steel

pinMode(E_STEP_PIN ,OUTPUT );

pinMode(E_DIR_PIN ,OUTPUT );

pinMode(E_ENABLE_PIN ,OUTPUT );

pinMode(LED_PIN ,OUTPUT );

digitalWrite(X_ENABLE_PIN ,LOW);

digitalWrite(Y_ENABLE_PIN ,LOW);

digitalWrite(Z_ENABLE_PIN ,LOW);

digitalWrite(E_ENABLE_PIN ,LOW);

void loop()

digitalWrite(X_STEP_PIN ,HIGH);

digitalWrite(X_DIR_PIN ,HIGH);

digitalWrite(Y_STEP_PIN ,HIGH);

digitalWrite(Y_DIR_PIN ,HIGH);

digitalWrite(Z_STEP_PIN ,HIGH);

digitalWrite(Z_DIR_PIN ,HIGH);

digitalWrite(E_STEP_PIN ,HIGH);

digitalWrite(E_DIR_PIN ,HIGH);

digitalWrite(LED_PIN ,HIGH);

for(int x = 0; x < STEPS; x++)

digitalWrite(E_STEP_PIN ,HIGH);

delayMicroseconds(DELAY_LOW );

digitalWrite(E_STEP_PIN ,LOW);

delayMicroseconds(DELAY_LOW );

delay (2000);

38