G-Code (2)

Objetivos

Primero de todo. ¿Para qué vale esto? Por ejemplo, para ajustar parámetros de velocidad. Si medimos el ancho de la impresión (que consideramos 0.4mm) y no tiene ese ancho pude deberse a varias cosas. Normalmente, si es más grande se debe a que se está depositando más material del que toca o nos estamos moviendo lento (compresión). Si es más estrecho, es que estamos tirando menos material del que toca o que nos estamos moviendo muy rápido (tensión). Precaución también con el hecho de que si el calibre del hilo no es el correcto, los cálculos empleados no son tampoco buenos (y eso que hemos considerado varias aproximaciones...).

Pero antes de ajustar hay que controlar lo que estamos haciendo. Así que vamos a probar g-code a ver que pasa.

Planteamiento

Después de varios cálculos, pruebas y aproximaciones obtengo este código:

G21;
M107;
M190 S50;
M104 S230;
G28;
M109 S230;
G90;
G92 E0;
M82;
G1 Z1;
G1 F9000 E-2;
G1 X10 Y10;
G92 E0;
G1 Z0.3 E2 F1200;
G92 E0;
G1 X50 E0.679;
G1 F9000 E-2;
G1 X10 Y20;
G92 E0;
G1 E2 F1200;
G92 E0;
G1 X50 E0.679;
G1 F9000 E-2;
G1 X10 Y30;
G92 E0;
G1 E2 F1200;
G92 E0;
G1 X50 E0.679;
G1 F9000 E-2;
G1 X10 Y40;
G92 E0;
G1 E2 F1200;
G92 E0;
G1 X50 E0.679;
G1 F9000 E-2;
G1 X10 Y50;
G92 E0;
G1 E2 F1200;
G92 E0;
G1 X50 E0.679;

Eso debería crear 5 líneas de 0.4mm de ancho, 0.3mm de alto y 40mm de largo todas con origen en X=10 y fin en X=50 para Y de 10, 20, 30, 40 y 50 (todo en mm).

Consideraciones...
  • Considerando una línea como un ortoedro (versión 3D del rectángulo...) de 0.3x0.4x40 mm3, tendremos 4.8mm3 por línea
  • Considerando que el volumen que introduce el extrusor en el sistema (sin pérdidas) es el de un cilindro de 3mm de diámetro y un alto h
  • El filamento a introducir para cubrir la línea será E=4.8/(1.5*1.5*3.14)=0.679mm
  • Considero que siendo la entrada uniforme la salida es uniforme
  • He desestimado las pérdidas... y considerado que la retracción de 2mm es adecuada.
  • Podría haber ajustado el código de las retracciones...
Simulación

El Repetier-Host lo coge... faltaría meterle algo de código que nos permita apartar el extrusor y apagarlo y demás...

G92 E0;
M107; Apaga el ventilador… pero es mejor M106 S0 donde S varía entre 0 y 255
M104 S0; Temperatura del extrusor activo a 0º
M140 S0; Temperatura de la cama a 0º. Devuelve el control sin esperar.
G28;
M84; Desactivar motores.

Ejecución en hardware

No funciona. Podría mentir y ajustarlo hasta que salga y decir "mirar, me ha funcionado a la primera". Pero no...

Primero no sale nada. Si que se mueve, pero no extruye. Pruebo eliminando las retracciones. Cambio E2 y E-2 por E0. Tampoco sale bien, pero queda claro que es un problema de extrusión. Aumento el valor de E0.679 y consigo que algo salga a E6 y E8 (valores experimentales). Me he dado cuenta de que el problema sigue siendo que se producen retracciones. ¿Porqué? En el código no están...

También me mosquea que el primer M104 S230 me ha parecido que dejaba de calentar el nozzle al devolver el control... Algo que investigaré más adelante.

Ingeniería inversa

La siguiente opción lógica es mirar un código que si funcione. Cualquier cosa. Sobre todo porque lo que quiero es ver el valor de E y para eso me vale hasta el skirt...

Observando código conocido. Lo primero que se me ocurre es que uso de M82 para hacer que el extrusor utilice valores absolutos y el G90 para hacer lo mismo en las coordenadas. Lo mismo el M82 y el G92 E0 no es lo correcto. Es decir. Si lo que quiero es resetear E lo mismo debería utilizar M83 para que los valores de E sean relativos... O el uso de G92 requiere M82 después... Desestimado  de momento porque el Slic3r lo aplica así.

Más cosas... Veo que para un movimiento de 2.303mm se usa un valor de E de 0.03768mm. Esto supone una relación de 0.01635mm de E por mm de movimiento. Lo que yo he planteado eran 0.016975mm de E por mm de movimiento. Luego el problema no tiene que ser ese... Me encanta no ir desencaminado en el cálculo pero ahora si que no tengo ni idea de lo que está pasando. :)

La diferencia que veo notable del código que he planteado con respecto al generado por Slic3r es que me he emocionado con los G92 E0 y las retracciones. Las retracciones sigo considerando que son correctas porque me muevo más de 40mm sin extruir al cambiar de línea. Así que le planteamiento a seguir es utilizar realmente el M82 y usar valores de E absolutos.

Modificaciones

G21;
M107;
M190 S50;
M104 S230;
G28;
M109 S230;
G90;
M83;
M106 S255;
G1 Z20 E3 F1200;
G92 E0;
G1 F9000;
G1 X10 Y10 Z0.3 F1200;
G1 E2;
G1 X50 E0.679;
G1 E-2;
G1 F9000;
G1 X10 Y20 F1200;
G1 E2;
G1 X50 E0.679;
G1 E-2;
G1 F9000;
G1 X10 Y30 F1200;
G1 E2;
G1 X50 E0.679;
G1 E-2;
G1 F9000;
G1 X10 Y40 F1200;
G1 E2;
G1 X50 E0.679;
G1 E-2;
G1 F9000;
G1 X10 Y50 F1200;
G1 E2;
G1 X50 E0.679;
G1 E-2;
G1 X100 Y100 F9000;
M107;
M84;

He tocado algunas cosas. Utilizo posición relativa para el extrusor (eso es más cómodo para lo que estoy haciendo ahora), mantengo las retracciones (no creo que sean el problema), ajusto las velocidades de retracción (en lugar de F9000 utilizo F1200), no le bajo la temperatura al terminar (porque seguro que tengo que hacer varias pruebas) y he cambiado la posición a la que se aleja el carro al terminar. El Repetier-Host lo coge como bueno...


Y el resultado, después de algunos ajustes de última hora y tras 2 o 3 ejecuciones (no hay skirt, así que la purga es a base de intentos...):


Donde se ven los problemas habituales como las acumulaciones al empezar y al terminar una línea (en los cambios de movimiento). Respecto a las medidas a tomar, las tomaré en la zona intermedia (la más estable) más tarde. Se supone que se produce un efecto llamado die swell, que en definitiva es que la línea se hincha al enfriarse. Ya veremos... :)

Comentarios

Entradas populares