This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

  • 1 voto(s) - 3 Media
  • 1
  • 2
  • 3
  • 4
  • 5
APORTE PID Autotune
#1
Ya que hay varios preguntando por ahi lo mismo, y me parece que es algo que tiene que estar en este foro... voy a explicar como se hace el autotune y alguna cosilla más. Si me corregis y/o completais puede quedar una guía rápida. un poco de teoría:



QUE ES PID - POR QUE REGULARLO

Existen varias maneras de controlar la temperatura, nuestras impresoras usan dos tipos: controlador todo/nada y controlador PID. El controlador todo/nada es el más sencillo, calienta a tope cuando la temperatura esta por debajo del objetivo y nada cuando esta por encima. Este controlador no requiere ningún calculo pero hace que la temperatura oscile demasiado y nunca se queda fija en la temperatura objetivo.

El PID es un tipo de regulador que consta de 3 componentes: proporcional, integral y derivativo. No voy a entrar en detalles de que hace cada uno por que gracias al autotune que viene en Marlin no vamos a tener que saberlo, pero se puede mirar como afecta cada componente y ajustarlos a mano (es un trabajo muy tedioso pero quedaría incluso mejor que con autotune). Simplemente decir que gracias al PID vamos a conseguir que la temperatura se quede estable en el objetivo.

Es recomendable hacer autotune en los siguientes casos:
- La impresora es nueva
- La impresora se ha movido a un lugar con diferente temperatura
- La impresora no es capaz de alcanzar la temperatura objetivo y da error.


AUTOTUNE EXTRUSOR

Necesitamos algun programa con comunicacion serie con la impresora (pronterface, repitier, simplify3d...) y vamos a usar el comando M303 E0 S220 C8. Donde E0 es el primer extrusor, S220 la temperatura media a la que solemos imprimir y C8 en numero de iteraciones a realizar. He puesto 220 por hacer una media entre abs y pla, si sólo se usa pla se puede poner 200, y 8 iteraciones para que afine más, se pueden poner menos para que lo haga más rápido aun que no será tan exacto.
[Imagen: IMG-20181113-221055.jpg]

Antes de nada hay que colocar el extrusor en un lugar en el que se pueda calentar sin dañar nada, yo hago G1 X100 Y100 Z25 para dejarlo en medio y alejado de la cama. Al mandar el M303 parece que no pasa nada pero si te fijas en la temperatura del extrusor va a empezar a subir hasta 220 y lo dejará enfriar, 8 veces. Hay que fijarse en el puerto serie, cada vez que haga un test aparecerán unos valores para Kp, Ki y Kd, que son las Konstantes de los 3 componentes del PID, y al hacer la octaba prueba, dará los valores definitivos.
[Imagen: autotune1.jpg]

Guardar Valores por Pantalla
Esto valores se pueden introducir por la pantalla. Aparecen en Control -> Temperatura -> PID-P/PID-I/PID-D Después hay que guardar en memoria (M500) y para eso hay que tener la EEPROM activada.
[Imagen: IMG-20181113-220635.jpg]

Firmware
Aquí esta como configurar el PID en Marlin 1.1.9.
Cita:#define PIDTEMP //Descomentar esta linea para activar PID, viene activado por defecto para el primer extrusor
#define BANG_MAX 255 // limita la corriente en modo todo/nada 255=100%
#define PID_MAX 255 // limita la corriente en modo PID
#define PID_K1 0.95 // factor de suavizado, entiendo que es un multiplicador

#if ENABLED(PIDTEMP)
//#define PID_AUTOTUNE_MENU // activa menu de autotune en lcd **
//#define PID_DEBUG // Manda a tiempo real los valores de las Konstantes en uso por el puerto serie
//#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
//#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]


#define PID_FUNCTIONAL_RANGE 10 //si la diferencia de temperatura entre la real y el objetivo es de más de 10 grados, este entrará en modo todo/nada

#define DEFAULT_Kp 24.74 // AQUI HAY QUE INTRODUCIR LOS VALORES OBTENIDOS POR EL AUTOTUNE
#define DEFAULT_Ki 2.04
#define DEFAULT_Kd 75.00

#endif // PIDTEMP
Siempre acordaos de restablecer valores de fabrica (M502) y guardar en memoria (M500) después de cargar el firmware.


**Autotune desde pantallahay que descomentarlo en el firmware de aquí arriba

Control -> Temperatura -> Autotune : 150 -> Seleccionar temperatura deseada. Envia comando "M303 U1 E0 S(temp)", realiza 3 iteraciones y coge los valores. Solo quedaría guardar con M500.
[Imagen: IMG-20181113-220619.jpg]



AUTOTUNE CAMA CALIENTE

Comenzamos como con el extrusor, poniendo la cama en un lugar seguro para calentar y nos conectamos a la impresora para poder mandar/recibir información por el puerto serie. En este caso usaremos el mismo comando pero con otros parámetros: M303 E-1 S80 C4. Donde E-1 es la cama caliente, S80 la temperatura media a la que usamos la cama y C4 el número de iteraciones. Si sólo se usa pla se puede bajar la temperatura. Hemos reducido el numero de iteraciones por que la cama tarda más en calentar y puede dar un timeout, en caso de que de error: bajar la temperatura objetivo y el numero de iteraciones.

En este caso no aparece nada en la pantalla, ni para ver/guardar valores y para hacer el autotune.


Firmware
Y esto es lo que habría que modificar en marlin:
Cita:#define PIDTEMPBED //descomentar para activar el PID en la cama

//#define BED_LIMIT_SWITCHING //activa la histeresis cuando el PID esta desactivado

#define MAX_BED_POWER 255 // limita la corriente de la cama 255=100%

#if ENABLED(PIDTEMPBED)

//#define PID_BED_DEBUG // Manda a tiempo real los valores de las Konstantes en uso por el puerto serie

#define DEFAULT_bedKp 645.34 // AQUI HAY QUE INTRODUCIR LOS VALORES OBTENIDOS POR EL AUTOTUNE
#define DEFAULT_bedKi 123.09
#define DEFAULT_bedKd 845.87


#endif // PIDTEMPBED
Siempre acordaos de restablecer valores de fabrica (M502) y guardar en memoria (M500) después de cargar el firmware.





Lo dicho, agradezco cualquier corrección, mejora o información que sirva para completar. Todo está escrito por mi aun que se parecerá mucho a cualquier manual... espero que se entienda y sea útil. Cualquier duda que tengáis podéis preguntar en este tema.
  Responder
#2
Muchas gracias Nullz, nunca viene mal tener un tutorial de estas cosas cuando se te pone delante el problema y tienes que resolverlo.

  Responder
#3
Ya he terminado de editarlo y repasarlo, no se me ocurre que más poner.

Espero que el que no haya respuestas sea por qué está todo claro :p




algún admin podría poner esta guía y unas cuantas de @Simemart como post-it para que no se pierdan entre todos los mensajes... O moverla a otra sección que no tenía muy claro dónde ponerla.

Tenía pensado hacer mas cosillas acerca marlin pero no sé yo...
  Responder


Posibles temas similares…
Tema Autor Respuestas Vistas Último mensaje
  PID cama caliente mati1608 2 788 10-02-2021, 02:37 AM
Último mensaje: mati1608